打印

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

[复制链接]
10290|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大秦正声|  楼主 | 2014-9-15 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


   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 !

注:最后解决了该网友的问题!

相关帖子

沙发
dirtwillfly| | 2014-9-15 18:01 | 只看该作者
赞一个

使用特权

评论回复
板凳
大秦正声|  楼主 | 2014-9-16 14:20 | 只看该作者
dirtwillfly 发表于 2014-9-15 18:01
赞一个

多谢版主的
关注

使用特权

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

使用特权

评论回复
5
shenmu2012| | 2014-9-17 16:43 | 只看该作者
这个方法简洁啊。。

使用特权

评论回复
6
大秦正声|  楼主 | 2014-9-19 16:50 | 只看该作者
多谢关注

使用特权

评论回复
7
feilusia| | 2015-12-13 21:10 | 只看该作者
lz,请问你是TI的技术支持么?在TI的论坛中有见过你。
关于2541的电量我有一个疑问想请教你:
协议栈默认是使用内部的adc通道去采集电源电量,为何许多人却用外部的adc通道去采集呢?
他们这么做的初衷是内部adc的不准,还是由于内部是10bit、外部是12bit的原因呢?

使用特权

评论回复
8
feilusia| | 2015-12-13 21:15 | 只看该作者
我今天在整2541的电池电量服务,写了一篇博客,分享一下。如果LZ有发现博客有错,麻烦提醒我一下
http://blog.csdn.net/feilusia/article/details/50283875

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:大秦正声电子之家 提供蓝牙、zigbee芯片批量生产烧录服务:1带3脱机烧录工具,支持cc2540/cc2541,cc2530/cc2531,最新支持nrf51822,cc2650,cc2640,cc2630

373

主题

4443

帖子

25

粉丝