Przeglądaj źródła

feat(assistCurve): 删除无用代码,更新Pack文件

CN\zhangkai71 2 lat temu
rodzic
commit
16232fb833

BIN
User project/2.MotorDrive/Lib/WLMCP_LIB.lib


+ 1 - 1
User project/2.MotorDrive/Source/packed

@@ -1 +1 @@
-Subproject commit 7dc7089acc42bfeffa7f78b0f298ab01195e9aae
+Subproject commit ae22217dbf3c01d21c7b504901f26aa2a774f7ec

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

@@ -213,10 +213,10 @@ void scm_voSpdCtrMdCoef(void)
     torqobs_stCoefIn.uwPairs = cp_stMotorPara.swMotrPolePairs;
     torqobs_stCoefIn.uwMtJm = cp_stMotorPara.swJD;
     torqobs_stCoefIn.uwMtFlxWb = cp_stMotorPara.swFluxWb;
-    torqobs_stCoefIn.uwWtcHz = 15; // cp_stControlPara.swAsrPIBandwidth;
+    torqobs_stCoefIn.uwWtcHz = 50; // cp_stControlPara.swAsrPIBandwidth;
     torqobs_stCoefIn.uwRatioJm = cp_stControlPara.swAsrSpdInerRate;
     torqobs_voCoef(&torqobs_stCoefIn, &torqobs_stCoef);    
-    mth_voLPFilterCoef(1000000 / 50, FTBS_HZ, &scm_stIqLoadLpf.uwKx); //50Hz
+    mth_voLPFilterCoef(1000000 / 100, FTBS_HZ, &scm_stIqLoadLpf.uwKx); //50Hz
     /* Id PI coefficient calculate */
     acr_stCurIdPICoefIn.uwFbHz = FBASE;
     acr_stCurIdPICoefIn.uwUbVt = VBASE;

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

@@ -45,7 +45,7 @@
 #define TORQUE_SWITCH1_THRESHOLD 100 // 0.1Nm
 
 #define BIKE_ASS_MOTOR_CURRENT_MAX      5000 //5500 // 0.01A
-#define BIKE_ASS_MOTOR_TORQUE_MAX       20   // 0.1Nm
+#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
 

+ 51 - 347
User project/3.BasicFunction/Source/AssistCurve.c

@@ -456,8 +456,7 @@ static void AssitCuvApplPerVolt(void)
     SWORD swSpdKpPu = 500; //Q10
     UWORD uwVoltAccStep = 1, uwVoltDecStep = 3;
     UWORD uwTmpStopCnt = 0;
-    ORIG_COEF stStopOrigCoef = {-100, 0, 0};
-    POLY_COEF stStopCoef;
+
 //    SLONG slTmp_a1, slTmp_b1, slTmp_c1;
 
   
@@ -554,14 +553,19 @@ static void AssitCuvApplPerVolt(void)
     switch (Ass_FSM)
     {
     case Startup:
-        ass_stCalCoef.swSmoothGain = Q12_1;        
+//        ass_stCalCoef.swSmoothGain = Q12_1;      
+         ass_stCalCoef.swSmoothGain  += ass_stParaSet.uwSpeedAssistIMaxA; ////ass_stCalCoef.uwStartUpGainAddStep;     
+         if(ass_stCalCoef.swSmoothGain >= Q12_1)
+        {
+            ass_stCalCoef.swSmoothGain = Q12_1;
+        }
+         
         swSpdKpPu = 2000;  //ass_stParaSet.uwStartUpCadNm;
         slSpdErr = (SLONG)ass_stCalOut.swCadSpd2MotSpd - (SLONG)ass_stCalIn.uwSpdFbkAbsPu;
         if(slSpdErr < 0)
         {
             slSpdErr = 0;
-        }
-       
+        } 
 //        ass_stCalCoef.StartFlag = 1;        
         /* Open Voltage Limit according SpdErr*/
         if(ass_stCalCoef.StartFlag == 0)
