瀏覽代碼

Merge branch 'ebikemspm0g3507-app' into Special/tajiTorqueSensor

Ye Jin 5 月之前
父節點
當前提交
1f0abb16a7

+ 0 - 1
.ccsproject

@@ -15,7 +15,6 @@
 	<ignoreDefaultCCSSettings value="true"/>
 	<templateProperties value="id=empty_non_sysconfig_LP_MSPM0G3507_nortos_ticlang.projectspec.empty_non_sysconfig_LP_MSPM0G3507_nortos_ticlang,buildProfile=release,isHybrid=true"/>
 	<sourceLookupPath value="${COM_TI_MSPM0_SDK_INSTALL_DIR}/source/ti/driverlib"/>
-	<origin value="C:\ti\mspm0_sdk_2_01_00_03\examples\nortos\LP_MSPM0G3507\driverlib\empty_non_sysconfig\ticlang\empty_non_sysconfig_LP_MSPM0G3507_nortos_ticlang.projectspec"/>
 	<filesToOpen value="README.md"/>
 	<isTargetManual value="false"/>
 </projectOptions>

+ 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;
 

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

@@ -394,7 +394,8 @@ 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))
+    if( ((switch_flg.SysFault_Flag == TRUE) || (switch_flg.SysWarnning_Flag == TRUE)))
     {
          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();
 

+ 3 - 1
3.BasicFunction/Include/bikelight.h

@@ -61,7 +61,7 @@ typedef _Bool  BOOL;
 #define  LIGHTBLR_FIRSTPWM      346 //64us,max=2304 第一个PWM 尾灯,左右灯
 #define  LIGHT_SECTPWM          2304//691 //64us,max=2304 第二个PWM
 #define  LIGHT_MAXPWM           2304//691 //64us,max=2304 第二个PWM
-
+#define  LIGHTBLR_NoProPWM      691 //64us,max=2304 第一个PWM 尾灯,左右灯
 
 
 typedef enum
@@ -103,6 +103,8 @@ typedef struct
 
     UWORD       uwLeddelaycnt;//Led延时开灯
 
+    UWORD       uwBike_LedFun;   //模式功能选择 0-PWM电池电压有保护,1-前后灯分别控PWM6/12V无保护,2-DCDC输出
+
     BOOL        blBike_LedSta; //开关LED输入状态
 
     BOOL       blBike_LedCurErr;   // 灯电路过流

+ 48 - 14
3.BasicFunction/Source/bikelight.c

@@ -368,6 +368,7 @@ void bikelight_voBikeLightInit(BIKELEDCHECK_STR *LedPoit)
 /***************************************************************
  Function: bikelight_voBikeLightCoef;
  Description:  滤波时间/阈值电压设定参数更新 ,参数输入端
+  uwBike_LedMode:
     0x01:模式1,连接尾灯,开灯时低亮,刹车时高亮
     0x02:模式2,连接尾灯,开灯时高亮,刹车时闪烁
     0x03:模式3,连接刹车灯,刹车时高亮
@@ -376,6 +377,11 @@ void bikelight_voBikeLightInit(BIKELEDCHECK_STR *LedPoit)
     0x06:模式6,连接蜂鸣器,超速报警
     0x07:模式7,开机低亮,刹车高亮
     0x08:模式8,仅开灯高亮,关灯灭
+
+   uwBike_LedFun 模式功能选择
+    0-PWM电池电压有保护,
+    1-前后灯分别控PWM6/12V无保护,
+    2-DCDC输出
  Call by:初始化,接收数据更新
  Input Variables: N/A
  Output/Return Variables: N/A
@@ -388,9 +394,11 @@ void bikelight_voBikeLightCoef(UWORD volt)
 //前灯
     BikeLedCheck_F.uwBike_LedVolt =volt & 0x0f;
     BikeLedCheck_F.uwBike_LedMode=8; //前灯模式
+    BikeLedCheck_F.uwBike_LedFun=1;
 //尾灯
     BikeLedCheck_B.uwBike_LedMode = (volt & 0xf000)>>12;//尾灯模式
    BikeLedCheck_B.uwBike_LedVolt =(volt & 0x0f00)>>8;
+   BikeLedCheck_B.uwBike_LedFun=1;
 
 
 //左灯模式
@@ -437,17 +445,23 @@ if( power_stPowStateOut.blPowerStartupFlg  ==FALSE)
 
 }
 else
+{
+if(( BikeLedCheck_F.uwBike_LedFun==1) ||(BikeLedCheck_B.uwBike_LedFun==1)||(BikeLedCheck_L.uwBike_LedFun==1)||(BikeLedCheck_R.uwBike_LedFun==1))
+{
+    IO_LED_6or12V_EN_H();
+}
+else
 {
     ledfunctions[BikeLedCheck_DC.uwBike_LedMode](&BikeLedCheck_DC);
-    if( BikeLedCheck_B.blBike_LedSta==TRUE) //尾灯控制
-    {
-        IO_LED_6or12V_EN_H();
-    }
-    else
-    {
-        IO_LED_6or12V_EN_L();
-    }
-
+     if( BikeLedCheck_DC.blBike_LedSta==TRUE) //尾灯控制
+     {
+         IO_LED_6or12V_EN_H();
+     }
+     else
+     {
+         IO_LED_6or12V_EN_L();
+     }
+}
 
 
 //-----------尾灯处理--------
@@ -527,9 +541,10 @@ else
         }
         else
          {
-#if(DCDC_12S6V_SEL_EN!=1)
+//#if(DCDC_12S6V_SEL_EN!=1)
+            if( BikeLedCheck_F.uwBike_LedFun!=1)
              DL_COMP_setDACCode0(COMP_FLEDCHECK_INST, 0x4f);
-#endif
+//#endif
          }
 
         BikeLedCheck_F.uwBike_keyLedLowSta=1;
@@ -639,8 +654,12 @@ else
 
 #endif
 
-    //--------------LED电路检测----------
+
+
+//--------------LED电路检测----------
 //-------F_LED
+   if( BikeLedCheck_F.uwBike_LedFun!=1)
+   {
     if((BikeLedCheck_F.blBike_LedCurErr==TRUE )&&(BikeLedCheck_F.blBike_LedSta == TRUE))  //过流标志,前灯恢复检测
     {
         BikeLedCheck_F.uwBike_LedOffErrCnt++;
@@ -657,8 +676,11 @@ else
     {
         BikeLedCheck_F.uwBike_LedOffErrCnt=0;
     }
+   }
 
 //------B_LED
+   if( BikeLedCheck_B.uwBike_LedFun!=1)
+   {
     if((BikeLedCheck_B.blBike_LedCurErr==TRUE)&&(BikeLedCheck_B.blBike_LedSta == TRUE)) //后灯恢复检测
     {
 
@@ -676,9 +698,11 @@ else
     {
         BikeLedCheck_B.uwBike_LedOffErrCnt=0;
     }
+   }
 
 //------R_LED
-
+  if( BikeLedCheck_R.uwBike_LedFun!=1)
+  {
     if((BikeLedCheck_R.blBike_LedCurErr==TRUE )&&(BikeLedCheck_R.blBike_LedSta == TRUE))  //过流标志,前灯恢复检测
     {
         BikeLedCheck_R.uwBike_LedOffErrCnt++;
@@ -695,8 +719,11 @@ else
     {
         BikeLedCheck_R.uwBike_LedOffErrCnt=0;
     }
+  }
 
 //------L_LED
+  if( BikeLedCheck_L.uwBike_LedFun!=1)
+  {
     if((BikeLedCheck_L.blBike_LedCurErr==TRUE )&&(BikeLedCheck_L.blBike_LedSta == TRUE))  //过流标志,前灯恢复检测
     {
         BikeLedCheck_L.uwBike_LedOffErrCnt++;
@@ -713,6 +740,7 @@ else
     {
         BikeLedCheck_L.uwBike_LedOffErrCnt=0;
     }
+  }
     //------
 
 }
@@ -737,6 +765,8 @@ if(switchAction!=0)
         else
         {
             p->uwBikeLight_PWM=LIGHTBLR_FIRSTPWM;//
+            if(p->uwBike_LedFun ==1 )
+                p->uwBikeLight_PWM=LIGHT_FIRSTPWM;// 4us
         }
 
     }
@@ -751,6 +781,10 @@ if(switchAction!=0)
         {
             p->uwBikeLight_PWM=0;
         }
+        if(p->uwBike_LedFun ==1 )  //去掉保护
+        {
+            p->uwBikeLight_PWM = LIGHTBLR_NoProPWM;
+        }
 
     }
 //    else if(p->uwBike_OpenPreTime>=1000)
@@ -758,7 +792,7 @@ if(switchAction!=0)
 //        p->uwBikeLight_PWM=0;//
 //        p->uwBike_OpenLedEn=1;
 //    }
-    if((p->uwBike_OpenPreTime>2) && (p->uwBikeLight_PWM!=0))// ||(p->uwBike_LedCheckLowTime>=2)
+    if((p->uwBike_OpenPreTime>2) && ((p->uwBikeLight_PWM!=0)||(p->uwBike_LedFun ==1 )))// ||(p->uwBike_LedCheckLowTime>=2)
          {
              p->blBike_LedCurErr=FALSE;
              p->uwBike_OpenLedEn=1;

+ 91 - 74
3.BasicFunction/Source/canAppl.c

@@ -269,7 +269,7 @@ void  Can_voInitMC_Run(void)
    // flash_voErrorRead();
 
     // MC版本信息初始化,Mode和SN从EEPROM读取
-    strncpy(MC_VerInfo.HW_Version, (char *)"88K7000101V1    ", 16); //长度不超过16
+    strncpy(MC_VerInfo.HW_Version, (char *)"SC20100101V1    ", 16); //长度不超过16
 
     // Software version
     char chFwVersion[16]="V1r0r0_";
@@ -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;
            }
        }

+ 3 - 4
4.BasicHardwSoftwLayer/2.BasicSoftwLayer/Include/syspar.h

@@ -163,11 +163,10 @@ Update Time
 
     DCDC12/6V电压端口配置  DCDC_12S6V_SEL_EN
    0-DC to DC端口 固定使能打开
-   1-DC to DC端口 做前灯控制
-   2-DC to DC端口 做尾灯控制
-   3-DC to DC端口 前后灯12/6V用PWM控制
+   1-DC to DC端口 前后灯12/6V用PWM控制
+
 *=======================================================================*/
-#define DCDC_12S6V_SEL_EN          3
+#define DCDC_12S6V_SEL_EN          1
 
 
 /*======================================================================*

+ 10 - 7
m0g3507_int.c

@@ -1048,8 +1048,10 @@ void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
 //             }
 //F_LED
     switch (DL_COMP_getPendingInterrupt(COMP_FLEDCHECK_INST)) {
-               case DL_COMP_IIDX_OUTPUT_EDGE:
-                   if(BikeLedCheck_F.uwBike_OpenLedEn!=0)
+           case DL_COMP_IIDX_OUTPUT_EDGE:
+           if(BikeLedCheck_F.uwBike_LedFun!=1)
+              {
+               if(BikeLedCheck_F.uwBike_OpenLedEn!=0)
                    {
                        DL_TimerG_setCaptureCompareValue(PWM_F_INST, 0, GPIO_PWM_F_C1_IDX);//max=2304
                    }
@@ -1071,11 +1073,11 @@ void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
                    {
                        BikeLedCheck_F.blBike_LedCurErr=TRUE;
                    }
-
+              }
                      //  CHMPF++;
                    break;
                case DL_COMP_IIDX_OUTPUT_EDGE_INV:
-                   if(BikeLedCheck_F.uwBike_OpenLedEn!=0)
+                   if((BikeLedCheck_F.uwBike_OpenLedEn!=0)&&(BikeLedCheck_F.uwBike_LedFun!=1))
                       {
                        DL_TimerG_stopCounter(PWM_F_INST);
                          BikeLedCheck_F.uwBikeLight_PWM=0;
@@ -1094,7 +1096,8 @@ void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
          GPIOB, DL_GPIO_PIN_3 | DL_GPIO_PIN_2| DL_GPIO_PIN_8| DL_GPIO_PIN_15);
 
 //B_LED
-    if ((gpioB & DL_GPIO_PIN_15) ==  DL_GPIO_PIN_15)
+
+    if (((gpioB & DL_GPIO_PIN_15) ==  DL_GPIO_PIN_15) &&(BikeLedCheck_B.uwBike_LedFun!=1))
     {
         if(BikeLedCheck_B.uwBike_OpenLedEn!=0)
          {
@@ -1128,7 +1131,7 @@ void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
     }
 
 //R_LED
-     if ((gpioB & DL_GPIO_PIN_8) ==  DL_GPIO_PIN_8)
+     if (((gpioB & DL_GPIO_PIN_8) ==  DL_GPIO_PIN_8)&&(BikeLedCheck_R.uwBike_LedFun!=1))
           {
              if(BikeLedCheck_R.uwBike_OpenLedEn!=0)
                   {
@@ -1158,7 +1161,7 @@ void GROUP1_IRQHandler(void) //void TMR3_GLOBAL_IRQHandler(void)
               DL_GPIO_clearInterruptStatus(GPIOB, DL_GPIO_PIN_8);
           }
 //-L-LED
-     if ((gpioA & DL_GPIO_PIN_3) ==  DL_GPIO_PIN_3)
+     if (((gpioA & DL_GPIO_PIN_3) ==  DL_GPIO_PIN_3) &&(BikeLedCheck_L.uwBike_LedFun!=1))
          {
              if(BikeLedCheck_L.uwBike_OpenLedEn!=0)
               {

+ 92 - 2
ti_msp_dl_config.c

@@ -179,6 +179,9 @@ SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
     DL_GPIO_initPeripheralOutputFunction(GPIO_PWM_R_C1_IOMUX,GPIO_PWM_R_C1_IOMUX_FUNC);
     DL_GPIO_enableOutput(GPIO_PWM_R_C1_PORT, GPIO_PWM_R_C1_PIN);
 
+    DL_GPIO_initPeripheralAnalogFunction(GPIO_HFXIN_IOMUX);
+            DL_GPIO_initPeripheralAnalogFunction(GPIO_HFXOUT_IOMUX);
+
     DL_GPIO_initPeripheralOutputFunction(
         GPIO_UART_HMI_IOMUX_TX, GPIO_UART_HMI_IOMUX_TX_FUNC);
     DL_GPIO_initPeripheralInputFunction(
@@ -249,7 +252,20 @@ SYSCONFIG_WEAK void SYSCFG_DL_DEBUG_init(void)
     /* Set the DISABLE bit in the SWDCFG register in SYSCTL along with KEY */
     SYSCTL->SOCLOCK.SWDCFG = (SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);
 }
