ソースを参照

feat:更改启动逻辑

guohui27 1 年間 前
コミット
74f009976f

+ 40 - 18
User project/2.MotorDrive/Source/spdctrmode.c

@@ -35,6 +35,17 @@ Revising History (ECL of this file):
  Constant Table (N/A)
 *************************************************************************/
 
+/************************************************************************
+Private Variables
+*************************************************************************/
+static LPF_OUT swTmpSpdRateLpf;
+static SWORD swTmpSpdRate = 0;
+static SWORD swTmpSpdFbkPuZ1 = 0;
+static SWORD swSpdRateAbsPu;
+static SWORD swTestIqref;
+static UWORD DCPswitch = 0;
+static CRD_PARK_IN  Test_U_in;
+static CRD_PARK_OUT Test_U_out;
 /*************************************************************************
  Exported Functions (N/A)
 *************************************************************************/
@@ -137,6 +148,14 @@ void scm_voSpdCtrMdInit(void)
     scm_uwInitPosMdSw = scm_uwInitPosMd;
     scm_uwHfiOvrCnt = 0;
     scm_slIdRefPu = 0;
+    
+    /* Private variables init */
+    swTmpSpdRateLpf.slY.sl = 0;
+    swTmpSpdRate = 0;
+    swTmpSpdFbkPuZ1 = 0;
+    swSpdRateAbsPu = 0;
+    swTestIqref = 0;
+    DCPswitch = 0;
 }
 /***************************************************************
  Function: scm_voSpdCtrMdCoef;
@@ -497,13 +516,6 @@ void scm_voSpdCtrMdTbs(void)
     curSpeed_state.Tbs_hook();
 }
 
-static SWORD deltC, switchCNT, switchflg;
-static BOOL blTorqCompFlg;
-static SWORD swTmpSpdRate = 0;
-static LPF_OUT swTmpSpdRateLpf;
-static SWORD swTmpSpdFbkPuZ1 = 0;
-static SWORD swSpdRateAbsPu;
-static SWORD swTestIqref;
 void  scm_voTorqCtrMdTbs(void)
 {
     SWORD swIqLowerPu;
@@ -544,16 +556,19 @@ void  scm_voTorqCtrMdTbs(void)
 //    torqobs_stCalIn.swIqfbkPu = scm_swIqFdbLpfPu;
 //    torqobs_stCalIn.swSpdPu = spi_stResolverOut.swSpdFbkPu;
 //    torqobs_voCal(&torqobs_stCalIn, &torqobs_stCoef, &torqobs_stCalOut);
+//    mth_voLPFilterCoef(1000000 / 250, FTBS_HZ, &scm_stIqLoadLpf.uwKx); 
 //    mth_voLPFilter((torqobs_stCalOut.swIqLoadPu + scm_swIqFdbLpfPu), &scm_stIqLoadLpf);
     
       /* Speed fluctuation compensation */
+      mth_voLPFilterCoef(1000000 / 50, FTBS_HZ, &scm_stIqLoadLpf.uwKx); 
       mth_voLPFilter(spi_stResolverOut.swSpdFbkPu, &scm_stIqLoadLpf);
       scm_swSpdFbkCompPu = spi_stResolverOut.swSpdFbkPu - scm_stIqLoadLpf.slY.sw.hi;
-
       swTmpSpdRate = (SLONG)scm_swSpdFbkCompPu * ass_stParaSet.uwSpeedAssistSpdRpm >> 11;
-//      mth_voLPFilterCoef(1000000 / 250, FTBS_HZ, &swTmpSpdRateLpf.uwKx); 
-//      mth_voLPFilter(swTmpSpdRate, &swTmpSpdRateLpf);
+
+      mth_voLPFilterCoef(1000000 / 250, FTBS_HZ, &swTmpSpdRateLpf.uwKx); 
+      mth_voLPFilter(swTmpSpdRate, &swTmpSpdRateLpf);
 //      swTmpSpdRateLpf.slY.sw.hi = swTmpSpdRate;
+
     
     /* Torque Calculate */
 //    swTmpSpdRate = spi_stResolverOut.swSpdFbkPu - swTmpSpdFbkPuZ1; //Q15
