找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3763|回复: 0
打印 上一主题 下一主题
收起左侧

CH4226锂电池充电单片机控制程序

[复制链接]
跳转到指定楼层
楼主
ID:229196 发表于 2017-8-24 19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*
  2.   CH4226
  3.   电池包充电控制程序
  4.   2017/03/11      
  5. */
  6. //头文件
  7. #include <hic.h>
  8. //全局变量
  9. unsigned char Cnt @0x3f;
  10. unsigned int  ADV;               //AD监测输出电压值
  11. unsigned int  ADI;               //AD监测输出电流值
  12. unsigned char COUNT;
  13. //标志位声明
  14. sbit  t400ms_fg;
  15. //函数声明
  16. void delay(unsigned int n);
  17. unsigned int GetADC(unsigned char chl);
  18. void Sys_unit(void);
  19. //宏定义
  20. #define     CLRWDT() __Asm CWDT
  21. //常量定义
  22. #define    CurrentOpenLimit   60                     //判定有充电电流限制值
  23. #define    CurrentShutLimit   30                     //判定没有充电电流限制值
  24. #define    StopChargeLimit    2770                   //判定停止充电电压限制值
  25. #define    KongZaiLimit       2820                   //判定进入空载限制值
  26. #define    ChargeLimit        2730                   //判定开始充电限制值
  27.       
  28. void main()
  29. {   
  30.     unsigned char K0count,K1count,K2count,K3count,K4count,upcount,downcount;    //状态标志位定义
  31.         Sys_unit();       //初始化
  32.         PA5=1;            //开机红灯绿灯全灭
  33.         PA4=1;
  34.         PA1=0;            //控制口置零
  35.         delay(1000);      //开机延时
  36.    while(1)
  37.    {
  38.                 ADV=GetADC(0);         //将AD监测到的值
  39.                 ADI=GetADC(2);
  40.                   
  41.       
  42.        //判断当前状态
  43.            ///*
  44.             if( ADI > CurrentOpenLimit)           //有充电电流   
  45.             {
  46.                         if((ADV-ADI)>StopChargeLimit)     //且电池电压超过停止充电电压限制值,有电流时检流电阻存在压降进行补偿,电阻1.1欧姆
  47.                         {
  48.                              PA1=1;                       //停止充电,绿灯亮,红灯灭
  49.                                  PA4=1;
  50.                                  PA5=0;
  51.                         }
  52.                     else                              //且电池电压没有超过停止充电电压限制值
  53.                         {
  54.                              PA1=0;                       //红灯亮,不停止充电
  55.                                  PA4=0;                       
  56.                                  PA5=1;
  57.                         }
  58.                 }
  59.                 else  if(ADI < CurrentShutLimit)      //无充电电流
  60.                 {
  61.                     if(ADV > KongZaiLimit)            //且电池电压达到空载限定值,判定进入空载
  62.                         {
  63.                              PA1=1;                       //停止充电,绿灯亮
  64.                          PA4=1;                  
  65.                                  PA5=0;
  66.                         }
  67.                         else if(ADV<ChargeLimit)          //且电池电压小于开始充电电压限定值
  68.                         {
  69.                              PA1=0;                       //开始充电,两灯皆灭
  70.                              PA4=1;
  71.                                  PA5=1;
  72.                         }
  73.                 }      
  74.                 //*/
  75.         while(t400ms_fg == 0) CLRWDT();          //每4ms一个循环
  76.             t400ms_fg = 0;
  77.          
  78.    }}
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表