4、容量法估算SOH:基于满充放电容量的SOH计算、实际应用中的难点与修正
各位工程师朋友,咱们接着聊SOH估算。前面讲了内阻法、模型法,今天重点说说容量法。这个方法,说白了就是最直观、最物理的那一套——电池能存多少电,直接反映了它的健康状态。
我个人习惯把容量法叫做“金标准”。为什么?因为SOH的定义本身就是基于容量的。你想想看,一个电池出厂时能装100Ah,现在只能装80Ah了,那SOH就是80%。这逻辑多清晰。
4.1 基于满充放电容量的SOH计算
公式其实很简单,我直接写出来:
SOH = (当前实际可用容量 / 额定初始容量) × 100%
举个例子。一块标称100Ah的磷酸铁锂电池,你把它从满电放到截止电压,放出来的电量是85Ah。那SOH就是85%。
这里有个关键点——实际可用容量怎么测?通常有两种方式:
- 完整充放电法:先充满,再放空,记录放电电量。这是最准的,但耗时最长。
- 部分充放电法:利用SOC变化区间来推算。比如从SOC 80%放到30%,记录放出电量,再反推总容量。
我在项目中遇到过一个问题:有些电池管理系统为了省时间,只用部分充放电法。结果呢?误差能到5%以上。所以我的建议是——能完整充放,就别偷懒。
4.2 实际应用中的难点
容量法虽然准,但实际用起来,坑不少。我踩过的坑,今天全给你们抖出来。
难点一:充放电条件不一致
电池的容量受温度、电流倍率影响很大。同样是满充满放,0.5C和1C放出来的电量能差3%-5%。
我曾经在项目现场调试,发现同一批电池,SOH算出来忽高忽低。查了半天,原来是充电桩的电流不稳定。后来我强制要求:所有容量测试必须在相同温度(25±2℃)和相同倍率(0.33C)下进行。
难点二:满充条件难以保证
很多实际场景下,电池根本充不到真正的满电。比如电动车用户,可能充到90%就拔枪了。这时候你拿到的“满充容量”其实是虚的。
怎么解决?我一般用两种方法:
- SOC校准法:利用电池静置后的开路电压,反推真实SOC,再修正容量。
- 累计积分法:记录一段时间内的充放电电量,结合SOC变化,用最小二乘法拟合出真实容量。
嗯,这里要注意:累计积分法对电流传感器的精度要求很高。如果传感器漂移,算出来的容量也会漂。
难点三:老化导致的容量衰减非线性
电池不是线性老化的。前期衰减慢,后期衰减快。你如果只用一次满充满放的数据去算SOH,可能刚好落在“假平稳期”,导致误判。
我记得有个项目,电池用了两年,SOH一直显示92%。结果第三年突然掉到78%。后来复盘发现,容量法只用了最近一次的数据,没有做历史趋势分析。
4.3 修正方法与实践技巧
既然有难点,那就有对策。下面是我在实际项目中总结的修正方法。
修正一:温度补偿
不同温度下的容量,需要归一化到标准温度。公式如下:
C_25 = C_T / (1 + α × (T - 25))
其中α是温度系数,磷酸铁锂一般取0.003-0.005,三元锂取0.004-0.006。这个系数最好通过实验标定,别用通用值。
修正二:倍率补偿
大电流放电时,容量会“缩水”。Peukert方程可以修正:
C_actual = C_ref × (I_ref / I)^(n-1)
n是Peukert系数,一般在1.1-1.3之间。我习惯在BMS里预置一个查表,不同倍率对应不同修正系数。
修正三:SOC区间选择
如果只能用部分充放电法,那尽量选SOC的线性区间。比如磷酸铁锂的SOC在20%-80%之间比较线性,两头容易跳变。
我曾经用SOC 10%-90%的区间去算容量,结果误差很大。后来改成20%-80%,精度提升了不少。
4.4 代码示例:容量法SOH计算
下面给一个简单的C语言示例,用于BMS中实现容量法SOH计算:
// 容量法SOH计算函数
// 输入:当前放电容量(Ah),额定容量(Ah),温度(℃),放电倍率(C)
// 输出:SOH百分比
float calculate_SOH_by_capacity(float current_capacity, float rated_capacity,
float temperature, float discharge_rate) {
float temp_factor, rate_factor, corrected_capacity;
// 1. 温度补偿(以25℃为基准)
temp_factor = 1.0 + 0.004 * (temperature - 25.0);
// 2. 倍率补偿(以0.33C为基准)
rate_factor = powf(0.33 / discharge_rate, 0.15);
// 3. 修正后的实际容量
corrected_capacity = current_capacity / (temp_factor * rate_factor);
// 4. 计算SOH
float soh = (corrected_capacity / rated_capacity) * 100.0;
// 5. 限幅保护
if (soh > 100.0) soh = 100.0;
if (soh < 0.0) soh = 0.0;
return soh;
}
这段代码我用了很多年,核心就是先修正、再计算。你想想看,如果不做温度和倍率补偿,直接拿原始数据算,那结果能信吗?
4.5 总结与建议
容量法估算SOH,优点是直观、物理意义明确。缺点是需要完整的充放电数据,且受外界条件影响大。
我的建议是:
- 能完整充放,就用完整充放。精度最高,没有之一。
- 必须做温度和倍率补偿。不做补偿的容量法,就是自欺欺人。
- 结合历史数据做趋势分析。单次数据不可靠,趋势才是王道。
- 与其他方法融合。容量法+内阻法+模型法,三管齐下,SOH估算才靠谱。
好了,容量法就讲到这里。下一章咱们聊聊基于数据驱动的SOH估算方法,那又是另一番天地了。