当前位置:首页 > 单片机 > 单片机
[导读]锂电池以其容量大、充电性能好的优点,已经得到了广泛引用,特别在小型的需电池供电的电子设备上。但是锂电池的充电和使用条件比较严格,比如充电必须以恒流恒压方式,使用时电压不能低于3V等,所以用锂电池供电的系

锂电池以其容量大、充电性能好的优点,已经得到了广泛引用,特别在小型的需电池供电的电子设备上。但是锂电池的充电和使用条件比较严格,比如充电必须以恒流恒压方式,使用时电压不能低于3V等,所以用锂电池供电的系统一般都需要专门的锂电池管理功能,确保锂电池在正确的工作状态下。

这部分内容以讲述在STM8S单片机系统中,如何使用典型的锂电池充电管理芯片TP4056来实现锂电池的充电,以及如何使用单片机内置的AD转换功能测量电池电压,实现电池电量监控。

1、电路设计

电路图如下,使用TP4056做充电管理,TP4056是一款采用恒定电流/恒定电压线性锂电池充电管理IC,电路简单,只需要外接一个编程电容即可实现恒流恒压充电,充电电流取决编程于电阻的阻值,电阻和电流大致有这个关系:R=1200/I(误差10%),如2K编程电阻下,充电电流为580mA。下图中R1即编程电阻。

发光二极管D1和限流电阻R2组成充电指示电路,正在向锂电池充电时,D1发光。

D2稳压管TL431,和R2一起组成稳定的2.5V参考电压。这个参考电压输入到STM8S单片机的PD2引脚上(同时也是模拟输入3AIN3),通过单片机的ADC功能可以测量到AIN3(2.5V固定电压)的ADC读数,从而反推出电池的电压。

外部充电电源通过MircoUSB接口P1接入电路。


2、软件设计

锂电池充电功能不需要软件参与,TP4056芯片可独立完成。但是开机状态下的锂电池电量监控需要软件配合实现。软件要实现的功能是,周期性的采集AIN3的ADC读数,然后计算出电池电压,当电池电压低于3V时,需要自动关机。

STM8S单片机的ADC是10位的,即最大读数是1023,VCC就是其AD转换参考电压,所以有如下关系:

1023/AIN3读数=VCC电压/2.5V

所以,VCC电压,也即是电池电压=2.5V*1023/AIN3读数

1)设置ADC工作模式

可以使用STM8S_StdPeriph_Lib库中的ADC1_Init(), ADC1_DeInit(), ADC1_Cmd()来实现ADC工作模式的设置。这三个函数,分别是设置ADC,重置ADC,启用或停用ADC,这里重点说明一下ADC1_Init(),。

ADC1_Init()的接口定义:

void ADC1_Init(ADC1_ConvMode_TypeDef ADC1_ConversionMode, ADC1_Channel_TypeDef ADC1_Channel, ADC1_PresSel_TypeDef ADC1_PrescalerSelection, ADC1_ExtTrig_TypeDef ADC1_ExtTrigger, FunctionalState ADC1_ExtTriggerState, ADC1_Align_TypeDef ADC1_Align, ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel, FunctionalState ADC1_SchmittTriggerState)

ADC1_Init()入参较多,看看每个参数的说明:

ADC1_ConversionMode: 转换模式,指定单次或连续转换,相应取值是:ADC1_CONVERSIONMODE_SINGLE/ADC1_CONVERSIONMODE_CONTINUOUS

ADC1_Channel: 指定转换通道,取值为ADC1_CHANNEL_0~ADC1_CHANNEL_12,注意不同的单片机子型号支持的通道不同,比如STM8S103只支持7个通道,具体要看单片机的数据手册。

ADC1_PrescalerSelection:指定预分频,可以从fcpu/2到fcpu/18,对应取值为ADC1_PRESSEL_FCPU_D2/~3/~4/~6/~8/~10/~12/~18。

ADC1_ExtTrigger: 指定ADC专用外部中断(ADC_ETR)或者定时器触发信号(TRGO)来作为外部触发信号,取值分别为:ADC1_EXTTRIG_GPIO/ADC1_EXTTRIG_TIM

ADC1_ExtTriggerState:外部触发状态,DISABLE或ENABLE

ADC1_Align:数据对齐方式,左对齐或右对齐,取值:ADC1_ALIGN_LEFT/ADC1_ALIGN_RIGHT

ADC1_SchmittTriggerChannel:指定施密特触发器,ADC1_SCHMITTTRIG_CHANNEL0~12

ADC1_SchmittTriggerState:指定施密特触发器状态,DISABLE或ENABLE

