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 优缺点分析:为什么它不能“独当一面”?
安时积分法优点很明显,缺点也同样致命。我们来掰扯掰扯。
优点
- 实现简单:几行代码就能跑起来,对MCU算力要求极低。
- 实时性好:只要电流采样够快,SOC能实时跟踪。
- 短时精度高:在几分钟到几小时的时间尺度内,误差可控。
缺点
- 初始SOC依赖:如果初始值不准,后面全白搭。我曾经在项目调试时,因为电池换过没重置SOC,结果跑了半天才发现SOC显示50%,实际已经快没电了。
- 误差累积:电流传感器有偏置误差,积分时间越长,误差越大。举个例子,一个0.1A的偏置,积分10小时,误差就是1Ah。
- 容量衰减:电池老化后Q_n会变小,但算法不知道,SOC会越算越不准。
- 无法自修正:它没有反馈机制,错了就错了,不会自己纠正。
避坑指南: 我曾经在一个项目中,只用了安时积分法,没有做任何校准。结果三个月后,SOC误差达到了15%。从那以后,我坚持在系统中加入“满充校准”和“空电校准”两个触发点——每次充满电强制置SOC=100%,每次保护板触发欠压强制置SOC=0%。
3.4 知识体系框架
下面这张图,是我自己总结的安时积分法知识体系。你可以把它当作一个思维导图来看:
3.5 实际项目中的经验总结
最后,我分享几个在实际项目中积累的经验:
| 场景 | 问题 | 我的做法 |
|---|---|---|
| 电流传感器偏置 | 长时间积分后SOC漂移 | 在系统空闲时(电流为0)自动归零校准传感器偏置 |
| 电池老化 | Q_n不准导致SOC误差 | 定期用SOH估算结果更新Q_n,比如每100次满充循环更新一次 |
| 低温环境 | 库仑效率变化大 | 建立η-温度查表,温度每降10℃,η修正系数调整一次 |
| 初始SOC未知 | 换电池后SOC显示异常 | 强制要求上电后先静置30分钟,用OCV查表法确定初始SOC |
一句话总结: 安时积分法是SOC估算的“地基”,但你不能只靠地基就住人。它必须配合校准手段(OCV、满充校准、卡尔曼滤波等)才能在实际产品中可靠运行。我见过太多工程师因为贪图简单,只用安时积分法,最后被现场问题搞得焦头烂额。
公众号:蓝海资料掘金营,微信deep3321