【TI FAQ】+解答网友tim yuan 关于蓝牙cc2541芯片锂电池电量检测的相关问题

2019-07-24 14:59发布



   FAQ标题:2541 锂电池电量检测
各位大神,做了一个2541的项目, 用的聚合物锂电池供电,可以用usb口充电,充电管理芯片是用的tlc4054,可以做到检测是否处于充电状态。
想做一个电池电量的检测功能,但是不知道怎么下手,需要要用其它芯片吗?或者只要一个ad转换?
有谁有类似的例程?(电路图的和代码的),协议栈有哪个工程是有电量检测这个功能的?

FAQ正文(我的解答,以下是一问一答) :The battery monitor (in the CC2533 only) enables
simple voltage monitoring in the devices that do notinclude an ADC. It is
designed such that it is accurate in the voltage areas around 2 V,
with lowerresolution at higher voltages. The registers BATTMON and MONMUX
are used to access and control thefunctionality of the battery monitor.
cc2541没有!锂电池电量检测需要测量电压、电流、温度等!

问:大秦正声,你好
如果使用cc2541的ad功能可以简单的测量出电池的电量吗?具体怎么操作的?
我使用p0.7口接一个10k电阻到电池正端,(采用单端输入)这样的电路对吗?
然后代码里使用了
HalAdcInit ();           //设置参考电压为??,    里面只有一句 adcRef = HAL_ADC_REF_VOLT;
这是表示设置参考电压为内部电压吗?
adc_result=HalAdcRead (0x07, 0x03); //使用0.7为输入口,12位的精度
但是这样无论输入电压怎么变,adc_result都不变
然后我吧0.7 口设置为了输入口,还是一样的结果,哪里出问题了?

答:测量的电压如果大于电源电压和参考电压,需要外部电阻分压!
unsigned int   adc_result;
APCFG=0x80;///adc=p0.7
ADCCON1=0x33;
ADCCON3=0x37;///内部参考电压 单通道 12位 实际效果为11位!!!!!!!!!!!
ADCCON1 |= 0x40;///start adc    while( !(ADCCON1 & ADCCON1_EOC));///等待转换完成
adc_result = (ADCL >> 4);    adc_result |= (ADCH << 4);

问:你说的那个测量电压大于电源电压加分压电阻是怎么回事?
我用的p0.7 直接 接可调电源测的
电池3.7V给模块供电 ,经过一个ASM1117-3.3v给蓝牙模块供电,实际稳压出来只有2.85v (如果这样设置 HalAdcSetReference( HAL_ADC_REF_AVDD )    是不是参考电压就是2.85v  ??)
代码如下:
uint16    adc_result;
float  bat;     ////
uint8 sss[3];//// 用来显示结果   
HalAdcInit ();HalAdcSetReference( HAL_ADC_REF_AVDD );
adc_result=HalAdcRead (0x07, 0x03); //0.7 pin   12位精度,实际有效11位
bat=(adc_result*2.85)/2048;sss[0]=(uint8)(bat)+'0';////得到结果的各位数 字符
sss[1]=(uint8)((km+'0'-sss[0])*10)+'0';////得到结果的十分位字符
display_string_8x16(7,1,sss);////显示测量的电压值
结果是可以了,基本正确,但是最大值却只能是2.7,再大的测量电压就不动了,这个是不是加分压电阻就可以解决?怎么加,在哪里加?
分析一看 确实 adc_result  最大也不过2048,当然bat的值不可能超过2.8的  
但是不知道怎么改
实际测量电压bat 、得到adc_result 的值 、以及参考电压、 精度 ,这四者之间有什么关系?bat / adc_result  = Vref / 精度  吗
按照这样的话,就只能改Vref ,但是我的Vref 比电池的电压只低不高 怎么办?而且用1117做稳压片在电池小于4v的情况下根本就不是稳定的,会随着电池电量变化而变化,要用其他的稳压片吗?
求高手指点

答:你用的电池是单节吗?最高4.2v,建议做个测试,不用1117,给电池串个4148二极管降低0.7v电压,电池在2.7v到4.2v时芯片电压在2到3.6v左右!
你检测这个电压如果小于2.7v,就报警或者停止工作!
采用内部1.24v参考电压,所以需要电阻分压!

问:是单节的,聚合物锂电池,4.2v 1000mah 的 ,采用二极管分压? 那不是电池电压变化,芯片电压也变化了,还是不能作为参考电压?
采用内部1.24v参考电压?具体怎么操作,电路还需要其他引脚输入吗? 分压电阻是接在另外的引脚上?
代码里只要 HalAdcSetReference( HAL_ADC_REF_125V );  ??

答:就是这个HalAdcSetReference( HAL_ADC_REF_125V );  内部参考电压是稳定的!
二极管降压的!2541芯片的电压不能超过3.6V !
电池的电压大于1.25v,所以需要两个电阻串联分压后连接到p0.7 !

注:最后解决了该网友的问题!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
dirtwillfly
1楼-- · 2019-07-24 17:42
赞一个
大秦正声
2楼-- · 2019-07-24 17:57
dirtwillfly 发表于 2014-9-15 18:01
赞一个

多谢版主的
关注
shenmu2012
3楼-- · 2019-07-24 19:36
你用的电池是单节吗?最高4.2v,建议做个测试,不用1117,给电池串个4148二极管降低0.7v电压,电池在2.7v到4.2v时芯片电压在2到3.6v左右!
你检测这个电压如果小于2.7v,就报警或者停止工作!
采用内部1.24v参考电压,所以需要电阻分压!
shenmu2012
4楼-- · 2019-07-24 23:41
 精彩回答 2  元偷偷看……
大秦正声
5楼-- · 2019-07-25 02:40
多谢关注
feilusia
6楼-- · 2019-07-25 07:30
lz,请问你是TI的技术支持么?在TI的论坛中有见过你。
关于2541的电量我有一个疑问想请教你:
协议栈默认是使用内部的adc通道去采集电源电量,为何许多人却用外部的adc通道去采集呢?
他们这么做的初衷是内部adc的不准,还是由于内部是10bit、外部是12bit的原因呢?

一周热门 更多>