找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 10222|回復(fù): 18
收起左側(cè)

自制0-5V數(shù)字可調(diào)精密電壓源 基于12位DAC模塊MCP4725 支持鍵盤(pán)輸入和上位機(jī)設(shè)置電壓

  [復(fù)制鏈接]
ID:702386 發(fā)表于 2021-3-18 14:53 | 顯示全部樓層 |閱讀模式
大家好,測(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)的模擬電池。

先上原理圖
原理圖.jpeg

本設(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í)物 實(shí)際值.jpg


按鍵輸入設(shè)置電壓:
實(shí)物 按鍵輸入.jpg


使用串口助手發(fā)送報(bào)文:(格式,~開(kāi)頭,!結(jié)尾,中間4位ASCII碼,0不可省略)
串口助手.png


報(bào)文發(fā)送后立即生效,電壓調(diào)整到了設(shè)定值:
實(shí)物3300mV.jpg

實(shí)測(cè)精度足夠高,半程以上的精度在3mV以?xún)?nèi)。以后可用16位的DAC進(jìn)一步提高精度,可達(dá)1mV。

單片機(jī)main.c程序:(其余見(jiàn)附件)
  1. #include "MAIN.H"
  2. #include "OLED.H"
  3. #include "mcp4725.h"
  4. #include "KEY.H"


  5. uint set_voltage,set_voltage1;                //設(shè)定值
  6. uchar digit4,digit3,digit2,digit1;        //設(shè)定值千百十個(gè)位
  7. uchar i=0;
  8. uchar buffer[7]={0,0,0,0,0,0,0};        //485緩存
  9. bit flag=0;                                                        //接收完標(biāo)志位


  10. void UartInit(void)        //9600bps@11.0592MHz
  11. {
  12.         SCON = 0x50;        //8位數(shù)據(jù),可變波特率
  13.         AUXR |= 0x01;        //串口1選擇定時(shí)器2作為波特率發(fā)生器
  14.         AUXR &= 0xFB;        //定時(shí)器2時(shí)鐘FOSC/12,即12T
  15.         T2L = 0xE8;                //設(shè)定定時(shí)器初值
  16.         T2H = 0xFF;                //設(shè)定定時(shí)器初值
  17.         AUXR |= 0x10;        //啟動(dòng)定時(shí)器2
  18.         ES=1;                        //打開(kāi)接收中斷
  19.         EA=1;                        //打開(kāi)總中斷
  20. }


  21. void init()
  22. {
  23.         OLED_Init();
  24.         OLED_CLS();
  25.         OLED_hzStr(16,0,2); //數(shù)
  26.         OLED_hzStr(32,0,3); //字
  27.         OLED_hzStr(48,0,0); //電
  28.         OLED_hzStr(64,0,1); //壓
  29.         OLED_hzStr(80,0,4); //源
  30.         SDA=0;SCL=0;
  31.         MCP4725_WriteData_Digital(0);
  32.         Display();
  33.         OLED_hzStr(96,6,7);  //實(shí)
  34.         OLED_hzStr(112,6,8); //際
  35.         UartInit();
  36. }

  37. void communication(void)
  38. {
  39.         if(flag==1)                        //當(dāng)接收完報(bào)文,開(kāi)始處理
  40.         {
  41.                 flag=0;
  42.                 set_digit4=buffer[1]-0x30;
  43.                 set_digit3=buffer[2]-0x30;
  44.                 set_digit2=buffer[3]-0x30;
  45.                 set_digit1=buffer[4]-0x30;
  46.                 set_voltage=set_digit1+set_digit2*10+set_digit3*100+set_digit4*1000;
  47.                 set_voltage1=set_voltage*0.8192;  //轉(zhuǎn)化為數(shù)字量
  48.                 if(set_voltage1>=4096)        //如輸入值超上限,則輸出最大值
  49.                         set_voltage1=4095;
  50.                 if(set_voltage>=5000)        //如輸入值超上限,則輸出顯示值顯示最大值5000mV
  51.                         set_voltage=5000;
  52.                 set_digit1=0;set_digit2=0;set_digit3=0;set_digit4=0;
  53.                 MCP4725_WriteData_Digital(set_voltage1);  //寫(xiě)入DA模塊
  54.                 Display();        //更新顯示

  55.         }
  56. }

  57. void main()
  58. {
  59.         init();        //初始化;
  60.         while(1)
  61.         {
  62.                 keyprocess(); //調(diào)用按鍵掃描處理
  63.                 communication(); //RS485通信處理
  64.         }
  65. }


  66. void Usart() interrupt 4 using 1        //串口1中斷處理
  67. {
  68.         buffer[i]=SBUF;
  69.         if(buffer[i]==0x7E)          //接收的報(bào)文以~開(kāi)頭(即0x7E)
  70.                 {
  71.                         i=0;
  72.                         buffer[i]=SBUF;
  73.                 }
  74.         RI=0;                  
  75.         i++;
  76.         if(buffer[i-1]==0x21) //接收的報(bào)文以!結(jié)尾(即0x21)
  77.         {
  78.                 i=0;
  79.                 flag=1;
  80.         }
  81. }
