FSM_2nd.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /**
  2. * @file ctrlmdfsm1.c
  3. * @author Zhang, Kai(zhangkai71@midea.com)
  4. * @brief Control mode FSM
  5. * @version 0.1
  6. * @date 2021-09-27
  7. *
  8. * @copyright Copyright (c) 2021
  9. *
  10. */
  11. /******************************
  12. *
  13. * Included File
  14. *
  15. ******************************/
  16. #include "user.h"
  17. #include "FSM_1st.h"
  18. #include "FSM_2nd.h"
  19. #include "sys_ctrl.h"
  20. #include "cmdgennew.h"
  21. /******************************
  22. *
  23. * Parameter
  24. *
  25. ******************************/
  26. FSM_RUN_HOOK FSM2nd_Run_state;
  27. FSM_RUN_HOOK Exit_state = {Exit, Exit_hook, Exit_tbcuphook, Exit_tbcdownhook, Exit_tbshook};
  28. static FSM_RUN_HOOK Assistance_state = {Assistance, Assistance_hook, Assistance_tbcuphook, Assistance_tbcdownhook, Assistance_tbshook};
  29. static FSM_RUN_HOOK Boost_state = {Boost, Boost_hook, Boost_tbcuphook, Boost_tbcdownhook, Boost_tbshook};
  30. CTRLMD_FSM_FLG1 cmfsm_stFlg = CTRLMD_FSM_FLG_DEFAULT;
  31. /******************************
  32. *
  33. * Function
  34. *
  35. ******************************/
  36. void RUN_FSM_voInit(void)
  37. {
  38. FSM2nd_Run_state = Exit_state;
  39. cmfsm_stFlg.blMotorStopFlg = TRUE;
  40. }
  41. void FSM_2nd_Main(void)
  42. {
  43. switch (FSM2nd_Run_state.state)
  44. {
  45. case Exit:
  46. /* code */
  47. if (switch_flg.SysRun_Flag == 1)
  48. {
  49. if (signal_state.Sensor == 1)
  50. {
  51. /* PWM on */
  52. pwm_stGenOut.uwNewTIM1COMPR[0] = HW_INIT_HHPWM_PERIOD;
  53. pwm_stGenOut.uwNewTIM1COMPR[1] = HW_INIT_HHPWM_PERIOD;
  54. pwm_stGenOut.uwNewTIM1COMPR[2] = HW_INIT_HHPWM_PERIOD;
  55. pwm_stGenOut.uwNewTIM1COMPR[3] = HW_INIT_HHPWM_PERIOD;
  56. pwm_stGenOut.uwNewTIM1COMPR[4] = HW_INIT_HHPWM_PERIOD;
  57. pwm_stGenOut.uwNewTIM1COMPR[5] = HW_INIT_HHPWM_PERIOD;
  58. sysctrl_voPwmOn();
  59. /* 3rd FSM Init */
  60. Switch_speed_FSMInit();
  61. /* switch to Boost FSM */
  62. Switch_Second_FSM(&Assistance_state);
  63. }
  64. if (signal_state.Assist == 1)
  65. {
  66. /* PWM on */
  67. pwm_stGenOut.uwNewTIM1COMPR[0] = HW_INIT_HHPWM_PERIOD;
  68. pwm_stGenOut.uwNewTIM1COMPR[1] = HW_INIT_HHPWM_PERIOD;
  69. pwm_stGenOut.uwNewTIM1COMPR[2] = HW_INIT_HHPWM_PERIOD;
  70. pwm_stGenOut.uwNewTIM1COMPR[3] = HW_INIT_HHPWM_PERIOD;
  71. pwm_stGenOut.uwNewTIM1COMPR[4] = HW_INIT_HHPWM_PERIOD;
  72. pwm_stGenOut.uwNewTIM1COMPR[5] = HW_INIT_HHPWM_PERIOD;
  73. sysctrl_voPwmOn();
  74. /* 3rd FSM Init */
  75. Switch_speed_FSMInit();
  76. /* switch to Boost FSM */
  77. Switch_Second_FSM(&Boost_state);
  78. }
  79. }
  80. break;
  81. case Assistance:
  82. if ((!switch_flg.SysRun_Flag) && cmfsm_stFlg.blMotorStopFlg && (curSpeed_state.state == Stop))
  83. {
  84. Switch_Second_FSM(&Exit_state);
  85. }
  86. if(signal_state.Assist)
  87. {
  88. /* Initial Value of ASR Output */
  89. asr_stSpdPIOut.slIqRefPu = (SLONG)scm_swIqFdbLpfPu << 16;
  90. /* Initial Value of SpeedCmd Output */
  91. cmd_stCmdOut.slIntRefPu = (SLONG)scm_stSpdFbkLpf.slY.sw.hi << 14; //Q29
  92. /* Switch to Boost FSM */
  93. Switch_Second_FSM(&Boost_state);
  94. }
  95. break;
  96. case Boost:
  97. if ((!switch_flg.SysRun_Flag) && cmfsm_stFlg.blMotorStopFlg && (curSpeed_state.state == Stop))
  98. {
  99. Switch_Second_FSM(&Exit_state);
  100. }
  101. if(signal_state.Sensor && (!signal_state.Assist))
  102. {
  103. /* Initial Value of Assit Output */
  104. ass_stCalOut.swAssitCurRef = scm_swIqFdbLpfPu; // scm_swIqFdbLpfPu need filter? In case of big ripple?
  105. ass_pvt_stCurLpf.slY.sw.hi = scm_swIqFdbLpfPu;
  106. /* SpdRef Clear */
  107. scm_swSpdRefPu = 0;
  108. /* Switch to Assist FSM */
  109. Switch_Second_FSM(&Assistance_state);
  110. }
  111. break;
  112. case Cruise:
  113. /* code */
  114. break;
  115. default:
  116. break;
  117. }
  118. }
  119. void Assistance_hook(void)
  120. {}
  121. void Assistance_tbcuphook(void)
  122. {
  123. scm_voSpdCtrMdUpTbc();
  124. }
  125. void Assistance_tbcdownhook(void)
  126. {
  127. scm_voSpdCtrMdDownTbc();
  128. }
  129. void Assistance_tbshook(void)
  130. {
  131. scm_voTorqCtrMdTbs();
  132. }
  133. void Boost_hook(void)
  134. {}
  135. void Boost_tbcuphook(void)
  136. {
  137. scm_voSpdCtrMdUpTbc();
  138. }
  139. void Boost_tbcdownhook(void)
  140. {
  141. scm_voSpdCtrMdDownTbc();
  142. }
  143. void Boost_tbshook(void)
  144. {
  145. scm_voSpdCtrMdTbs();
  146. }
  147. void Exit_hook(void)
  148. {}
  149. void Exit_tbcuphook(void)
  150. {}
  151. void Exit_tbcdownhook(void)
  152. {}
  153. void Exit_tbshook(void)
  154. {}
  155. void Switch_Second_FSM(const FSM_RUN_HOOK *in)
  156. {
  157. FSM2nd_Run_state = *in;
  158. }
  159. /************************************************************************
  160. Local Functions: N/A
  161. ************************************************************************/
  162. /************************************************************************
  163. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  164. All rights reserved.
  165. ************************************************************************/
  166. #ifdef _CTRLMDFSM1_C_
  167. #undef _CTRLMDFSM1_C_
  168. #endif
  169. /************************************************************************
  170. End of this File (EOF)!
  171. Do not put anything after this part!
  172. ************************************************************************/