123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /**
- * @file ctrlmdfsm1.c
- * @author Zhang, Kai(zhangkai71@midea.com)
- * @brief Control mode FSM
- * @version 0.1
- * @date 2021-09-27
- *
- * @copyright Copyright (c) 2021
- *
- */
- /******************************
- *
- * Included File
- *
- ******************************/
- #include "user.h"
- #include "FSM_1st.h"
- #include "FSM_2nd.h"
- #include "sys_ctrl.h"
- #include "cmdgennew.h"
- /******************************
- *
- * Parameter
- *
- ******************************/
- FSM_RUN_HOOK FSM2nd_Run_state;
- FSM_RUN_HOOK Exit_state = {Exit, Exit_hook, Exit_tbcuphook, Exit_tbcdownhook, Exit_tbshook};
- static FSM_RUN_HOOK Assistance_state = {Assistance, Assistance_hook, Assistance_tbcuphook, Assistance_tbcdownhook, Assistance_tbshook};
- static FSM_RUN_HOOK Boost_state = {Boost, Boost_hook, Boost_tbcuphook, Boost_tbcdownhook, Boost_tbshook};
- CTRLMD_FSM_FLG1 cmfsm_stFlg = CTRLMD_FSM_FLG_DEFAULT;
- /******************************
- *
- * Function
- *
- ******************************/
- 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_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[1] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[2] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[3] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[4] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[5] = HW_INIT_HHPWM_PERIOD;
- sysctrl_voPwmOn();
- /* 3rd FSM 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_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[1] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[2] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[3] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[4] = HW_INIT_HHPWM_PERIOD;
- pwm_stGenOut.uwNewTIM1COMPR[5] = HW_INIT_HHPWM_PERIOD;
- sysctrl_voPwmOn();
- /* 3rd FSM 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);
- }
- if(signal_state.Assist)
- {
- /* Initial Value of ASR Output */
- asr_stSpdPIOut.slIqRefPu = (SLONG)scm_swIqFdbLpfPu << 16;
- /* Initial Value of SpeedCmd Output */
- cmd_stCmdOut.slIntRefPu = (SLONG)scm_stSpdFbkLpf.slY.sw.hi << 14; //Q29
- /* Switch to Boost FSM */
- Switch_Second_FSM(&Boost_state);
- }
- break;
- case Boost:
- if ((!switch_flg.SysRun_Flag) && cmfsm_stFlg.blMotorStopFlg && (curSpeed_state.state == Stop))
- {
- Switch_Second_FSM(&Exit_state);
- }
- if(signal_state.Sensor && (!signal_state.Assist))
- {
- /* Initial Value of Assit Output */
- ass_stCalOut.swAssitCurRef = scm_swIqFdbLpfPu; // scm_swIqFdbLpfPu need filter? In case of big ripple?
- ass_pvt_stCurLpf.slY.sw.hi = scm_swIqFdbLpfPu;
- /* SpdRef Clear */
- scm_swSpdRefPu = 0;
- /* Switch to Assist FSM */
- Switch_Second_FSM(&Assistance_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)
- {}
- void Exit_tbcuphook(void)
- {}
- void Exit_tbcdownhook(void)
- {}
- void Exit_tbshook(void)
- {}
- void Switch_Second_FSM(const FSM_RUN_HOOK *in)
- {
- 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!
- ************************************************************************/
|