@@ -571,15 +575,19 @@ static void AssitCuvApplPerVolt(void)
             {
                 slTmpVoltLim = scm_swVsDcpLimPu;
             }
-            else if(slTmpVoltLim <= 0)
+            else if(slTmpVoltLim <= swTmpVoltPu)
             {
-                slTmpVoltLim =0;
+                slTmpVoltLim = swTmpVoltPu;
             }
+            else
+            {
+            }
+            
             ass_stCalOut.swVoltLimitPu = slTmpVoltLim;
             
-            if(slSpdErr <= 800)
+            if(slSpdErr <= 1000)
             {
-                ass_stCalCoef.StartFlag=1;
+                ass_stCalCoef.StartFlag = 1;
             }     
         }
         else if(ass_stCalCoef.StartFlag ==1 )
@@ -609,7 +617,8 @@ static void AssitCuvApplPerVolt(void)
             if(ass_pvt_swVoltCnt > 30)
             {
                 Ass_FSM = TorqueAssit;
-                //ass_stCalCoef.StartFlag=0;
+                ass_stCalCoef.StartFlag=0;
+                ass_pvt_swVoltCnt=0;
             }
         } 
 
@@ -617,30 +626,11 @@ static void AssitCuvApplPerVolt(void)
         if((ass_stCalIn.uwcadancePer == 0) || (ass_stCalIn.uwGearSt == 0))
         {
             /* When CandanceFreq=0 or BikeGear=0*/
-            ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-            asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-            asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
             ass_stCalCoef.swAss2SpdCNT = 0;
-            ass_stCalCoef.sw2StopCNT = 0;
             Ass_FSM = ReduceCurrent;
         }
         else if(ass_stCalIn.uwtorquePer <= (ass_stCalCoef.uwAssStopThreshold))
-        {
-             /* When InstantTorq < StopTorq and hold half circle */ 
-//            if (ass_stCalIn.uwcadance != ass_stCalIn.uwcadancelast)
-//            {
-//                ass_stCalCoef.swAss2SpdCNT++;
-//            }
-//            if (ass_stCalCoef.swAss2SpdCNT > (ass_stParaCong.uwCadPulsePerCirc >> 1))
-//            {
-//                ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-//                asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-//                asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
-//                ass_stCalCoef.swAss2SpdCNT = 0;
-//                ass_stCalCoef.sw2StopCNT = 0;
-//                Ass_FSM = ReduceCurrent;
-//            }  
-            
+        {            
             ass_stCalCoef.swAss2SpdCNT++;
             uwTmpStopCnt = ass_stCalIn.uwcadance;//((ULONG)1000<<20)/(ass_CalIn.uwcadance * FBASE) ;
             if(uwTmpStopCnt < 300)
@@ -653,11 +643,7 @@ static void AssitCuvApplPerVolt(void)
             }
             if(ass_stCalCoef.swAss2SpdCNT > uwTmpStopCnt)
             {
-                ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-                asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-                asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
                 ass_stCalCoef.swAss2SpdCNT = 0;
-                ass_stCalCoef.sw2StopCNT = 0;
                 Ass_FSM = ReduceCurrent;
             } 
         }
@@ -668,35 +654,34 @@ static void AssitCuvApplPerVolt(void)
 
         break;
     case TorqueAssit:  
+            
+          /* 启动系数 */            
+        ass_stCalCoef.swSmoothGain  += ass_stParaSet.uwSpeedAssistIMaxA; ////ass_stCalCoef.uwStartUpGainAddStep;     
+        if(ass_stCalCoef.swSmoothGain >= Q12_1)
+        {
+            ass_stCalCoef.swSmoothGain = Q12_1;
+        }
+        
         /* Reduce Voltage Limit When LPFTorq < Switch1TorqThreshold */     
