基于开路电压+安时积分法估算锂电池SOC(二)

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

你可能感兴趣的:(c语言,单片机,stm32,mcu)