3. 安时积分法(一):基本原理、数学建模、优缺点分析

聊到SOC估算,安时积分法绝对是绕不开的基础。说白了,它就是最直观、最容易理解的方法。我刚开始做BMS那会儿,第一个上手的算法就是这个。你想想看,电池充进去多少电,放出来多少电,做个加减法不就行了?嗯,道理是这个道理,但实际做起来,坑可不少。

3.1 基本原理:从“水桶理论”说起

安时积分法的核心思想,其实特别简单。我习惯把它比作一个水桶:

  • 水桶的容量 = 电池的额定容量(比如100Ah)
  • 桶里的水量 = 电池当前的剩余电量(SOC)
  • 水龙头进水 = 充电电流(正方向)
  • 水龙头出水 = 放电电流(负方向)

我们只需要盯着“水龙头”的流量,不断累加,就能知道桶里还剩多少水。公式长这样:

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

其中:

  • SOC(t):当前时刻的荷电状态
  • SOC(0):初始荷电状态(这个值很关键,后面会讲)
  • Q_n:电池的额定容量(单位:Ah)
  • η:库仑效率(充放电不是100%高效的)
  • I(t):t时刻的电流(充电为正,放电为负)

为什么要有库仑效率η?因为电池内部有损耗。你充进去1Ah,实际能放出来的可能只有0.98Ah。我在项目中遇到过,有些电池在低温下库仑效率会掉到0.9以下,这时候如果不修正,SOC误差会越来越大。

3.2 数学建模:离散化与实现

上面的公式是连续时间的,但我们的MCU是数字系统,只能做离散化处理。说白了,就是把连续的积分变成每隔一段时间累加一次。

离散化后的公式:

SOC(k) = SOC(k-1) - (η * I(k) * Δt) / Q_n

这里:

  • SOC(k):当前时刻的SOC
  • SOC(k-1):上一时刻的SOC
  • I(k):当前时刻的电流采样值
  • Δt:采样周期(比如100ms)

我建议在实际代码中,把Q_n的单位换算成mAh或者As(安秒),避免浮点数精度问题。来看一段我常用的伪代码:

// 安时积分法核心代码片段
#define Q_NOMINAL_AH    100.0f   // 额定容量 100Ah
#define DELTA_T_S       0.1f     // 采样周期 100ms
#define COULOMB_EFF     0.98f    // 库仑效率

static float soc_integral = 0.0f;  // 积分累计量

void ah_integration(float current_A, float *soc_percent) {
    // 电流积分:单位转换为 Ah
    float delta_ah = current_A * DELTA_T_S / 3600.0f;
    
    // 考虑库仑效率
    if (current_A > 0) {  // 充电
        delta_ah *= COULOMB_EFF;
    }
    
    // 累计积分
    soc_integral += delta_ah;
    
    // 计算SOC(百分比)
    *soc_percent = (soc_integral / Q_NOMINAL_AH) * 100.0f;
    
    // 限幅处理
    if (*soc_percent > 100.0f) *soc_percent = 100.0f;
    if (*soc_percent < 0.0f)   *soc_percent = 0.0f;
}
我的小技巧: 实际项目中,我习惯把SOC拆成两部分:一部分是“积分值”,另一部分是“修正值”。积分值负责短期动态响应,修正值负责长期校准。这样即使积分有误差,也能通过其他手段拉回来。

3.3 优缺点分析:为什么它不能“独当一面”?

安时积分法优点很明显,缺点也同样致命。我们来掰扯掰扯。

优点

  1. 实现简单:几行代码就能跑起来,对MCU算力要求极低。
  2. 实时性好:只要电流采样够快,SOC能实时跟踪。
  3. 短时精度高:在几分钟到几小时的时间尺度内,误差可控。

缺点

  1. 初始SOC依赖:如果初始值不准,后面全白搭。我曾经在项目调试时,因为电池换过没重置SOC,结果跑了半天才发现SOC显示50%,实际已经快没电了。
  2. 误差累积:电流传感器有偏置误差,积分时间越长,误差越大。举个例子,一个0.1A的偏置,积分10小时,误差就是1Ah。
  3. 容量衰减:电池老化后Q_n会变小,但算法不知道,SOC会越算越不准。
  4. 无法自修正:它没有反馈机制,错了就错了,不会自己纠正。
避坑指南: 我曾经在一个项目中,只用了安时积分法,没有做任何校准。结果三个月后,SOC误差达到了15%。从那以后,我坚持在系统中加入“满充校准”和“空电校准”两个触发点——每次充满电强制置SOC=100%,每次保护板触发欠压强制置SOC=0%。

3.4 知识体系框架

下面这张图,是我自己总结的安时积分法知识体系。你可以把它当作一个思维导图来看:

安时积分法知识体系 基本原理 数学建模 优缺点分析 水桶模型类比 库仑效率η 连续→离散化 采样周期Δt 优点:简单实时 缺点:误差累积 核心痛点:初始值依赖 + 误差累积 + 容量衰减 满充/空电校准 开路电压法辅助 卡尔曼滤波融合 结论:安时积分法不能单独使用,必须配合校准策略

3.5 实际项目中的经验总结

最后,我分享几个在实际项目中积累的经验:

场景 问题 我的做法
电流传感器偏置 长时间积分后SOC漂移 在系统空闲时(电流为0)自动归零校准传感器偏置
电池老化 Q_n不准导致SOC误差 定期用SOH估算结果更新Q_n,比如每100次满充循环更新一次
低温环境 库仑效率变化大 建立η-温度查表,温度每降10℃,η修正系数调整一次
初始SOC未知 换电池后SOC显示异常 强制要求上电后先静置30分钟,用OCV查表法确定初始SOC

一句话总结: 安时积分法是SOC估算的“地基”,但你不能只靠地基就住人。它必须配合校准手段(OCV、满充校准、卡尔曼滤波等)才能在实际产品中可靠运行。我见过太多工程师因为贪图简单,只用安时积分法,最后被现场问题搞得焦头烂额。


公众号:蓝海资料掘金营,微信deep3321