第4章:开路电压法(OCV法)
各位同学,今天我们来聊聊SOC估算里最基础、也最绕不开的一个方法——开路电压法。我入行那会儿,第一个接触的SOC估算方法就是它。说白了,OCV法就是利用电池静置时的电压来反推剩余电量。听起来简单吧?但里面的门道可不少。
4.1 OCV-SOC曲线标定
先说说这个曲线是怎么来的。你想想看,电池在不同电量下,开路电压是不一样的。这个关系不是线性的,而是一条S形曲线。我当年在实验室里,为了标定一条准确的曲线,整整熬了三个通宵。
标定的核心步骤其实就三步:
- 满充校准:先把电池充到4.2V(以三元锂为例),静置2小时以上
- 阶梯放电:每次放出5%或10%的电量,然后静置1小时
- 记录数据:记录每个静置点后的开路电压值
嗯,这里要注意。静置时间很关键。我见过有人为了赶进度,只静置了10分钟就开始测电压,结果标出来的曲线偏差很大。为什么?因为电池内部的极化效应还没消退,测出来的电压是虚的。
核心经验:标定OCV曲线时,静置时间建议不低于1小时。对于大容量电池(100Ah以上),建议静置2-3小时。
下面是我常用的一个标定数据示例(以某款三元锂电池为例):
| SOC (%) | OCV (V) | SOC (%) | OCV (V) |
|---|---|---|---|
| 100 | 4.20 | 50 | 3.70 |
| 90 | 4.10 | 40 | 3.65 |
| 80 | 4.00 | 30 | 3.58 |
| 70 | 3.90 | 20 | 3.50 |
| 60 | 3.80 | 10 | 3.40 |
| 55 | 3.75 | 0 | 3.20 |
你看,中间段(20%-80%)的曲线比较平缓,两端比较陡。这意味着什么?中间段的电压分辨率低,估算精度会差一些。我在项目中遇到过,客户要求SOC精度在±3%以内,结果在40%-60%这段死活达不到,最后只能靠其他方法辅助。
4.2 OCV查表法实现
曲线标定好了,怎么用呢?最直接的方法就是查表。说白了,就是把标定好的数据存成一个数组,然后根据测到的电压值,去表里找对应的SOC。
我个人习惯用线性插值法,简单又实用。给你看段代码:
// OCV-SOC查表函数
// ocv_table[]: 标定好的OCV数组(从低到高)
// soc_table[]: 对应的SOC数组
// voltage: 当前测得的开路电压
float getSOCByOCV(float voltage) {
// 边界检查
if (voltage <= ocv_table[0]) return soc_table[0];
if (voltage >= ocv_table[N-1]) return soc_table[N-1];
// 查找电压所在区间
for (int i = 0; i < N-1; i++) {
if (voltage >= ocv_table[i] && voltage < ocv_table[i+1]) {
// 线性插值
float ratio = (voltage - ocv_table[i]) /
(ocv_table[i+1] - ocv_table[i]);
return soc_table[i] + ratio * (soc_table[i+1] - soc_table[i]);
}
}
return -1; // 异常情况
}
小技巧:查表时建议用二分查找法,比顺序查找快很多。特别是当表有100个点以上时,二分查找的效率优势很明显。
我曾经在一个项目里,用顺序查找法,每次查表要循环几十次。后来改成二分查找,速度提升了近10倍。你想想看,如果MCU主频不高,这点优化还是很关键的。
4.3 OCV法的优缺点
聊完了实现,咱们来客观评价一下这个方法。我做了这么多年BMS,对OCV法的感受可以用一句话概括:简单可靠,但局限性大。
优点:
- 精度高:静置充分的情况下,精度可以做到±2%以内
- 无累积误差:不像安时积分法,用久了会漂
- 实现简单:一个查表函数就搞定了,不需要复杂的算法
- 通用性强:适用于各种化学体系的电池
缺点:
- 需要静置:这是最大的痛点。电池必须静置足够长时间才能测准
- 不能实时估算:车辆行驶中没法用,只能停车时用
- 中间段精度差:20%-80%这段曲线太平缓,电压变化很小
- 受温度影响大:同一个SOC,0℃和40℃的OCV能差0.1V以上
避坑指南:我曾经在一个项目中,忽略了温度对OCV的影响。冬天的时候,电池在0℃下静置,测出来的电压偏低,查表得到的SOC比实际低了8%。后来我加了一个温度补偿系数,才把这个问题解决掉。
4.4 OCV法的应用场景
既然OCV法有这么多限制,那它到底用在哪里呢?我总结了几种典型场景:
- 初始SOC校准:车辆上电时,如果电池已经静置了一段时间,可以用OCV法来校准初始SOC。这是最常用的场景。
- 充电结束后的修正:充满电后静置一段时间,用OCV法来修正SOC的终点值。
- 长期静置后的唤醒:车辆长时间停放后(比如过夜),唤醒时用OCV法重新估算SOC。
- 与其他方法融合:比如和安时积分法结合,用OCV法定期校准积分漂移。
嗯,这里要特别说一下第4点。我现在的项目里,就是OCV法+安时积分法配合使用。平时用安时积分法实时估算,每次停车静置超过2小时,就用OCV法来修正一次。这样既保证了实时性,又避免了累积误差。
下面这张图展示了OCV法在BMS中的典型应用流程:
最后说一句,OCV法虽然简单,但它是所有SOC估算方法的基础。你把这个搞懂了,后面学卡尔曼滤波、神经网络那些高级方法,会轻松很多。毕竟,再复杂的算法,最终都要回归到电池本身的特性上来。
公众号:蓝海资料掘金营,微信deep3321