@@ -561,6 +576,18 @@ void  scm_voTorqCtrMdTbs(void)
 //    mth_voLPFilter(swTmpSpdRate, &swTmpSpdRateLpf);
 //    swTmpSpdFbkPuZ1 = spi_stResolverOut.swSpdFbkPu;
 //    scm_swSpdFbkCompPu = scm_stSpdFbkLpf.slY.sw.hi + (SLONG)swTmpSpdRateLpf.slY.sw.hi * FTBS_HZ / 30; //30Hz,TBS
+      
+//      mth_voLPFilterCoef(1000000 / 250, FTBS_HZ, &scm_stIqLoadLpf.uwKx); 
+//      mth_voLPFilter(spi_stResolverOut.swSpdFbkPu, &scm_stIqLoadLpf);
+//      scm_swSpdFbkCompPu = spi_stResolverOut.swSpdFbkPu - scm_stIqLoadLpf.slY.sw.hi;
+//
+//      swTmpSpdRate = (SLONG)scm_swSpdFbkCompPu * ass_stParaSet.uwSpeedAssistSpdRpm >> 11;  // 系数 = J/Tlpf/Pesi 
+//
+////      mth_voLPFilterCoef(1000000 / 250, FTBS_HZ, &swTmpSpdRateLpf.uwKx); 
+////      mth_voLPFilter(swTmpSpdRate, &swTmpSpdRateLpf);
+//      swTmpSpdRateLpf.slY.sw.hi = swTmpSpdRate;
+//      
+      
 
     /* Iqref Compensation */
     if(((uart_swTorqRefNm < -200)||(uart_swTorqRefNm > 200)) && (Ass_FSM !=Spd2Torq) && (Ass_FSM !=SpeedAssit))
@@ -569,10 +596,10 @@ void  scm_voTorqCtrMdTbs(void)
        //swTestIqref  = uart_swTorqRefNm - (((SLONG)swTmpSpdRateLpf.slY.sw.hi * cof_uwJmPu * 2 << 11) / cof_uwFluxPu);  //Q15+Q0+Q11-Q12=Q14
        
        /* Speed fluctuation compensation*/
-        swTestIqref = uart_swTorqRefNm - swTmpSpdRate;
+//        swTestIqref = uart_swTorqRefNm - swTmpSpdRateLpf.slY.sw.hi;
          
        /* Torgque observer */
