1. SOC算法概述:BMS中SOC的定义、重要性、常用算法对比
各位同学,咱们今天聊聊SOC算法。说实话,我刚入行那会儿,觉得SOC不就是个电量百分比嘛,有啥好研究的?后来在项目里被现实狠狠教育了一顿——SOC不准,整个BMS就像个瞎子。
先说说SOC到底是什么。SOC,全称State of Charge,翻译过来就是荷电状态。说白了,就是电池还剩多少电。0%表示没电了,100%表示满电。但这里有个坑——你没法直接拿万用表去量SOC,它是个估算值。
SOC的数学定义:
SOC = (剩余容量 / 额定容量) × 100%
注意,这里的额定容量不是电池标签上那个数。我遇到过不少新手,直接拿电芯规格书上的容量往里套,结果SOC飘得亲妈都不认识。额定容量会随温度、老化变化,这个后面细说。
1.1 为什么SOC这么重要?
你想想看,电动汽车仪表盘上那个电量显示,就是SOC。如果它不准,会发生什么?
- 续航焦虑:明明还有20%电,突然给你趴窝了。我有个朋友开某品牌电动车,遇到过SOC从15%直接跳到0%,拖车费花了两千。
- 过充过放:SOC不准,充电可能充过头,放电可能放太狠。锂电池过充会起火,过放会报废,这可不是闹着玩的。
- 均衡策略失效:BMS做均衡,依据就是SOC。SOC不准,均衡就是瞎搞。
我的经验:在项目开发阶段,我习惯把SOC精度目标定在±3%以内。量产时能稳定在±5%就算合格。别小看这5%,在低温、大电流工况下,很多算法直接崩到±15%。
1.2 三种主流SOC算法对比
目前业界常用的SOC算法,主要有三种。我一个个说,顺便讲讲我在项目里踩过的坑。
1.2.1 安时积分法
这是最基础的方法,原理简单到令人发指:
SOC(t) = SOC(0) - (1/Qn) × ∫I(t)dt
说白了,就是记录电流对时间的积分。充进去多少电,放出来多少电,一算就知道。
优点:
- 实现简单,计算量小
- 短时间内精度不错
- 适合嵌入式MCU跑
缺点:
- 误差会累积。电流传感器有偏置,积分时间长了,误差越来越大
- 初始SOC必须准确。如果不知道初始值,积分法就废了
- 库仑效率不是100%,充放电有损耗
避坑指南:我曾经在一个项目里只用安时积分法,结果跑了三个月,SOC误差到了12%。后来发现是电流传感器零点漂移了。从那以后,我坚持在每次充电结束时用开路电压法校正一次SOC。
1.2.2 开路电压法
这个方法利用了电池的一个特性:开路电压(OCV)和SOC有对应关系。电池静置足够久后,测一下端电压,查表就知道SOC了。
优点:
- 没有累积误差
- 精度高,尤其是中段SOC区域
缺点:
- 电池必须静置。一般要静置1-2小时,电压才稳定
- 动态工况下没法用。你开车的时候,电池在充放电,测出来的不是开路电压
- OCV-SOC曲线在两端(0-10%和90-100%)很平缓,查表误差大
我的做法:每次车辆上电时,如果检测到电池已经静置超过2小时,我就用开路电压法初始化SOC。这样安时积分法就有了一个准确的起点。
1.2.3 卡尔曼滤波法
这个方法听起来高大上,其实核心思想很简单:把安时积分法和开路电压法结合起来,用统计方法做最优估计。
卡尔曼滤波有两个步骤:
- 预测:用安时积分法估算下一时刻的SOC
- 更新:用电压测量值修正预测值
说白了,就是让算法自己判断:我该信安时积分多一点,还是信电压测量多一点?
优点:
- 精度高,能自适应
- 抗噪声能力强
- 可以同时估计SOC和电池内阻等参数
缺点:
- 计算量大。在低端MCU上跑,帧率可能不够
- 需要建立准确的电池模型。模型不准,卡尔曼滤波反而会发散
- 调试复杂。我调第一个卡尔曼滤波项目时,光调协方差矩阵就花了两周
1.3 三种算法对比总结
| 对比项 | 安时积分法 | 开路电压法 | 卡尔曼滤波法 |
|---|---|---|---|
| 精度 | 短期高,长期差 | 静态高,动态差 | 综合最优 |
| 计算量 | 低 | 低 | 高 |
| 适用场景 | 实时在线估算 | 初始化、校正 | 高精度需求 |
| 实现难度 | 简单 | 简单 | 复杂 |
| 抗干扰能力 | 弱 | 中 | 强 |
我的建议:实际项目中,别只用一种算法。我习惯的做法是:
- 用开路电压法做初始化
- 用安时积分法做实时跟踪
- 用卡尔曼滤波做在线校正
三种算法互补,才能把SOC精度做上去。嗯,这个思路在后面章节会详细展开。
好了,这一章就讲到这里。下一章咱们聊聊安时积分法的具体实现,包括电流采样、时间同步、误差补偿这些实战细节。到时候我会把我在产线上踩过的坑,一个一个说给你们听。