Эх сурвалжийг харах

增加Clz2Stop状态机,除过流外的故障均进入Clz2Stop状态机,3s后未停机才强制停机。

Ye Jin 5 сар өмнө
parent
commit
48e634d8f5

+ 1 - 0
1.FrameLayer/Source/FSM_1st.c

@@ -45,6 +45,7 @@ void FSM_voInit(void)
     switch_flg.SysRdy_Flag = FALSE;
     switch_flg.SysRun_Flag = FALSE;
     switch_flg.SysFault_Flag = FALSE;
+    switch_flg.SysWarnning_Flag = FALSE;
     switch_flg.SysCoef_Flag = FALSE;
     switch_flg.Standby_flg = 0;
 

+ 1 - 1
1.FrameLayer/Source/TimeTask_Event.c

@@ -391,7 +391,7 @@ void  Event_200ms(void)
     //bikelight_voGetBikeLightError(adc_stUpOut.uwU6VPu);
     //bikespeed_voGetBikeSpeedPwrError(adc_stUpOut.uwU5VPu);
 
-    if( (switch_flg.SysFault_Flag == TRUE) &&(MC_WorkMode == 1))
+    if( ((switch_flg.SysFault_Flag == TRUE) || (switch_flg.SysWarnning_Flag == TRUE)) && (MC_WorkMode == 1))
     {
          SendData(&UART_TxBuff_Struct_OBC, ID_MC_BC, MODE_REPORT, 0x1104, (uint8_t *)&MC_ErrorCode.Code);
     }

+ 4 - 1
1.FrameLayer/Source/tbc.c

@@ -153,7 +153,10 @@ void tbc_voDownIsr(void)
 
     /* System FSM */
     if (adc_stDownOut.blADCCalibFlg!=0)//自检完再切换状态机
-    switch_flg.SysFault_Flag = alm_blAlmOccrFlg;
+    {
+        switch_flg.SysFault_Flag = alm_blAlmOccrFlg;
+        switch_flg.SysWarnning_Flag = alm_blWarnOccrFlg;
+    }
 //    if (switch_flg.SysFault_Flag == TRUE)
 //    {
 //        que_stErrorLog.ErrorCode = alm_unCode.all;

+ 2 - 0
2.MotorDrive/Include/alarm.h

@@ -477,6 +477,7 @@ _ALARM_EXT ALM_DETECT_COUNT  alm_stDecCt = ALM_DETECT_COUNT_DEFAULT;
 _ALARM_EXT ALM_STOP_COUNT    alm_stStopCt = ALM_STOP_COUNT_DEFAULT;
 _ALARM_EXT ALM_RECOVER_COUNT alm_stRecCt = ALM_RECOVER_COUNT_DEFAULT;
 _ALARM_EXT BOOL              alm_blAlmOccrFlg = FALSE;
+_ALARM_EXT BOOL              alm_blWarnOccrFlg = FALSE;
 _ALARM_EXT BOOL              alm_blAlmSingleRecordDoneFlg = FALSE;
 #else
 _ALARM_EXT ALM_CODE          alm_unCode;
@@ -496,6 +497,7 @@ _ALARM_EXT ALM_DETECT_COUNT  alm_stDecCt;
 _ALARM_EXT ALM_STOP_COUNT    alm_stStopCt;
 _ALARM_EXT ALM_RECOVER_COUNT alm_stRecCt;
 _ALARM_EXT BOOL              alm_blAlmOccrFlg;
+_ALARM_EXT BOOL              alm_blWarnOccrFlg;
 _ALARM_EXT BOOL              alm_blAlmSingleRecordDoneFlg;
 #endif
 

+ 7 - 1
2.MotorDrive/Include/spdctrFSM.h

@@ -45,7 +45,8 @@ typedef enum
     StartUp = 3,
     Open2Clz = 4,
     ClzLoop = 5,
-    Stop = 6
+    Stop = 6,
+    Clz2Stop = 7
 } SCM_SPDMDFSM;
 
 typedef struct
@@ -69,6 +70,7 @@ _STARTFSM_EXT void StartUp_TbcupHook(void);
 _STARTFSM_EXT void Open2Clz_TbcupHook(void);
 _STARTFSM_EXT void ClzLoop_TbcupHook(void);
 _STARTFSM_EXT void Stop_TbcupHook(void);
+_STARTFSM_EXT void Clz2Stop_TbcupHook(void);
 
 _STARTFSM_EXT void InitPosDet_TbcdownHook(void);
 _STARTFSM_EXT void ParDet_TbcdownHook(void);
@@ -76,6 +78,7 @@ _STARTFSM_EXT void StartUp_TbcdownHook(void);
 _STARTFSM_EXT void Open2Clz_TbcdownHook(void);
 _STARTFSM_EXT void ClzLoop_TbcdownHook(void);
 _STARTFSM_EXT void Stop_TbcdownHook(void);
+_STARTFSM_EXT void Clz2Stop_TbcdownHook(void);
 
 _STARTFSM_EXT void InitPosDet_TbsHook(void);
 _STARTFSM_EXT void ParDet_TbsHook(void);
@@ -83,6 +86,7 @@ _STARTFSM_EXT void StartUp_TbsHook(void);
 _STARTFSM_EXT void Open2Clz_TbsHook(void);
 _STARTFSM_EXT void ClzLoop_TbsHook(void);
 _STARTFSM_EXT void Stop_TbsHook(void);
+_STARTFSM_EXT void Clz2Stop_TbsHook(void);
 
 _STARTFSM_EXT void scm_voSpdCtrMdFSM(void);
 _STARTFSM_EXT void Switch_speed_FSM(SPD_STATE_HOOK *in);
