4、安时积分法(Ah Counting):原理、误差与校正
安时积分法,说白了就是「数着电流算电量」。这是最基础的SOC估算方法,也是我入行时接触的第一个算法。虽然现在很多项目都用更复杂的模型,但安时积分法的思想,是所有进阶算法的基础。
4.1 原理与公式
原理很简单:电池充进去多少电,放出来多少电,差值就是剩余电量。就像你的水杯,倒进去多少水,喝掉多少水,剩下的就是杯里的水量。
数学公式长这样:
SOC(t) = SOC(t₀) - (1 / Qₙ) × ∫[t₀, t] η × I(t) dt
其中:
- SOC(t):当前时刻的荷电状态
- SOC(t₀):初始SOC值
- Qₙ:电池额定容量(单位:Ah)
- η:库仑效率(后面细讲)
- I(t):电流(放电为正,充电为负)
离散化之后,我们在嵌入式系统里实际用的是:
SOC(k) = SOC(k-1) - (η × I(k) × Δt) / Qₙ
这里Δt是采样周期。我习惯用100ms的采样间隔,太密了计算量大,太疏了精度不够。
核心要点:安时积分法的精度,完全取决于三个因素——初始SOC准不准、电流测量准不准、库仑效率准不准。任何一个出问题,结果都会跑偏。
4.2 误差累积问题
安时积分法最大的痛点,就是误差会累积。你想想看,每次积分都有微小误差,时间长了就像滚雪球。
我在项目中遇到过最典型的场景:一辆电动车充满电显示SOC 100%,跑了三天后,明明还有一半电,仪表盘却显示SOC 0%直接趴窝了。原因就是电流传感器有零点漂移,每次积分都多算了一点放电量,三天下来误差累积到不可接受。
误差来源主要有三个:
- 电流测量误差:传感器精度有限,尤其是小电流时信噪比差
- 初始SOC误差:如果起始值就不准,后面全白搭
- 容量衰减:电池老化后实际容量变小,但算法还按额定容量算
避坑指南:我曾经在一个项目中,忽略了电流传感器的温漂。夏天和冬天的SOC误差差了8%。后来我养成了习惯——每次上电先做电流传感器自校准,把零点漂移补偿掉。
4.3 校正策略
既然误差会累积,那就得想办法「清零」。常用的校正策略有这几种:
- 满充校正:电池充满时,强制把SOC设为100%。这是最可靠的校正点。
- 空电校正:电池放空时,强制设为0%。但要注意,过度放电会损伤电池。
- 开路电压校正:电池静置足够长时间后,通过OCV-SOC曲线查表修正。
- 模型融合校正:结合卡尔曼滤波等算法,实时修正积分结果。
我个人最推荐的做法是「满充校正 + 开路电压校正」组合。满充校正保证上限准确,开路电压校正保证中间区域不跑偏。
小技巧:开路电压校正需要电池静置至少30分钟。我在项目中会加一个计时器,检测到电流小于0.01C且持续30分钟,就触发一次OCV校正。
4.4 库仑效率的测定与补偿
库仑效率η,指的是放电容量与充电容量的比值。理想情况下是1.0,但实际总有损耗。
为什么会这样?因为充进去的电,有一部分变成了热量,有一部分用于副反应(比如SEI膜的形成),并没有真正存下来。
测定方法其实不复杂:
- 在25℃恒温下,用0.5C电流充满电
- 静置1小时
- 用0.5C电流放电到截止电压
- 记录放电容量Q_discharge
- 再用同样方式充电,记录充电容量Q_charge
- η = Q_discharge / Q_charge
我测过的锂电池,库仑效率一般在0.97~0.99之间。但要注意,这个值会随温度和电流变化:
| 温度 | 0.2C | 0.5C | 1C |
|---|---|---|---|
| 0℃ | 0.985 | 0.978 | 0.965 |
| 25℃ | 0.992 | 0.988 | 0.981 |
| 45℃ | 0.990 | 0.985 | 0.977 |
嗯,这里要注意:低温下库仑效率明显下降。我在东北的一个项目中,冬天SOC误差特别大,后来查原因就是没做温度补偿。
补偿策略我建议用查表法:
// 伪代码示例
float get_coulombic_efficiency(float temp, float current) {
// 根据温度和电流查表
float eta = lookup_table[temp_index][current_index];
// 线性插值提高精度
return eta;
}
如果你嫌查表麻烦,也可以用经验公式拟合。但我个人习惯用查表,因为更直观,调试时也容易发现问题。
总结一下:安时积分法虽然简单,但要做好并不容易。误差累积是绕不开的坎,校正策略是必须的,库仑效率的补偿也不能马虎。下一章我会讲开路电压法,那是解决初始SOC不准问题的利器。