/** * @file ctrlmdfsm1.c * @author Zhang, Kai(zhangkai71@midea.com) * @brief Control mode FSM * @version 0.1 * @date 2021-09-27 * * @copyright Copyright (c) 2021 * */ #include "syspar.h" #include "user.h" #include "FSM_1st.h" #include "FSM_2nd.h" #include "canAppl.h" #include "hwsetup.h" /****************************** * * Parameter * ******************************/ FSM_RUN_HOOK FSM2nd_Run_state; FSM_RUN_HOOK Exit_state = {Exit, Exit_hook, Exit_tbcuphook, Exit_tbcdownhook, Exit_tbshook}; FSM_RUN_HOOK Assistance_state = {Assistance, Assistance_hook, Assistance_tbcuphook, Assistance_tbcdownhook, Assistance_tbshook}; FSM_RUN_HOOK Boost_state = {Boost, Boost_hook, Boost_tbcuphook, Boost_tbcdownhook, Boost_tbshook}; CTRLMD_FSM_FLG1 cmfsm_stFlg = CTRLMD_FSM_FLG_DEFAULT; void RUN_FSM_voInit(void) { FSM2nd_Run_state = Exit_state; cmfsm_stFlg.blMotorStopFlg = TRUE; } void FSM_2nd_Main(void) { switch (FSM2nd_Run_state.state) { case Exit: /* code */ if (switch_flg.SysRun_Flag == 1) { if (signal_state.Sensor == 1) // 力矩或踏频模式中 { /* PWM on */ pwm_stGenOut.uwNewTIM1COMPR[0] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[1] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[2] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[3] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[4] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[5] = HW_HHPWM_PERIOD; hw_voPWMOn(); /* Init */ Switch_speed_FSMInit(); /* switch to Boost FSM */ Switch_Second_FSM(&Assistance_state); } if (signal_state.Assist == 1) { /* PWM on */ pwm_stGenOut.uwNewTIM1COMPR[0] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[1] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[2] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[3] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[4] = HW_HHPWM_PERIOD; pwm_stGenOut.uwNewTIM1COMPR[5] = HW_HHPWM_PERIOD; hw_voPWMOn(); /* Init */ Switch_speed_FSMInit(); /* switch to Boost FSM */ Switch_Second_FSM(&Boost_state); } } break; case Assistance: if ((!switch_flg.SysRun_Flag) && cmfsm_stFlg.blMotorStopFlg && (curSpeed_state.state == Stop)) { Switch_Second_FSM(&Exit_state); } break; case Boost: // if ((signal_state.Sensor == 1) && (switch_flg.SysRun_Flag)) // { // Switch_Second_FSM(&Assistance_state); // } if ((!switch_flg.SysRun_Flag) && cmfsm_stFlg.blMotorStopFlg && (curSpeed_state.state == Stop)) { Switch_Second_FSM(&Exit_state); } break; case Cruise: /* code */ break; default: break; } } void Assistance_hook(void) {} void Assistance_tbcuphook(void) { scm_voSpdCtrMdUpTbc(); } void Assistance_tbcdownhook(void) { scm_voSpdCtrMdDownTbc(); } void Assistance_tbshook(void) { scm_voTorqCtrMdTbs(); } void Boost_hook(void) {} void Boost_tbcuphook(void) { scm_voSpdCtrMdUpTbc(); } void Boost_tbcdownhook(void) { scm_voSpdCtrMdDownTbc(); } void Boost_tbshook(void) { scm_voSpdCtrMdTbs(); } void Exit_hook(void) { scm_voSpdCtrMdInit(); } void Exit_tbcuphook(void) {} void Exit_tbcdownhook(void) {} void Exit_tbshook(void) {} void Switch_Second_FSM(FSM_RUN_HOOK *in) { swSwitchStateCnts = 0; FSM2nd_Run_state = *in; } /************************************************************************ Local Functions: N/A ************************************************************************/ /************************************************************************ Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd. All rights reserved. ************************************************************************/ #ifdef _CTRLMDFSM1_C_ #undef _CTRLMDFSM1_C_ #endif /************************************************************************ End of this File (EOF)! Do not put anything after this part! ************************************************************************/