LAPTOP-EG88H5BE\86151 3 anni fa
parent
commit
97146b9ed7

+ 1 - 0
ARMCC/Makefile

@@ -35,6 +35,7 @@ obj-y             += PLAT/project/$(TARGET)/apps/qx_app/src/app.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/CM.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/CDM.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/ISC.o \
+						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/SOE.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/look1_is16lu16n16tu16_binlcase.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/look1_iu16lu16n16tu16_binlcase.o \
 						PLAT/project/$(TARGET)/apps/qx_app/src/EmbeddedCoder_src/BCUCal.o \

+ 6 - 0
inc/EmbeddedCoder_inc/BCUDisp.h

@@ -116,6 +116,12 @@ extern uint16_T sohv_Q_packCapArrEo[10];                 /*10次整包容量(
 extern uint16_T sohv_V_chrgStartStatEi[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)读取量; */
 extern uint16_T sohv_V_chrgStartStatEo[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)写入量; */
 
+extern uint16_T soed_E_nowEng;
+extern uint16_T soed_pct_nowStat;
+extern uint16_T soed_E_fullEng;
+
+
+
 extern boolean_T iscd_flg_flt;
 extern uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];
 extern uint32_T iscd_tm_totalEi;

+ 8 - 0
inc/EmbeddedCoder_inc/SOE.h

@@ -0,0 +1,8 @@
+#include "BCUCal.h"
+#include "BCUDisp.h"
+
+
+extern boolean_T FirstRun_SOE;
+extern void SOE_Init(void);
+extern void SOE(void);
+

+ 5 - 0
src/EmbeddedCoder_src/BCUDisp.c

@@ -117,6 +117,11 @@ uint16_T sohv_Q_packCapArrEo[10];                 /*10次整包容量(数组
 uint16_T sohv_V_chrgStartStatEi[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)读取量; */
 uint16_T sohv_V_chrgStartStatEo[cmnc_num_cellUNumMax];              /*充电开始时刻的单体电压(数组)写入量; */
 
+uint16_T soed_E_nowEng;
+uint16_T soed_pct_nowStat;
+uint16_T soed_E_fullEng;
+
+
 boolean_T iscd_flg_flt;
 uint16_T iscv_Q_remainCpEi[cmnc_num_cellUNumMax];
 uint32_T iscd_tm_totalEi;

+ 3 - 3
src/EmbeddedCoder_src/ISC.c

@@ -165,9 +165,9 @@ void ISC(void)
 	printf("a-%d,%d,%d\n",iscn_Q_cellAh[0],iscn_Q_cellAh[1],iscn_Q_cellAh[2]);
     printf("a-%d,%d,%d\n",iscn_Q_cellAh0[0],iscn_Q_cellAh0[1],iscn_Q_cellAh0[2]);
 	for(i=0;i<3;i++)
-		{
-	 printf("%f    ",(real_T)(ArrMean(&iscn_Q_deltAh[0],cmnc_num_cellUNum) -  iscn_Q_deltAh[i]) * 0.01/(TimeCtn - 60) * 3600);
-		}
+	{
+	    printf("%f    ",(real_T)(ArrMean(&iscn_Q_deltAh[0],cmnc_num_cellUNum) -  iscn_Q_deltAh[i]) * 0.01/(TimeCtn - 60) * 3600);
+	}
     printf("\nTimeCtn:%d\n\n",TimeCtn);
     */
 	FirstRun_ISC = false;

+ 26 - 17
src/EmbeddedCoder_src/SOC.c

@@ -9,17 +9,19 @@ void SOC_Init(void)
 {
     FirstRun_SOC = true;
 }
-//-------------------------------------------------------------------------
 
+
+//-------------------------------------------------------------------------
+//---------------------------SOC-------------------------------------------
+//-------------------------------------------------------------------------
 void SOC(void)
 {
     static uint16_T socn_pct_battSocEE;
     static uint16_T socn_pct_bcuSocEE;
     static uint16_T socn_Q_cap;
     //
-    uint16_T EKFSOCMin;
-    uint16_T EKFSOCMax;
-    uint16_T EKFSOCAvrg;
+    real_T Q;
+    real_T battcurr;
     boolean_T socn_flg_ekfInvalidMin;
     boolean_T socn_flg_ekfInvalidMax;
     boolean_T socn_flg_ekfInvalidAvrg;
@@ -29,6 +31,7 @@ void SOC(void)
     real_T Rp;
     real_T C;
     real_T deltU;
+	real_T UL;
     real_T A[4];
     real_T B[2];
     real_T H[2];
@@ -45,21 +48,22 @@ void SOC(void)
     static real_T Up_Min_Delay;
     static real_T Up_Max_Delay;
     static real_T Up_Avrg_Delay;
+	uint16_T EKFSOCMin;
+    uint16_T EKFSOCMax;
+	
+    uint16_T EKFSOCAvrg;
 	uint16_T cellSocMax;
     uint16_T cellSocMin;
-    real_T Q;
-    real_T battcurr;
-    real_T UL;
     uint16_T factor;
     //
     static real_T ahDelay;
     int16_T ahSoc;
     //
-    static uint16_T ekfInvalidCntl;
+    static uint16_T  ekfInvalidCntl;
     static boolean_T onceFlg_est;
-    static int16_T ahSoc0_est;
-    static uint16_T ekfSoc0_est;
-    //
+    static int16_T   ahSoc0_est;
+    static uint16_T  ekfSoc0_est;
+    // 
     uint16_T socd_V_chrgCCV;
 	uint16_T socd_V_disChrgCCV;
     static boolean_T overFlg;
@@ -67,8 +71,8 @@ void SOC(void)
     static uint8_T overCntl;
     static uint8_T fulCntl;
     static boolean_T onceFlg_utrckOver;
-    static int16_T ahSoc0_utrckOver;
-    static uint16_T estSoc0_utrckOver;
+    static int16_T   ahSoc0_utrckOver;
+    static uint16_T  estSoc0_utrckOver;
     static uint16_T Soc_Delay;
     static boolean_T lowFlg;
     static uint8_T lowCntl;
@@ -89,7 +93,7 @@ void SOC(void)
     static uint16_T socd_pct_bcuSoc0;
     uint16_T delSOC;
     uint16_T bcuSoc;
-    int16_T coinSoc;
+    int16_T  coinSoc;
     uint16_T x[3];
     uint16_T y[3];
     boolean_T Flg;
@@ -556,7 +560,7 @@ void SOC(void)
             {
                 onceFlg_utrckLow = false;
                 ahSoc0_utrckLow = ahSoc;
-                estSoc0_utrckLow = socd_pct_estSoc < socc_pct_disChrgCor ? socd_pct_estSoc : socc_pct_disChrgCor;
+                estSoc0_utrckLow = socc_pct_disChrgCor;
             }
             socn_pct_utrackSoc = (int16_T)(ahSoc - ahSoc0_utrckLow + estSoc0_utrckLow) > 0 ? (uint16_T)(ahSoc - ahSoc0_utrckLow + estSoc0_utrckLow) : 0;
         }