-static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig = {
+static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig_External = {
+    .inputFreq              = DL_SYSCTL_SYSPLL_INPUT_FREQ_8_16_MHZ,
+    .rDivClk2x              = 1,
+    .rDivClk1               = 0,
+    .rDivClk0               = 0,
+    .enableCLK2x            = DL_SYSCTL_SYSPLL_CLK2X_ENABLE,
+    .enableCLK1             = DL_SYSCTL_SYSPLL_CLK1_ENABLE,
+    .enableCLK0             = DL_SYSCTL_SYSPLL_CLK0_DISABLE,
+    .sysPLLMCLK             = DL_SYSCTL_SYSPLL_MCLK_CLK2X,
+    .sysPLLRef              = DL_SYSCTL_SYSPLL_REF_HFCLK,
+    .qDiv                   = 8,
+    .pDiv                   = DL_SYSCTL_SYSPLL_PDIV_1
+};
+static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig_Internal = {
     .inputFreq              = DL_SYSCTL_SYSPLL_INPUT_FREQ_16_32_MHZ,
 	.rDivClk2x              = 3,
 	.rDivClk1               = 1,
@@ -262,6 +278,79 @@ static const DL_SYSCTL_SYSPLLConfig gSYSPLLConfig = {
 	.qDiv                   = 8,
 	.pDiv                   = DL_SYSCTL_SYSPLL_PDIV_2
 };
+void DL_SYSCTL_configSYSPLL_copy(DL_SYSCTL_SYSPLLConfig *config)
+{
+    uint32_t StartUpCounter = 0;
+    /* PLL configurations are retained in lower reset levels. Set default
+     * behavior of disabling the PLL to keep a consistent behavior regardless
+     * of reset level. */
+    DL_SYSCTL_disableSYSPLL();
+
+    /* Check that SYSPLL is disabled before configuration */
+    while ((DL_SYSCTL_getClockStatus() & (DL_SYSCTL_CLK_STATUS_SYSPLL_OFF)) !=
+           (DL_SYSCTL_CLK_STATUS_SYSPLL_OFF)) {
+        ;
+    }
+
+    // set SYSPLL reference clock
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG0,
+        ((uint32_t) config->sysPLLRef), SYSCTL_SYSPLLCFG0_SYSPLLREF_MASK);
+
+    // set predivider PDIV (divides reference clock)
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG1, ((uint32_t) config->pDiv),
+        SYSCTL_SYSPLLCFG1_PDIV_MASK);
+
+    // save CPUSS CTL state and disable the cache
+    uint32_t ctlTemp = DL_CORE_getInstructionConfig();
+    DL_CORE_configInstruction(DL_CORE_PREFETCH_ENABLED, DL_CORE_CACHE_DISABLED,
+        DL_CORE_LITERAL_CACHE_ENABLED);
+
+    // populate SYSPLLPARAM0/1 tuning registers from flash, based on input freq
+    SYSCTL->SOCLOCK.SYSPLLPARAM0 =
+        *(volatile uint32_t *) ((uint32_t) config->inputFreq);
+    SYSCTL->SOCLOCK.SYSPLLPARAM1 =
+        *(volatile uint32_t *) ((uint32_t) config->inputFreq + (uint32_t) 0x4);
+
+    // restore CPUSS CTL state
+    CPUSS->CTL = ctlTemp;
+
+    // set feedback divider QDIV (multiplies to give output frequency)
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG1,
+        ((config->qDiv << SYSCTL_SYSPLLCFG1_QDIV_OFS) &
+            SYSCTL_SYSPLLCFG1_QDIV_MASK),
+        SYSCTL_SYSPLLCFG1_QDIV_MASK);
+
+    // write clock output dividers, enable outputs, and MCLK source to SYSPLLCFG0
+    DL_Common_updateReg(&SYSCTL->SOCLOCK.SYSPLLCFG0,
+        (((config->rDivClk2x << SYSCTL_SYSPLLCFG0_RDIVCLK2X_OFS) &
+             SYSCTL_SYSPLLCFG0_RDIVCLK2X_MASK) |
+            ((config->rDivClk1 << SYSCTL_SYSPLLCFG0_RDIVCLK1_OFS) &
+                SYSCTL_SYSPLLCFG0_RDIVCLK1_MASK) |
+            ((config->rDivClk0 << SYSCTL_SYSPLLCFG0_RDIVCLK0_OFS) &
+                SYSCTL_SYSPLLCFG0_RDIVCLK0_MASK) |
+            config->enableCLK2x | config->enableCLK1 | config->enableCLK0 |
+            (uint32_t) config->sysPLLMCLK),
+        (SYSCTL_SYSPLLCFG0_RDIVCLK2X_MASK | SYSCTL_SYSPLLCFG0_RDIVCLK1_MASK |
+            SYSCTL_SYSPLLCFG0_RDIVCLK0_MASK |
+            SYSCTL_SYSPLLCFG0_ENABLECLK2X_MASK |
+            SYSCTL_SYSPLLCFG0_ENABLECLK1_MASK |
+            SYSCTL_SYSPLLCFG0_ENABLECLK0_MASK |
+            SYSCTL_SYSPLLCFG0_MCLK2XVCO_MASK));
+
+    // enable SYSPLL
+    SYSCTL->SOCLOCK.HSCLKEN |= SYSCTL_HSCLKEN_SYSPLLEN_ENABLE;
+
+    // wait until SYSPLL startup is stabilized
+    while (((DL_SYSCTL_getClockStatus() & SYSCTL_CLKSTATUS_SYSPLLGOOD_MASK) != DL_SYSCTL_CLK_STATUS_SYSPLL_GOOD) && (StartUpCounter < 30000))
+    {
+        StartUpCounter++;
+    }
+
+    if((DL_SYSCTL_getClockStatus() & SYSCTL_CLKSTATUS_SYSPLLGOOD_MASK) != DL_SYSCTL_CLK_STATUS_SYSPLL_GOOD)
+    {
+        DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig_Internal);
+    }
+}
 SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
 {
 
@@ -274,7 +363,8 @@ SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
 	/* Set default configuration */
 	DL_SYSCTL_disableHFXT();
 	DL_SYSCTL_disableSYSPLL();
-    DL_SYSCTL_configSYSPLL((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig);
+	DL_SYSCTL_setHFCLKSourceHFXTParams(DL_SYSCTL_HFXT_RANGE_4_8_MHZ,40, false);
+	DL_SYSCTL_configSYSPLL_copy((DL_SYSCTL_SYSPLLConfig *) &gSYSPLLConfig_External);
     DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_2);
     DL_SYSCTL_enableMFCLK();
     DL_SYSCTL_enableMFPCLK();

+ 5 - 0
ti_msp_dl_config.h

@@ -73,6 +73,11 @@ extern "C" {
 
 
 
+#define GPIO_HFXT_PORT                                                     GPIOA
+#define GPIO_HFXIN_PIN                                             DL_GPIO_PIN_5
+#define GPIO_HFXIN_IOMUX                                         (IOMUX_PINCM10)
+#define GPIO_HFXOUT_PIN                                            DL_GPIO_PIN_6
+#define GPIO_HFXOUT_IOMUX                                        (IOMUX_PINCM11)
 #define CPUCLK_FREQ                                                     72000000