@@ -99,6 +103,7 @@ _STARTFSM_EXT SPD_STATE_HOOK StartUp_state = {StartUp, StartUp_TbcupHook, StartU
 _STARTFSM_EXT SPD_STATE_HOOK Open2Clz_state = {Open2Clz, Open2Clz_TbcupHook, Open2Clz_TbcdownHook, Open2Clz_TbsHook};
 _STARTFSM_EXT SPD_STATE_HOOK ClzLoop_state = {ClzLoop, ClzLoop_TbcupHook, ClzLoop_TbcdownHook, ClzLoop_TbsHook};
 _STARTFSM_EXT SPD_STATE_HOOK Stop_state = {Stop, Stop_TbcupHook, Stop_TbcdownHook, Stop_TbsHook};
+_STARTFSM_EXT SPD_STATE_HOOK Clz2Stop_state = {Clz2Stop, Clz2Stop_TbcupHook, Clz2Stop_TbcdownHook, Clz2Stop_TbsHook};
 #else
 _STARTFSM_EXT ULONG          scm_ulStatCt;
 _STARTFSM_EXT SPD_STATE_HOOK InitPosDet_state;
@@ -107,6 +112,7 @@ _STARTFSM_EXT SPD_STATE_HOOK StartUp_state;
 _STARTFSM_EXT SPD_STATE_HOOK Open2Clz_state;
 _STARTFSM_EXT SPD_STATE_HOOK ClzLoop_state;
 _STARTFSM_EXT SPD_STATE_HOOK Stop_state;
+_STARTFSM_EXT SPD_STATE_HOOK Clz2Stop_state;
 #endif
 /************************************************************************
  RAM ALLOCATION (N/A)

+ 43 - 29
2.MotorDrive/Source/alarm.c

@@ -51,6 +51,7 @@ SWORD alm_pvt_swIqRefLpfAbsPu = 0;
 _Bool  alm_pvt_blTbcFirstFlg = FALSE;
 _Bool  alm_pvt_blTbsFirstFlg = FALSE;
 SWORD alm_pvt_swRtLockPwrRatio = 0;
+static ULONG alm_pvt_ulWarn2ErrorCount = 0;
 _Bool  alm_pvt_blCadFltPowerUpFlg = FALSE;
 IABCSTRUCT alm_I_Filter;
 /************************************************************************
@@ -76,6 +77,7 @@ void alm_voInit(void)
     alm_unCode.all = 0;
     alm_unBikeCode.all = 0;
     alm_blAlmOccrFlg = FALSE;
+    alm_blWarnOccrFlg = FALSE;
 
     /* Alarm action init */
     alm_unAction.all = 0;
@@ -300,7 +302,7 @@ void alm_voDetecTBC(ALM_IN *in, ALM_DETECTBC_COF *coef)
   if(alm_unCode.bit.IPMFlt==TRUE)//  if (MCU_BRKIN_FLG) //
     {
         alm_unAction.bit.ThrPhsShrtFrc = TRUE;
-       // alm_unCode.bit.IPMFlt = TRUE;
+//        alm_unCode.bit.IPMFlt = TRUE;
     }
 
     if (alm_pvt_blTbcFirstFlg == TRUE)
@@ -409,7 +411,7 @@ void alm_voDetecTBC(ALM_IN *in, ALM_DETECTBC_COF *coef)
                 alm_stDecCt.ulPhsALoss = coef->ulPhsLossValCt;
                 alm_stDecCt.ulPhsBLoss = coef->ulPhsLossValCt;
                 alm_stDecCt.ulPhsCLoss = coef->ulPhsLossValCt;
-                alm_unAction.bit.PWMOff = TRUE;
+//                alm_unAction.bit.PWMOff = TRUE;
                 // alm_unAction.bit.ThrPhsShrt = TRUE;
                 alm_unCode.bit.PhsLoss = TRUE;
             }
@@ -441,7 +443,7 @@ void alm_voDetecTBC(ALM_IN *in, ALM_DETECTBC_COF *coef)
                     if (alm_stDecCt.slRotorLock >= coef->slRotorLockValCt)
                     {
                         alm_stDecCt.slRotorLock = coef->slRotorLockValCt;
-                        alm_unAction.bit.PWMOff = TRUE;
+//                        alm_unAction.bit.PWMOff = TRUE;
                         alm_unCode.bit.RotorLock = TRUE;
                     }
                 }
@@ -515,17 +517,24 @@ void alm_voDetecTBC(ALM_IN *in, ALM_DETECTBC_COF *coef)
     }
 
     /*========================== Alarm flag set ===========================*/
-    if ((alm_unCode.all)
-            || (alm_pvt_blIPMOTReCheckFlg == TRUE)
-            || (alm_pvt_blMotorOTReCheckFlg == TRUE)
-           // || (clasB_unFaultCode.all)
-            || (alm_unBikeCode.all != 0) )
-//    if((alm_pvt_blIPMOTReCheckFlg == TRUE)
-//                || (alm_pvt_blMotorOTReCheckFlg == TRUE)
-//                || (alm_unCode.bit.IPMFlt == TRUE ))
+    //if((alm_unCode.bit.OvrCur == 1) || (alm_unCode.bit.IPMFlt == 1) || (alm_unCode.bit.MCUErr == 1))
+    if((alm_unCode.bit.OvrCur == 1) || (alm_unCode.bit.IPMFlt == 1))
     {
         alm_blAlmOccrFlg = TRUE;
     }