@@ -589,7 +593,7 @@ 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)(socd_pct_battSoc  - socd_pct_battSoc_Delay) > 20 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_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) > 10 || (int16_T)(socd_pct_battSoc - socd_pct_battSoc_Delay) < -10) || statFlg);
     
     ihd_st_chrgSta_Delay = ihd_st_workStat;
     socd_pct_battSoc_Delay = socd_pct_battSoc;
@@ -689,6 +693,9 @@ void SOC(void)
 	
     FirstRun_SOC = false;
 }
+
+
+
 //===================================================================================================================
 //----------------------------function-------------------------------------------------------------------------------
 //===================================================================================================================
@@ -705,6 +712,7 @@ real_T docvmath(real_T soc)
             0.02732;
     return docv;
 }
+
 ////
 uint16_T SOC_LookUp(uint16_T battsoc, uint16_T x[3], uint16_T y[3])
 {
@@ -731,8 +739,8 @@ uint16_T SOC_LookUp(uint16_T battsoc, uint16_T x[3], uint16_T y[3])
     }
     return bcusoc;
 }
-//-------------------------------------------------------------------------
 
+//-------------------------------------------------------------------------
 uint16_T SOCfitSystem(uint16_T SOC, uint16_T *SOCfit, uint16_T m)
 {
     int16_T socdelt;
@@ -752,3 +760,4 @@ uint16_T SOCfitSystem(uint16_T SOC, uint16_T *SOCfit, uint16_T m)
     
     return *SOCfit;
 }
+

+ 45 - 0
src/EmbeddedCoder_src/SOE.c

@@ -0,0 +1,45 @@
+#include "SOE.h"
+#include "look1_iu16lu16n16tu16_binlcase.h"
+
+boolean_T FirstRun_SOE;
+
+void SOE_Init(void)
+{
+    FirstRun_SOE = true;
+}
+//-------------------------------------------------------------------------
+void SOE(void)
+{
+    uint32_T soen_V_battOcv;
+    uint16_T i;
+
+	
+	// 满电能量
+    if(FirstRun_SOE)
+    {
+        soen_V_battOcv = 0;
+        for(i = socc_pct_battSocUp ;i >= socc_pct_battSocLow + 1;i--)
+        {
+            soen_V_battOcv = soen_V_battOcv + look1_iu16lu16n16tu16_binlcase(i, (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])), 12U) * cmnc_num_cellUNum;
+        }
+        soed_E_fullEng = (uint16_T) ( (real_T)(soen_V_battOcv * 0.001) * (real_T)(cmnc_Q_ratedCp * 0.1) * (real_T)(sohd_pct_bcuSoh * 0.1 * 0.01)/1000);
+    }
+	//当前SOC的剩余能量
+    if(socd_pct_battSoc > socc_pct_battSocLow)
+    {
+        soen_V_battOcv = 0;
+        for(i = socd_pct_battSoc;i >= socc_pct_battSocLow + 1;i--)
+        {
+            soen_V_battOcv = soen_V_battOcv + look1_iu16lu16n16tu16_binlcase(i, (&(cmnm_pct_soc[0])), (&(cmnm_V_ocv[0])), 12U) * cmnc_num_cellUNum;
+        }
+        soed_E_nowEng = (uint16_T) ( (real_T)(soen_V_battOcv * 0.001) * (real_T)(cmnc_Q_ratedCp * 0.1) * (real_T)(sohd_pct_bcuSoh * 0.1 * 0.01) /1000);
+    }
+    else
+    {
+        soed_E_nowEng = 0;
+    }
+    soed_pct_nowStat = (uint16_T)((uint32_T)(soed_E_nowEng * 1000)/soed_E_fullEng);
+    FirstRun_SOE = false;   
+}
+
+

+ 3 - 1
src/EmbeddedCoder_src/SPM.c

@@ -6,8 +6,9 @@ void SPM_Init(void)
 {
   SOH_Init();
   BLC_Init();
-  SOC_Init();
   CDM_Init();
+  SOC_Init();
+  SOE_Init();
   FirstRun_SPM = true;
 }
 
@@ -40,6 +41,7 @@ void SPM(void)
   {
       CDM();
 	  SOC();
+	  SOE();
   }
   // 循环发送数组
   cand_Q_cellCap = sohv_Q_cellCapArrEo[cand_Nr_cellNr-1];