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 !
注:最后解决了该网友的问题! |