3、开路电压法(OCV):OCV-SOC曲线标定、不同温度下的OCV修正、静置时间对OCV的影响
开路电压法,说白了就是利用电池在静置状态下的端电压来反推SOC。这个方法听起来简单,但真正做起来,坑不少。我最早接触BMS时,觉得OCV查表嘛,不就是拿个电压值去曲线里找对应SOC吗?结果第一次做标定,数据乱得一塌糊涂。后来才明白,OCV-SOC曲线的精度,直接决定了你整个SOC估算的底子。底子歪了,后面什么安时积分、卡尔曼滤波都救不回来。
3.1 OCV-SOC曲线标定:你得亲手拉一条线
OCV-SOC曲线不是从电池规格书里抄来就能用的。每批电芯的化学体系、老化程度都不一样。我个人习惯,拿到新电芯后,第一件事就是做一次完整的OCV标定实验。
标定流程,我总结为三步:
- 满充静置:先把电池充到4.2V(或厂家规定的满充电压),然后静置至少2小时。为什么要这么久?因为极化电压需要时间消散。我见过有人只静置30分钟就开始测,结果前几个点的电压虚高,整条曲线都偏了。
- 阶梯放电:以0.05C(甚至更小)的电流放电,每放出5%或10%的容量,就停下来。停下来后,记录此时的端电压。注意,这里的关键是「停下来后」——不是放电瞬间的电压,而是静置后的电压。
- 静置与记录:每次放电后,静置1小时(或更久),记录开路电压。重复这个过程,直到放电到截止电压。
这样你就能得到一组数据:SOC从100%到0%,每个点对应一个OCV。把这些点连起来,就是一条OCV-SOC曲线。
核心要点:标定时的放电倍率越小越好。0.05C是常规选择,如果你有条件,用0.02C甚至0.01C,曲线会更接近真实的开路电压。我在项目中遇到过,用0.1C放电标定的曲线,在低SOC段(20%以下)误差能到5%以上。
下面是我常用的一段标定数据示例(磷酸铁锂电芯,25℃):
| SOC (%) | OCV (V) |
|---|---|
| 100 | 3.400 |
| 90 | 3.350 |
| 80 | 3.310 |
| 70 | 3.280 |
| 60 | 3.250 |
| 50 | 3.220 |
| 40 | 3.190 |
| 30 | 3.150 |
| 20 | 3.080 |
| 10 | 2.950 |
| 0 | 2.500 |
你可能会问:为什么磷酸铁锂的曲线在中间段这么平?嗯,这就是它的特性。中间段电压变化很小,稍微有点测量误差,SOC估算就会偏很多。所以对于磷酸铁锂,单纯用OCV法是不靠谱的,必须结合其他方法。
3.2 不同温度下的OCV修正:温度一变,曲线就变
温度对OCV的影响,比你想象的要大。我刚开始做BMS时,以为25℃标定的曲线,在0℃和45℃下也能通用。结果冬天实测时,SOC显示还有30%,车子却直接趴窝了。为什么?因为低温下电池内阻增大,极化电压更严重,同样的开路电压,对应的实际SOC更低。
温度修正的核心逻辑:
- 低温(如-10℃):OCV整体偏低。尤其是在低SOC区域,电压下降得更快。你想想看,冬天手机电量掉得快,就是这个道理。
- 高温(如45℃):OCV整体偏高。但高温下电池活性增强,极化效应减弱,所以OCV曲线会更接近理想状态。
我建议的做法是:至少标定三个温度点的OCV曲线——0℃、25℃、45℃。然后通过线性插值,得到中间任意温度下的修正值。
我的经验:如果你只标定了25℃的曲线,可以用一个简单的温度补偿系数来修正。比如,温度每降低10℃,OCV减去一个固定偏移量(约5-10mV)。但这个系数需要你通过实验来确认,不同电芯差异很大。
下面是一个温度修正的示例代码(伪代码,用于嵌入式实现):
// 温度修正函数
float ocv_temperature_correction(float ocv_25, float temperature) {
float delta_v = 0.0;
if (temperature < 25.0) {
// 低温修正:每降低1℃,减去0.8mV
delta_v = (25.0 - temperature) * 0.0008;
} else if (temperature > 25.0) {
// 高温修正:每升高1℃,加上0.5mV
delta_v = (temperature - 25.0) * 0.0005;
}
return ocv_25 - delta_v; // 注意:低温时减去,高温时加上
}
注意,这个系数0.8mV/℃和0.5mV/℃只是我某个项目中的经验值。你拿到的电芯,可能完全不一样。一定要自己做实验确认。
3.3 静置时间对OCV的影响:等得起,才测得准
这是最容易忽略的一个点。很多人以为电池一停下来,电压就稳定了。其实不是。电池内部有极化效应——充电或放电时,锂离子在电极表面堆积,形成浓度差。一旦停止电流,这些离子需要时间扩散回平衡状态。这个扩散过程,就是电压慢慢回升或下降的过程。
静置时间的影响规律:
- 刚停止放电时:电压会迅速回升。前几分钟变化最快,之后逐渐变慢。
- 30分钟后:大部分极化已经消散,电压变化趋于平缓。
- 1-2小时后:基本达到稳定状态。这时候测得的电压,才是真正的开路电压。
我曾经犯过一个错误:为了赶测试进度,每次放电后只静置15分钟就记录数据。结果标定出来的曲线,在SOC 50%附近比真实值高了近20mV。后来用这条曲线去估算SOC,误差一直在5%左右徘徊。嗯,从那以后,我给自己定了个规矩:静置时间至少1小时,如果条件允许,2小时更好。
避坑指南:我曾经在低温环境下(-10℃)做过对比实验。同样静置1小时,低温下的电压稳定时间比常温下长了近3倍。所以低温标定时,静置时间要适当延长。我的建议是:温度每降低10℃,静置时间增加1小时。
下面这张图,是我自己画的OCV标定与温度修正的流程。你可以看到,整个逻辑是环环相扣的:标定曲线是基础,温度修正是补偿,静置时间是保证精度的前提。
最后说一句,OCV法虽然基础,但它是所有SOC估算方法的基石。你后面学到的安时积分、卡尔曼滤波、神经网络,最终都要依赖OCV曲线来做初始化和校准。所以,花时间把OCV标定做好,绝对值得。
总结三个关键点:
- 标定曲线时,放电倍率要小,静置时间要够长。
- 温度修正不能省,至少标定三个温度点。
- 静置时间不是固定的,低温下要加倍。