復(fù)制代碼
51hei.png
附原理圖和程序。

全部資料51hei下載地址:
數(shù)字電壓源程序 V1.0 20210318.rar (171.87 KB, 下載次數(shù): 274)

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:219787 發(fā)表于 2021-4-9 10:35 | 顯示全部樓層
你好,你這有沒(méi)有MCP4725的中文資料
回復(fù)

使用道具 舉報(bào)

ID:507641 發(fā)表于 2022-9-15 08:00 | 顯示全部樓層
屏型號(hào)是?
回復(fù)

使用道具 舉報(bào)

ID:1048397 發(fā)表于 2022-10-26 10:20 | 顯示全部樓層
好創(chuàng)意,,,收藏了慢慢學(xué)。
回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2023-4-2 08:35 | 顯示全部樓層

我認(rèn)為屏型號(hào)是OLED1306 SSD1306 四針腳oled
回復(fù)

使用道具 舉報(bào)

ID:712493 發(fā)表于 2023-4-2 09:28 | 顯示全部樓層
怎么模擬電池充電電流 充飽電流?
回復(fù)

使用道具 舉報(bào)

ID:1073197 發(fā)表于 2023-4-26 14:18 | 顯示全部樓層
最近剛好想做一個(gè)數(shù)控電源,樓主資料給了我很大幫助
回復(fù)

使用道具 舉報(bào)

ID:27536 發(fā)表于 2023-4-28 17:00 | 顯示全部樓層
這個(gè)不錯(cuò),尤其學(xué)習(xí)一下串口程序
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2023-4-30 11:51 | 顯示全部樓層
我用的MCP4822,雙通道12位DAC,控制輸出電壓和限流設(shè)置。TM7705檢測(cè)電壓電流,4+4數(shù)碼管同時(shí)顯示電壓和電流。
回復(fù)

使用道具 舉報(bào)

ID:72088 發(fā)表于 2023-5-1 09:05 | 顯示全部樓層
MCP4725太貴了,用不起啊
回復(fù)

使用道具 舉報(bào)

ID:1075161 發(fā)表于 2023-5-3 21:16 | 顯示全部樓層
你好,你這有沒(méi)有MCP4725的中文資料
回復(fù)

使用道具 舉報(bào)

ID:489645 發(fā)表于 2023-6-12 16:39 | 顯示全部樓層
感謝老師!很好的學(xué)習(xí)例子!
回復(fù)

使用道具 舉報(bào)

ID:492633 發(fā)表于 2024-10-12 21:37 | 顯示全部樓層
成功修改在89c52單片機(jī)上運(yùn)行,下一步搞實(shí)物出來(lái)
屏幕截圖 2024-10-12 213521.png
回復(fù)

使用道具 舉報(bào)

ID:492633 發(fā)表于 2024-10-12 21:40 | 顯示全部樓層
成功修改在89c52單片機(jī)上面運(yùn)行
屏幕截圖 2024-10-12 213521.png
回復(fù)

使用道具 舉報(bào)

ID:492633 發(fā)表于 2024-10-12 21:42 | 顯示全部樓層
成功修改在89c52單片機(jī)上面運(yùn)行
屏幕截圖 2024-10-12 213521.png
回復(fù)

使用道具 舉報(bào)

ID:492633 發(fā)表于 2024-10-12 21:44 | 顯示全部樓層
成功修改在89c52單片機(jī)上運(yùn)行
回復(fù)

使用道具 舉報(bào)

ID:537530 發(fā)表于 2024-10-12 23:43 | 顯示全部樓層
強(qiáng)迫癥,毫伏請(qǐng)使用mV
回復(fù)

使用道具 舉報(bào)

ID:349598 發(fā)表于 2024-12-3 18:35 | 顯示全部樓層
user2402167 發(fā)表于 2024-10-12 23:43
強(qiáng)迫癥,毫伏請(qǐng)使用mV

rr?sz?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表