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%以上。
所以电流采样这块,我建议重点关注三点:
- 采样精度:至少12位ADC,最好16位。偏置误差要小于±0.5mA。
- 采样频率:我个人习惯用10Hz~50Hz。频率太低会丢失电流脉冲细节,太高又浪费算力。
- 滤波处理:先做硬件滤波(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变小,但算法里用的还是初始容量。
我常用的修正策略有四种:
- 满电修正:检测到充电完成(电压达到截止电压且电流小于C/20),强制将SOC设为100%。这是最准的修正点。
- 空电修正:检测到放电截止电压且负载断开,强制将SOC设为0%。注意要防止过放。
- OCV静置修正:电池静置超过一定时间(我一般设30分钟),用OCV查表修正SOC。
- 动态修正:在充放电过程中,根据电压变化率与SOC-OCV曲线的匹配程度,做微调修正。
核心思路:安时积分法不能「裸奔」。必须配合修正机制,才能保证长期精度。我一般把修正周期控制在每24小时内至少一次满电或空电修正。
最后,我画了一张图,帮你理清安时积分法的整体逻辑:
这张图把安时积分法的完整流程串起来了。你可以看到,修正环节是闭环的关键。没有它,积分漂移就会像温水煮青蛙一样,慢慢把SOC精度吃掉。
我的经验:在实际项目中,我一般把安时积分法作为SOC估算的「骨架」,再配合OCV修正、卡尔曼滤波等算法做「血肉」。纯靠安时积分,精度撑不过三天。
好了,安时积分法的核心内容就这些。记住三点:初始值要准、积分要稳、修正要勤。做到这三点,安时积分法就能在大部分场景下交出不错的成绩单。