锂电池电量检测解决方案

电子说

1.3w人已加入

描述

1 传统锂电池电量检测方案

传统的锂电池检测方案采用ADC 采集锂电池两端电压,然后根据厂家提供的电池的放电曲线,通过算法估算出来的一个大概的电量数值。如图1 所示,此图是一个容量为2 000 mAh 的锂电池放电曲线,放电电流为2 000 mA。

检测

图1 锂电池放电曲线

X 轴代表剩余电量,Y 轴代表电池两端电压。根据实际需要显示的电池电量要求,把Y轴分成相应的段数,然后对照X 轴坐标值,可大致估算出电池电量。

例如图2 所示,当电池电压下降到3.5 V 左右时,电池电量大概在50% 左右。但这种方式最大的弊端是没有考虑到电池的内阻,从而导致计算出来的电池容量误差很大。电池两端电压计算公式如下:

V=Voc-I×Rbat

检测

图2 传统估算电池电量的方法

其中:Voc 指的是电池两端的开路电压,I 表示电池放电电流,Rbat 表示电池内阻,不同厂家的电池内阻通常在几十毫欧到几百毫欧不等,而且电池内阻会随着电池的老化而增加,通常在100 个周期之后电阻内阻会增加1 倍,这种内阻的变压会导致计算出来的误差非常大。

从图1 中的放电曲线上也可以看到,电池满电量时,电压约为4.2 V,当电池用2 000 mA 电流开始放电时,电池电压瞬间就降低到3.9 V 左右,其中的压降正是电池内阻在作怪。当遇到需要突发电流的情形,就会发生电池电量格数跳变的现象。

系统框图

MAX17055采用Maxim ModelGauge™m5 EZ算法。ModelGauge m5 EZ 不需要对特定电池特征进行建模,很容易实现电量计设计,并简化主机软件开发。

ModelGauge m5 EZ 提供可靠算法,对于绝大多数锂电池提供高精度测量。MAX17055 自动补偿老化、温度和放电率,并提供精确的电量状态(SOC,%) 和剩余电量(mAh)。当电池达到接近空电量的临界区域时,ModelGauge m5 算法激活特殊的误差修正算法,进一步消除误差。系统设计师不再需要执行特征分析,这部分工作实际上已经由电量计厂商完成了。该方案系统框图如图3 所示,其中锂电池负端通过检流电阻连接到系统地,MAX17055 相关检测管脚连接到检流电阻的两端,充电管理芯片连接到锂电池正极以及系统地。

检测

检流电阻用于检测通过锂电池的放电电流和充电电流,该电流送给MAX17055 芯片用于计算电池电量, 充电管理芯片用于给锂电池充电,其中充电管理芯片可采用通用的TP5400 或BQ24075 等。

MAX17055 实现了行业较低的静态电流—低功耗模式下仅消耗7 μA 电流。对于空间受限的应用,它可以支持1.4mm×1.5mm WLP 封装,非常适合智能手表、手机、无人机等便携式产品。

3 系统电路图

充电管理芯片采用TP5400,它是一款专用的单节锂电池充电器和恒定5 V 升压控制器,充电部分集高精度电压和充电电流调节器、预充、充电状态指示和充电截止等功能于一体,可以输出最大1 A 充电电流。充电电路图如图4 所示。

检测

图4 TP5400充电电路

IN_5V 连接外部充电器的5 V 输出,OUT_5V 是TP5400 升压后的5 V 输出。VBAT 连接锂电池正极,GND 连接锂电池负极。CHRG 管脚为漏极开路输出,当充电器向电池充电时,此管脚被内部开关拉到低电平,表示充电正在进行;否则此管脚处于高阻状态。

STDBY 管脚也为漏极开路输出,当电池充电完成时,此管脚被内部开关拉到低电平,表示充电完成,否则为高阻状态。PROG 管脚用于设定充电电流大小。可根据下面公式设定充电电流:

检测

其中IBAT 表示充电电流,RPROG 为1.1 kΩ, 故设置的充电电流为1 A。根据芯片数据手册可知,芯片的终止充电电流在C/5,大约是200 mA。MAX17055 硬件电路如图5 所示。

检测

图5 MAX17055电路图

