SOC对于电池的寿命以及使用效率是至关重要的,对于锂电池的SOC估算,有很多种,开路电压、安时积分、卡尔曼滤波、神经网络等方法。卡尔曼滤波、神经网络训练这两种方法目前只是处于理论阶段,对于开发人员开发难度大。安时积分法、开路电压法这两种开发难度较小,是行业内普遍的两种SOC估算方法。
但是安时积分法、开路电压法这两种方法弊端也很明显。安时积分法即采用AH累积的方法,对动态的锂电池进行实时的SOC估算,这就对系统电流采集的精度要求非常高,如果误差大,AH累积的容量那必将跟实际容量误差大,导致SOC误差大。同时该方法对SOC初始值依赖非常高,每次充放电都必须充满至100%或者放完至0%,否则随着时间的推移,SOC的偏差会越来越大。开路电压校准法需要电池完全静置的情况下去测量电池的输出电压,再根据OCV-SOC曲线进行校准。当电池的静置时间不够,同样造成SOC偏差大,并且开路电压法只能在电池处于静置的情况下才能使用,电池处于动态则无法使用,因为不同倍率的充放电,锂电池的动态电压变化都不一样,所以该方法存在一定的局限性。
基于安时积分法、开路电压法这两种的弊端,在这里给大家介绍一种方法,即开路电压法+安时积分法两种结合使用。使用开路电压法在电池静置时计算SOC的初始值,安时积分法计算电池动态的SOC值。
1、SOC-OCV关系
笔者在这里使用的是国轩的额定容量为52Ah、标定电压3.2v,充放电电压范围在2.0v~3.65v磷酸铁锂电池做试验。
室温内测试,忽略温度对电池的影响。单体电池以1C的电流放电电压至2.0v,静置30min,再以1C的电流充电至电压3.65v时转恒压充电,至充电电流降为2.6A时停止充电,充电后静置30min。然后再以1C的电流放电,每放5%容量,静置1h,然后记录静置后的电压数据,重复10次。数据如下:(如果量大,可以让电池供应商提供SOC-OCV曲线)
DOD/% | 0% | 5% | 10% | 15% | 20% | 25% | 30% | 35% | 40% | 45% | 50% | 55% |
电压/V |
3.375
|
3.329
|
3.328
|
3.328
|
3.328
|
3.328
|
3.327
|
3.324 | 3.310 | 3.294 |
3.290
|
3.289
|
DOD/% | 60% | 65% | 70% | 75% | 80% | 85% | 90% | 95% | 100% | |||
电压/V |
3.288
|
3.288
|
3.284
|
3.272
|
3.253
|
3.230
|
3.210 | 3.180 | 2.928 |
在SOH为1的情况下,将DOD/%可当作SOC,SOC-OCV曲线图如下:
通过上图可以看出,锂电池的SOC-OCV的线性关系并不是很好,在SOC100%到95%之间,电池OCV跳变很大,SOC在95%~65%之间,OCV变化很小,趋于平滑,SOC65%以下电池OCV开始有明显变化,特别是5%时,跳变试变化。为此,考虑到是以5%为间隔记录数据,笔者采用分段线性法,相邻两点之间做线性关系,计算出K、B两个参数,再通过二分法查表,查出当前静置电池的OCV电压在那条线上,再代入相对应的函数,计算出当前SOC初始值。代码实现如下:
if((uMidIndex != 0) || (uMidIndex != (tCELL_OVC_TABLE_LEN - 1)))
{
if(uOcvValue > tCELL_OVC[uMidIndex])
{
uMidIndex -= 1;
ufSolpe = 500/(tCELL_OVC[uMidIndex] - tCELL_OVC[uMidIndex + 1]);
uCellSoc = (10000 -(uMidIndex*500)) - (ufSolpe*(tCELL_OVC[uMidIndex] -uOcvValue));
return uCellSoc;
}
else
{
ufSolpe = 500/(tCELL_OVC[uMidIndex] - tCELL_OVC[uMidIndex + 1]);
uCellSoc = (10000 -(uMidIndex*500)) - (ufSolpe*(tCELL_OVC[uMidIndex] -uOcvValue));
return uCellSoc;
}
}
通过上述的方法进行测试验证,发现当电池充至SOC100%,静置1h后,SOC直接跳变为75.3%,放电SOC至0%后,静置1h,发现SOC直接跳变为4.8%左右,查看锂电池资料发现,静置时,锂电池的电压在2.9~3.0v之间,电池的电接近放完,电压在3.3~3.4V之间,电池满电。结合SOC-OCV曲线,我做了几点条件,需满足这些条件才SOC可以进行开路电压的校准,否则SOC不进行校准,继续保持当前值。
1、0%<SOC<100%
2、开路电压<3.3V
3、需静置1h
#define SOC_OCV_Adjust_TIEME 7200 //50*12*60静置60min 等电池电压稳定
uTimes ++ ;
if((uTimes >= SOC_OCV_Adjust_TIEME) &&
(tRealData.uCellVol < 10000)&& (tRealData.uCellVol!= 0))
{
if(tRealData.uCellVol <= 3324) //单体电压在3.3V之内不修正
{
tRealData.uCellSoc = Search_OCV_Table(tRealData.uCellVol);
}
else
{
tRealData.uCellSoc = tRealData.uCellSoc;
}
}
else
{
tRealData.uCellSoc = tRealData.uCellSoc;
}
下一节介绍怎么将开路电压校准结合安时积分法估算SOC。文章来源:https://www.toymoban.com/news/detail-783202.html
文章来源地址https://www.toymoban.com/news/detail-783202.html
到了这里,关于基于开路电压+安时积分法估算锂电池SOC(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!