+    else if ((alm_unCode.all != 0) || (alm_unBikeCode.all != 0))
+    {
+        alm_blWarnOccrFlg = TRUE;
+
+        if(alm_pvt_ulWarn2ErrorCount > 24000)
+        {
+            alm_blAlmOccrFlg = TRUE;
+        }
+        else
+        {
+            alm_pvt_ulWarn2ErrorCount++;
+        }
+    }
 }
 
 /***************************************************************
@@ -589,7 +598,7 @@ void alm_voDetecTBS(ALM_IN *in, ALM_DETECTBS_COF *coef)
                 alm_stDecCt.ulOvrVltLvl1 = coef->ulOvrVltLvl1ValCt;
                 // alm_unAction.bit.ThrPhsShrt = TRUE;
                 alm_unCode.bit.OvrVlt = TRUE;
-                alm_unAction.bit.PWMOff = TRUE;
+//                alm_unAction.bit.PWMOff = TRUE;
             }
         }
         else
@@ -608,7 +617,7 @@ void alm_voDetecTBS(ALM_IN *in, ALM_DETECTBS_COF *coef)
                 alm_stDecCt.ulUndrVltLvl1 = coef->ulUndrVltLvl1ValCt;
 //                alm_unAction.bit.PWMOff = TRUE;
                 alm_unCode.bit.UndrVlt = TRUE;
-                alm_unAction.bit.PWMOff = TRUE;
+//                alm_unAction.bit.PWMOff = TRUE;
             }
         }
         else
@@ -650,7 +659,7 @@ void alm_voDetecTBS(ALM_IN *in, ALM_DETECTBS_COF *coef)
                 {
                     alm_stDecCt.ulIPMOvrHeat1 = coef->ulIPMOvrHeatValCt;
                     // alm_unAction.bit.ThrPhsShrt = TRUE;
-                    alm_unAction.bit.PWMOff = TRUE;
+//                    alm_unAction.bit.PWMOff = TRUE;
                     alm_unCode.bit.IPMOvrHeat = TRUE;
                 }
             }
@@ -668,7 +677,7 @@ void alm_voDetecTBS(ALM_IN *in, ALM_DETECTBS_COF *coef)
                 {
                     alm_stDecCt.ulIPMOvrHeat = coef->ulIPMOvrHeatValCt;
                     // alm_unAction.bit.ThrPhsShrt = TRUE;
-                    alm_unAction.bit.PWMOff = TRUE;
+//                    alm_unAction.bit.PWMOff = TRUE;
                     alm_unCode.bit.IPMOvrHeat = TRUE;
                     alm_pvt_blIPMOTReCheckFlg = TRUE;
                 }
@@ -692,7 +701,7 @@ void alm_voDetecTBS(ALM_IN *in, ALM_DETECTBS_COF *coef)
                 {
                     alm_stDecCt.ulMotorOvrHeat1 = coef->ulMotorOvrHeatValCt;
                     // alm_unAction.bit.ThrPhsShrt = TRUE;
-                    alm_unAction.bit.PWMOff = TRUE;
+//                    alm_unAction.bit.PWMOff = TRUE;
                     alm_unCode.bit.MotorOvrHeat = TRUE;
                 }
             }
@@ -710,7 +719,7 @@ void alm_voDetecTBS(ALM_IN *in, ALM_DETECTBS_COF *coef)
                 {
                     alm_stDecCt.ulMotorOvrHeat = coef->ulMotorOvrHeatValCt;
                     // alm_unAction.bit.ThrPhsShrt = TRUE;
-                    alm_unAction.bit.PWMOff = TRUE;
+//                    alm_unAction.bit.PWMOff = TRUE;
                     alm_unCode.bit.MotorOvrHeat = TRUE;
                     alm_pvt_blMotorOTReCheckFlg = TRUE;
                 }
@@ -755,7 +764,7 @@ void alm_voDetecTBS(ALM_IN *in, ALM_DETECTBS_COF *coef)
         #endif
         {
             alm_stDecCt.ulHallLoss = 0;
-            alm_unAction.bit.PWMOff = TRUE;
+//            alm_unAction.bit.PWMOff = TRUE;
             alm_unCode.bit.HallLoss = TRUE;
         }
         }
@@ -1251,9 +1260,14 @@ void alm_voReset(ALM_IN *in, ALM_RESET_COF *coef)
         alm_stRecCt.ulIPMOvrHeat1 = 0;
         alm_stRecCt.ulIPMOC = 0;
 
-        /* Clear alarm flag */
-        alm_blAlmOccrFlg = FALSE;
-        alm_blAlmSingleRecordDoneFlg = FALSE;
+        if(alm_unBikeCode.all == 0)
+        {
+            /* Clear alarm flag */
+            alm_blAlmOccrFlg = FALSE;
+            alm_blWarnOccrFlg = FALSE;
+            alm_pvt_ulWarn2ErrorCount = 0;
+            alm_blAlmSingleRecordDoneFlg = FALSE;
+        }
     }
 }
 
@@ -1323,13 +1337,13 @@ void alm_voDetec200MS(const ALM_BIKE_IN *in, const ALM_DETEC200MS_COF *coef)
             {
                 alm_stDecCt.uwBikeSpdFlt = coef->uwBikeSpdFltCt;
                 alm_unBikeCode.bit.BikeSpdSen = 1;
-                alm_unAction.bit.PWMOff = 1;
+//                alm_unAction.bit.PWMOff = 1;
             }    
         }
         else if(in->blBikeSpdOvrFlg)
         {        
             alm_unBikeCode.bit.BikeSpdSen = 1;
-            alm_unAction.bit.PWMOff = 1;
+//            alm_unAction.bit.PWMOff = 1;
         }
         else
         {
@@ -1349,7 +1363,7 @@ void alm_voDetec200MS(const ALM_BIKE_IN *in, const ALM_DETEC200MS_COF *coef)
         if(in->blCadenceFreqOvrFlg)
         {
             alm_unBikeCode.bit.CadenceSen = 1;
-            alm_unAction.bit.PWMOff = 1;
+//            alm_unAction.bit.PWMOff = 1;
         }
     }
     else if((cp_stFlg.RunModelSelect == TorqAssist) &&(power_stPowStateOut.blPowerStartupFlg == TRUE))/* 力矩中轴助力判断逻辑 */
@@ -1364,13 +1378,13 @@ void alm_voDetec200MS(const ALM_BIKE_IN *in, const ALM_DETEC200MS_COF *coef)
                 {
                     alm_stDecCt.uwCadenceFlt = coef->uwCadenceFltCt;
                     alm_unBikeCode.bit.CadenceSen = 1;
-                    alm_unAction.bit.PWMOff = 1;
+//                    alm_unAction.bit.PWMOff = 1;
                 }
             }
             else if(in->blCadenceFreqOvrFlg)
             {
                 alm_unBikeCode.bit.CadenceSen = 1;
-                alm_unAction.bit.PWMOff = 1;
+//                alm_unAction.bit.PWMOff = 1;
             }
             else
             {
@@ -1390,7 +1404,7 @@ void alm_voDetec200MS(const ALM_BIKE_IN *in, const ALM_DETEC200MS_COF *coef)
             {
                 alm_stDecCt.uwTorqFlt = coef->uwTorqFltCt;
                 alm_unBikeCode.bit.TorqSen = 1;
-                alm_unAction.bit.PWMOff = 1;
+//                alm_unAction.bit.PWMOff = 1;
             }
         }
         else
