Procházet zdrojové kódy

读写Flash、i2c前关闭中断;助力参数与ST保持一致;0x1020的ODO改为TorqueAD;48V电流校正系数由7500改为10355;

Ye Jin před 1 rokem
rodič
revize
d31adbdb1e

+ 5 - 5
User project/1.FrameLayer/Source/TimeTask_Event.c

@@ -430,6 +430,11 @@ void  Event_200ms(void)
     /* Upper Computer Info Update */
     Can_voMC_Run_200ms();
     
+    if (switch_flg.SysFault_Flag == TRUE)
+    {
+        SendData(ID_MC_BC, MODE_REPORT, 0x1104, (uint8_t *)&MC_ErrorCode.Code);
+    }
+    
     if(switch_flg.SysCoef_Flag == TRUE)
     {
         /* Bike Sesor Suply Voltage Fault Detect */
@@ -454,11 +459,6 @@ void  Event_200ms(void)
             alm_stBikeIn.blMotorNTCExistFlg = FALSE;
             alm_voDetec200MS(&alm_stBikeIn, &alm_stDetect200MSCoef);   
         }
-        
-        if (switch_flg.SysFault_Flag == TRUE)
-        {
-            SendData(ID_MC_BC, MODE_REPORT, 0x1104, (uint8_t *)&MC_ErrorCode.Code);
-        }
     }
 }
 

+ 6 - 0
User project/1.FrameLayer/Source/app.c

@@ -78,6 +78,7 @@ void AppInit()
     if(cp_stFlg.ParaFirstSetFlg == 0)
     {
         flash_voParaInit();
+        flash_voErrorClear();
         /* Parameter Default Value Write*/ 
         i2c_voDefaultWriteBuffer();
         i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
@@ -130,10 +131,15 @@ void AppLoop()
         MC_UpcInfo.stMContorlInfo.uwSaveFlg = 1;
         cp_stFlg.SpiOffsetFirstSetFlg = 1;
         mn_voEEUperParaUpdate();
+        
+        DISABLE_IRQ;
+        
         /* Parameter real value write*/ 
         i2c_voParaWriteBuffer();
         i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
         MC_UpcInfo.stMContorlInfo.uwSaveFlg = 0;
+        
+        ENABLE_IRQ;
     }
 
     if (cp_stFlg.ParaUpdateFlg == TRUE)

+ 10 - 10
User project/3.BasicFunction/Include/AssistCurve.h

@@ -95,17 +95,17 @@
       0, 0, 2048, 137,\
       0, 0, 2458, 137,\
       0, 0, 2867, 137, \
-      0, 7004, 409, 273,\
-      0, 9216, 409, 273,\
-      0, 12165, 409, 273,\
-      3318, 15852, 0, 137,\
-      9953, 21012, 0, 137, \
-      36495, 22855, 0, 137,\
-      66355, 29491, 0, 137,\
-      132710, 29491, 0, 137,\
+      0, 7004, 410, 273,\
+      0, 8663, 410, 273,\
+      0, 10506, 410, 273,\
+      9953, 16957, 0, 273,\
+      16589, 21012, 0, 273, \
+      36495, 22856, 0, 273,\
+      82944, 29491, 0, 137,\
+      149299, 29491, 0, 137,\
       232243, 29491, 0, 137, \
-      66355, 29491, 0, -683,\
-      132710, 29491, 0, -683,\
+      82944, 29491, 0, -683,\
+      149299, 29491, 0, -683,\
       232243, 29491, 0, -683, \
     }
 #define CADENCE_ASSIST_DEFAULT                                                       \

+ 1 - 1
User project/3.BasicFunction/Include/canAppl.h

@@ -79,7 +79,7 @@ typedef struct
     UBYTE                 SOC;            ///>剩余电量 1%,地址偏移15
     UWORD                RemainDistance; ///>续航里程 1km,地址偏移16
                                             //	UBYTE RS1[2];
