3、BMS核心功能模块详解

好,咱们进入正题。BMS 说到底,核心就那几件事:把电池的状态摸清楚,然后想办法让它活得久一点、跑得稳一点。这一章我重点讲四个模块——电压电流温度监测、SOC 估算、SOH 评估,还有均衡管理。每个模块我都踩过坑,咱们一个一个说。

3.1 电池状态监测:电压、电流、温度

这是 BMS 的「眼睛」。数据不准,后面所有算法都是扯淡。我个人习惯把监测分为三个层级:

  • 单体电压采集:精度要求高,通常 ±5mV 以内。我见过用分立电阻分压的方案,温漂大得离谱,后来全换成了隔离型 AFE 芯片。
  • 总电流采集:霍尔传感器 vs 分流器,各有优劣。分流器精度高但发热,霍尔隔离好但有零漂。我在一个 200A 的项目里用过霍尔,结果零漂补偿没做好,SOC 越算越偏。
  • 温度采集:NTC 热敏电阻最常见。注意布局——电芯正负极附近温度差异能到 5℃ 以上,我建议每 4-6 个电芯至少放一个测温点。
我的经验:采样同步性很重要。电压电流如果不在同一时刻采集,计算功率和 SOC 时会有相位差。我习惯用 AFE 的同步采样引脚,或者用定时器触发 ADC 组。

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 的典型阈值:

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);
}

主动均衡

把能量从高电压电芯转移到低电压电芯,效率高,不发热。但电路复杂,成本高。常见拓扑有:

  • 电容飞渡:用开关电容网络转移能量,适合小电流。
  • 电感/变压器:效率高,适合大电流,但控制复杂。
  • 多绕组变压器:可以同时均衡多个电芯,但体积大。
我的建议:小容量电池(如电动工具)用被动均衡就够了。大容量储能或动力电池(50Ah 以上),我强烈建议上主动均衡。虽然贵一点,但电池寿命能延长 20% 以上。

均衡策略上,我习惯用「电压差触发 + 定时轮询」的方式。比如压差超过 20mV 启动均衡,每 10 秒检查一次。别一直均衡,那样反而浪费电。

好了,这一章的核心模块就这些。下一章咱们聊聊多核分配——怎么把这么多任务合理地扔给不同内核去跑。