FSM_2nd.c 5.2 KB

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