diff --git a/Core/Src/soc_estimation.c b/Core/Src/soc_estimation.c index f9ef758..cae26e1 100644 --- a/Core/Src/soc_estimation.c +++ b/Core/Src/soc_estimation.c @@ -13,7 +13,7 @@ const float R0[N_MODELPARAMETERS]={0.0089,0.0087,0.0090,0.0087,0.0087,0.0087,0.0 const float R1[N_MODELPARAMETERS]={0.0164,0.0063,0.0050,0.0055,0.0051,0.0052,0.0057,0.0048,0.0059,0.0055,0.0061}; const float C1[N_MODELPARAMETERS]={2.5694,0.2649,0.2876,0.2594,0.2415,0.2360,0.2946,0.2558,0.2818,0.2605,0.2763}; const float OCV_Data[N_MODELPARAMETERS]={2.762504,3.326231,3.460875,3.57681,3.655326,3.738444,3.835977,3.925841,4.032575,4.078275,4.191449}; - +const float SOE_Data[N_MODELPARAMETERS]={0.0,0.079358,0.165140,0.256008,0.348836,0.445961,0.549115,0.655642,0.769677,0.875699,1.0}; //--------------------------------------------------------------------------------------------------------------- @@ -60,19 +60,26 @@ void soc_update(int32_t shunt_current) { } -void soe_update() +float soe_update() { - //TODO + return soc_approxparameterbysoc(current_floatsoc, SOE_Data, N_MODELPARAMETERS); } void soap_update() { - //TODO + // } float soc_approxparameterbysoc(float soc,float* lut, uint8_t lutlen) { - //TODO - return 0; + + uint8_t idx = (uint8_t) (soc*(lutlen-1)); + + if(idx == (lutlen-1)) + return lut[lutlen-1]; + + float linapprox = 10*(soc-(((float)idx)/((float)(lutlen-1))))*(lut[idx+1]-lut[idx]); + linapprox += lut[idx]; + return linapprox; } float soc_approxsocbyocv(float ocv)