Kaynağa Gözat

1.修改CDM 使能条件
2.屏蔽放电CCV 阻值修正

LAPTOP-EG88H5BE\86151 3 yıl önce
ebeveyn
işleme
9db36efdb3
2 değiştirilmiş dosya ile 57 ekleme ve 36 silme
  1. 10 5
      src/EmbeddedCoder_src/CDM.c
  2. 47 31
      src/EmbeddedCoder_src/SOC.c

+ 10 - 5
src/EmbeddedCoder_src/CDM.c

@@ -23,6 +23,7 @@ void CDM(void)
     real_T arf[cmnc_num_cellUNumMax];
     uint16_T i;
     static uint8_T ihd_st_workStat_Delay;
+	static int16_T sfmd_I_curr_Delay;
 	static uint8_T Cnt;
     //
     if(ihd_st_workStat_Delay == 2 && ihd_st_workStat != 2)
@@ -48,7 +49,7 @@ void CDM(void)
         }
     }
     //
-    if(ihd_st_workStat != 2)
+    if(ihd_st_workStat != 2 &&  (sfmd_I_curr_Delay - sfmd_I_curr > 10 ||sfmd_I_curr_Delay - sfmd_I_curr < -10 ||sfmd_I_curr_Delay ==0 && sfmd_I_curr == 0))
     {
         for (i = 0;i < cmnc_num_cellUNum;i++)
         {
@@ -71,8 +72,7 @@ void CDM(void)
 			
 			if(arf[i] > 0.04 || arf[i] < -0.04)
             {
-                cdmd_flg_deltOCVDisable = true;
-			   
+                cdmd_flg_deltOCVDisable = true;   
             }
 	    }
         //
@@ -98,9 +98,14 @@ void CDM(void)
     }
     else
     {
-        cdmd_flg_deltOCVDisable = false;
+        cdmd_flg_deltOCVDisable = true;
     }
-	
+	//printf("u_:%f %f %f\n",arf[0],arf[1],arf[2]);
+	//printf("E_:%d %d %d\n",cdmv_V_deltOCV[0],cdmv_V_deltOCV[1],cdmv_V_deltOCV[2]);
+	//printf("R_:%d %d %d\n",cdmv_ohm_deltR[0],cdmv_ohm_deltR[1],cdmv_ohm_deltR[2]);
+	//printf("\n");
+	cdmd_flg_deltOCVDisable = true;  ////////
+	sfmd_I_curr_Delay = sfmd_I_curr;
     FirstRun_CDM = false;
 	
 }

+ 47 - 31
src/EmbeddedCoder_src/SOC.c

@@ -80,12 +80,11 @@ void SOC(void)
     static uint8_T chrgCntl;
     static uint8_T disChrgCntl;
     //
-    static uint16_T socd_pct_battSoc_Delay;
     //
     static uint8_T statCntl;
     boolean_T statFlg;
     static uint8_T ihd_st_chrgSta_Delay;
-    static uint16_T socn_pct_utrackSoc_Delay;
+    static uint16_T socd_pct_battSoc_Delay;
     static uint16_T socd_pct_battSoc0;
     static uint16_T socd_pct_bcuSoc0;
     uint16_T delSOC;
@@ -96,6 +95,9 @@ void SOC(void)
     boolean_T Flg;
     static boolean_T onceFlg_chrg;
     static boolean_T onceFlg_dischrg;
+
+	static uint16_T socd_pct_battSoc_save;
+	static uint16_T socd_pct_bcuSoc_save;
     uint16_T i;
     //
     if (FirstRun_SOC)
@@ -112,9 +114,11 @@ void SOC(void)
         onceFlg_utrckOver = true;
         onceFlg_utrckLow = true;
         ihd_st_chrgSta_Delay = 0;
-        socn_pct_utrackSoc_Delay = 0;
+        socd_pct_battSoc_Delay = 0;
         onceFlg_chrg = true;
         onceFlg_dischrg = true;
+		socd_pct_battSoc_save = 0;
+		socd_pct_bcuSoc_save = 0;	
     }
     
     //=====================================================================