-    UWORD ODO_Km;                        ///>总里程 1km,地址偏移18
+    UWORD TorqueReg;                        ///>力矩传感器AD值,地址偏移18
     UBYTE  PowerPerKm;                    ///>平均功耗 0.01Ah/km ,地址偏移20
     UBYTE  T_PCB;                         ///>PCB温度 +40℃,地址偏移21
     UBYTE  T_Coil;                        ///>绕组温度 +40℃,地址偏移22

+ 2 - 2
User project/3.BasicFunction/Source/AssistCurve.c

@@ -276,7 +276,7 @@ void ass_voAssitCoef(void)
     asr_voSpdPICoef(&asr_stTorqSpdPICoefIn, &asr_stTorqSpdPICoef);
     /*电流限幅计算*/
     ass_stCurLimCalBMSCoef.uwIqLimitInitAbs = ass_stParaCong.uwCofCurMaxPu; // Q14
-    ass_stCurLimCalBMSCoef.uwIqLimitStartSoc = 35;
+    ass_stCurLimCalBMSCoef.uwIqLimitStartSoc = 20;
     ass_stCurLimCalBMSCoef.uwIqLimitEndSoc = 0;
     ass_stCurLimCalBMSCoef.swIqLImitK =
     		(SWORD)ass_stCurLimCalBMSCoef.uwIqLimitInitAbs / ((SWORD)ass_stCurLimCalBMSCoef.uwIqLimitStartSoc - (SWORD)ass_stCurLimCalBMSCoef.uwIqLimitEndSoc);
@@ -346,7 +346,7 @@ void ass_voAssitCoef(void)
     ass_stCurLimCoef.uwLimitGain[0] = 0; // Q10 percentage of max Current
     ass_stCurLimCoef.uwLimitGain[1] = 400;
     ass_stCurLimCoef.uwLimitGain[2] = 682;
-    ass_stCurLimCoef.uwLimitGain[3] = 810;
+    ass_stCurLimCoef.uwLimitGain[3] = 910;
     ass_stCurLimCoef.uwLimitGain[4] = 1024;
     ass_stCurLimCoef.uwLimitGain[5] = 1024;
     ass_stCurLimCoef.uwSpdThresHold = 21845;

+ 12 - 4
User project/3.BasicFunction/Source/can.c

@@ -678,10 +678,11 @@ void DataProcess(UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE Data[]) /* parasoft-supp
         {
             if (strncmp("CLEAR", (char *)Data, DataLength) == 0)
             {
+                DISABLE_IRQ;
+                
                 flash_voParaInit();
                 flash_voErrorClear();
-
-                DISABLE_IRQ;
+                
                 /* Parameter default value write*/ 
                 i2c_voDefaultWriteBuffer();
                 i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
@@ -705,13 +706,17 @@ void DataProcess(UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE Data[]) /* parasoft-supp
         {
             if (strncmp("RECOVERY", (char *)Data, DataLength) == 0)
             {
-                flash_voParaInit();
                 DISABLE_IRQ;
+                
+                flash_voParaInit();
+                
                 /* Parameter default value write*/ 
                 i2c_voDefaultWriteBuffer();
                 i2c_voInfoWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
                 cp_stFlg.ParaSaveEEFlg = FALSE;
+                
                 ENABLE_IRQ;
