Bläddra i källkod

fix:助力和踏频变量不清除bug

guohui27 1 år sedan
förälder
incheckning
0b619d5f81

+ 31 - 23
User project/3.BasicFunction/Source/AssistCurve.c

@@ -55,6 +55,9 @@ MAF_IN ass_stUqLimMafValue = {0, 64, 0, 0, ass_swUqLimMafBuf, 0, FALSE};
 static TOR2CURRENT_CAL_COEF ass_Tor2CurCalCoef;
 static UWORD StartUpGainArray[5] = START_GAIN_DEFAULT;
 static UWORD LinerAssist[5] = ASS_LINER_TORQUE_DEFAULT;
+static SWORD ass_pvt_swVoltCnt=0;
+static UWORD ass_pvt_uwTorqAccCnt=0,ass_pvt_uwTorqDecCnt=0,ass_pvt_uwSpd2TorqCnt=0;
+static UWORD AssCnt1ms; 
 /******************************
  *
  *  Function
@@ -230,6 +233,13 @@ void ass_voAssitEEInit(void)
     ass_stParaSet.uwSpdRegionGain[0] = 4094;
     ass_stParaSet.uwSpdRegionGain[1] = 4094;
     ass_stParaSet.uwSpdRegionGain[2] = 4094;
+    
+    /* 函数私有变量初始化 */
+    ass_pvt_swVoltCnt = 0;
+    ass_pvt_uwTorqAccCnt = 0;
+    ass_pvt_uwTorqDecCnt = 0;
+    ass_pvt_uwSpd2TorqCnt = 0;
+    AssCnt1ms = 0; 
 }
 
 /**
@@ -448,18 +458,15 @@ void ass_voAssitCoef(void)
 //    out->swIRefPu = out->slIRefPu >> 15; // Q29-Q15=Q14
 //    out->swErrZ1Pu = (SWORD)slErrPu;
 //}
-
-static SWORD ass_pvt_swVoltCnt=0;
-static UWORD ass_pvt_uwTorqAccCnt=0,ass_pvt_uwTorqDecCnt=0,ass_pvt_uwSpd2TorqCnt=0;
-UWORD AssCnt1ms; 
-static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目圈复杂度无法更改,后续避免" */
-{  
     SLONG slTeTorAssitTmpPu,slTeTorAssitLinerPu,slTeCadAssitTmpPu;
     SWORD swTeTorAssitPu1, swTeTorAssitPu2;
     SWORD swTeCadAssitPu1, swTeCadAssitPu2;
     SWORD swTmpSpdtoTorqCur;   
     SLONG slTmpSmoothCur;
     SWORD swTorqCmd1, swTorqCmd, swCadCmd;
+static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目圈复杂度无法更改,后续避免" */
+{  
+
     UWORD uwTorqAccStep = 50,uwTorqDecStep = 80;
     SWORD swCurSwitch = 0;
     SWORD swTmpVoltPu,swTmpVoltPu2;
@@ -579,7 +586,7 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
             ass_stCalCoef.swSmoothGain = Q12_1;
         }
          
-        swSpdKpPu = 2000;  //ass_stParaSet.uwStartUpCadNm;
+        swSpdKpPu = 1000;  //ass_stParaSet.uwStartUpCadNm;
         slSpdErr = (SLONG)ass_stCalOut.swCadSpd2MotSpd - (SLONG)ass_stCalIn.uwSpdFbkAbsPu;
         if(slSpdErr < 0)
         {
@@ -604,23 +611,23 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
             }          
             ass_stCalOut.swVoltLimitPu = (SWORD)slTmpVoltLim;
             
-//            if(slSpdErr <= 1000)
-//            {
-//                ass_stCalCoef.StartFlag = 1;
-//            }  
-            if(ABS(scm_swIqRefPu- scm_swIqFdbLpfPu) > 200)
-            {
-                ass_pvt_swVoltCnt++;  
-            }    
-            else
-            {
-                ass_pvt_swVoltCnt=0;
-            }
-            if(ass_pvt_swVoltCnt > 10)
+            if(slSpdErr <= 1000)
             {
-                ass_pvt_swVoltCnt=0;
                 ass_stCalCoef.StartFlag = 1;
-            }      
+            }  
+//            if(ABS(scm_swIqRefPu- scm_swIqFdbLpfPu) > 200)
+//            {
+//                ass_pvt_swVoltCnt++;  
+//            }    
+//            else
+//            {
+//                ass_pvt_swVoltCnt=0;
+//            }
+//            if(ass_pvt_swVoltCnt > 10)
+//            {
+//                ass_pvt_swVoltCnt=0;
+//                ass_stCalCoef.StartFlag = 1;
+//            }      
         }
         else if(ass_stCalCoef.StartFlag ==1 )
         {
@@ -684,8 +691,9 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
             
             if(ass_stCalCoef.swAss2SpdCNT > uwTmpStopCnt)
             {
+                Ass_FSM = ReduceCurrent;  
                 ass_stCalCoef.swAss2SpdCNT = 0;
-                Ass_FSM = ReduceCurrent;
+                ass_stCalCoef.StartFlag=0;
             } 
         }
         else