@@ -122,7 +126,7 @@ void SOC(void)
     //=====================================================================
     if (FirstRun_SOC)
     { //
-        if (socd_pct_battSocEi > 1000 || socd_pct_bcuSocEi > 1000 || ihd_st_EOLState == 0 ||
+        if (socd_pct_battSocEi > 1000 || socd_pct_bcuSocEi > 1000 || ihd_st_EOLState == 0 ||ihd_st_chrgConnect ||
                 (((int16_T)(socd_pct_battSocEi - socd_pct_bcuSocEi) > 300 || (int16_T)(socd_pct_battSocEi - socd_pct_bcuSocEi) < -300) && ihd_tm_parkTime >= cmnc_tm_parkTime))
         {
             socn_pct_battSocEE = look1_iu16lu16n16tu16_binlcase(sfmd_V_cellUAvrg, (&(cmnm_V_ocv[0])), (&(cmnm_pct_soc[0])), 12U);
@@ -290,7 +294,7 @@ void SOC(void)
     }
     socd_pct_ekfSoc = (uint16_T)(((1 - (real_T)(factor * 0.01)) * (real_T)(EKFSOCMin * 0.1) + (real_T)(factor * 0.01) * (real_T)(EKFSOCMax * 0.1)) * 10);
    
-    //printf("4----socd_pct_ekfSoc:%d,EKFSOCMax:%d,EKFSOCMin:%d,\n",socd_pct_ekfSoc,EKFSOCMax,EKFSOCMin);
+   // printf("4----socd_pct_ekfSoc:%d,EKFSOCMax:%d,EKFSOCMin:%d,\n",socd_pct_ekfSoc,EKFSOCMax,EKFSOCMin);
 
    //-------------------------EKFavrg---------------------------------------
     if (FirstRun_SOC)
@@ -404,9 +408,7 @@ void SOC(void)
     {
         socd_pct_ahSoc = (uint16_T)ahSoc;
     }
-	 //  printf("S_%d   %d   %d   %d   %d   %d   %d   %d\n",socd_pct_cellBattSoc,cellSocMax,cellSocMin,socd_pct_ekfSoc,EKFSOCMax,EKFSOCMin,ahSoc,EKFSOCAvrg);
-	 //  printf("E_%d   %d   %d   %d   %d   %d   %d   %d\n",cdmv_V_deltOCV[0],cdmv_V_deltOCV[1],cdmv_V_deltOCV[15],cdmv_V_deltOCV[16],cdmv_ohm_deltR[0],cdmv_ohm_deltR[1],cdmv_ohm_deltR[15],cdmv_ohm_deltR[16]);
-    //printf("5----ahDelay:%f,ahSoc:%d,battcurr:%f,sfmd_I_curr:%d\n",ahDelay,ahSoc,battcurr,sfmd_I_curr);
+	//printf("5----ahDelay:%f,ahSoc:%d,battcurr:%f,sfmd_I_curr:%d\n",ahDelay,ahSoc,battcurr,sfmd_I_curr);
     //======================================================================
     ///////////////////////estSOC//////////////////////////////////////////
     //======================================================================
@@ -445,6 +447,7 @@ void SOC(void)
         socd_pct_estSoc = socc_pct_battSocLow;
     }
     //printf("6----ahSoc0_est:%d,ekfSoc0_est:%d,socd_pct_estSoc:%d\n",ahSoc0_est,ekfSoc0_est,socd_pct_estSoc);
+	
     //======================================================================
     ////////////////////////UtrackSOC//////////////////////////////////////////
     //======================================================================
@@ -454,8 +457,7 @@ void SOC(void)
         chrgCntl = (chrgCntl + 1) > 250 ? 250 : (chrgCntl + 1);
         lowCntl = 0;
         lowFlg = false;
-		//socd_V_chrgCCV = look1_iu16lu16n16tu16_binlcase(socc_pct_chrgCor, (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])), 12U) + sfmd_I_curr * (look1_iu16lu16n16tu16_binlcase(socc_pct_chrgCor, (&(cmnm_pct_soc[0])), (&(cmnm_R_ohm[0])), 12U) + cdmv_ohm_deltR[sfmd_idx_cellUMax]) * 0.001 * 0.1;
-		socd_V_chrgCCV = look1_is16lu16n16tu16_binlcase(sfmd_I_curr,&socm_I_chrgCor[0],&socm_V_chrgCor[0],2U); 
+	    socd_V_chrgCCV = look1_is16lu16n16tu16_binlcase(sfmd_I_curr,&socm_I_chrgCor[0],&socm_V_chrgCor[0],2U); 
 		if (sfmd_V_cellUMax >= socd_V_chrgCCV)
         {
             overCntl = (overCntl + 1) > 250 ? 250 : (overCntl + 1);
@@ -515,7 +517,7 @@ void SOC(void)
             socn_pct_utrackSoc = socn_pct_utrackSoc > (socc_pct_battSocUp - 1) ? (socc_pct_battSocUp - 1) : socn_pct_utrackSoc;
         }
         
-        //printf("7----overCntl:%d,overFlg:%d,fulCntl:%d,fulFlg:%d,ahSoc0_utrckOver:%d,estSoc0_utrckOver:%d,socn_pct_utrackSoc:%d,socTemp:%d\n",overCntl,overFlg,fulCntl,fulFlg,ahSoc0_utrckOver,estSoc0_utrckOver,socn_pct_utrackSoc,socTemp);
+       // printf("7----overCntl:%d,overFlg:%d,fulCntl:%d,fulFlg:%d,ahSoc0_utrckOver:%d,estSoc0_utrckOver:%d,socn_pct_utrackSoc:%d,socTemp:%d\n",overCntl,overFlg,fulCntl,fulFlg,ahSoc0_utrckOver,estSoc0_utrckOver,socn_pct_utrackSoc,socTemp);
     }
     else
     {
@@ -526,7 +528,15 @@ void SOC(void)
         overFlg = false;
         fulFlg = false;
         fulCntl = 0;
-		socd_V_disChrgCCV = look1_is16lu16n16tu16_binlcase(sfmd_I_curr,&socm_I_disChrgCor[0],&socm_V_disChrgCor[0],2U) + sfmd_I_curr * (cdmv_ohm_deltR[sfmd_idx_cellUMin]) * 0.001 * 0.1;
+		if (!cdmd_flg_deltOCVDisable)
+		{
+		    socd_V_disChrgCCV = look1_is16lu16n16tu16_binlcase(sfmd_I_curr,&socm_I_disChrgCor[0],&socm_V_disChrgCor[0],2U) + sfmd_I_curr * (cdmv_ohm_deltR[sfmd_idx_cellUMin]) * 0.001 * 0.1;
+		}
+		else
+		{
+		     socd_V_disChrgCCV = look1_is16lu16n16tu16_binlcase(sfmd_I_curr,&socm_I_disChrgCor[0],&socm_V_disChrgCor[0],2U);
+		}
+		
         if (sfmd_V_cellUMin <= socd_V_disChrgCCV)
         {
             lowCntl = (lowCntl + 1) > 250 ? 250 : (lowCntl + 1);
@@ -559,25 +569,14 @@ void SOC(void)
         {
             socn_pct_utrackSoc = socd_pct_estSoc;
         }
-        // printf("8----lowCntl:%d,lowFlg:%d,ahSoc0_utrckLow:%d,estSoc0_utrckLow:%d,socn_pct_utrackSoc:%d\n",lowCntl,lowFlg,ahSoc0_utrckLow,estSoc0_utrckLow,socn_pct_utrackSoc);
+       //  printf("8----lowCntl:%d,lowFlg:%d,ahSoc0_utrckLow:%d,estSoc0_utrckLow:%d,socn_pct_utrackSoc:%d\n",lowCntl,lowFlg,ahSoc0_utrckLow,estSoc0_utrckLow,socn_pct_utrackSoc);
     }
-	//===================================================================
-    //------------------EEsave
-    //==================================================================
     socd_pct_battSoc = socn_pct_utrackSoc;
     socd_pct_battSocEo = socn_pct_utrackSoc;
-    if ((int16_T)(socd_pct_battSoc - socd_pct_battSoc_Delay) > 10 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_Delay) < -10)
-    {
-        socd_flg_EEsave = 1;
-        socd_pct_battSoc_Delay = socd_pct_battSoc;
-    }
-    else
-    {
-        socd_flg_EEsave = 0;
-    }
+
     
     //===============================================================================================================================================================