@@ -1411,7 +1425,7 @@ void alm_voDetec200MS(const ALM_BIKE_IN *in, const ALM_DETEC200MS_COF *coef)
             {
                 alm_stDecCt.uwThrottleFlt = coef->uwThrottleFltCt;
                 alm_unBikeCode.bit.Throttle = 1;
-                alm_unAction.bit.PWMOff = 1;
+//                alm_unAction.bit.PWMOff = 1;
             }
         } 
         else
@@ -1446,7 +1460,7 @@ void alm_voDetec200MS(const ALM_BIKE_IN *in, const ALM_DETEC200MS_COF *coef)
             {
                 alm_stDecCt.uwMotorNTCFlt = coef->uwMotorNTCFltCt;
                 alm_unBikeCode.bit.MotorNTC = 1;
-                alm_unAction.bit.PWMOff = 1;
+//                alm_unAction.bit.PWMOff = 1;
             }
         }
         else

+ 204 - 10
2.MotorDrive/Source/spdctrFSM.c

@@ -172,6 +172,22 @@ void ClzLoop_TbcupHook(void)
 void Stop_TbcupHook(void)
 {}
 
+void Clz2Stop_TbcupHook(void)
+{
+    scm_ulStatCt++;
+
+    /*=======================================================================
+                                         Power Limit
+      =======================================================================*/
+    mth_voLPFilter(adc_stUpOut.PCBTemp, &scm_stPCBTempLpf);
+    mth_voLPFilter(adc_stUpOut.MotorTemp, &scm_stMotorTempLpf);
+    pwr_stPwrLimIn.swMotorPwrPu = scm_stMotoPwrInLpf.slY.sw.hi; // Q15
+    pwr_stPwrLimIn.swPCBTemp = scm_stPCBTempLpf.slY.sw.hi;
+    pwr_stPwrLimIn.swMotorTemp = scm_stMotorTempLpf.slY.sw.hi;
+    pwr_stPwrLimIn.uwBatCap = MC_RunInfo.SOC;
+    pwr_voPwrLimPI(&pwr_stPwrLimIn, &pwr_stPwrLimCof, &pwr_stPwrLimOut2); // Q14
+}
+
 void InitPosDet_TbcdownHook(void)
 {
     /* Get angle for park transformation */
@@ -433,6 +449,155 @@ void ClzLoop_TbcdownHook(void)
     }
 }
 