+ 2 - 0
User project/3.BasicFunction/Source/Cadence.c

@@ -172,6 +172,7 @@ static void cadence_voCadenceHighFrequencyWork(UWORD source)
         cadence_stFreGetOut.cadence_dir = CADENCE_DIR_ERROR;
         cadence_stFreGetOut.cadence_fsm = CADENCE_ERROR;
         cadence_stFreGetOut.uwFreqPercent = 0;
+        cad_pvt_ulCadFreqPu = 0;
     }
     else if (cadence_stFreGetOut.uwCaputureOverflowCnt > cadence_stFreGetCof.uwHfMaxTimeCnt)
     {
@@ -186,6 +187,7 @@ static void cadence_voCadenceHighFrequencyWork(UWORD source)
         cadence_stFreGetOut.cadence_dir = CADENCE_DIR_IDLE;
         cadence_stFreGetOut.cadence_fsm = CADENCE_IDLE;
         cadence_stFreGetOut.uwFreqPercent = 0;
+        cad_pvt_ulCadFreqPu = 0;
     }
     else 
     {

+ 23 - 21
User project/3.BasicFunction/Source/spi_master.c

@@ -335,9 +335,11 @@ void spi_voResolverLock(void)
 *************************************************************************/
 void spi_voReadWriteSeneorReg(void) /* parasoft-suppress METRICS-28 "本项目圈复杂度无法更改,后续避免" */
 {
+    UWORD BCTValue = 0x30;
+    
     UWORD uwReadBCTReg = 0, uwReadETXY = 0;
     UWORD uwWriteBCTReg = 0, uwWriteETXY = 0, uwWriteRD = 0;
-    UWORD SPI_DelayCnt1 = 0, SPI_DelayCnt2 = 0;
+    UWORD uwDelayCnt1 = 0, uwDelayCnt2 = 0;
 
     /* Read the BCT register value */
     iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_LowLevel); /*!< CS signal enable,for data update */
@@ -382,7 +384,7 @@ void spi_voReadWriteSeneorReg(void) /* parasoft-suppress METRICS-28 "本项目
     while (spi_i2s_flag_get(SPI2, SPI_FLAG_RBNE) != SET)
     {}
     uwReadETXY = spi_i2s_data_receive(SPI2); /*!< Read the ETX ETY value */
-    if (uwReadBCTReg == 0x3000 && uwReadETXY == 0x0100)
+    if (uwReadBCTReg == (BCTValue << 8) && uwReadETXY == 0x0100)
     {
         spi_blReadRegCorrectFlg = TRUE;
     }
@@ -399,19 +401,19 @@ void spi_voReadWriteSeneorReg(void) /* parasoft-suppress METRICS-28 "本项目
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_LowLevel);   // Data update
         while (spi_i2s_flag_get(SPI2, SPI_FLAG_TBE) != SET)// Discontinuous transmission, can not indicate send complete
         {}
-        spi_i2s_data_transmit(SPI2, 0x8230); // LSB,BCT=48
+        spi_i2s_data_transmit(SPI2, (0x8200 | BCTValue)); // LSB,BCT=48
         while (spi_i2s_flag_get(SPI2, SPI_FLAG_RBNE) != SET)
         {}
         uwWriteBCTReg = spi_i2s_data_receive(SPI2);       
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_HighLevel);
         /* Delay at least 22ms */
-        while (SPI_DelayCnt2 < 20)
+        while (uwDelayCnt2 < 20)
         {
-            SPI_DelayCnt1++;
-            if (SPI_DelayCnt1 == 10000)
+            uwDelayCnt1++;
+            if (uwDelayCnt1 == 10000)
             {
-                SPI_DelayCnt2++;
-                SPI_DelayCnt1 = 0;
+                uwDelayCnt2++;
+                uwDelayCnt1 = 0;
             }
         }
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_LowLevel);
@@ -432,14 +434,14 @@ void spi_voReadWriteSeneorReg(void) /* parasoft-suppress METRICS-28 "本项目
         uwWriteETXY = spi_i2s_data_receive(SPI2);
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_HighLevel);
         /* Delay at least 22ms */
