3、电池特性与保护:锂电池充放电曲线、保护板(BMS)原理、过充/过放/短路保护、电池电量监测(库仑计/电压法)

做嵌入式药盒,电池这块儿要是没处理好,前面所有努力都可能白费。我见过太多产品,功能做得花里胡哨,结果用户用了三个月电池就鼓包了,或者干脆充不进电。说白了,锂电池是个「脾气不小」的家伙,你得顺着它的性子来。

3.1 锂电池充放电曲线——读懂电池的「脾气」

锂电池不是线性器件。它的电压和电量之间,不是简单的正比关系。我习惯把充放电曲线分成三段来看:

  • 充电曲线:先恒流(CC),再恒压(CV)。恒流阶段电压缓慢上升,到4.2V(或4.35V)后转入恒压,电流逐渐下降。当电流降到0.05C左右,充电结束。
  • 放电曲线:刚放电时电压掉得很快(3.7V→3.5V),中间平台区很平缓(3.5V→3.3V),最后又急转直下(3.3V→3.0V)。
  • 关键拐点:3.0V是放电截止电压,4.2V是充电截止电压。超过这两个点,电池寿命会大打折扣。

实际经验:我在做一款血糖仪时,发现电池在3.3V以下还能放出约15%的电量,但电压掉得特别快。如果靠电压法估算电量,很容易误判。所以药盒这种设备,我建议留出至少5%的余量,别把电池榨干。

3.2 保护板(BMS)原理——电池的「守门员」

保护板不是可选项,是必需品。你想想看,药盒要是半夜短路起火了,那可不是闹着玩的。BMS的核心就三件事:

  • 过充保护:当电池电压超过4.25V(典型值),保护板会切断充电回路。我习惯选4.28V的过充检测点,留点余量给充电IC的精度误差。
  • 过放保护:电压低于2.5V时,切断放电回路。注意,有些便宜的BMS在过放后需要充电激活,这会让用户以为电池坏了。我建议选带「零伏充电」功能的保护IC。
  • 短路保护:输出端短路时,保护板会在几十微秒内关断MOS管。这个响应速度很关键,慢了MOS管会烧掉。

选型建议:DW01+8205A这个组合在低成本方案里很常见,但它的过放恢复电压是2.9V,对某些电芯来说偏高了。我后来改用FS312F+G系列,恢复电压可调,更灵活。

3.3 过充/过放/短路保护——别踩这些坑

嗯,这里要注意,保护板不是万能的。我曾经遇到过一个案例:

过充保护失效:某次客户反馈药盒充不进电,拆开一看,保护板上的MOS管击穿了。原因是充电器输出纹波太大,峰值电压超过了MOS管的耐压。从那以后,我选保护板都会看MOS管的Vds耐压,至少留30%余量。

过放保护「假死」:有些药盒放久了,电池电压掉到0V,保护板锁死,用户以为设备坏了。解决办法是选带「预充电」功能的充电IC,或者用带「零伏可充」的保护板。

短路保护误触发:电机启动瞬间电流很大,可能触发短路保护。我一般会在保护板后面加个软启动电路,或者选延时稍长的保护IC。

警告:千万不要为了省成本去掉保护板!锂电池一旦过充起火,燃烧速度极快,而且会产生有毒气体。药盒这种贴身设备,安全是第一位的。

3.4 电池电量监测——库仑计 vs 电压法

电量监测是药盒的刚需。用户得知道还剩多少电,什么时候该充电。常用的方法就两种:

方法 原理 精度 成本 适用场景
电压法 查表:电压→电量 ±10%~20% 低(ADC+电阻分压) 低成本、负载稳定的场景
库仑计 积分:电流×时间 ±1%~5% 高(专用IC+检流电阻) 高精度、负载变化大的场景

电压法:说白了就是查表。先测电池开路电压,再对照放电曲线估算电量。但问题来了——负载变化时电压会波动,测不准。我试过在药盒振动电机启动时测电压,误差能到30%。所以电压法只适合待机状态。

库仑计:这个准多了。它实时监测充入和放出的电荷量,累加计算。常用的IC有TI的BQ27441、MAXIM的MAX17260。我习惯用BQ27441,因为它内置了电池模型,校准一次就能用。

我的做法:药盒这种设备,我一般用「库仑计为主,电压法为辅」的策略。平时用库仑计累加电量,每次充满电后自动校准到100%。如果长时间待机导致库仑计漂移,再用电压法修正一下。这样精度能控制在3%以内。

3.5 实战:一个简单的电量监测代码

下面是我在STM32上用过的一段库仑计读取代码,用的是BQ27441。注意,初始化时一定要先做「密封」操作,否则芯片会进入配置模式,不干活。

// BQ27441 初始化
void bq27441_init(void) {
    // 1. 复位芯片
    i2c_write_reg(BQ27441_ADDR, 0x00, 0x8000);
    delay_ms(100);
    
    // 2. 配置电池参数(容量、终止电压等)
    uint8_t cfg[] = {0x05, 0xDC, 0x0B, 0xB8}; // 1500mAh, 3.0V截止
    i2c_write_block(BQ27441_ADDR, 0x60, cfg, 4);
    
    // 3. 密封芯片(重要!)
    i2c_write_reg(BQ27441_ADDR, 0x00, 0x0020);
    delay_ms(10);
}

// 读取剩余电量(单位:mAh)
uint16_t bq27441_read_remaining_capacity(void) {
    uint8_t data[2];
    i2c_read_block(BQ27441_ADDR, 0x10, data, 2);
    return (data[1] << 8) | data[0];
}

避坑指南:我曾经在批量生产时发现,有些芯片读出来的电量始终是0。查了半天,原来是I2C上拉电阻没焊。BQ27441的I2C引脚是开漏输出,必须外接4.7kΩ上拉电阻。这个细节很容易被忽略。

3.6 总结一下

电池管理这事儿,说难不难,说简单也不简单。核心就三点:

  • 读懂曲线:知道电池在什么电压下还剩多少电,别被平台区骗了。
  • 选对保护:过充、过放、短路,一个都不能少。别省那几毛钱。
  • 测准电量:库仑计是王道,电压法做辅助。药盒这种设备,精度比成本重要。

最后说一句:锂电池的安全问题,再怎么强调都不过分。我见过太多因为电池管理不当导致的产品召回,那损失可不是省几块钱能弥补的。嗯,今天就到这儿,下一章我们聊聊充电电路的设计。