BATT 脚连接锂电池正极,MAXGND 连接锂电池负极,R5 为检流电阻,此处为5 mΩ,CSP 脚连接检流电阻正端,CSN 连接检流电阻负端,SCL 和SDA 脚用于与单片机进行IIC 通信,ALRT 脚用于输出报警信息。

THRM 脚可用于连接带有温度检测的锂电池,如果锂电池没有温度检测管脚,可按上图处理即可。

MAX17055 需进行正确的初始化才能工作,其初始化流程如图6 所示。

检测

官方提供了MAX17055 初始化代码例程,例程中的部分寄存器必须根据自己的实际情况来正确配置才能获得精确的电量指示,这些寄存器分别如下。

DesignCap Register(18h):电池容量寄存器,这个值与计算得到的当前的电池容量做对比,用来计算电池的使用寿命和健康状况。多少毫安时的电池就填写实际的数值进去,这里以2 000 mAh 的电池为例,此处可直接填写0x07D0。

RSense Register(D0h):检流电阻大小寄存器,此寄存器例程中并没有给出,但我们在实际配置过程中必须根据硬件电路配置此寄存器,否则得不出准确的结果。

根据数据手册官方推荐的数值,硬件电路采用5 mΩ 的检流电阻,此处值我们填写0x01F4。

IChgTerm Register(1Eh):充电终止电流寄存器,前面我们设置的充电管理芯片TP5400 的充电终止电流为200 mA,一般我们将此值设置得比实际终止电流稍微大一些。在这里我们设置此寄存器的值为260 mA。

VEmpty Register(3Ah):空电压寄存器,锂电池一般设置为3 V 即可。

初始化代码(部分)如下:

I2C_Read(0x00, &statusPOR);// 读取Status 寄存器

if((statusPOR&0x0002) == 0)// 上电复位事件未发生

{

return SUCCESS;

}

else// 上电复位事件发生

{

I2C_Read(0x00,®_tempValue);// 读FSTAT

寄存器的值

while(reg_tempValue&0x01)// 判断FSTAT.DNR

状态

{

I2C_Read(MAX17055_REG_FStat,®_

tempValue);

I2C_Delay(10);// 延时 10ms

}

Read(0xBA,&HibCFG);

WriteAndVerifyRegister(0x60,0x0090);

WriteAndVerifyRegister(0xBA,0x0000);

WriteAndVerifyRegister(0x60,0x0000);

WriteAndVerifyRegister(0x18,0x07D0);// 设

置电池容量为2000mAH

WriteAndVerifyRegister(0x45,0x003E);// 设

置dQAcc

WriteAndVerifyRegister(0x1E,0x0340);// 设

置充电终止电流为260mA, 计算方法0x0340*1.5625/5

WriteAndVerifyRegister(0x3A,0x9661);// 设

置空电压,计算方法:0x9661*1.25mV/16

WriteAndVerifyRegister(0xD0,0x01F4);// 设

置检流电阻大小,500=0x01F4

WriteAndVerifyRegister(0x46,0x0640);// 设

置dPAcc

WriteAndVerifyRegister(0xDB,0x8000);// 设

置ModelCFG

WriteAndVerifyRegister(0x13,0x4600);// 设

置FullSocThr 寄存器

Read(0xDB,®_tempValue);

while(reg_tempValue&0x8000)

{

I2C_Read(0xDB,®_tempValue);

I2C_Delay(10);// 延时10ms

}

WriteAndVerifyRegister(0xBA,HibCFG);

Read(0x00,®_tempValue);// 读取Status

寄存器

WriteAndVerifyRegister(0x00,0xFFFD);// 清

除POR 位

Read(0x00,&statusPOR);// 读取POR 位

if((statusPOR&0x0002) == 0)

{

return SUCCESS;// 初始化成功

}

else

{

return FAULT;// 初始化失败

}

4 结语

随着生活水平的提高,人们对便捷式产品的要求越来越高,传统的依靠电池电压来推算电量的方式因为显示不精细、不准确而饱受诟病,特别是针对便捷式的医疗器械产品来说,往往可能因为电量指示的不准确从而误导用户没有及时地对仪器进行充电,从而影响到仪器的再次使用。此方案可提供准确的电量指示,解决单节锂电池供电仪器的电量指示问题。
        责任编辑:tzh

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分