找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DIY一个单片机+TC4056逻辑充电器 附程序+电路图

[复制链接]
跳转到指定楼层
楼主
1、设计原因

由于我经常开发一些奇奇怪怪的小东西,所以手上有较多锂电池,长时间保存对我这种懒人带来的困扰,正常逻辑是每次充电完成后,由人工更换下一个电池充电,如此往复,如使用多个充电器同时进行此项工作(并行),成本与效率均较高,于是设计了这个逻辑充电器,其最大支持4块电池充电,但每次充电一块,单块充电完成后,由单片机读取充电芯片信号,后关闭该通道充电,并开启下一个充电通道,如此往复,是一种用时间换效率和成本的鸡肋设计。
实物如下图1所示、散热片下是TC4056充电芯片(TP4056可替换),主控单片机为N76E003。


2、运行逻辑



其中带隙电压(band·gap)读取相关文章可以看这里
此外,检测充电完成时,首先使用单片机检测充电芯片STDBY引脚电平变化,其原理及电路如下图3、4、5所示,当STDBY引脚拉低后,5V电源通过10k电阻及LED,其管脚电压变化为3.2V左右,此时配置为输入模式(高阻态)的单片机管脚即可采集到该信号。






使能及关断充电工作,均使用其TC4056的CE管脚,原理如下图6、7所示,单片机配置为PP(推挽输出),串联一SS24肖特基二极管到CE管脚上进行控制




单片机源程序如下:
  1. #include "N76E003.h"
  2. #include "SFR_Macro.h"
  3. #include "Function_define.h"
  4. #include "Common.h"
  5. #include "Delay.h"
  6. #include <intrins.h>
  7. #include "ADCBG.h"

  8. #define uchar unsigned char
  9. #define uint  unsigned int

  10. //控制TP4056启停,高电平驱动
  11. sbit  TC0=P0^0;
  12. sbit        TC1=P0^4;
  13. sbit        TC2=P0^5;
  14. sbit        TC3=P0^1;

  15. //检测充电是否完成,高阻输入模式,低电平完成/高电平正在
  16. sbit  Flash0=P1^0;
  17. sbit        Flash1=P0^3;
  18. sbit        Flash2=P0^2;
  19. sbit        Flash3=P1^5;


  20. uint ADC_BAT[4];
  21. uchar TP_TC[4];
  22. char ZTJJ=-1;

  23. /***************************************
  24. 功能:检测4个端口的电池电压,送入数组中,分配
  25.                         充电任务。
  26. 参数:无
  27. 说明:无
  28. ***************************************/
  29. void ADC_Sampling()
  30. {

  31.        
  32.         //---------ADC_Bat----------------------       
  33.         Enable_ADC_AIN0;
  34.         ADC_Single();//0通道
  35.         ADC_BAT[0]=ADC_VC*2;
  36.         Timer1_Delay10ms(10);
  37.                
  38.         Enable_ADC_AIN1;
  39.         ADC_Single();//1通道
  40.         ADC_BAT[1]=ADC_VC*2;
  41.         Timer1_Delay10ms(10);
  42.                
  43.         Enable_ADC_AIN2;
  44.         ADC_Single();//2通道
  45.         ADC_BAT[2]=ADC_VC*2;
  46.         Timer1_Delay10ms(10);
  47.        
  48.         Enable_ADC_AIN3;
  49.         ADC_Single();//3通道
  50.         ADC_BAT[3]=ADC_VC*2;
  51.         Timer1_Delay10ms(10);

  52. }

  53. /***************************************
  54. 功能:分配充电顺序
  55. 参数:无
  56. 说明:无
  57. ***************************************/
  58. void BAT_Logic()
  59. {
  60.        
  61.                 uchar i;
  62.         for(i=0;i<4;i++)
  63.         {
  64.                 //需要充电,开启
  65.                 if(ADC_BAT[i]>1000&&ADC_BAT[i]<4100)
  66.                 {
  67.                         TP_TC[i]=1;//无实际作用,仅调试用
  68.                         ZTJJ=i;
  69.                 }
  70.                
  71.                 if(ADC_BAT[i]>=4100)TP_TC[i]=2;//充电完成的,开启(置2,可不遵守顺序充电)
  72.                 if(ADC_BAT[i]<=1000)TP_TC[i]=0;//不存在电池,关闭
  73.         }

  74.                 //充电完成的,不计入逻辑顺序
  75.                 if(TP_TC[0]==2)
  76.                 {
  77.                         TC0=1;
  78.                 }
  79.                 if(TP_TC[1]==2)
  80.                 {
  81.                         TC1=1;
  82.                 }
  83.                 if(TP_TC[2]==2)
  84.                 {
  85.                         TC2=1;
  86.                 }
  87.                 if(TP_TC[3]==2)
  88.                 {
  89.                         TC3=1;
  90.                 }
  91.        
  92.        
  93.         switch(ZTJJ)
  94.         {
  95.                
  96.                 case 0:
  97.                         TC0=1;
  98.                         break;
  99.                                
  100.                 case 1:
  101.                         TC1=1;
  102.                         break;
  103.                
  104.                 case 2:
  105.                         TC2=1;
  106.                         break;
  107.                
  108.                 case 3:
  109.                         TC3=1;
  110.                         break;
  111.                
  112.                 default:
  113.                         break;
  114.         }
  115. }


  116. /*
  117. 操作流程
  118. 1、TC0-3全关,使用AIN0-AIN3进行检测找到低于阈值(1000-4000)
  119. 2、当发现高于阈值时,开启对应充电,使其指示灯亮。
  120. 2、按照0-3顺序分配充电任务,开启对应4056。
  121. 3、等待对应充电芯片Flash信号发出,确认完成(保持开启,指示灯亮)。
  122. 5、检测到对应ZTJJ充电完成后,再使用一次ADC_Sampling、BAT_Logic
  123. */
  124. int main()
  125. {
  126.        
  127.         Set_All_GPIO_Quasi_Mode;               
  128.         P10_Input_Mode;
  129.         P03_Input_Mode;
  130.         P02_Input_Mode;
  131.         P15_Input_Mode;
  132.        
  133.          P00_PushPull_Mode;
  134.          P04_PushPull_Mode;
  135.          P05_PushPull_Mode;
  136.          P01_PushPull_Mode;
  137.        
  138.         TC0=0;
  139.         TC1=0;
  140.         TC2=0;
  141.         TC3=0;
  142.        
  143.        
  144.         Timer3_Delay100ms(20);

  145.        
  146.         READ_BANDGAP();//读取内部基准电压,获得修正Coe
  147.         ADC_Sampling();
  148.         ADC_Sampling();
  149.         ADC_Sampling();
  150.         ADC_Sampling();
  151.         ADC_Sampling();
  152.         BAT_Logic();
  153.         while(1)
  154.         {       
  155.                 switch(ZTJJ)
  156.                 {
  157.                        
  158.                         case 0:
  159.                                 if(!Flash0)
  160.                                 {
  161.                                         ADC_Sampling();
  162.                                         BAT_Logic();
  163.                                 }
  164.                                 break;
  165.                                        
  166.                         case 1:
  167.                                 if(!Flash1)
  168.                                 {
  169.                                         ADC_Sampling();
  170.                                         BAT_Logic();
  171.                                 }
  172. ……………………

  173. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
逻辑充电器(电路、程序、手册).rar (619.7 KB, 下载次数: 100)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:142891 发表于 2019-9-22 22:17 | 只看该作者
支持一下,看一下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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