-         if(ass_stCalIn.uwtorquelpf >= ass_stCalCoef.uwSwitch1TorqThreshold)
-         {             
+//         if(ass_stCalIn.uwtorquelpf >= ass_stCalCoef.uwSwitch1TorqThreshold)
+//         {             
              ass_stCalOut.swVoltLimitPu +=  uwVoltAccStep; //ass_stCalCoef.uwStartUpGainAddStep;
-         }
-         else if (ass_stCalIn.uwtorquelpf <= ass_stCalCoef.uwSwitch1TorqThreshold)
-         {
-             ass_stCalOut.swVoltLimitPu -=  uwVoltDecStep; //ass_stCalCoef.uwSpeedConstantCommand;
-         }
-         else
-         {}
+//         }
+//         else if (ass_stCalIn.uwtorquelpf <= ass_stCalCoef.uwSwitch1TorqThreshold)
+//         {
+//             ass_stCalOut.swVoltLimitPu -=  uwVoltDecStep; //ass_stCalCoef.uwSpeedConstantCommand;
+//         }
+//         else
+//         {
+//         }
          if (ass_stCalOut.swVoltLimitPu > scm_swVsDcpLimPu)
          {
              ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
          }
-         else if (ass_stCalOut.swVoltLimitPu <= (swTmpVoltPu + ass_stParaSet.uwStartUpCadNm))
-         {
-             ass_stCalOut.swVoltLimitPu =  swTmpVoltPu + ass_stParaSet.uwStartUpCadNm;
-         }
-
-        /* Torque Clzloop Test */
-//        if(ass_stCalOut.swVoltLimitPu < (scm_swVsDcpLimPu - uwVoltAccStep))
-//        {
-//            ass_stCalOut.swVoltLimitPu += uwVoltAccStep;//ass_stCalCoef.uwStartUpGainAddStep;
-//        }
-//        else
-//        {
-//            ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
-//        }
+//         else if (ass_stCalOut.swVoltLimitPu <= (swTmpVoltPu + ass_stParaSet.uwStartUpCadNm))
+//         {
+//             ass_stCalOut.swVoltLimitPu =  swTmpVoltPu + ass_stParaSet.uwStartUpCadNm;
+//         }
        
         /* TorqueRef Select Coef */
         ass_stCalCoef.swTorqFilterGain += 4; // Q14 转矩滤波方式切换系数
@@ -709,40 +694,12 @@ static void AssitCuvApplPerVolt(void)
         if((ass_stCalIn.uwcadancePer == 0) || (ass_stCalIn.uwGearSt == 0))
         {
             /* When CandanceFreq=0 or BikeGear=0*/
-            ass_pvt_swVoltCnt=0;
-            ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-            asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-            asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
             ass_stCalOut.blTorqPIFlg = FALSE;
             ass_stCalCoef.swAss2SpdCNT = 0;
-            ass_stCalCoef.sw2StopCNT = 0;
-            stStopOrigCoef.k = (SLONG)ass_stCalCoef.swSmoothGain;
-            stStopCoef = ass_stPolynomialcenter(&stStopOrigCoef);
             Ass_FSM = ReduceCurrent;
-            
-
         }
         else if(ass_stCalIn.uwtorquePer <= (ass_stCalCoef.uwAssStopThreshold))