-        SPI_DelayCnt2 = 0;
-        while (SPI_DelayCnt2 < 20)
+        uwDelayCnt2 = 0;
+        while (uwDelayCnt2 < 20)
         {
-            SPI_DelayCnt1++;
-            if (SPI_DelayCnt1 == 10000)
+            uwDelayCnt1++;
+            if (uwDelayCnt1 == 10000)
             {
-                SPI_DelayCnt2++;
-                SPI_DelayCnt1 = 0;
+                uwDelayCnt2++;
+                uwDelayCnt1 = 0;
             }
         }
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_LowLevel);
@@ -461,14 +463,14 @@ void spi_voReadWriteSeneorReg(void) /* parasoft-suppress METRICS-28 "本项目
         uwWriteRD = spi_i2s_data_receive(SPI2);
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_HighLevel);
         /* Delay at least 22ms */
-        SPI_DelayCnt2 = 0;
-        while (SPI_DelayCnt2 < 20)
+        uwDelayCnt2 = 0;
+        while (uwDelayCnt2 < 20)
         {
-            SPI_DelayCnt1++;
-            if (SPI_DelayCnt1 == 10000)
+            uwDelayCnt1++;
+            if (uwDelayCnt1 == 10000)
             {
-                SPI_DelayCnt2++;
-                SPI_DelayCnt1 = 0;
+                uwDelayCnt2++;
+                uwDelayCnt1 = 0;
             }
         }
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_LowLevel);
@@ -480,7 +482,7 @@ void spi_voReadWriteSeneorReg(void) /* parasoft-suppress METRICS-28 "本项目
         uwWriteRD = spi_i2s_data_receive(SPI2);
         iGpio_Write(HW_GPIO_SPICS_PIN,ApiGpio_HighLevel);
         
-        if (uwWriteBCTReg == 0x3000 && uwWriteETXY == 0x0100 && uwWriteRD == 0x8000) // MSB
+        if (uwWriteBCTReg == (BCTValue << 8) && uwWriteETXY == 0x0100 && uwWriteRD == 0x8000) // MSB
         {
             spi_blWriteRegFinishFlg = TRUE; // Need stored in EEPROM
         }

+ 1 - 1
User project/4.BasicHardwSoftwLayer/1.BasicHardwLayer/Source/hwsetup.c

@@ -25,7 +25,7 @@
 *************************************************************************/
 #include "hwsetup.h"
 #include "syspar.h"
-//#include "user.h"
+#include "user.h"
 #include "can.h"
 #include "api_rt.h"
 /************************************************************************

+ 1 - 1
User project/4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Source/CodePara.c

@@ -41,7 +41,7 @@ void CodeParaInit(void)
     UWORD i;
 #if ((MOTOR_ID_SEL == MOTOR_WELLING_CITY_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_CITY_48V))
 {
-    cp_stFlg.RunModelSelect = ClZLOOP; //CityBIKE;//ClZLOOP; 
+    cp_stFlg.RunModelSelect = CityBIKE; //CityBIKE;//ClZLOOP; 
     cp_stFlg.RotateDirectionSelect = ForwardRotate;
 }
 #elif ((MOTOR_ID_SEL == MOTOR_WELLING_MTB_36V) || (MOTOR_ID_SEL == MOTOR_WELLING_MTB_48V))