3. 安时积分法(Ah Counting):原理、实现与修正

安时积分法,说白了就是「数着电量过日子」。

你想想看,电池充进去多少电,放出来多少电,理论上只要把电流对时间做个积分,剩下的不就是当前电量吗?这个思路非常直观,也是目前BMS里最基础的SOC估算方法。我在早期做BMS项目时,第一个上手的算法就是它。

3.1 安时积分原理

核心公式其实很简单:

SOC(t) = SOC(0) - (1 / Q_n) * ∫[0→t] η * I(t) dt

其中:

  • SOC(t):当前时刻的荷电状态
  • SOC(0):初始SOC值
  • Q_n:电池额定容量(单位:Ah)
  • η:库仑效率(充电时约0.98~0.995,放电时约1.0)
  • I(t):瞬时电流(放电为正,充电为负)

嗯,这里要注意一点。库仑效率η不是固定值,它跟电流倍率、温度都有关系。我习惯在项目中用一个查表法来处理η,而不是用常数。

关键认知:安时积分法本质是一个开环积分器。没有反馈,没有修正,全靠初始值和积分精度撑着。

3.2 电流采样与积分算法

电流采样是安时积分的「眼睛」。眼睛不好使,后面算什么都白搭。

我在项目中遇到过采样电阻温漂导致积分误差的问题。当时用的是5mΩ的采样电阻,温度从25℃升到85℃,阻值漂了将近15%。你想想看,电流值直接跟着偏了15%,积分一天下来,SOC误差能到10%以上。

所以电流采样这块,我建议重点关注三点:

  1. 采样精度:至少12位ADC,最好16位。偏置误差要小于±0.5mA。
  2. 采样频率:我个人习惯用10Hz~50Hz。频率太低会丢失电流脉冲细节,太高又浪费算力。
  3. 滤波处理:先做硬件滤波(RC低通),再做软件滤波(滑动平均或卡尔曼)。

积分算法这块,我推荐用梯形法,比矩形法更准:

// 梯形法积分示例
float ah_integral = 0.0f;
float current_prev = 0.0f;
float dt = 0.1f;  // 采样周期100ms

void update_ah(float current_now) {
    float avg_current = (current_prev + current_now) / 2.0f;
    ah_integral += avg_current * dt / 3600.0f;  // 转换为Ah
    current_prev = current_now;
}
小技巧:积分变量用float类型就够了,但要注意累积误差。我习惯每1000个积分周期做一次「归零检查」,防止浮点误差累积。

3.3 初始SOC设定

安时积分法最怕什么?最怕初始值不准。

你想想看,如果初始SOC设成了80%,实际只有60%,那后面再怎么积分,结果都是偏高的。这就是开环系统的致命弱点——初始误差无法自愈。

我常用的初始SOC设定方法有几种:

方法 适用场景 精度 备注
开路电压法(OCV) 静置超过30分钟 ±3%~5% 最常用,但需要查表
上次下电保存值 短时间休眠后唤醒 ±1%~2% 注意自放电修正
充电满电标定 充电完成时 ±0.5% 最准,但依赖充电策略
电压+温度联合查表 低温或老化电池 ±5%~8% 精度较差,但聊胜于无

我个人习惯的做法是:优先用OCV法做初始设定。如果电池静置时间不够,就取上次保存值,再根据静置时间和温度做自放电补偿。

避坑指南:我曾经遇到过一个问题——电池在低温下静置了48小时,直接用上次保存的SOC值唤醒,结果偏差了12%。后来才发现,低温下自放电率比常温高很多。从那以后,我加了一条规则:静置超过24小时,强制用OCV法重新标定。

3.4 积分漂移问题与修正

积分漂移,是安时积分法的「阿喀琉斯之踵」。

为什么会漂移?说白了,误差来源有三个:

  • 电流采样偏置误差:哪怕只有±1mA的偏置,积分24小时就是±24mAh。对于50Ah的电池,相当于0.05%的SOC误差。看起来不大?但累积一个月呢?
  • 库仑效率误差:η取0.99还是0.985,长期积分下来差异很明显。
  • 容量衰减:电池老化后Q_n变小,但算法里用的还是初始容量。

我常用的修正策略有四种:

  1. 满电修正:检测到充电完成(电压达到截止电压且电流小于C/20),强制将SOC设为100%。这是最准的修正点。
  2. 空电修正:检测到放电截止电压且负载断开,强制将SOC设为0%。注意要防止过放。
  3. OCV静置修正:电池静置超过一定时间(我一般设30分钟),用OCV查表修正SOC。
  4. 动态修正:在充放电过程中,根据电压变化率与SOC-OCV曲线的匹配程度,做微调修正。
核心思路:安时积分法不能「裸奔」。必须配合修正机制,才能保证长期精度。我一般把修正周期控制在每24小时内至少一次满电或空电修正。

最后,我画了一张图,帮你理清安时积分法的整体逻辑:

安时积分法核心逻辑流程图 初始SOC设定 电流采样(ADC+滤波) 安时积分(梯形法) SOC = SOC₀ - ΔAh/Qₙ 修正条件满足? 输出当前SOC 修正SOC₀ 图例 初始设定 采样处理 积分计算 修正判断

这张图把安时积分法的完整流程串起来了。你可以看到,修正环节是闭环的关键。没有它,积分漂移就会像温水煮青蛙一样,慢慢把SOC精度吃掉。

我的经验:在实际项目中,我一般把安时积分法作为SOC估算的「骨架」,再配合OCV修正、卡尔曼滤波等算法做「血肉」。纯靠安时积分,精度撑不过三天。

好了,安时积分法的核心内容就这些。记住三点:初始值要准、积分要稳、修正要勤。做到这三点,安时积分法就能在大部分场景下交出不错的成绩单。