+                
                 if (I2C_EE_ComuFltFlg != TRUE)
                 {
                     SendData(ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");
@@ -760,13 +765,16 @@ void DataProcess(UWORD ID, UBYTE Mode, UWORD Cmd, UBYTE Data[]) /* parasoft-supp
         {
             if (strncmp("LOG CLEAR", (char *)Data, DataLength) == 0)
             {
+                DISABLE_IRQ;
+                
                 flash_voErrorClear();
                 
-                DISABLE_IRQ;
                 /* History Default Value Write */ 
                 i2c_voHistoryDefaultWriteBuffer();
                 i2c_voHistoryWrite2EE(&i2c_stTXCoef, &i2c_stTXOut);
+                
                 ENABLE_IRQ;
+                
                 if (I2C_EE_ComuFltFlg != TRUE)
                 {
                     SendData(ID_MC_TO_CDL, MODE_REPORT, 0xA903, (UBYTE *)"ACK");

+ 2 - 1
User project/3.BasicFunction/Source/canAppl.c

@@ -548,6 +548,7 @@ void Can_voMC_Run_1ms(void)
             MC_ErrorCode.ERROR_Bit.Fault_TorqueSensor = 0;
         }
     }
+    
     UWORD TempPower;
     if (FSM2nd_Run_state.state == Exit)
     {
@@ -660,7 +661,7 @@ void Can_voMC_Run_200ms(void)
     MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;                                                              //灯开关 0xF0-关,0xF1-开
     MC_RunInfo.SOC = (UBYTE)Can_SOC_Cal();                                                                                   //剩余电量 1%
     Can_Trip_Cal();
-    MC_RunInfo.ODO_Km = (UWORD)(MC_RideLog.ODO_Km / 10);                                                                       //总里程 1km
+    MC_RunInfo.TorqueReg = iAdc_GetResultPointer(0)[HW_ADC_TORQ_CH];;                                                                       //力矩AD值
 
     if (cp_stBikeRunInfoPara.blGearStUpdate)
     {

+ 0 - 6
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/syspar.h

@@ -70,12 +70,6 @@ Update Time
 /*======================================================================*
    ADC Maximum Value
 *=======================================================================*/
-//#if ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V))
-//#define ADC_IPHASE_CUR_MAX_AP  15600 //13400
-//#elif ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V))
-//#define ADC_IPHASE_CUR_MAX_AP  7500 //13400
-//#endif
-
 #define ADC_IDC_CUR_MAX_AP     9524//10476//11640//9524 //10476
 #define ADC_ISENSOR_CUR_MAX_AP 6005
 #define ADC_VDC_MAX_VT         605

+ 3 - 3
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/user.h

@@ -47,7 +47,7 @@ Update Time
 #define MOTOR_WELLING_CITY_48V    0x30
 #define MOTOR_WELLING_MTB_48V     0x31
 
-#define MOTOR_ID_SEL              MOTOR_WELLING_MTB_36V    ///< syspar.h笢珩剒猁恁寁36V/48V炵苀
+#define MOTOR_ID_SEL              MOTOR_WELLING_MTB_36V   
 
 //#define TEST  //only use for testing
 
@@ -58,7 +58,7 @@ Update Time
 #define ADC_IPHASE_CUR_MAX_AP  15600 
 #define ADC_IPHASE_CUR_OVER_K  780   // SWORD��憭抒㩞瘚�/��甅��憭抒㩞瘚�=120A/156A=0.769=787(Q10) 
 #else
-#define ADC_IPHASE_CUR_MAX_AP  7500  
+#define ADC_IPHASE_CUR_MAX_AP  10355  
 #define ADC_IPHASE_CUR_OVER_K  1024
 #endif
   
@@ -328,7 +328,7 @@ Update Time
    Flux observer
 *=======================================================================*/
 #define OBS_SPD_PLL_M            2  // Flux observer m coefficient
-#define OBS_SPD_PLL_BANDWIDTH_HZ 150 // Huawei      // Flux observer PLL bandwidth
+#define OBS_SPD_PLL_BANDWIDTH_HZ 150       // Flux observer PLL bandwidth
 #define OBS_FLUX_PI_DAMPRATIO    10   // unit:0.1, Flux observer PI regulator dampratio
 #define OBS_FLUX_PI_CROSSFREQ_HZ 10   // unit:Hz, Flux observer PI regulator crossfrequency
 

+ 1 - 1
WLMCP_PACKED.ewp

@@ -652,7 +652,7 @@
                 <option>
                     <name>OOCOutputFormat</name>
                     <version>3</version>
-                    <state>3</state>
+                    <state>1</state>
                 </option>
                 <option>
                     <name>OCOutputOverride</name>