|
大家好,測(cè)試工程師又來(lái)了啦。在測(cè)試16串BMS的工作中,非常希望有一個(gè)各串電壓可方便調(diào)節(jié)的模擬電池。要求有一定的負(fù)載驅(qū)動(dòng)能力。
為此,先做出單節(jié)0-5V可調(diào)的電壓源進(jìn)行方案驗(yàn)證。實(shí)驗(yàn)取得了理想的結(jié)果,以后可考慮基于此方案制作16串分別可調(diào)的模擬電池。
先上原理圖
本設(shè)計(jì)使用STC15W408AS單片機(jī),控制12位DAC模塊MCP4725輸出設(shè)定的電壓,再經(jīng)過(guò)運(yùn)放和射極輸出器提高帶載能力。輸出能力約400mA。
支持矩陣鍵盤(pán)輸入電壓設(shè)定值,支持RS485通訊,可用串口助手下發(fā)報(bào)文進(jìn)行電壓設(shè)置。
實(shí)物照片:
按鍵輸入設(shè)置電壓:
使用串口助手發(fā)送報(bào)文:(格式,~開(kāi)頭,!結(jié)尾,中間4位ASCII碼,0不可省略)
報(bào)文發(fā)送后立即生效,電壓調(diào)整到了設(shè)定值:
實(shí)測(cè)精度足夠高,半程以上的精度在3mV以?xún)?nèi)。以后可用16位的DAC進(jìn)一步提高精度,可達(dá)1mV。
單片機(jī)main.c程序:(其余見(jiàn)附件)
- #include "MAIN.H"
- #include "OLED.H"
- #include "mcp4725.h"
- #include "KEY.H"
- uint set_voltage,set_voltage1; //設(shè)定值
- uchar digit4,digit3,digit2,digit1; //設(shè)定值千百十個(gè)位
- uchar i=0;
- uchar buffer[7]={0,0,0,0,0,0,0}; //485緩存
- bit flag=0; //接收完標(biāo)志位
- void UartInit(void) //9600bps@11.0592MHz
- {
- SCON = 0x50; //8位數(shù)據(jù),可變波特率
- AUXR |= 0x01; //串口1選擇定時(shí)器2作為波特率發(fā)生器
- AUXR &= 0xFB; //定時(shí)器2時(shí)鐘FOSC/12,即12T
- T2L = 0xE8; //設(shè)定定時(shí)器初值
- T2H = 0xFF; //設(shè)定定時(shí)器初值
- AUXR |= 0x10; //啟動(dòng)定時(shí)器2
- ES=1; //打開(kāi)接收中斷
- EA=1; //打開(kāi)總中斷
- }
- void init()
- {
- OLED_Init();
- OLED_CLS();
- OLED_hzStr(16,0,2); //數(shù)
- OLED_hzStr(32,0,3); //字
- OLED_hzStr(48,0,0); //電
- OLED_hzStr(64,0,1); //壓
- OLED_hzStr(80,0,4); //源
- SDA=0;SCL=0;
- MCP4725_WriteData_Digital(0);
- Display();
- OLED_hzStr(96,6,7); //實(shí)
- OLED_hzStr(112,6,8); //際
- UartInit();
- }
- void communication(void)
- {
- if(flag==1) //當(dāng)接收完報(bào)文,開(kāi)始處理
- {
- flag=0;
- set_digit4=buffer[1]-0x30;
- set_digit3=buffer[2]-0x30;
- set_digit2=buffer[3]-0x30;
- set_digit1=buffer[4]-0x30;
- set_voltage=set_digit1+set_digit2*10+set_digit3*100+set_digit4*1000;
- set_voltage1=set_voltage*0.8192; //轉(zhuǎn)化為數(shù)字量
- if(set_voltage1>=4096) //如輸入值超上限,則輸出最大值
- set_voltage1=4095;
- if(set_voltage>=5000) //如輸入值超上限,則輸出顯示值顯示最大值5000mV
- set_voltage=5000;
- set_digit1=0;set_digit2=0;set_digit3=0;set_digit4=0;
- MCP4725_WriteData_Digital(set_voltage1); //寫(xiě)入DA模塊
- Display(); //更新顯示
- }
- }
- void main()
- {
- init(); //初始化;
- while(1)
- {
- keyprocess(); //調(diào)用按鍵掃描處理
- communication(); //RS485通信處理
- }
- }
- void Usart() interrupt 4 using 1 //串口1中斷處理
- {
- buffer[i]=SBUF;
- if(buffer[i]==0x7E) //接收的報(bào)文以~開(kāi)頭(即0x7E)
- {
- i=0;
- buffer[i]=SBUF;
- }
- RI=0;
- i++;
- if(buffer[i-1]==0x21) //接收的報(bào)文以!結(jié)尾(即0x21)
- {
- i=0;
- flag=1;
- }
- }
復(fù)制代碼
附原理圖和程序。
全部資料51hei下載地址:
數(shù)字電壓源程序 V1.0 20210318.rar
(171.87 KB, 下載次數(shù): 274)
2021-3-18 14:46 上傳
點(diǎn)擊文件名下載附件
原理圖和程序
|
評(píng)分
-
查看全部評(píng)分
|