3、电池特性与安全规范:锂电池充放电曲线、过充/过放/短路保护、电池均衡技术基础
做万用表电池管理系统,锂电池是绕不开的核心。说实话,锂电池这东西,用好了是神器,用不好就是定时炸弹。我刚开始做嵌入式电源设计那会儿,就吃过亏——一块电池过充鼓包,差点把实验台炸了。从那以后,我对电池特性这块,是真心敬畏。
今天咱们就聊聊锂电池的几个关键点:充放电曲线怎么看、保护电路怎么做、均衡技术怎么选。这些都是实战中必须啃下来的硬骨头。
3.1 锂电池充放电曲线:读懂电池的“脾气”
锂电池不是线性器件。它的电压和容量之间,不是简单的正比关系。你想想看,如果拿万用表测一下空载电压是3.7V,就以为还有50%电量,那可就大错特错了。
我习惯把锂电池的充放电曲线分成三段来看:
- 恒流充电阶段(CC):电流恒定,电压缓慢上升。从3.0V左右升到4.2V。这个阶段,电池吸收能量最快。
- 恒压充电阶段(CV):电压维持在4.2V,电流逐渐下降。当电流降到0.05C左右,充电结束。嗯,这里要注意,很多人以为电压到了4.2V就充满了,其实不是,必须等电流降下来才算真正充满。
- 放电阶段:电压从4.2V缓慢下降到3.0V左右。中间有一段比较平坦的区域(3.7V~3.6V),那是电池的主要工作区间。
核心数据:
| 状态 | 电压范围 | 说明 |
|---|---|---|
| 满电 | 4.20V ± 0.05V | 超过4.25V即过充 |
| 标称电压 | 3.6V ~ 3.7V | 电池主要工作点 |
| 放电截止 | 2.75V ~ 3.0V | 低于2.5V即过放 |
| 存储电压 | 3.7V ~ 3.85V | 长期存放最佳区间 |
我在项目中遇到过一个问题:用ADC采样电池电压来估算电量,结果误差高达20%。为什么?因为电池内阻和温度会影响电压读数。说白了,大电流放电时,电压会被拉低,这时候测到的电压不能直接换算成电量。正确的做法是:先做开路电压(OCV)查表,再结合库仑计积分。
3.2 过充/过放/短路保护:三条红线不能碰
锂电池最怕什么?过充、过放、短路、过温。这四条红线,任何一条踩了,轻则电池报废,重则起火爆炸。我见过太多因为省掉保护电路而翻车的案例了。
过充保护:
锂电池的充电上限是4.2V(有些高压版是4.35V或4.4V)。一旦超过4.25V,正极材料会分解,产生氧气,内部压力升高。你想想看,一个密封的金属罐子,内部压力升高会怎样?
保护方案:使用专用的锂电池充电管理芯片,比如TP4056、MCP73831。这些芯片内部集成了恒流恒压逻辑,电压到了4.2V会自动停止。我个人习惯再加一级硬件保护——用TL431搭一个电压比较器,一旦超过4.25V,直接切断MOS管。
过放保护:
锂电池放电不能低于2.5V。低于这个值,负极的铜箔会溶解,内部产生铜枝晶,可能刺穿隔膜导致短路。更麻烦的是,过放后的电池再充电,非常容易起火。
保护方案:在电池输出端串联一个低内阻的MOS管,用电压检测电路控制。当电压低于3.0V时,发出警告;低于2.7V时,强制切断输出。我曾经做过一个产品,用户反馈电池用几天就没电了,查了半天发现是过放保护阈值设得太低,电池一直在深度放电。后来把阈值从2.5V改到3.0V,问题就解决了。
短路保护:
短路是瞬间的大电流,可能达到几十安培。保护电路必须在微秒级内响应。常用的方案是:在输出回路中串联PTC自恢复保险丝,同时用MOS管做电子开关,检测到过流立即关断。
⚠️ 重要警告:
千万不要用普通二极管做防反接保护!二极管的正向压降会消耗大量功率,发热严重。正确的做法是用PMOS管做理想二极管电路,压降只有几毫伏。
3.3 电池均衡技术基础:让每一节电池都“公平”
当多节锂电池串联使用时(比如万用表里用两节18650串联,7.4V),问题就来了:每节电池的容量、内阻、自放电率不可能完全一样。充放电几次后,电压就会出现差异。一节4.2V,另一节4.0V,这时候继续充电,4.2V那节就过充了。
电池均衡,说白了就是让串联的每一节电池电压保持一致。常用的方法有两种:
- 被动均衡(电阻放电法):检测到某节电池电压偏高,就通过一个电阻给它放电,直到和其他电池电压一致。优点是电路简单、成本低;缺点是效率低、发热大。适合小电流应用。
- 主动均衡(电容/电感转移法):把高电压电池的能量转移到低电压电池上。效率高、发热小,但电路复杂、成本高。适合大容量电池组。
我做万用表电池管理时,用的是被动均衡。为什么?因为万用表电池容量不大(一般2000mAh左右),均衡电流只需要几十毫安就够了。用一颗100Ω的电阻,加上一个MOS管,单片机控制,成本不到两毛钱。
💡 实战小技巧:
均衡启动时机很重要。我建议在充电末期(电压接近4.2V时)开始均衡,而不是全程均衡。全程均衡会导致电池一直在放电,白白浪费能量。另外,均衡阈值一般设为50mV,超过这个差值才启动均衡。
下面是一个简单的被动均衡控制代码片段,用STM32的ADC采样两节电池电压,控制MOS管放电:
// 伪代码示例:两节锂电池被动均衡
#define BALANCE_THRESHOLD 50 // 50mV 均衡阈值
#define BALANCE_RESISTOR 100 // 100Ω 放电电阻
void battery_balance(void) {
uint16_t adc1 = get_adc_value(CELL1_CH);
uint16_t adc2 = get_adc_value(CELL2_CH);
uint16_t voltage1 = adc1 * 3300 / 4096; // mV
uint16_t voltage2 = adc2 * 3300 / 4096; // mV
if (voltage1 > voltage2 + BALANCE_THRESHOLD) {
// 电池1电压偏高,开启放电
HAL_GPIO_WritePin(BALANCE1_GPIO, BALANCE1_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BALANCE2_GPIO, BALANCE2_PIN, GPIO_PIN_RESET);
} else if (voltage2 > voltage1 + BALANCE_THRESHOLD) {
// 电池2电压偏高,开启放电
HAL_GPIO_WritePin(BALANCE1_GPIO, BALANCE1_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BALANCE2_GPIO, BALANCE2_PIN, GPIO_PIN_SET);
} else {
// 电压差在允许范围内,关闭均衡
HAL_GPIO_WritePin(BALANCE1_GPIO, BALANCE1_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BALANCE2_GPIO, BALANCE2_PIN, GPIO_PIN_RESET);
}
}
这段代码看起来简单,但实际调试时有个坑:ADC采样会有噪声,直接比较会导致均衡频繁开关。我后来加了一个50ms的软件滤波,才稳定下来。你想想看,如果均衡开关频率太高,MOS管和电阻都会发热严重。
最后说一句:电池安全无小事。做产品时,硬件保护和软件保护要双重冗余。硬件保护是最后一道防线,软件保护是日常防护。两者缺一不可。
下一章,咱们聊聊充电电路的具体设计,包括线性充电和开关充电的选型对比。到时候我会分享一个我踩过的坑——用开关充电芯片时,电感选型不对导致EMI超标,差点没通过认证。
公众号:蓝海资料掘金营,微信deep3321