4、过压/欠压保护策略:单体与总压过压阈值设定、欠压保护逻辑、多级保护联动机制
过压和欠压保护,是BMS最基础也最要命的功能。说白了,就是防止电池被充爆或者放干。我在项目里见过不少因为阈值设得不够精细,导致保护误动作或者干脆不动作的情况。今天咱们就把这块掰开揉碎了讲清楚。
4.1 单体过压保护:阈值怎么定?
单体过压保护,针对的是每一颗电芯。你想想看,一个电池包里有几百颗电芯,只要有一颗电压超标,整包就得停下来。
阈值设定原则:
- 一级保护(预警):通常设在电芯满充电压的98%~99%。比如磷酸铁锂满充3.65V,预警就设在3.58V~3.61V。这时候只报警,不切断。
- 二级保护(动作):设在满充电压的100%~102%。3.65V的电芯,二级保护设在3.65V~3.72V。一旦触发,立即断开充电回路。
- 三级保护(硬件):这个靠硬件比较器实现,电压设在3.75V~3.80V。软件万一挂了,硬件还能兜底。
重要提醒:阈值不能设得太紧,否则温度波动或者采样误差就会导致误保护。我习惯留2%~3%的余量,具体看电芯厂家的规格书。
实际项目中的坑:
我曾经遇到过一个项目,客户要求把过压保护设在3.60V(电芯满充3.65V)。结果夏天高温时,电芯电压在充电末端会有一个小尖峰,频繁触发保护。后来我们把阈值调到3.62V,同时加了一个200ms的滤波延时,问题就解决了。
4.2 总压过压保护:整包视角
总压过压保护,看的是整个电池包的电压。这个逻辑和单体保护不一样——总压高不一定代表单体有问题,可能是串联节数多导致的正常电压。
阈值设定方法:
- 基于串联节数计算:总压阈值 = 单体阈值 × 串联节数。比如96串的磷酸铁锂包,单体二级保护3.65V,总压就是3.65V × 96 = 350.4V。
- 考虑压降补偿:充电时,母线上的电压会比电芯实际电压高(因为有线路阻抗)。我一般会在总压阈值上加2~3V的补偿量。
- 多级设定:同样分预警、动作、硬件三级。硬件级通常用独立的电压检测芯片实现。
| 保护级别 | 单体阈值(LFP 3.65V) | 总压阈值(96串) | 响应时间 |
|---|---|---|---|
| 一级预警 | 3.58V | 343.7V | ≥1s |
| 二级动作 | 3.65V | 350.4V | ≤200ms |
| 三级硬件 | 3.75V | 360.0V | ≤10ms |
我的习惯:总压保护一定要和单体保护配合使用。单体保护更灵敏,总压保护作为后备。如果总压先触发而单体没触发,说明采样或者均衡可能有问题。
4.3 欠压保护逻辑:别让电池饿死
欠压保护比过压更危险。过压最多是损坏电池,欠压可能导致电池内部短路,甚至引发热失控。嗯,这里要注意,欠压保护的逻辑和过压不太一样。
欠压阈值设定:
- 放电截止电压:磷酸铁锂通常2.5V~2.8V,三元锂通常2.8V~3.0V。我建议取电芯规格书的下限值+0.1V作为动作阈值。
- 恢复电压:欠压保护后,不能一恢复电压就立刻允许放电。需要设一个恢复回差,一般比动作阈值高0.2V~0.5V。
- 休眠电压:当所有单体电压都低于某个值(比如2.0V),BMS应该进入休眠模式,只保留极低功耗的监控电路。
欠压保护的特殊场景:
我记得有一次做储能项目,客户反映电池包在静置时偶尔会触发欠压保护。查了半天,发现是电芯自放电率不一致,导致个别电芯在长期静置后电压掉到了保护阈值以下。后来我们加了一个「静置欠压延时」——只有在放电状态下才立即保护,静置状态下延时30分钟再动作。
警告:欠压保护后,严禁继续放电!哪怕只放1%的电量,也可能造成不可逆的损伤。我曾经见过一个案例,客户为了「榨干最后一点电」,把欠压保护阈值调低了0.3V,结果三个月后电芯就鼓包了。
4.4 多级保护联动机制:层层设防
多级保护,说白了就是「软件兜底,硬件保命」。我习惯把保护分为三个层级,每一层都有不同的响应策略。
第一层:软件预警(毫秒级~秒级)
- 由MCU通过ADC采样判断
- 触发后:报警、限制功率、记录故障码
- 不切断主回路,给系统留出处理时间
第二层:软件动作(毫秒级)
- 同样由MCU控制,但阈值更严格
- 触发后:立即断开充电或放电继电器
- 需要手动复位或故障消除后自动恢复
第三层:硬件保护(微秒级~毫秒级)
- 由独立的电压比较器或专用芯片实现
- 不依赖MCU,即使MCU死机也能工作
- 触发后:直接驱动保险丝或切断MOSFET
- 通常需要人工介入才能恢复
联动逻辑示例:
// 伪代码:多级保护联动
if (cell_voltage >= 3.58V) {
// 一级预警
set_alarm(OVER_VOLTAGE_WARNING);
reduce_charge_current(50%); // 降流50%
}
if (cell_voltage >= 3.65V) {
// 二级动作
open_charge_relay();
set_fault_code(0x10);
log_event("过压保护动作");
}
if (cell_voltage >= 3.75V) {
// 三级硬件保护(由独立电路触发)
// MCU检测到硬件保护信号后,记录并锁定
lock_system();
wait_for_service();
}
关键点:三级保护之间要有时间配合。软件动作应该在硬件保护之前完成,否则说明软件失效了。我一般把软件动作时间控制在100ms以内,硬件保护阈值比软件高0.1V左右,确保软件有足够的时间响应。
4.5 实战中的避坑指南
做保护策略设计,光看理论是不够的。我踩过不少坑,分享几个典型的:
- 采样不同步:单体电压和总压采样时间不一致,导致误判。我习惯让单体采样和总压采样同步触发,或者用同一个ADC的多个通道。
- 滤波参数不当:滤波太强,保护响应慢;滤波太弱,噪声导致误触发。我一般用滑动平均滤波,窗口大小根据采样频率调整,比如10ms采一次,取5次平均。
- 恢复策略不合理:保护动作后,恢复条件要明确。比如过压保护后,电压降到3.40V才能恢复充电,而不是一降到3.65V就恢复。否则会频繁震荡。
- 忽略温度影响:电芯的电压-温度曲线不是线性的。低温时内阻增大,充电末端电压会偏高。我建议根据温度动态调整保护阈值,或者至少加一个温度补偿系数。
嗯,最后说一句。保护策略写得好不好,直接决定了BMS的可靠性。我见过太多「看起来没问题,一用就出问题」的设计。你想想看,一个储能系统投资几百万,就因为保护阈值设错了导致电池报废,那得多冤?所以,多花点时间在保护策略上,绝对值得。