前两天,有个朋友遇到一个问题:为什么插拔充电器,电池电量会跳变?
这是个挺有趣的问题,现在我整理出来和大家一起交流分享下。
闲话少说,有多种策略来估计电池电量,最简单粗暴的一种方法就是通过两个串联电阻,使用ADC采集电池电压,进而间接估计电量,这种方法估计精度虽然非常低,但是却简单易实现,如下图所示。
放电时,电流从电池流出见图中红色电流路径,此时A点电压最高,因此A点电压要高于B点电压高于E点电压,这个意思说的是,实际中,ADC采集的电压是E点的电压,这个电压其实是小于电池电压A的,而且受负载电流影响很大(后面会更新文章进行深入介绍)。
而充电时,情况就变的不一样了,充电时,电流是流入电池,电流路径见下图绿色路径。此时B点的电压最高,B点的电压要高于A点和E点的电压。
那么问题就来了!
假如现在电池正处于放电状态,即上图所示,A点电池电压最高。
如果此时突然插入充电器,对电池充电,如下图,那么会使得B点位置的电压突然增加,此时ADC感应到电压突然增加(E位置会随着B位置增加),会判断为电量突然增加,而使得电量跳变,俗称电压反弹或电量反弹。
反过来。
如果电池正处于充电状态,见下图,B点电压最高,此时如果突然拔掉充电器,拔掉后,会使得B点和E点电压突然跌落,此时A点电压是最高。那么,ADC感应到拔掉充电器后的电压跌落,那么就会判断为电量突然跌落。
插拔充电器时的电量跳变,就是这么来的。
那么怎么整改呢?
有以下几个方法
优化电量估计的电路架构,从电压和电流两个角度进行数据拟合,结合算法估计电池电量。
进行软件判读,根据插入和拔出充电器两个不同的状态对电量进行补偿。
调整PCB布局,减小不同位置的PCB阻抗,缓解各点电压差。
优化PCB走线,直接检测电池电芯电压,而不是系统端电压。