上一章节有说到开路电压校准的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对应50gtSocData.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%之间。