上一章节有说到开路电压校准的SOC初始值,本章介绍怎么利用这个SOC初始值在电池处于动态时,通过安时积分法去估算实时的SOC。
安时积分法即通过采集的电流,实时累积AH,通过累积的AH容量去估算当前的SOC值。笔者是通过采用模拟前端BQ76940采样电流。以250ms为周期采集一次电流,此时假定250ms内的电流不变且电流为x,那么此时的AH数则为x(mA*250ms)。
下面以充电为例进行说明。将50AH划分成10000份,即每份的AH数为0.005AH。每当上述的累积AH大于或等于0.005AH时,SOC则对应的加0.01%,这样就完成了单体SOC的计算。
u32 gSocCellCap;
/* 1AH的万分之一除以采样周期(1000*3600*1000/10000/SAMPLE_CYCLE),单位:mA*250ms */
#define TENTHOUSANDTH_CAP 1440
gSocCellCap = TENTHOUSANDTH_CAP * 50;
static E_Bool SOC_Cal_Handle(float *pfPiece, float fTotalCur)
{
u8 uCumulate = 0;
*pfPiece += fTotalCur;
if(*pfPiece < 0) /* 放电 */
{
//
}
else
{
while(*pfPiece >= gSocCellCap)
{
if(++uCumulate > 100)
{
break;
}
*pfPiece -= gSocCellCap;
if(tRealData.uCellSoc < 10000) /* SOC最大为100% */ //10000
{
tRealData.uCellSoc += 1;
//单位万分之一AH//0.01%SOC对应50
gtSocData.uHisChargeTotalAH += 50;
if(gtSocData.uHisChargeTotalAH >= (50*1000)
{
gtSocData.uHisChargeTotalAH = 50 * 1000;
}
}
}
}
}
tRealData.uCellSoc就是通过开路电压校准过后的SOC初始值。先将电池的电充值100%,然后将电池的电放值电压低于3v,静置1h,然后以0.5C的倍率充电,充至100%。10min后,以0.5C的倍率放电,放电的同时计时。50AH的容量,SOC为100%,通过放电2h,SOC只剩3%。再以0.5C的倍率充电,2h后,SOC为98%。重复20次测试,发现误差在0~3%之间。