+void Clz2Stop_TbcdownHook(void)
+{
+    ULONG ulTmp1;
+    SWORD swAngCompPu; // Q15
+
+/* Speed feedback LPF */
+//    obs_stObsCalcIn.swUalphaPu = scm_swUalphaPu;              // Q14
+//    obs_stObsCalcIn.swUbetaPu = scm_swUbetaPu;                // Q14
+//    obs_stObsCalcIn.swIalphaPu = crd_stCurClarkOut.swAlphaPu; // Q14
+//    obs_stObsCalcIn.swIbetaPu = crd_stCurClarkOut.swBetaPu;   // Q14
+//    obs_stObsCalcIn.uwVdcPu = adc_stUpOut.uwVdcLpfPu;
+//    obs_voObsCalc(&obs_stObsCalcIn, &obs_stObsCoefPu, &obs_stObsOutPu);
+
+    /* Angle Switch */
+//    if(scm_stSpdFbkLpf.slY.sw.hi > 7801)  // 2000rpm
+//    {
+//        cp_stFlg.ThetaGetModelSelect = ANG_OBSERVER;
+//    }
+//    else
+//    {
+//        if(scm_stSpdFbkLpf.slY.sw.hi < 5851)  // 1500rpm
+//        {
+//            cp_stFlg.ThetaGetModelSelect = ANG_SWITCHHALL;
+//        }
+//    }
+
+
+//    obs_stObsCalcIn.swUalphaPu = scm_swUalphaPu;              // Q14
+//    obs_stObsCalcIn.swUbetaPu = scm_swUbetaPu;                // Q14
+//    obs_stObsCalcIn.swIalphaPu = crd_stCurClarkOut.swAlphaPu; // Q14
+//    obs_stObsCalcIn.swIbetaPu = crd_stCurClarkOut.swBetaPu;   // Q14
+//    obs_stObsCalcIn.uwVdcPu = adc_stUpOut.uwVdcLpfPu;
+//    obs_voObsCalc(&obs_stObsCalcIn, &obs_stObsCoefPu, &obs_stObsOutPu);
+//    mth_voLPFilter(obs_stObsOutPu.swElecFreqPu, &scm_stSpdFbkLpf);
+
+//    if(cp_stFlg.ThetaGetModelSelect == ANG_OBSERVER)
+//    {
+//        obs_stObsCalcIn.swUalphaPu = scm_swUalphaPu;              // Q14
+//        obs_stObsCalcIn.swUbetaPu = scm_swUbetaPu;                // Q14
+//        obs_stObsCalcIn.swIalphaPu = crd_stCurClarkOut.swAlphaPu; // Q14
+//        obs_stObsCalcIn.swIbetaPu = crd_stCurClarkOut.swBetaPu;   // Q14
+//        obs_stObsCalcIn.uwVdcPu = adc_stUpOut.uwVdcLpfPu;
+//        obs_voObsCalc(&obs_stObsCalcIn, &obs_stObsCoefPu, &obs_stObsOutPu);
+//        mth_voLPFilter(obs_stObsOutPu.swElecFreqPu, &scm_stSpdFbkLpf);
+////        scm_uwAngRefPu = obs_stObsOutPu.uwElecThetaPu;
+//        temptheta = (SWORD)obs_stObsOutPu.uwElecThetaPu + thetaoffset;
+//
+//        if (temptheta >= cof_sl360DegreePu)
+//        {
+//            temptheta -= cof_sl360DegreePu;
+//        }
+//        else if (temptheta < (-(cof_sl360DegreePu)))
+//        {
+//            temptheta += cof_sl360DegreePu;
+//        }
+//        scm_uwAngRefPu=temptheta;
+//        tstThetaCorrect=scm_uwAngRefPu-rtY.Angle_Filtered;
+//
+//
+//    }
+//    else if(cp_stFlg.ThetaGetModelSelect == ANG_RESOLVER)
+//    {
+//      //  mth_voLPFilter(spi_stResolverOut.swSpdFbkPu, &scm_stSpdFbkLpf);
+//      //  scm_uwAngRefPu = spi_stResolverOut.uwSpiThetaPu;
+//    }
+//    else
+        if(cp_stFlg.ThetaGetModelSelect == ANG_SWITCHHALL)
+    {
+//        mth_voLPFilter(switchhall_stOut.swLowSpdPu, &scm_stSpdFbkLpf);
+        //mth_voLPFilter(switchhall_stOut.swLowSpdLpfPu, &scm_stSpdFbkLpf);
+        scm_stSpdFbkLpf.slY.sw.hi = switchhall_stOut.swLowSpdLpfPu;
+
+         //  scm_uwAngRefPu = switchhall_stOut.slLowThetaPu;
+             scm_uwAngRefPu = rtY.Angle_Filtered;
+        //scm_uwAngRefPu = LoadObsTheta_Y.uwThetaObsPu;
+    }
+    else
+    {}
+
+    /*=======================================================================
+             Set Iq limit and Id reference for Constant Voltage Break
+    =======================================================================*/
+    cvb_stBrakeIn.uwVdcLpfPu = (SWORD)adc_stUpOut.uwVdcLpfPu;
+    cvb_stBrakeIn.swIdRefPu = scm_swIdRefPu;
+    cvb_stBrakeIn.swIqRefPu = 0;//swCurRefrompu; //scm_swIqRefPu;
+    cvb_stBrakeIn.swSpdPu = scm_stSpdFbkLpf.slY.sw.hi;
+    cvb_stBrakeIn.uwAngelPu = scm_uwAngRefPu;
+    cvb_stBrakeIn.uwSpdLpfAbsPu = scm_uwSpdFbkLpfAbsPu;
+    cvb_voBrake(&cvb_stBrakeIn,&cvb_stBrakeCoef,&cvb_stBrakeOut);
+
+    scm_swIqRefPu = cvb_stBrakeOut.swIqRefPu;
+    scm_uwAngRefPu = cvb_stBrakeOut.uwAngelPu;
+    if(cvb_stBrakeIn.uwVdcLpfPu >= cvb_stBrakeCoef.uwVdcStartCvbPu)
+    {
+        scm_swIdRefPu = cvb_stBrakeOut.swIdRefPu;
+    }
+    else
+    {
+        scm_swIdRefPu = 0;//flx_stCtrlOut.swIdRefPu;
+    }
+
+    /* Speed feedback Absolute */
+    scm_uwSpdFbkLpfAbsPu = abs(scm_stSpdFbkLpf.slY.sw.hi); // Q15
+
+    /* Get angle for park transformation */
+    scm_uwAngParkPu = scm_uwAngRefPu; // Q15
+
+//    if(cp_stFlg.ThetaGetModelSelect == ANG_OBSERVER)
+//    {
+//        swAngCompPu = ((SLONG)obs_stObsOutPu.swElecFreqPu * TBC_TM) >> 10; // Q15
+//    }
+//    else if(cp_stFlg.ThetaGetModelSelect == ANG_RESOLVER)
+//    {
+//       // swAngCompPu = ((SLONG)spi_stResolverOut.swSpdFbkPu * TBC_TM) >> 10; // Q15
+//    }
+//    else
+        if(cp_stFlg.ThetaGetModelSelect == ANG_SWITCHHALL)
+    {
+        swAngCompPu = ((SLONG)switchhall_stOut.swLowSpdLpfPu * TBC_TM) >> 10; // Q15
+    }
+    else
+    {}
+
+    ulTmp1 = scm_uwAngParkPu + ((swAngCompPu * 3) >> 1) + cof_sl720DegreePu; // ˫���²���2.5��PWM���ڣ� �����²���1.5��PWM����
+    scm_uwAngIParkPu = ulTmp1 & 0x7FFF;
+    ulTmp1 = scm_uwAngParkPu + ((swAngCompPu * 2) >> 1) + cof_sl720DegreePu;
+    scm_uwAngIParkPu1 = ulTmp1 & 0x7FFF;
+    /*=======================================================================
+                        Current decoupling
+    =======================================================================*/
+    if(switch_flg.SysRun_Flag == TRUE)
+    {
+        acr_stUdqDcpIn.swWsPu = scm_stSpdFbkLpf.slY.sw.hi; // switchhall_stOut.swLowSpdLpfPu;//scm_stSpdFbkLpf.slY.sw.hi; //Q15
+        acr_stUdqDcpIn.swIdRefPu = 0;//scm_swIdFdbLpfPu; //scm_swIdFdbLpfPu;//scm_swIdRefPu;          // Q14
+        acr_stUdqDcpIn.swIqRefPu = 0;//scm_swIqFdbLpfPu; //scm_swIqFdbLpfPu;//scm_swIqRefPu;          // Q14 scm_swIqFdbLpfPu
+        acr_stUdqDcpIn.swUdqLimPu = scm_swVsDcpLimPu;      // Q14
+        acr_voUdqDcp(&acr_stUdqDcpIn, &acr_stUdqDcpCoef, &acr_stUdqDcpOut);
+    }
+    else
+    {
+       if(++UdqDcpOutCount>100)
+        {
+          UdqDcpOutCount=0;
+        acr_stUdqDcpOut.swUdPu = ((SLONG)acr_stUdqDcpOut.swUdPu*1010)>>10;
+        acr_stUdqDcpOut.swUqPu = ((SLONG)acr_stUdqDcpOut.swUqPu*1010)>>10;
+        }
+    }
+}
+
 void Stop_TbcdownHook(void)
 {
 
@@ -479,6 +644,9 @@ void ClzLoop_TbsHook(void)
 void Stop_TbsHook(void)
 {}
 
+void Clz2Stop_TbsHook(void)
+{}
+
 void scm_voSpdCtrMdFSM(void)
 {
     switch (curSpeed_state.state)
@@ -495,8 +663,11 @@ void scm_voSpdCtrMdFSM(void)
         {
             Switch_speed_FSM(&Stop_state);
         }
-
-        if (scm_ulStatCt < mn_ulAlignRampTbcCt)
+        else if(switch_flg.SysWarnning_Flag == 1)
+        {
+            Switch_speed_FSM(&Clz2Stop_state);
+        }
+        else if (scm_ulStatCt < mn_ulAlignRampTbcCt)
         {}
         else if (scm_ulStatCt >= (mn_ulAlignRampTbcCt + mn_ulAlignHoldTbcCt + 10))
         {
@@ -540,6 +711,10 @@ void scm_voSpdCtrMdFSM(void)
         {
             Switch_speed_FSM(&Stop_state);
         }
+        else if(switch_flg.SysWarnning_Flag == 1)
+        {
+            Switch_speed_FSM(&Clz2Stop_state);
+        }
 //        if (scm_StartUpOvrFlg == TRUE)
 //        {
 //            if(cp_stFlg.ThetaGetModelSelect == ANG_OBSERVER)  //|| cp_stFlg.ThetaGetModelSelect ==ANG_SWITCHHALL
@@ -570,12 +745,13 @@ void scm_voSpdCtrMdFSM(void)
         {
             Switch_speed_FSM(&Stop_state);
         }
-        /* Switch over */
-        if (scm_blCurSwitchOvrFlg && scm_blAngSwitchOvrFlg)
+        else if(switch_flg.SysWarnning_Flag == 1)
+        {
+            Switch_speed_FSM(&Clz2Stop_state);
+        }
+        else if (scm_blCurSwitchOvrFlg && scm_blAngSwitchOvrFlg)/* Switch over */
         {
-
             Switch_speed_FSM(&ClzLoop_state);
-
         }
 
         break;
@@ -586,7 +762,11 @@ void scm_voSpdCtrMdFSM(void)
         {
             Switch_speed_FSM(&Stop_state);
         }
-        if (!switch_flg.SysRun_Flag)
+        else if(switch_flg.SysWarnning_Flag == 1)
+        {
+            Switch_speed_FSM(&Clz2Stop_state);
+        }
+        else if (!switch_flg.SysRun_Flag)
         {
             /* Go to stop */
             if (((abs(scm_swSpdRefPu) < mn_uwStopSpdRefPu) && (scm_uwSpdFbkLpfAbsPu < mn_uwStopSpdRefPu))
@@ -594,15 +774,29 @@ void scm_voSpdCtrMdFSM(void)
             {
                 scm_swIdRefPu = 0;
                 scm_swIqRefPu = 0;
-                Switch_speed_FSM(&Stop_state);
+                Switch_speed_FSM(&Clz2Stop_state);
             }
         }
         else
         {}
 
         break;
-    case Stop:
-        if (switch_flg.SysRun_Flag == TRUE && switch_flg.SysFault_Flag == FALSE) //&& power_stPowStateOut.powerstate == POWER_ON_END
+    case Clz2Stop:
+        if (switch_flg.SysFault_Flag == 1 || power_stPowStateOut.powerstate == POWER_OFF)
+        {
+            Switch_speed_FSM(&Stop_state);
+        }
+        else if((scm_ulStatCt > 24000) || (scm_uwSpdFbkLpfAbsPu < mn_uwStopSpdRefPu))
+        {
+            Switch_speed_FSM(&Stop_state);
+        }
+        else
+        {
+            //do nothing
+        }
+        break;
+     case Stop:
+        if (switch_flg.SysRun_Flag == TRUE && switch_flg.SysFault_Flag == FALSE && switch_flg.SysWarnning_Flag == FALSE) //&& power_stPowStateOut.powerstate == POWER_ON_END
         {
             scm_voSpdCtrMdInit();
 

+ 90 - 73
3.BasicFunction/Source/canAppl.c

@@ -356,35 +356,37 @@ void Can_voMC_Run_1ms(void)
     else
     {}
     //故障日志获取故障状态
-    if (alm_blAlmOccrFlg == TRUE)
+    if ((alm_blAlmOccrFlg == TRUE) || (alm_blWarnOccrFlg == TRUE))
     {
-     if (alm_blAlmSingleRecordDoneFlg == FALSE)// 
+//     if (alm_blAlmSingleRecordDoneFlg == FALSE)//
      {
-        if (alm_unCode.bit.IPMFlt == 1)  //硬件过流
+        if ((alm_unCode.bit.IPMFlt == 1) && (MC_ErrorCode.ERROR_Bit.Protect_OverCurrent == 0)) //硬件过流
         {
             MC_ErrorCntRecord.Protect_OverCurrentCnt++;
-            cp_stHistoryPara.uwAlamHOcurTimes++;
+
             if (MC_ErrorCntRecord.Protect_OverCurrentCnt == ALAM_DISPLAY_CNT_0LEVEL) // ALAM_DISPLAY_CNT_2LEVEL
             {
                 if(MC_ErrorCode.ERROR_Bit.Protect_OverCurrent==0)
                 {
-                MC_ErrorCode.ERROR_Bit.Protect_OverCurrent = 1;
-                /*error log updata*/
-                ErrorLog_Updata();
-                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                    MC_ErrorCode.ERROR_Bit.Protect_OverCurrent = 1;
+                    cp_stHistoryPara.uwAlamHOcurTimes++;
+                    /*error log updata*/
+                    ErrorLog_Updata();
+                    que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                }
             }
         }
-        }
 
-        if (alm_unCode.bit.OvrCur == 1) //软件过流
+        if ((alm_unCode.bit.OvrCur == 1) && (MC_ErrorCode.ERROR_Bit.Protect_OverCurrent == 0))//软件过流
         {
             MC_ErrorCntRecord.Protect_OverCurrentCnt++;
-            cp_stHistoryPara.uwAlamSOcurTimes++;
+
             if (MC_ErrorCntRecord.Protect_OverCurrentCnt == ALAM_DISPLAY_CNT_0LEVEL) // ALAM_DISPLAY_CNT_2LEVEL
             {
                if(MC_ErrorCode.ERROR_Bit.Protect_OverCurrent==0)
                {
                 MC_ErrorCode.ERROR_Bit.Protect_OverCurrent = 1;
+                cp_stHistoryPara.uwAlamSOcurTimes++;
                 /*error log updata*/
                 ErrorLog_Updata();
                 que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
@@ -392,85 +394,90 @@ void Can_voMC_Run_1ms(void)
         }
         }
 
-        if (alm_unCode.bit.OvrVlt == 1) //过压
+        if ((alm_unCode.bit.OvrVlt == 1) && (MC_ErrorCode.ERROR_Bit.Protect_OverVoltage == 0))//过压
         {
             MC_ErrorCntRecord.Protect_OverVoltageCnt++;
-            cp_stHistoryPara.uwAlamOVolTimes++;
+
             if (MC_ErrorCntRecord.Protect_OverVoltageCnt == ALAM_DISPLAY_CNT_0LEVEL) // ALAM_DISPLAY_CNT_2LEVEL
             {
                 if(MC_ErrorCode.ERROR_Bit.Protect_OverVoltage==0)
                 {
-                MC_ErrorCode.ERROR_Bit.Protect_OverVoltage = 1;
-                /*error log updata*/
-                ErrorLog_Updata();
-                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                    MC_ErrorCode.ERROR_Bit.Protect_OverVoltage = 1;
+                    cp_stHistoryPara.uwAlamOVolTimes++;
+                    /*error log updata*/
+                    ErrorLog_Updata();
+                    que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                }
             }
         }
-        }
 
-        if (alm_unCode.bit.UndrVlt == 1) //欠压
+        if ((alm_unCode.bit.UndrVlt == 1) && (MC_ErrorCode.ERROR_Bit.Protect_UnderVoltage == 0))//欠压
         {
             MC_ErrorCntRecord.Protect_UnderVoltageCnt++;
-            cp_stHistoryPara.uwAlamUVolTimes++;
+
             if (MC_ErrorCntRecord.Protect_UnderVoltageCnt == ALAM_DISPLAY_CNT_0LEVEL) // ALAM_DISPLAY_CNT_2LEVEL
             {
                 if(MC_ErrorCode.ERROR_Bit.Protect_UnderVoltage==0)
                 {
-                MC_ErrorCode.ERROR_Bit.Protect_UnderVoltage = 1;
-                /*error log updata*/
-                ErrorLog_Updata();
-                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                    MC_ErrorCode.ERROR_Bit.Protect_UnderVoltage = 1;
+                    cp_stHistoryPara.uwAlamUVolTimes++;
+                    /*error log updata*/
+                    ErrorLog_Updata();
+                    que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                }
             }
         }
-        }
 
-        if (alm_unCode.bit.RotorLock == 1) //堵转
+        if ((alm_unCode.bit.RotorLock == 1) && (MC_ErrorCode.ERROR_Bit.Protect_LockRotor == 0))//堵转
         {
             MC_ErrorCntRecord.Protect_LockRotorCnt++;
-            cp_stHistoryPara.uwAlamRotorLockTimes++;
+
             if (MC_ErrorCntRecord.Protect_LockRotorCnt == ALAM_DISPLAY_CNT_0LEVEL) // ALAM_DISPLAY_CNT_2LEVEL
             {
               if(MC_ErrorCode.ERROR_Bit.Protect_LockRotor==0)
               {
-                MC_ErrorCode.ERROR_Bit.Protect_LockRotor = 1;
-                /*error log updata*/
-                ErrorLog_Updata();
-                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                    MC_ErrorCode.ERROR_Bit.Protect_LockRotor = 1;
+                    cp_stHistoryPara.uwAlamRotorLockTimes++;
+                    /*error log updata*/
+                    ErrorLog_Updata();
+                    que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                }
             }
         }
-        }
 
-        if (alm_unCode.bit.IPMOvrHeat == 1)//PCB过热
+        if ((alm_unCode.bit.IPMOvrHeat == 1) && (MC_ErrorCode.ERROR_Bit.Protect_OverTemp == 0))//PCB过热
         {
             MC_ErrorCntRecord.Protect_OverTempCnt++;
-            cp_stHistoryPara.uwAlamOHeatTimes++;
+
             if (MC_ErrorCntRecord.Protect_OverTempCnt == ALAM_DISPLAY_CNT_0LEVEL)
             {
               if(MC_ErrorCode.ERROR_Bit.Protect_OverTemp==0)
               {
                 MC_ErrorCode.ERROR_Bit.Protect_OverTemp = 1;
+                cp_stHistoryPara.uwAlamOHeatTimes++;
                 /*error log updata*/
                 ErrorLog_Updata();
                 que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                }
             }
         }
-        }
 
-        if (alm_unCode.bit.PhsLoss == 1) //缺相
+        if ((alm_unCode.bit.PhsLoss == 1) && (MC_ErrorCode.ERROR_Bit.Fault_PhaseLine == 0))//缺相
         {
             MC_ErrorCntRecord.Fault_PhaseLineCnt++;
-            cp_stHistoryPara.uwAlamPhsLossTimes++;
+
             if (MC_ErrorCntRecord.Fault_PhaseLineCnt == ALAM_DISPLAY_CNT_0LEVEL)
             {
                if(MC_ErrorCode.ERROR_Bit.Fault_PhaseLine==0)
                {
-                MC_ErrorCode.ERROR_Bit.Fault_PhaseLine = 1;
-                /*error log updata*/
-                ErrorLog_Updata();
-                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                    MC_ErrorCode.ERROR_Bit.Fault_PhaseLine = 1;
+                    cp_stHistoryPara.uwAlamPhsLossTimes++;
+                    /*error log updata*/
+                    ErrorLog_Updata();
+                    que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                }
             }
         }
-        }
 
         // if(alm_unCode.bit.CommOvrTm)
         // {
@@ -485,39 +492,42 @@ void Can_voMC_Run_1ms(void)
 //            que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
 //        }
 
-        if (alm_unBikeCode.bit.BikeSpdSen == 1) //速度传感器故障
+        if ((alm_unBikeCode.bit.BikeSpdSen == 1) && (MC_ErrorCode.ERROR_Bit.Fault_BikeSpdSensor == 0))
         {
-          if(MC_ErrorCode.ERROR_Bit.Fault_BikeSpdSensor==0)
-          {
-            MC_ErrorCode.ERROR_Bit.Fault_BikeSpdSensor = 1;
-            cp_stHistoryPara.uwBikeSpdSensorAlamTimes++;
-            /*error log updata*/
-            ErrorLog_Updata();
-            que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
-        }
+            MC_ErrorCntRecord.Fault_SpeedSensorCnt++;
+            if (MC_ErrorCntRecord.Fault_SpeedSensorCnt == ALAM_DISPLAY_CNT_0LEVEL)
+            {
+                MC_ErrorCode.ERROR_Bit.Fault_BikeSpdSensor = 1;
+                cp_stHistoryPara.uwBikeSpdSensorAlamTimes++;
+                /*error log updata*/
+                ErrorLog_Updata();
+                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+            }
         }
 
-        if (alm_unBikeCode.bit.CadenceSen == 1) //踏频传感器故障
+        if ((alm_unBikeCode.bit.CadenceSen == 1) && (MC_ErrorCode.ERROR_Bit.Fault_CadenceSensor == 0))
         {
-            cp_stHistoryPara.uwCadSensorAlamTimes++;
-          if(MC_ErrorCode.ERROR_Bit.Fault_CadenceSensor==0)
-          {
-            MC_ErrorCode.ERROR_Bit.Fault_CadenceSensor = 1;
-            /*error log updata*/
-            ErrorLog_Updata();
-            que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
-        }
+            MC_ErrorCntRecord.Fault_CadenceSensorCnt++;
+            if (MC_ErrorCntRecord.Fault_CadenceSensorCnt == ALAM_DISPLAY_CNT_0LEVEL)
+            {
+                MC_ErrorCode.ERROR_Bit.Fault_CadenceSensor = 1;
+                cp_stHistoryPara.uwCadSensorAlamTimes++;
+                /*error log updata*/
+                ErrorLog_Updata();
+                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+            }
         }
 
-        if (alm_unBikeCode.bit.PCBNTC == 1) //PCB温度
+        if ((alm_unBikeCode.bit.PCBNTC == 1) && (MC_ErrorCode.ERROR_Bit.Fault_PCBNTC == 0))
         {
-            if(MC_ErrorCode.ERROR_Bit.Fault_PCBNTC==0)
+            MC_ErrorCntRecord.Fault_NtcSensorCnt++;
+            if (MC_ErrorCntRecord.Fault_NtcSensorCnt == ALAM_DISPLAY_CNT_0LEVEL)
             {
-            MC_ErrorCode.ERROR_Bit.Fault_PCBNTC = 1;
-            /*error log updata*/
-            ErrorLog_Updata();
-            que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
-        }
+                MC_ErrorCode.ERROR_Bit.Fault_PCBNTC = 1;
+                /*error log updata*/
+                ErrorLog_Updata();
+                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+            }
         }
 
 //        if (alm_unBikeCode.bit.Throttle == 1) //油门故障
@@ -528,15 +538,16 @@ void Can_voMC_Run_1ms(void)
 //            que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
 //        }
 
-        if (alm_unBikeCode.bit.TorqSen == 1) //力矩传感器故障
+        if ((alm_unBikeCode.bit.TorqSen == 1) && (MC_ErrorCode.ERROR_Bit.Fault_TorqueSensor == 0))
         {
-            if(MC_ErrorCode.ERROR_Bit.Fault_TorqueSensor==0)
+            MC_ErrorCntRecord.Fault_TorqueSensorCnt++;
+            if (MC_ErrorCntRecord.Fault_TorqueSensorCnt == ALAM_DISPLAY_CNT_0LEVEL)
             {
-            MC_ErrorCode.ERROR_Bit.Fault_TorqueSensor = 1;
-            /*error log updata*/
+                MC_ErrorCode.ERROR_Bit.Fault_TorqueSensor = 1;
                 cp_stHistoryPara.uwTorSensorAlamTimes++;
-            ErrorLog_Updata();
-            que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
+                /*error log updata*/
+                ErrorLog_Updata();
+                que_ubPushIn(&que_stFlashErrorLog, &que_stErrorLog, 1);
             }
         }
         // 电机霍尔故障
@@ -644,6 +655,7 @@ void Can_voMC_Run_1ms(void)
 //       {
 //           if (alm_unCode.bit.SpiThetaFlt != 1)
 //           {
+//               MC_ErrorCntRecord.Fault_SpiPosSensorCnt = 0;
 //               MC_ErrorCode.ERROR_Bit.Fault_SpiPosSensor = 0;
 //           }
 //       }
@@ -652,6 +664,7 @@ void Can_voMC_Run_1ms(void)
        {
            if (alm_unBikeCode.bit.BikeSpdSen != 1)
            {
+               MC_ErrorCntRecord.Fault_SpeedSensorCnt = 0;
                MC_ErrorCode.ERROR_Bit.Fault_BikeSpdSensor = 0;
            }
        }
@@ -660,6 +673,7 @@ void Can_voMC_Run_1ms(void)
        {
            if (alm_unBikeCode.bit.CadenceSen != 1)
            {
+               MC_ErrorCntRecord.Fault_CadenceSensorCnt = 0;
                MC_ErrorCode.ERROR_Bit.Fault_CadenceSensor = 0;
            }
        }
@@ -668,6 +682,7 @@ void Can_voMC_Run_1ms(void)
        {
            if (alm_unBikeCode.bit.PCBNTC != 1)
            {
+               MC_ErrorCntRecord.Fault_NtcSensorCnt = 0;
                MC_ErrorCode.ERROR_Bit.Fault_PCBNTC = 0;
            }
        }
@@ -676,6 +691,7 @@ void Can_voMC_Run_1ms(void)
        {
            if (alm_unBikeCode.bit.Throttle != 1)
            {
+               MC_ErrorCntRecord.Fault_GasSensorCnt = 0;
                MC_ErrorCode.ERROR_Bit.Fault_Throttle = 0;
            }
        }
@@ -684,6 +700,7 @@ void Can_voMC_Run_1ms(void)
        {
            if (alm_unBikeCode.bit.TorqSen != 1)
            {
+               MC_ErrorCntRecord.Fault_TorqueSensorCnt = 0;
                MC_ErrorCode.ERROR_Bit.Fault_TorqueSensor = 0;
            }
        }