-    ////////////////////////////////////////////////////////////////////BCUSOC///////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////BCUSOC///////////////////////////////////////////////////////////////////////////////////////////////////////////
     //===============================================================================================================================================================
     
     if (sfmd_I_curr < 10 && sfmd_I_curr > -10)
@@ -590,10 +589,10 @@ void SOC(void)
     }
     statFlg = statCntl > 2;
     
-    Flg = (FirstRun_SOC || (ihd_st_chrgSta_Delay == 2 && ihd_st_workStat != 2) || (ihd_st_chrgSta_Delay != 2 && ihd_st_workStat == 2) || ((int16_T)(socn_pct_utrackSoc - socn_pct_utrackSoc_Delay) > 20 || (int16_T)(socn_pct_utrackSoc - socn_pct_utrackSoc_Delay) < -20) || statFlg);
+    Flg = (FirstRun_SOC || (ihd_st_chrgSta_Delay == 2 && ihd_st_workStat != 2) || (ihd_st_chrgSta_Delay != 2 && ihd_st_workStat == 2) || ((int16_T)(socd_pct_battSoc  - socd_pct_battSoc_Delay) > 20 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_Delay) < -20) || statFlg);
     
     ihd_st_chrgSta_Delay = ihd_st_workStat;
-    socn_pct_utrackSoc_Delay = socn_pct_utrackSoc;
+    socd_pct_battSoc_Delay = socd_pct_battSoc;
     
     //
     if (Flg)