这里要通过AIN3引脚采集2.5V固定电压的值,所以使用下面三条代码设置ADC1:

ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL3, ENABLE);
ADC1_Cmd(ENABLE);

2)启动ADC并获取读数

ADC1设置好之后,执行一次AD转换就比较简单了,先使用ADC1_StartConversion()启动转换,然后用ADC1_GetConversionValue()获取值,ADC1_GetConversionValue()的返回值就是装换结果。

为了避免一次采集数据存在干扰误差较大,一般都要多采集几次,比采集10次取平均值。如下采集10次取平均值:

u16 u16_adc1_value=0 ;
for(int i=0;i<10;i++)
{
ADC1_StartConversion();
u16_adc1_value += ADC1_GetConversionValue();
}
u16 vref=u16_adc1_value/10;

已经算出了2.5V固定电压的值vref,那么最后只要用2.5V*1023/vref就能计算出VCC也就是锂电池的电压了。不过直接计算误差会非常大(因为u16最大值也就是65535,做除法结果精度低),所以改成以下方式计算提高结果精度,结果的单位是mv:

u16 vcc=(51200/(vref/10))*5;

3)实现电池电量低自动关机

上面已经得出了电池的电压了,那么结合上一篇《STM8S单片机入门2(关机模式开关机按钮)》,就很容易实关机了,只要在将开机标志fPowerOn_flag设置为FALSE即可,在下一个主循环中就能执行关机了。

if(vcc<3000)
{
fPowerOn_flag=FALSE;
}

3、总结

STM8S单片机的ADC功能很强大,这里只以一个监测锂电池电压来说明一下最基本的用法,其他更多的用法还是要看数据手册。现在回顾一下涉及到的知识点:

1)ADC工作模式设置

2)启动AD转换并获取结果


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在科学技术高度发达的今天,各种各样的高科技出现在我们的生活中,为我们的生活带来便利,那么你知道这些高科技可能会含有的锂电池管理吗?锂离子电池由于拥有能量密度高、电压高、自放电率低,以及无记忆效应等优势,因而逐渐成为使用充...

关键字: 锂电池管理 温度 自放电率

随着社会的快速发展,我们的锂电池管理与发电机控制也在快速发展,那么你知道锂电池管理与发电机控制的详细资料解析吗?接下来让小编带领大家来详细地了解有关的知识。随着汽车技术的发展,车载电子设施及娱乐设施越来越多。这些电子系统...

关键字: 锂电池管理 发电机控制 电压

pic单片机功能较强,现实中的诸多器件均可借助pic单片机完成。由此可见,pic单片机的使用意义较大。关注本网站的朋友都知道,小编曾带来诸多pic单片机相关文章。如果你对pic单片机比较感兴趣,可在阅读完本文后翻阅往期文...

关键字: ad转换 pic单片机 单片机

对一个初学单片机的人来说,学习的方法和途径非常重要。如果按教科书式的学法,上来就是一大堆指令、名词,学了半天还搞不清这些指令起什么作用,能够产生什么实际效果,那么也许用不了几天就会觉得枯燥无味而半途而废。所以学习与实践结...

关键字: 单片机入门 有效途径

功能:STC12C2052AD AD转换C程序 +PWM输出功能 成功使用。

关键字: ad转换 stc12c2052ad 单片机

#include#define uchar unsigned char#define uint unsigned intsbit cs=P3^0;sbit wr=P3^1;void delayms(uint x){uin...

关键字: 51单片机 ad转换 at89c52

#include#define uchar unsigned char#define uint unsigned int#define PORT P3#define dula_h P2|=0x40#define dula...

关键字: 51单片机 ad转换 at89c52

今天查看STM32资料时,对输出速度2M 10M 50M不是很了解,再加上移植ARF2496K程序到STM32时出现意外情况。一、STM8S端作为接收端和发送端时接收到的数据都正常。二、发送端(STM8S),接收端(ST...

关键字: io口 stm32f stm8s 输出速率

//软件思路:选择RAO做为模拟输入通道; // 连续转换4次再求平均值做为转换结果 // 最后结构只取低8位 // 结果送数码管的低3位显示 #include //包含内部资源预定义...

关键字: ad转换 pic16f877a picc

STM8S单片机开发环境由三大部分组成,包括PC机上的开发软件(集成开发软件、驱动程序等)、调试&编程器ST-LINK、目标单片机电路板。如下图所示:1、PC机上开发软件PC机上的软件包括:ST-LINK驱动程序...

关键字: stm8s 单片机入门 开发环境
关闭
关闭