欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機鋰電池均衡測試儀的制作 附源程序原理圖PCB bms保護板供電 [打印本頁]

作者: yw123456789    時間: 2021-1-26 20:39
標題: 51單片機鋰電池均衡測試儀的制作 附源程序原理圖PCB bms保護板供電
基于51單片機的鋰電池充電相關制作分享
可以用于16Sbms保護板的均衡測試,及供電。總電壓為52.4V.可以為16節的BMS供電及測試均衡。

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)



制作出來的實物圖如下:

成品:


單片機源程序如下:
  1. #include <REG52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char           
  4. sbit key1=P1^0;                                          //手動啟動,自動,停止
  5. sbit key2=P1^1;                                          //上一節
  6. sbit key3=P1^2;                                     //下一節
  7. sbit JKpower=P1^4;                                //繼電器供電
  8. sbit beep=P1^5;                                        //蜂鳴器
  9. sbit LED_stop=P3^2;                                //停止狀態燈
  10. sbit LED_manual=P3^3;                        //手動模式狀態燈
  11. sbit LED_auto=P3^4;                                //自動模式狀態燈
  12. uchar mode=0;                                        //停止=0,手動=1,自動=2
  13. uchar current_cell=1,num,ms_20=0,second=0,time_flag=0;                                    
  14. void keyscan();        
  15. void delayms(uint xms)                //延時xms毫秒
  16. {
  17.         uint i,j;
  18.         for(i=xms;i>0;i--)
  19.                 for(j=110;j>0;j--);
  20. }
  21. void init()                                   //初始化
  22. {
  23.         JKpower=1;
  24.         P0=0x00;
  25.         P2=0x00;
  26.         delayms(100);
  27.         JKpower=0;
  28.         EA=1;
  29.         ET0=1;
  30.         TMOD=0x01;
  31.         TH0=(65536-50000)/256;
  32.         TL0=(65536-50000)%256;
  33.         beep=0;
  34.         delayms(500);
  35.         beep=1;                                   
  36. }

  37. void main()                                         
  38. {
  39.         init();
  40.         while(1)
  41.         {        
  42.                 keyscan();                    //調用按鍵掃描子程序
  43.                 if(mode==0)                        //停止狀態
  44.                 {
  45.                         LED_stop=0;LED_manual=1;LED_auto=1;        //狀態燈
  46.                         P0=0x00; P2=0x00;                                        //繼電器都不通電
  47.                 }
  48.                  if(mode==1)                        //手動狀態
  49.                 {
  50.                         LED_stop=1;LED_manual=0;LED_auto=1;        //狀態燈
  51.                         switch(current_cell)
  52.                         {
  53.                                 case 1: P0=0x01; P2=0x00;break;
  54.                                 case 2: P0=0x02; P2=0x00;break;
  55.                                 case 3: P0=0x04; P2=0x00;break;
  56.                                 case 4: P0=0x08; P2=0x00;break;
  57.                                 case 5: P0=0x10; P2=0x00;break;
  58.                                 case 6: P0=0x20; P2=0x00;break;
  59.                                 case 7: P0=0x40; P2=0x00;break;
  60.                                 case 8: P0=0x80; P2=0x00;break;
  61.                                 case 9: P0=0x00; P2=0x01;break;
  62.                                 case 10: P0=0x00; P2=0x02;break;
  63.                                 case 11: P0=0x00; P2=0x04;break;
  64.                                 case 12: P0=0x00; P2=0x08;break;
  65.                                 case 13: P0=0x00; P2=0x10;break;
  66.                                 case 14: P0=0x00; P2=0x20;break;
  67.                                 case 15: P0=0x00; P2=0x40;break;
  68.                                 case 16: P0=0x00; P2=0x80;break;
  69.                         }
  70.                         delayms(200);
  71.                 }
  72.                 if(mode==2)                   //自動狀態
  73.                 {
  74.                         LED_stop=1;LED_manual=1;LED_auto=0;        //狀態燈
  75.                         if(time_flag==1)
  76.                         {
  77.                                 current_cell++;
  78.                                 time_flag=0;
  79.                                 if(current_cell>16)                        //16節自動均衡結束后關定時器,拉低繼電器IO口,響蜂鳴器1秒
  80.                                 {
  81.                                         TR0=0;
  82.                                         mode=0;
  83.                                         current_cell=0;
  84.                                         P0=0x00;P2=0x00;
  85.                                         beep=0;
  86.                                         delayms(1000);
  87.                                         beep=1;
  88.                                 }
  89.                         }
  90.                         switch(current_cell)
  91.                         {
  92.                                 case 1: P0=0x01; P2=0x00;break;
  93.                                 case 2: P0=0x02; P2=0x00;break;
  94.                                 case 3: P0=0x04; P2=0x00;break;
  95.                                 case 4: P0=0x08; P2=0x00;break;
  96.                                 case 5: P0=0x10; P2=0x00;break;
  97.                                 case 6: P0=0x20; P2=0x00;break;
  98.                                 case 7: P0=0x40; P2=0x00;break;
  99.                                 case 8: P0=0x80; P2=0x00;break;
  100.                                 case 9: P0=0x00; P2=0x01;break;
  101.                                 case 10: P0=0x00; P2=0x02;break;
  102.                                 case 11: P0=0x00; P2=0x04;break;
  103.                                 case 12: P0=0x00; P2=0x08;break;
  104.                                 case 13: P0=0x00; P2=0x10;break;
  105.                                 case 14: P0=0x00; P2=0x20;break;
  106.                                 case 15: P0=0x00; P2=0x40;break;
  107.                                 case 16: P0=0x00; P2=0x80;break;
  108.                         }
  109.                 }
  110.         }
  111. }

  112. void keyscan()
  113. {
  114.         if(key1==0&&mode==0)        //停止狀態下按下啟動和停止鍵
  115.         {
  116.                 delayms(5);
  117.                 if(key1==0)
  118.                 {
  119.                         while(!key1);
  120.                         mode=1;
  121.                         current_cell=1;
  122.                         beep=0;
  123.                         delayms(50);
  124.                         beep=1;        
  125.                 }
  126.         }
  127.         if(key1==0&&mode==1)        //手動狀態下按下啟動和停止鍵
  128.         {
  129.                 delayms(5);
  130.                 if(key1==0)
  131.                 {
  132.                         while(!key1);
  133.                         mode=2;
  134.                         current_cell=1;
  135.                         beep=0;
  136.                         delayms(50);
  137.                         beep=1;
  138.                         TR0=1;
  139.                 }
  140.         }
  141.         if(key1==0&&mode==2)        //自動狀態下按下啟動和停止鍵
  142.         {
  143.                 delayms(5);
  144.                 if(key1==0)
  145.                 {
  146.                         while(!key1);
  147.                         mode=0;
  148.                         current_cell=1;
  149.                         TR0=0;
  150.                         beep=0;
  151.                         delayms(50);
  152.                         beep=1;                                
  153.                 }
  154.         }
  155.         if(key3==0&&mode==1)        //手動狀態下按“下一節”鍵
  156.         {
  157.                 delayms(5);
  158.                 if(key3==0)
  159.                 {
  160.                         while(!key3);
  161.                         current_cell++;
  162.                         if(current_cell>16)
  163.                                 current_cell=1;
  164.                         beep=0;
  165.                         delayms(50);
  166.                         beep=1;
  167.                 }
  168.         }
  169.         if(key2==0&&mode==1)        //手動狀態下按“上一節”鍵
  170.         {
  171.                 delayms(5);
  172.                 if(key2==0)
  173.                 {
  174.                         while(!key2);
  175.                         current_cell--;
  176.                         if(current_cell<1)
  177.                                 current_cell=16;
  178. ……………………

  179. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
原理圖及pcb圖紙.rar (9.43 MB, 下載次數: 287)
程序.rar (27.71 KB, 下載次數: 212)

作者: 1069321326    時間: 2021-1-27 13:14
666,做的可以,還有外殼
作者: zhou8266    時間: 2021-2-8 09:10
牛叉的!
作者: zhou8266    時間: 2021-2-8 09:10
很有技術內涵!
作者: qiu4466    時間: 2021-2-20 13:42
支持一下,我也是做鋰電池保護板的
作者: xinxin7530    時間: 2021-6-19 17:37
膜拜大佬,看一下參考
作者: tong0210    時間: 2021-8-2 15:11
請問一下,停止、手動、自動指示燈好像沒有看到相關電路。謝謝

作者: ieflf456    時間: 2021-8-4 16:55
有電感試的嗎
作者: long2018    時間: 2021-8-7 07:59

牛叉的!
666,做得漂亮,還有外殼
作者: qli365    時間: 2021-8-9 14:39
板子很漂亮
作者: lsx116    時間: 2022-5-20 09:11
瘋了用繼電器 你好歹也用固態繼電器 或者電源管理芯片呀
作者: anxinmulin    時間: 2022-10-31 14:29
牛叉,學習一下很有技術內涵!
作者: 1588848    時間: 2022-12-12 19:25
89C52RC帶AD嗎?我手上的好像不帶AD呀
作者: wis98    時間: 2023-4-13 15:03
我也在找鋰電保護板的資料,正好學習一下
作者: wis98    時間: 2023-4-20 11:13
改成三極管輸出的板子就小多了

作者: 1109    時間: 2023-4-20 17:34
怎么檢測每節電池電壓的?
作者: coody_sz    時間: 2023-9-9 21:24
鋰電池均衡我現在用的是電容式的。
作者: xiaoliao123    時間: 2024-2-1 17:08

板子很漂亮




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1