Browse Source

feat(assist): 减少停机时间至200-500ms; 优化踏频算法,第一个脉冲便输出踏频数值,根据启动逻辑,一个脉冲后助力启动

CN\zhangkai71 2 years ago
parent
commit
43d177941a

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

@@ -39,6 +39,7 @@
         0, 0, 0, 0, 0, 0, 0, FALSE, FALSE, CADENCE_DIR_IDLE, CADENCE_IDLE \
     } // Default value of CADENCE_OUT
 
+#define CADENCESPEED_KMPERH2FREQPU   299   // 200 ms per between two interupte 
 /***************************************
  *
  *          Type  Definations

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

@@ -633,13 +633,13 @@ static void AssitCuvApplPerVolt(void)
         {            
             ass_stCalCoef.swAss2SpdCNT++;
             uwTmpStopCnt = ass_stCalIn.uwcadance;//((ULONG)1000<<20)/(ass_CalIn.uwcadance * FBASE) ;
-            if(uwTmpStopCnt < 300)
+            if(uwTmpStopCnt < 200)
             {
-                uwTmpStopCnt = 300;
+                uwTmpStopCnt = 200;
             }
-            else if(uwTmpStopCnt > 1000)
+            else if(uwTmpStopCnt > 500)
             {
-                uwTmpStopCnt = 1000;
+                uwTmpStopCnt = 500;
             }
             if(ass_stCalCoef.swAss2SpdCNT > uwTmpStopCnt)
             {
@@ -702,13 +702,13 @@ static void AssitCuvApplPerVolt(void)
         {         
             ass_stCalCoef.swAss2SpdCNT++;
             uwTmpStopCnt = ass_stCalIn.uwcadance;//((ULONG)1000<<20)/(ass_CalIn.uwcadance * FBASE) ;
-            if(uwTmpStopCnt < 300)
+            if(uwTmpStopCnt < 200)
             {
-                uwTmpStopCnt = 300;
+                uwTmpStopCnt = 200;
             }
-            else if(uwTmpStopCnt > 1000)
+            else if(uwTmpStopCnt > 500)
             {
-                uwTmpStopCnt = 1000;
+                uwTmpStopCnt = 500;
             }
             if(ass_stCalCoef.swAss2SpdCNT > uwTmpStopCnt)
             {            
@@ -741,12 +741,12 @@ static void AssitCuvApplPerVolt(void)
         }
         
         /* Switch to Startup FSM */
-        if (ass_stCalIn.uwtorquePer > ((ass_stCalCoef.uwAssThreshold * 3)>>3)  && ass_stCalIn.uwcadance > 0)
-        {
-            Ass_FSM = Startup;
-            ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu;
-            ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
-        }
+//        if (ass_stCalIn.uwtorquePer > ((ass_stCalCoef.uwAssThreshold * 3)>>3)  && ass_stCalIn.uwcadance > 0)
+//        {
+//            Ass_FSM = Startup;
+//            ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu;
+//            ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
+//        }
         
         break;
         

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

@@ -88,9 +88,14 @@ static void cadence_voCadenceIdle(UWORD source)
         {
             cadence_stFreGetOut.blCadenceCalStartState = TRUE;
             cadence_stFreGetOut.uwCaputureOverflowCnt = 0;
-            cadence_stFreGetOut.uwCaputureNumCnt = 0;
+            cadence_stFreGetOut.uwCaputureNumCnt = 1;
             cadence_stFreGetOut.cadence_fsm = CADENCE_HFreWork;
             cadence_stFreGetOut.uwForwardCnt = 0;
+            cadence_stFreGetOut.uwCaputure1Cnt = (UWORD)TIMER1_CAP_CANDANCE;
+            cadence_stFreGetOut.uwFrequencyPu = 1 * CADENCESPEED_KMPERH2FREQPU;  
+            cadence_stFreGetOut.uwLPFFrequencyPu = (cadence_stFreGetOut.uwLPFFrequencyPu * cadence_stFreGetCof.uwCadenceLPFgain +
+                                                        cadence_stFreGetOut.uwFrequencyPu * (100 - cadence_stFreGetCof.uwCadenceLPFgain)) /
+                                                       100;
         }
     }
 }
@@ -326,11 +331,14 @@ static void cadence_voCadenceBackword(UWORD source)
     if (cadence_stFreGetOut.cadence_dir == CADENCE_DIR_FORWARD)
     {
         cadence_stFreGetOut.uwCaputureOverflowCnt = 0;
-        cadence_stFreGetOut.uwCaputureNumCnt = 0;
-        cadence_stFreGetOut.uwCaputure2Cnt = 0;
-        cadence_stFreGetOut.uwCaputure1Cnt = 0;
+        cadence_stFreGetOut.uwCaputureNumCnt = 1;
         cadence_stFreGetOut.uwFreqPercent = 0;
         cadence_stFreGetOut.cadence_fsm = CADENCE_HFreWork;
+        cadence_stFreGetOut.uwCaputure1Cnt = (UWORD)TIMER1_CAP_CANDANCE;
+        cadence_stFreGetOut.uwFrequencyPu = 1 * CADENCESPEED_KMPERH2FREQPU;  
+        cadence_stFreGetOut.uwLPFFrequencyPu = (cadence_stFreGetOut.uwLPFFrequencyPu * cadence_stFreGetCof.uwCadenceLPFgain +
+                                                    cadence_stFreGetOut.uwFrequencyPu * (100 - cadence_stFreGetCof.uwCadenceLPFgain)) /
+                                                   100;
     }
 
     //    if (cadence_stFreGetOut.uwCaputureOverflowCnt >= cadence_stFreGetCof.uwHfMaxTimeCnt) // 100ms