-       //swTestIqref  = uart_swTorqRefNm - scm_stIqLoadLpf.slY.sw.hi;
+       swTestIqref  = uart_swTorqRefNm - scm_stIqLoadLpf.slY.sw.hi;
     }
     else
     {
@@ -606,8 +633,6 @@ void  scm_voTorqCtrMdTbs(void)
  Subroutine Call: ...;
  Reference: N/A
 ****************************************************************/
-static CRD_PARK_IN  Test_U_in;
-static CRD_PARK_OUT Test_U_out;
 void scm_voSpdCtrMdUpTbc(void)
 {
     /*=======================================================================
@@ -638,11 +663,8 @@ void scm_voSpdCtrMdUpTbc(void)
  Subroutine Call: ...;
  Reference: N/A
 ****************************************************************/
-static SWORD iftest;
-static UWORD DCPswitch = 0;
 void  scm_voSpdCtrMdDownTbc(void)
-{
-    //scm_swIqRefPu = iftest;   
+{ 
     /*=======================================================================
                     Clark transformation for phase current
     =======================================================================*/

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

@@ -46,8 +46,8 @@
 
 #define BIKE_ASS_MOTOR_CURRENT_MAX      5000 //5500 // 0.01A
 #define BIKE_ASS_MOTOR_TORQUE_MAX       30   // 0.1Nm
-#define BIKE_SPD_MOTOR_CURRENT_MAX      500  // 0.01A
-#define BIKE_SPD_MOTOR_CONSTANT_COMMAND 5  // RPM
+#define BIKE_SPD_MOTOR_CURRENT_MAX      5  /* 电流系数初始值 */
+#define BIKE_SPD_MOTOR_CONSTANT_COMMAND 4096  /* 速度波动补偿系数初始值 */
 
 #define ASS_LIM_DEFAULT                    \
     {                                      \
@@ -64,7 +64,7 @@
 
 #define ASS_LINER_TORQUE_DEFAULT             \
     {                                  \
-        1638, 2457, 3276, 4096, 2457 \
+        2048, 2867, 4096, 10000, 2867 \
     } // Q12
 //#define TORQUE_ASSIST_DEFAULT                                                                                                                      \
 //    {                                                                                                                                              \
@@ -255,6 +255,7 @@ typedef struct
     UWORD StartFlag;
 
     SWORD swSmoothGain;         // Q12
+    SWORD swSmoothStopGain;         /* 停机电流系数 */
     UWORD uwStartUpGainAddStep; // Q12
     UWORD uwStartUpTargetGain;  // Q12
     UWORD uwStartUpTimeCadenceCnt;

+ 1 - 0
User project/3.BasicFunction/Include/Cadence.h

@@ -107,6 +107,7 @@ typedef struct
     UWORD       uwCaputureNumCnt;        // The current sequece of the pulse
     UWORD       uwCaputureErrorCnt;      // The current sequece of the pulse
     UWORD       uwCaputureOverflowCnt;   // number of TIM4 CNT Overflow between two capture
+    UWORD       uwCaputureOverflowCnt2;
     BOOL        blCadenceSensorErrorFlg; // The falg of sensor error
     BOOL        blCadenceCalStartState;  // TRUE = START   FALSE = STOP
     CADENCE_DIR cadence_dir;             // Direction of cadence

+ 2 - 2
User project/3.BasicFunction/Include/i2c_master.h

@@ -363,7 +363,7 @@
     }
 #define I2CswStartcruiseGain \
     {                        \
-        4096, 0, 0, 0, 0     \
+        0, 0, 0, 0, 0     \
     }
 #define I2CswNmAssistChangeNum \
     {                          \
@@ -518,7 +518,7 @@
     }
 #define I2CuwStartUpGainStep \
     {                        \
-        20, 0, 0, 0, 0       \
+        50, 0, 0, 0, 0       \
     }
 #define I2CuwStartUpCadNm \
     {                     \

+ 75 - 36
User project/3.BasicFunction/Source/AssistCurve.c

@@ -58,6 +58,7 @@ 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; 
+static UWORD ass_pvt_uwSmoothFlg = 0;
 /******************************
  *
  *  Function
@@ -239,6 +240,7 @@ void ass_voAssitEEInit(void)
     ass_pvt_uwTorqAccCnt = 0;
     ass_pvt_uwTorqDecCnt = 0;
     ass_pvt_uwSpd2TorqCnt = 0;
+    ass_pvt_uwSmoothFlg = 0;
     AssCnt1ms = 0; 
 }
 
@@ -288,16 +290,9 @@ void ass_voAssitCoef(void)
     /*助力系数初始化*/
     ass_stCalCoef.StartFlag = 0;
     ass_stCalCoef.swSmoothGain = 0;                                     // Q12
+    ass_stCalCoef.swSmoothStopGain = 4096;                                //Q12
     ass_stCalCoef.uwStartUpTargetGain = 0;                              // Q12
     ass_stCalCoef.uwStartUpGainAddStep = ass_stParaSet.uwStartUpGainStep; // 25 Q12
-    if (ass_stCalCoef.uwStartUpGainAddStep < 1)
-    {
-        ass_stCalCoef.uwStartUpGainAddStep = 1;
-    }
-    if (ass_stCalCoef.uwStartUpGainAddStep > 50)
-    {
-        ass_stCalCoef.uwStartUpGainAddStep = 50;
-    }
 
     /*设置启动到正常助力最少踏频数*/
     ass_stCalCoef.uwStartUpTimeCadenceCnt = ass_stParaSet.uwStartUpCadNm;
@@ -509,7 +504,6 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
         AssCnt1ms = 0;
     }
     
-    ass_stCalCoef.swTorqFilterGain = Q14_1;
     /* Select TorqRef: LPFTorq or MAFTorq */
     swTorqCmd1 = (SWORD)(((SLONG)ass_stCalIn.uwtorque * ass_stCalCoef.swTorqFilterGain >> 14) +
                ((SLONG)ass_stCalIn.uwtorquelpf * (Q14_1 - ass_stCalCoef.swTorqFilterGain) >> 14)); //转矩指令滤波切换,由低通滤波到踏频相关的滑动平均滤波
@@ -578,11 +572,30 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
     switch (Ass_FSM)
     {
     case Startup:
-//        ass_stCalCoef.swSmoothGain = Q12_1;      
-         ass_stCalCoef.swSmoothGain  += (SWORD)ass_stParaSet.uwSpeedAssistIMaxA; ////ass_stCalCoef.uwStartUpGainAddStep;
-         if(ass_stCalCoef.swSmoothGain >= Q12_1)
+         /* 启动系数 */
+        if(ass_pvt_uwSmoothFlg == 0)
+        {
+            ass_stCalCoef.swSmoothGain  += ass_stParaSet.uwSpeedAssistIMaxA; ////ass_stCalCoef.uwStartUpGainAddStep;            
+            if(ass_stCalCoef.swSmoothGain >= ass_stParaSet.uwStartupCoef)
+            {
+                ass_pvt_uwSmoothFlg = 1;
+            }
+        }
+        else if (ass_pvt_uwSmoothFlg == 1)
+        {
+            if(ass_stCalCoef.swSmoothGain >= Q12_1)
+            {
+                ass_stCalCoef.swSmoothGain  -= (ass_stParaSet.uwSpeedAssistIMaxA >> 1);
+            }
+            else
+            {
+                ass_stCalCoef.swSmoothGain = Q12_1;
+                ass_pvt_uwSmoothFlg = 2;
+            }        
+        }
+        else
         {
-            ass_stCalCoef.swSmoothGain = Q12_1;
+            // do nothing
         }
          
         swSpdKpPu = 1000;  //ass_stParaSet.uwStartUpCadNm;
@@ -704,15 +717,32 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
         }
 
         break;
-    case TorqueAssit:  
-            
-          /* 启动系数 */
-        ass_stCalCoef.swSmoothGain  +=  (SWORD)ass_stParaSet.uwSpeedAssistIMaxA; ////ass_stCalCoef.uwStartUpGainAddStep;
-        if(ass_stCalCoef.swSmoothGain >= Q12_1)
+    case TorqueAssit:            
+         /* 启动系数 */
+        if(ass_pvt_uwSmoothFlg == 0)
         {
-            ass_stCalCoef.swSmoothGain = Q12_1;
+            ass_stCalCoef.swSmoothGain  += ass_stParaSet.uwSpeedAssistIMaxA; ////ass_stCalCoef.uwStartUpGainAddStep;            
+            if(ass_stCalCoef.swSmoothGain >= ass_stParaSet.uwStartupCoef)
+            {
+                ass_pvt_uwSmoothFlg = 1;
+            }
+        }
+        else if (ass_pvt_uwSmoothFlg == 1)
+        {
+            if(ass_stCalCoef.swSmoothGain >= Q12_1)
+            {
+                ass_stCalCoef.swSmoothGain  -= (ass_stParaSet.uwSpeedAssistIMaxA >> 1);
+            }
+            else
+            {
+                ass_stCalCoef.swSmoothGain = Q12_1;
+                ass_pvt_uwSmoothFlg = 2;
+            }        
+        }
+        else
+        {
+            // do nothing
         }
-        
         /* Reduce Voltage Limit When LPFTorq < Switch1TorqThreshold */     
         if(0 == (AssCnt1ms%5))
         {
@@ -727,9 +757,9 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
 //            else if (ass_stCalIn.uwtorque <= ass_stCalCoef.uwSwitch1TorqThreshold)
 //            {
 ////                ass_stCalOut.swVoltLimitPu -=  ass_stCalCoef.uwSpeedConstantCommand;
-////                if (ass_stCalOut.swVoltLimitPu <= (tmpVoltargetPu + ass_ParaSet.uwStartUpCadNm))
+////                if (ass_stCalOut.swVoltLimitPu <= (tmpVoltargetPu + ass_stParaSet.uwStartUpCadNm))
 ////                {
-////                    ass_stCalOut.swVoltLimitPu =  tmpVoltargetPu + ass_ParaSet.uwStartUpCadNm;
+////                    ass_stCalOut.swVoltLimitPu =  tmpVoltargetPu + ass_stParaSet.uwStartUpCadNm;
 ////                }
 //            }
 //            else
@@ -785,18 +815,22 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
         
     case  ReduceCurrent:
         /* Switch to StopAssit FSM */
-        if(ass_stCalCoef.swSmoothGain <= 0)
+        if(ass_stCalCoef.swSmoothStopGain <= 0)
         {
+            ass_pvt_uwSmoothFlg = 0;
             ass_stCalCoef.swSmoothGain = 0;
+            ass_stCalCoef.swSmoothStopGain = 0;
             ass_stCalCoef.swTorqFilterGain = 0;
             ass_stCalCoef.swCadanceGain = 0;
+            ass_voMoveAverageFilterClear(&ass_stTorqMafValue);
             Ass_FSM = StopAssit;     
         }  
         else
         {
             /* Reduce Curret Coef to Zero*/
-            ass_stCalCoef.swSmoothGain -=40;   
             ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
+            ass_stCalCoef.swSmoothGain -= ass_stCalCoef.uwStartUpGainAddStep;
+            ass_stCalCoef.swSmoothStopGain -= ass_stCalCoef.uwStartUpGainAddStep;
         }
         
         /* Switch to Startup FSM */
@@ -820,17 +854,21 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
                   {               
                       ass_stCalCoef.sw2StopCNT = 0;
                       ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
-                      ass_pvt_stCurLpf.slY.sw.hi = 0;                
+                      ass_pvt_stCurLpf.slY.sw.hi = 0;  
+                      ass_stCalCoef.swSmoothStopGain = Q12_1;
+                      ass_stCalCoef.swSmoothGain = ass_stParaSet.uwStartupCruiseCoef;
                       Ass_FSM = Startup;
                   }
               }
               else
               {
-                  if (ass_stCalIn.uwtorquelpf > ((ass_stCalCoef.uwAssThreshold * 3)>>3) && ass_stCalIn.uwtorquePer > ass_stCalCoef.uwAssThreshold && ass_stCalIn.uwcadance > 0)
+                  if (ass_stCalIn.uwtorquePer > (ass_stCalCoef.uwAssThreshold >> 1) && ass_stCalIn.uwcadance > 0)
                   {            
                       ass_stCalCoef.sw2StopCNT = 0;
                       ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
-                      ass_pvt_stCurLpf.slY.sw.hi = 0;               
+                      ass_pvt_stCurLpf.slY.sw.hi = 0; 
+                      ass_stCalCoef.swSmoothStopGain = Q12_1;
+                      ass_stCalCoef.swSmoothGain = ass_stParaSet.uwStartupCruiseCoef;
                       Ass_FSM = Startup;
                   }
               }
@@ -1004,6 +1042,7 @@ static void AssitCuvApplPerVolt(void) /* parasoft-suppress METRICS-28 "本项目
     mth_voLPFilter(ass_stCalOut.swTorAssistCurrent, &ass_pvt_stCurLpf);   
     /* Bikespeed Limit Coef*/
     ass_stCalOut.swAssitCurRef = (SWORD)((SLONG)ass_pvt_stCurLpf.slY.sw.hi * ass_stCalCoef.swBikeSpeedGain >> 12);
+    ass_stCalOut.swAssitCurRef  = (SLONG)ass_stCalOut.swAssitCurRef  * ass_stCalCoef.swSmoothStopGain >> 12; 
     //ass_stCalOut.swAssitCurRef =ass_stCalOut.swTorAssistCurrent;
 }
 
@@ -1119,14 +1158,14 @@ void ass_voMoveAverageFilter(MAF_IN *in)
     in->slSum -= in->swBuffer[in->uwIndex];
     in->swBuffer[in->uwIndex] = in->swValue;
     in->slSum += (SLONG)in->swValue;
-    if (!in->blSecFlag)
-    {
-        in->slAverValue = in->slSum / ((SLONG)in->uwIndex + (SWORD)1);
-    }
-    else
-    {
+//    if (!in->blSecFlag)
+//    {
+//        in->slAverValue = in->slSum / ((SLONG)in->uwIndex + (SWORD)1);
+//    }
+//    else
+//    {
         in->slAverValue = in->slSum / (SLONG)in->uwLength;
-    }
+//    }
     in->uwIndex++;
 
     if (in->uwIndex >= in->uwLength)
@@ -1142,8 +1181,8 @@ void ass_voMoveAverageFilterClear(MAF_IN *in)
     in->uwIndex = 0;
     in->slSum = 0;
     in->blSecFlag = FALSE;
-
-    for (i = 0; i < 64; i++)
+    in->slAverValue = 0;
+    for (i = 0; i < in->uwLength; i++)
     {
         in->swBuffer[i] = 0;
     }

+ 11 - 3
User project/3.BasicFunction/Source/Cadence.c

@@ -111,12 +111,16 @@ static void cadence_voCadenceIdle(UWORD source)
 ****************************************************************/
 static void cadence_voCadenceHighFrequencyWork(UWORD source)
 {
-    /* 只有踏频一个脉冲会一直在此函数中,对运行无影响,即source==1 && cadence_stFreGetOut.uwCaputureNumCnt==0 的情况未处理 */
+    /* 只有踏频一个脉冲会即source==1 && cadence_stFreGetOut.uwCaputureNumCnt==0,需要处理 */
 
     if (source == 1 && cadence_stFreGetOut.uwCaputureNumCnt == 1) 
     {
         cadence_stFreGetOut.uwCaputureOverflowCnt++;
     }
+    else if (source == 1 && cadence_stFreGetOut.uwCaputureNumCnt == 0)
+    {
+        cadence_stFreGetOut.uwCaputureOverflowCnt2++;
+    }
     else if (source == 2)
     {
         if (cadence_stFreGetOut.uwCaputureNumCnt == 0)
@@ -173,8 +177,9 @@ static void cadence_voCadenceHighFrequencyWork(UWORD source)
         cadence_stFreGetOut.cadence_fsm = CADENCE_ERROR;
         cadence_stFreGetOut.uwFreqPercent = 0;
         cad_pvt_ulCadFreqPu = 0;
+        cadence_stFreGetOut.uwCaputureOverflowCnt2 = 0;
     }
-    else if (cadence_stFreGetOut.uwCaputureOverflowCnt > cadence_stFreGetCof.uwHfMaxTimeCnt)
+    else if (cadence_stFreGetOut.uwCaputureOverflowCnt > cadence_stFreGetCof.uwHfMaxTimeCnt || cadence_stFreGetOut.uwCaputureOverflowCnt2 > cadence_stFreGetCof.uwHfMaxTimeCnt)
     {
         cadence_stFreGetOut.uwFrequencyPu = 0;
         cadence_stFreGetOut.uwLPFFrequencyPu = 0;
@@ -188,6 +193,7 @@ static void cadence_voCadenceHighFrequencyWork(UWORD source)
         cadence_stFreGetOut.cadence_fsm = CADENCE_IDLE;
         cadence_stFreGetOut.uwFreqPercent = 0;
         cad_pvt_ulCadFreqPu = 0;
+        cadence_stFreGetOut.uwCaputureOverflowCnt2 = 0;
     }
     else 
     {
@@ -212,15 +218,16 @@ static void cadence_voCadenceBackword(UWORD source)
     cadence_stFreGetOut.uwFrequencyPu = 0;
     cadence_stFreGetOut.uwLPFFrequencyPu = 0;
     cadence_stFreGetOut.uwFreqPercent = 0;
+    cad_pvt_ulCadFreqPu = 0;
     if (cadence_stFreGetOut.cadence_dir == CADENCE_DIR_FORWARD)
     {
         cadence_stFreGetOut.uwCaputureOverflowCnt = 0;
+        cadence_stFreGetOut.uwCaputureOverflowCnt2 = 0;
         cadence_stFreGetOut.uwCaputureNumCnt = 0;
         cadence_stFreGetOut.uwCaputure2Cnt = 0;
         cadence_stFreGetOut.uwCaputure1Cnt = 0;
         cadence_stFreGetOut.uwFreqPercent = 0;
         cadence_stFreGetOut.cadence_fsm = CADENCE_HFreWork;
-
     }
 }
 /***************************************************************
@@ -283,6 +290,7 @@ void cadence_voCadenceInit(void)
     cadence_stFreGetOut.uwCaputureNumCnt = 0;
     cadence_stFreGetOut.uwCaputureErrorCnt = 0;
     cadence_stFreGetOut.uwCaputureOverflowCnt = 0;
+    cadence_stFreGetOut.uwCaputureOverflowCnt2 = 0;
     cadence_stFreGetOut.blCadenceSensorErrorFlg = FALSE;
     cadence_stFreGetOut.blCadenceCalStartState = FALSE;
     cadence_stFreGetOut.cadence_fsm = CADENCE_IDLE;

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

@@ -47,7 +47,8 @@ Update Time
 #define MOTOR_WELLING_CITY_48V    0x30
 #define MOTOR_WELLING_MTB_48V     0x31
 
-#define MOTOR_ID_SEL              MOTOR_WELLING_CITY_36V    ///< syspar.h中也需要选择36V/48V系统
+/* !!!强调:syspar.h中也需要选择36V/48V系统 */
+#define MOTOR_ID_SEL              MOTOR_WELLING_CITY_36V  
 /*======================================================================*
     Motor Parameters
 *=======================================================================*/