3、BMS核心功能模块详解
好,咱们进入正题。BMS 说到底,核心就那几件事:把电池的状态摸清楚,然后想办法让它活得久一点、跑得稳一点。这一章我重点讲四个模块——电压电流温度监测、SOC 估算、SOH 评估,还有均衡管理。每个模块我都踩过坑,咱们一个一个说。
3.1 电池状态监测:电压、电流、温度
这是 BMS 的「眼睛」。数据不准,后面所有算法都是扯淡。我个人习惯把监测分为三个层级:
- 单体电压采集:精度要求高,通常 ±5mV 以内。我见过用分立电阻分压的方案,温漂大得离谱,后来全换成了隔离型 AFE 芯片。
- 总电流采集:霍尔传感器 vs 分流器,各有优劣。分流器精度高但发热,霍尔隔离好但有零漂。我在一个 200A 的项目里用过霍尔,结果零漂补偿没做好,SOC 越算越偏。
- 温度采集:NTC 热敏电阻最常见。注意布局——电芯正负极附近温度差异能到 5℃ 以上,我建议每 4-6 个电芯至少放一个测温点。
3.2 SOC 估算算法
SOC 是 BMS 的「灵魂」。说白了就是告诉用户:电池还有多少电?但这事没那么简单。
常用的方法有几种:
| 方法 | 原理 | 优缺点 |
|---|---|---|
| 开路电压法(OCV) | 查表,根据静置电压反推 SOC | 简单,但需要长时间静置,动态不能用 |
| 安时积分法(CC) | 对电流积分,累加电量 | 实时性好,但误差会累积 |
| 卡尔曼滤波(EKF) | 融合电压、电流、温度做状态估计 | 精度高,但计算量大,需要调参 |
我在实际项目中,用的是 安时积分 + EKF 融合 的方案。为什么?因为纯安时积分跑久了会漂,而纯 EKF 在电流剧烈变化时容易发散。两者互补,效果不错。
核心思路:安时积分做短期预测,EKF 做长期校正。每次充满电时强制校准到 100%,每次静置超过 30 分钟用 OCV 修正一次。
代码示例(简化版 EKF 预测步):
// 状态预测:SOC(k|k-1) = SOC(k-1) + (I * dt / Q) * 100
float predict_soc(float soc_prev, float current, float dt, float capacity) {
return soc_prev + (current * dt / capacity) * 100.0f;
}
// 协方差预测
float predict_p(float p_prev, float process_noise) {
return p_prev + process_noise;
}
嗯,这里要注意:容量 Q 不是常数。它会随温度、老化变化。我建议把容量做成二维查表,温度一个维度,循环次数一个维度。
3.3 SOH 评估
SOH 评估,说白了就是判断电池「老没老」。通常用容量衰减和内阻增加两个维度来衡量。
我常用的方法:
- 容量法:满充满放一次,记录实际容量与标称容量的比值。最准,但操作麻烦,不适合在线实时评估。
- 内阻法:通过直流内阻(DCR)或交流内阻(EIS)判断。内阻增加 100% 以上,基本就该换了。
- 模型法:用等效电路模型(如二阶 RC 模型)在线辨识参数。我比较推荐这个,但计算量稍大。
SOH 的典型阈值:
| SOH 范围 | 状态 | 建议操作 |
|---|---|---|
| 80% - 100% | 健康 | 正常使用 |
| 60% - 80% | 衰退 | 加强监控,考虑降功率使用 |
| < 60% | 报废 | 建议更换 |
3.4 均衡管理:主动均衡与被动均衡
电池串联后,电芯之间总有差异。均衡就是把这些差异「抹平」。分两种:
被动均衡
原理简单:电压高的电芯,通过电阻把多余能量以热量形式放掉。成本低,电路简单。但效率低,发热大。我建议被动均衡电流控制在 50-100mA,太大了散热扛不住。
// 被动均衡逻辑示例
if (cell_voltage > threshold_high) {
enable_balancing_resistor(cell_id);
} else if (cell_voltage < threshold_low) {
disable_balancing_resistor(cell_id);
}
主动均衡
把能量从高电压电芯转移到低电压电芯,效率高,不发热。但电路复杂,成本高。常见拓扑有:
- 电容飞渡:用开关电容网络转移能量,适合小电流。
- 电感/变压器:效率高,适合大电流,但控制复杂。
- 多绕组变压器:可以同时均衡多个电芯,但体积大。
均衡策略上,我习惯用「电压差触发 + 定时轮询」的方式。比如压差超过 20mV 启动均衡,每 10 秒检查一次。别一直均衡,那样反而浪费电。
好了,这一章的核心模块就这些。下一章咱们聊聊多核分配——怎么把这么多任务合理地扔给不同内核去跑。