-        {
-            /* When InstantTorq < StopTorq and hold half circle */ 
-//            if (ass_stCalIn.uwcadance != ass_stCalIn.uwcadancelast)
-//            {
-//                ass_stCalCoef.swAss2SpdCNT++;
-//            }
-//            if (ass_stCalCoef.swAss2SpdCNT > (ass_stParaCong.uwCadPulsePerCirc >> 1 ) || ass_stCalIn.uwcadancePer == 0)
-//            {
-//                ass_pvt_uwTorqAccCnt=0;
-//                ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-//                asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-//                asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
-//                ass_stCalCoef.swAss2SpdCNT = 0;
-//                ass_stCalCoef.sw2StopCNT = 0;
-//                stStopOrigCoef.k = (SLONG)ass_stCalCoef.swSmoothGain;
-//                stStopCoef = ass_stPolynomialcenter(&stStopOrigCoef);             
-//                ass_stCalOut.blTorqPIFlg = FALSE;          
-//                Ass_FSM = ReduceCurrent;        
-//            }  
-          
+        {         
             ass_stCalCoef.swAss2SpdCNT++;
             uwTmpStopCnt = ass_stCalIn.uwcadance;//((ULONG)1000<<20)/(ass_CalIn.uwcadance * FBASE) ;
             if(uwTmpStopCnt < 300)
@@ -754,12 +711,8 @@ static void AssitCuvApplPerVolt(void)
                 uwTmpStopCnt = 1000;
             }
             if(ass_stCalCoef.swAss2SpdCNT > uwTmpStopCnt)
-            {
-                ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-                asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-                asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;                
+            {            
                 ass_stCalCoef.swAss2SpdCNT = 0;
-                ass_stCalCoef.sw2StopCNT = 0;
                 ass_stCalOut.blTorqPIFlg = FALSE;
                 Ass_FSM = ReduceCurrent;
             } 
@@ -770,199 +723,21 @@ static void AssitCuvApplPerVolt(void)
         }
 
         break;
-    case SpeedAssit:     
-        ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
-        /*电机速度指令斜坡,保证低速运行不停机*/
-        if (ass_stCalOut.swSpeedRef >= 0)  //ass_stCalCoef.uwSpeedConstantCommand) // Q15
-        {
-            ass_stCalOut.swSpeedRef -= 100;
-        }
-        else
-        {
-            ass_stCalOut.swSpeedRef += 10;
-        }
-        if(ass_stCalOut.swSpeedRef < 0)
-        {
-            ass_stCalOut.swSpeedRef = 0;
-        }
         
-        asr_stTorqSpdPIIn.swSpdRefPu = ass_stCalIn.swDirection*ass_stCalOut.swSpeedRef;
-        asr_stTorqSpdPIIn.swSpdFdbPu = ass_stCalIn.swSpdFbkPu;           // Q15
-        asr_stTorqSpdPIIn.swIqMaxPu = ass_stCalCoef.swSpdLoopAbsCurMax;  // ass_stCalCoef.uwCurrentMaxPu;
-        asr_stTorqSpdPIIn.swIqMinPu = -ass_stCalCoef.swSpdLoopAbsCurMax; // ass_stCalCoef.uwCurrentMaxPu;
-        asr_voSpdPI(&asr_stTorqSpdPIIn, &asr_stTorqSpdPICoef, &asr_stTorqSpdPIOut);
-        ass_stCalOut.swTorSpdLoopCurrentTemp = abs(asr_stTorqSpdPIOut.swIqRefPu);
-
-        /* Switch to StopAssit FSM */
-        if(abs(ass_stCalIn.swSpdFbkPu) < SPD_RPM2PU(200))   
-        {
-            ass_stCalCoef.sw2StopCNT = 0;
-            ass_stCalCoef.StartFlag = 0;
-            ass_stCalCoef.uwStartUpTargetGain = 0;
-            Ass_FSM = StopAssit;
-            ass_voMoveAverageFilterClear(&ass_stTorqMafValue);
-            stStopOrigCoef.k = 0;
-            stStopCoef = ass_stPolynomialcenter(&stStopOrigCoef);
-            ass_stCalCoef.swCoefStep = 0;
-        }
-        
-        break;
-    case Spd2Torq:
-        /*加速啮合,速度指令斜坡快速追踪踏频*/
-        if (ass_stCalIn.uwSpdFbkAbsPu < ((ass_stCalOut.swCadSpd2MotSpd*3) >> 1))
-        {
-            ass_stCalOut.swSpeedRef += 100;
-        }
-        else
-        {
-//            ass_stCalOut.swSpeedRef -= 4;
-        }
-        if (ass_stCalOut.swSpeedRef > ((ass_stCalOut.swCadSpd2MotSpd*3) >> 1))
-        {
-            ass_stCalOut.swSpeedRef = ((ass_stCalOut.swCadSpd2MotSpd*3) >> 1);
-        }
-        asr_stTorqSpdPIIn.swSpdRefPu = ass_stCalIn.swDirection*ass_stCalOut.swSpeedRef;
-        asr_stTorqSpdPIIn.swSpdFdbPu = ass_stCalIn.swSpdFbkPu;           // Q15
-        asr_stTorqSpdPIIn.swIqMaxPu = ass_stCalCoef.swSpdLoopAbsCurMax;  // Q14
-        asr_stTorqSpdPIIn.swIqMinPu = -ass_stCalCoef.swSpdLoopAbsCurMax; // Q14
-        asr_voSpdPI(&asr_stTorqSpdPIIn, &asr_stTorqSpdPICoef, &asr_stTorqSpdPIOut);
-        ass_stCalOut.swTorSpdLoopCurrentTemp = abs(asr_stTorqSpdPIOut.swIqRefPu);
-        /*啮合后切换至带速启动*/
-        ass_pvt_uwSpd2TorqCnt++;
-        if (ass_pvt_uwSpd2TorqCnt > 150)//ass_stCalIn.uwSpdFbkAbsPu > ass_stCalOut.swCadSpd2MotSpd )// && ass_stCalIn.uwtorquePer > ass_stCalCoef.uwAssStopThreshold) // Q15
-        {
-            ass_stCalCoef.StartFlag = 0;
-            ass_stCalCoef.uwStartUpTargetGain = 0;
-            swTmpSpdtoTorqCur = ass_swTorq2CurPu(swTeTorAssitPu1);
-            slTmpSmoothCur = ((ULONG)abs(asr_stTorqSpdPIOut.swIqRefPu) << 12) /
-                         swTmpSpdtoTorqCur; // abs(asr_stTorqSpdPIOut.swIqRefPu)/ass_swTorq2CurPu(swTeTorAssitPu1)
-            if (slTmpSmoothCur > Q12_1)
-            {
-                slTmpSmoothCur = Q12_1;
-            }
-            else
-            {}
-            ass_stCalCoef.swSmoothGain = 0;//Q12_1 >> 1;
-            ass_pvt_uwSpd2TorqCnt = 0;
-
-            Ass_FSM = StartupCruise;
-        }
-
-        /* Switch to ReduceCurrent FSM */
-        if((ass_stCalIn.uwcadancePer == 0) || (ass_stCalIn.uwGearSt == 0))
-        {
-            ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-            asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-            asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
-            ass_stCalCoef.swAss2SpdCNT = 0;
-            Ass_FSM = ReduceCurrent;
-            stStopOrigCoef.k = (SLONG)ass_stCalCoef.swSmoothGain;
-            stStopCoef = ass_stPolynomialcenter(&stStopOrigCoef);
-        }
-        else if ((ass_stCalIn.uwtorquePer <= ass_stCalCoef.uwAssStopThreshold)) // Q14
-        {
-            if (ass_stCalIn.uwcadance != ass_stCalIn.uwcadancelast)
-            {
-                ass_stCalCoef.swAss2SpdCNT++;
-            }
-            if (ass_stCalCoef.swAss2SpdCNT > (ass_stParaCong.uwCadPulsePerCirc >> 1)|| ass_stCalIn.uwcadance == 0)
-            {
-                ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-                asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-                asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
-                ass_stCalCoef.swAss2SpdCNT = 0;
-                Ass_FSM = ReduceCurrent;
-                stStopOrigCoef.k = (SLONG)ass_stCalCoef.swSmoothGain;
-                stStopCoef = ass_stPolynomialcenter(&stStopOrigCoef);
-            }
-        }
-        else
-        {
-            ass_stCalCoef.swAss2SpdCNT = 0;
-        }
-        break;
-
-    case StartupCruise:
-        if (ass_stCalCoef.StartFlag == 0)
-        {
-            ass_stCalCoef.swSmoothGain += ass_stCalCoef.uwStartUpGainAddStep;// / ass_stCalIn.uwGearSt; //助力比斜坡,与用户设置以及档位相关
-            if (ass_stCalCoef.swSmoothGain >= ass_stCalCoef.uwStartupCruiseGain)
-            {
-                ass_stCalCoef.StartFlag = 1;
-            }
-        }
-        else if (ass_stCalCoef.StartFlag == 1)
-        {
-            ass_stCalCoef.swSmoothGain -= ass_stCalCoef.uwStartUpGainAddStep;// / ass_stCalIn.uwGearSt; //助力比斜坡,与用户设置以及档位相关
-            if (ass_stCalIn.uwcadance != ass_stCalIn.uwcadancelast)
-            {
-                ass_stCalCoef.swCadanceCNT++;
-            }
-            if (ass_stCalCoef.swSmoothGain < Q12_1)
-            {
-                ass_stCalCoef.swSmoothGain = Q12_1;
-                if (ass_stCalCoef.swCadanceCNT > ass_stCalCoef.uwStartUpTimeCadenceCnt)
-                {
-                    Ass_FSM = TorqueAssit;
-                    ass_stCalCoef.swAss2SpdCNT = 0;
-                    ass_stCalCoef.swCadanceCNT = 0;
-                    ass_stCalCoef.sw2StopCNT = 0;
-                }
-            }
-        }
-        /* Switch to ReduceCurrent FSM */
-        if((ass_stCalIn.uwcadancePer == 0) || (ass_stCalIn.uwGearSt == 0))
-        {
-            ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-            asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-            asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
-            ass_stCalCoef.swAss2SpdCNT = 0;
-            ass_stCalCoef.sw2StopCNT = 0;
-            Ass_FSM = ReduceCurrent;
-            stStopOrigCoef.k = (SLONG)ass_stCalCoef.swSmoothGain;
-            stStopCoef = ass_stPolynomialcenter(&stStopOrigCoef);
-        }
-        else if(ass_stCalIn.uwtorquePer <= (ass_stCalCoef.uwAssStopThreshold))
-        {
-            if (ass_stCalIn.uwcadance != ass_stCalIn.uwcadancelast)
-            {
-                ass_stCalCoef.swAss2SpdCNT++;
-            }
-            if (ass_stCalCoef.swAss2SpdCNT > (ass_stParaCong.uwCadPulsePerCirc >> 1) || ass_stCalIn.uwcadancePer == 0)
-            {
-                ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-                asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-                asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
-                ass_stCalCoef.swAss2SpdCNT = 0;
-                ass_stCalCoef.sw2StopCNT = 0;
-                Ass_FSM = ReduceCurrent;
-                stStopOrigCoef.k = (SLONG)ass_stCalCoef.swSmoothGain;
-                stStopCoef = ass_stPolynomialcenter(&stStopOrigCoef);
-            }  
-        }
-        else
-        {
-            ass_stCalCoef.swAss2SpdCNT = 0;
-        }
-
-        break;
     case  ReduceCurrent:
         /* Switch to StopAssit FSM */
         if(ass_stCalCoef.swSmoothGain <= 0)
         {
             ass_stCalCoef.swSmoothGain = 0;
             ass_stCalCoef.swTorqFilterGain = 0;
-            ass_voMoveAverageFilterClear(&ass_stTorqMafValue);
             ass_stCalCoef.swCadanceGain = 0;
-            ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu; // Q15  Q10 (9.625)
-            asr_stTorqSpdPIOut.slIqRefPu = ((SLONG)ass_stCalOut.swTorAssistCurrent) << 16;
-            asr_stTorqSpdPIOut.swIqRefPu = ass_stCalOut.swTorAssistCurrent;
             Ass_FSM = StopAssit;     
         }  
         else
         {
             /* Reduce Curret Coef to Zero*/
             ass_stCalCoef.swSmoothGain -=40;   
+            ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
         }
         
         /* Switch to Startup FSM */
@@ -970,11 +745,11 @@ static void AssitCuvApplPerVolt(void)
         {
             Ass_FSM = Startup;
             ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu;
-            ass_stCalCoef.sw2StopCNT = 0;
             ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
         }
         
         break;
+        
     case StopAssit:
        ass_stCalOut.swTorSpdLoopCurrentTemp = 0;
        /* Switch to Startup FSM */
@@ -983,8 +758,7 @@ static void AssitCuvApplPerVolt(void)
             if (ass_stCalIn.uwtorquePer > ass_stCalCoef.uwAssThreshold && ass_stCalIn.uwcadance > 0)
             {               
                 ass_stCalCoef.sw2StopCNT = 0;
-                ass_pvt_swVoltCnt = 0;
-                ass_stCalOut.swVoltLimitPu = swTmpVoltPu;
+                ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
                 ass_pvt_stCurLpf.slY.sw.hi = 0;                
                 Ass_FSM = Startup;
             }
@@ -992,12 +766,9 @@ static void AssitCuvApplPerVolt(void)
         else
         {
             if (ass_stCalIn.uwtorquelpf > ((ass_stCalCoef.uwAssThreshold * 3)>>3) && ass_stCalIn.uwtorquePer > ass_stCalCoef.uwAssThreshold && ass_stCalIn.uwcadance > 0)
-            {
-                ass_pvt_uwSpd2TorqCnt = 0;               
-                ass_stCalOut.swSpeedRef = ass_stCalIn.uwSpdFbkAbsPu;
+            {            
                 ass_stCalCoef.sw2StopCNT = 0;
-                ass_pvt_swVoltCnt = 0;
-                ass_stCalOut.swVoltLimitPu = swTmpVoltPu;
+                ass_stCalOut.swVoltLimitPu = scm_swVsDcpLimPu;
                 ass_pvt_stCurLpf.slY.sw.hi = 0;               
                 Ass_FSM = Startup;
             }
@@ -1142,68 +913,7 @@ static void AssitCuvApplPerVolt(void)
         ass_stCalOut.swTorAssistCurrentTemp = ass_stCalIn.swDirection *(ass_stCalOut.swTorAss2CurrentTemp + ass_stCalOut.swCadAss2CurrentTemp);
 #endif      
         break;        
-    case StartupCruise:
-        swTeTorAssitPu2 = swTeTorAssitPu1 ; // Q14+Q12-Q12+Q12-Q12=Q14
-        swTeCadAssitPu2 = swTeCadAssitPu1 ; // Q14+Q12-Q12+Q12-Q12=Q14
-        ass_stCalOut.swTorAss2CurrentTemp = ass_swTorq2CurPu(swTeTorAssitPu2);                // Q14  电流指令计算
-        ass_stCalOut.swCadAss2CurrentTemp = ass_swTorq2CurPu(swTeCadAssitPu2);                // Q14  电流指令计算
-        if (ass_stCalOut.swTorAss2CurrentTemp > ass_stCalCoef.swCurrentmax_torAssPu)
-        {
-            ass_stCalOut.swTorAss2CurrentTemp = ass_stCalCoef.swCurrentmax_torAssPu;
-        }
-        if (ass_stCalOut.swCadAss2CurrentTemp > ass_stCalCoef.swCurrentmax_cadAssPu)
-        {
-            ass_stCalOut.swCadAss2CurrentTemp = ass_stCalCoef.swCurrentmax_cadAssPu;
-        }              
-#if CURSWITCH    
-        /* Ajust CurrentRef growth and decline rate */
-        ass_stCalOut.swTorRefTarget = ass_stCalOut.swTorAss2CurrentTemp + ass_stCalOut.swCadAss2CurrentTemp;
-        if((ass_stCalOut.swTorRefTarget - ass_stCalOut.swTorRefEnd) > 2)
-        {
-            ass_pvt_uwTorqAccCnt++;
-            if(ass_pvt_uwTorqAccCnt >= 1)
-            {
-                ass_stCalOut.swTorRefEnd += uwTorqAccStep; 
-                ass_pvt_uwTorqAccCnt = 0;
-            }    
-        }  
-        else if(((ass_stCalOut.swTorRefTarget - ass_stCalOut.swTorRefEnd) < (-1)))
-        {
-          if (ass_stCalIn.uwcadance != ass_stCalIn.uwcadancelast)
-          {
-               ass_stCalOut.swTorRefEnd -= uwTorqDecStep;
-          }
-        }
-        else
-        {
-           ass_stCalOut.swTorRefEnd = ass_stCalOut.swTorRefTarget;
-        }
-        
-        if(ass_stCalOut.swTorRefEnd  < ass_stCalOut.swTorSpdLoopCurrentTemp)
-        {
-            ass_stCalOut.swTorRefEnd  = ass_stCalOut.swTorSpdLoopCurrentTemp;
-            //ass_stCalOut.swTorSpdLoopCurrentTemp = 0; // 启动前电流最小为速度环电流,启动后最小电流为0
-        }
-        else
-        {
-            ass_stCalOut.swTorRefEnd = ass_stCalOut.swTorRefEnd;
-        }
-        ass_stCalOut.swTorAssistCurrentTemp = ass_stCalIn.swDirection * ass_stCalOut.swTorRefEnd;
-       
-#else
-        ass_stCalOut.swTorAssistCurrentTemp = ass_stCalOut.swTorAss2CurrentTemp + ass_stCalOut.swCadAss2CurrentTemp;
-        if(ass_stCalOut.swTorAssistCurrentTemp < ass_stCalOut.swTorSpdLoopCurrentTemp)
-        {
-            ass_stCalOut.swTorAssistCurrentTemp  = ass_stCalIn.swDirection*ass_stCalOut.swTorSpdLoopCurrentTemp;
-            //ass_stCalOut.swTorSpdLoopCurrentTemp = 0; // 启动前电流最小为速度环电流,启动后最小电流为0
-        }
-        else
-        {
-            ass_stCalOut.swTorAssistCurrentTemp = ass_stCalIn.swDirection * ass_stCalOut.swTorAssistCurrentTemp;
-        }
-#endif
-      
-        break; 
+    
     case  ReduceCurrent:
         swTeTorAssitPu2 = swTeTorAssitPu1; // Q14+Q12-Q12+Q12-Q12=Q14
         swTeCadAssitPu2 = swTeCadAssitPu1; // Q14+Q12-Q12+Q12-Q12=Q14
@@ -1219,13 +929,7 @@ static void AssitCuvApplPerVolt(void)
         }
         ass_stCalOut.swTorAssistCurrentTemp = ass_stCalIn.swDirection *(ass_stCalOut.swTorAss2CurrentTemp + ass_stCalOut.swCadAss2CurrentTemp);
         break; 
-    case SpeedAssit:
-        ass_stCalOut.swTorAssistCurrentTemp = asr_stTorqSpdPIOut.swIqRefPu; // ass_stCalOut.swTorSpdLoopCurrentTemp;
-        break;
-    case Spd2Torq:
-        ass_stCalOut.swTorAssistCurrentTemp = asr_stTorqSpdPIOut.swIqRefPu; // ass_stCalOut.swTorSpdLoopCurrentTemp;
-        ass_stCalOut.swTorRefEnd = ass_stCalOut.swTorAssistCurrentTemp;
-        break;
+ 
     case StopAssit:
          ass_stCalOut.swTorAssistCurrentTemp = 0;
          ass_stCalOut.swTorRefEnd = 0;

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

@@ -69,7 +69,11 @@ 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  8888 //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

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

@@ -43,7 +43,7 @@ Update Time
 #define MOTOR_WELLING_CITY_48V    0x30
 #define MOTOR_WELLING_MTB_48V     0x31
 
-#define MOTOR_ID_SEL              MOTOR_WELLING_CITY_36V
+#define MOTOR_ID_SEL              MOTOR_WELLING_MTB_36V
 
 
 /*======================================================================*