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 校正策略

既然误差会累积,那就得想办法「清零」。常用的校正策略有这几种:

  1. 满充校正:电池充满时,强制把SOC设为100%。这是最可靠的校正点。
  2. 空电校正:电池放空时,强制设为0%。但要注意,过度放电会损伤电池。
  3. 开路电压校正:电池静置足够长时间后,通过OCV-SOC曲线查表修正。
  4. 模型融合校正:结合卡尔曼滤波等算法,实时修正积分结果。

我个人最推荐的做法是「满充校正 + 开路电压校正」组合。满充校正保证上限准确,开路电压校正保证中间区域不跑偏。

小技巧:开路电压校正需要电池静置至少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不准问题的利器。