@@ -643,7 +642,7 @@ void SOC(void)
         {
             socd_pct_bcuSoc = socd_pct_bcuSoc > (socc_pct_battSocUp - 1) ? (socc_pct_battSocUp - 1) : socd_pct_bcuSoc;
         }
-        //printf("10-----x:[%d-%d-%d],y:[%d-%d-%d],bcusoc:%d,socd_pct_bcuSoc:%d\n",x[0],x[1],x[2],y[0],y[1],y[2],bcuSoc,socd_pct_bcuSoc);
+       // printf("10-----x:[%d-%d-%d],y:[%d-%d-%d],bcusoc:%d,socd_pct_bcuSoc:%d\n",x[0],x[1],x[2],y[0],y[1],y[2],bcuSoc,socd_pct_bcuSoc);
     }
     else
     {
@@ -668,12 +667,29 @@ void SOC(void)
         }
         
         socd_pct_bcuSoc = SOCfitSystem(bcuSoc, &socd_pct_bcuSoc, 1);
-        //printf("11-----x:[%d-%d-%d],y:[%d-%d-%d],bcusoc:%d,socd_pct_bcuSoc:%d\n",x[0],x[1],x[2],y[0],y[1],y[2],bcuSoc,socd_pct_bcuSoc);
+       // printf("11-----x:[%d-%d-%d],y:[%d-%d-%d],bcusoc:%d,socd_pct_bcuSoc:%d\n",x[0],x[1],x[2],y[0],y[1],y[2],bcuSoc,socd_pct_bcuSoc);
     }
     //
     socd_pct_bcuSocEo = socd_pct_bcuSoc;
+
+
+    //===================================================================
+    //------------------EEsave
+    //==================================================================
+
+    if ((int16_T)(socd_pct_battSoc - socd_pct_battSoc_save) > 10 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_save) < -10 || (int16_T)(socd_pct_bcuSoc - socd_pct_bcuSoc_save) > 10 || (int16_T)(socd_pct_bcuSoc - socd_pct_bcuSoc_save) < -10 )
+    {
+        socd_flg_EEsave = 1;
+        socd_pct_battSoc_save = socd_pct_battSoc;
+	    socd_pct_bcuSoc_save  = socd_pct_bcuSoc;
+    }
+    else
+    {
+        socd_flg_EEsave = 0;
+    }
+
+	
     FirstRun_SOC = false;
-    //printf("\n");
 }
 
 //-------------------------------------------------------------------------