TimeTask_Event.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. /**
  2. * @file TimeTask_Event.c
  3. * @author Zhang, Kai(zhangkai71@midea.com)
  4. * @brief Time task control
  5. * @version 0.1
  6. * @date 2021-09-27
  7. *
  8. * @copyright Copyright (c) 2021
  9. *
  10. */
  11. #include "TimeTask_Event.h"
  12. #include "AssistCurve.h"
  13. #include "FSM_1st.h"
  14. #include "FSM_2nd.h"
  15. #include "FuncLayerAPI.h"
  16. #include "can.h"
  17. #include "canAppl.h"
  18. #include "flash_master.h"
  19. #include "queue.h"
  20. #include "spdctrmode.h"
  21. #include "gd32f30x.h"
  22. #include "string.h"
  23. #include "syspar.h"
  24. #include "uart_appl.h"
  25. #include "uart_driver.h"
  26. #include "user.h"
  27. #include "STLmain.h"
  28. /******************************
  29. *
  30. * Parameter
  31. *
  32. ******************************/
  33. _op_ Op[proc_cnt] = {{Event_5ms, EVE1MSCNT_5ms, EVE1MSCNT_5ms},
  34. {Event_10ms, EVE1MSCNT_20ms, EVE1MSCNT_20ms},
  35. {Event_20ms, EVE1MSCNT_20ms, EVE1MSCNT_20ms},
  36. {Event_100ms, EVE1MSCNT_100ms, EVE1MSCNT_100ms},
  37. {Event_200ms, EVE1MSCNT_200ms, EVE1MSCNT_200ms}};
  38. static SQWORD TimingTaskTimerTick = 0;
  39. static SQWORD TimingTaskTimerTickTemp = 0;
  40. static SQWORD TimingTaskTimerTickTempOld = 0;
  41. static SQWORD TimingTaskTimerTickPassed = 0;
  42. static UWORD LoopServerExecutedFlag = 0;
  43. static UWORD AssistCNT = 0;
  44. UWORD AssistCNT1=0;
  45. UWORD socTest = 100;
  46. void Event_1ms(void)
  47. {
  48. AssistCNT1++;
  49. // 1st FSM control
  50. FSM_1st_Main();
  51. FSM1st_Sys_state.Event_hook();
  52. // Power control
  53. //power_voPowerManagement(cp_stFlg.ParaHistorySaveEEFinishFlg, cp_stFlg.ParaSaveEEFlg);
  54. power_voPowerManagement(ass_ParaCong.uwAutoPowerOffTime * 60, cp_ulSystickCnt, OBC_ButtonStatus.ulButtonSetTimeCnt, \
  55. MC_RunInfo.Torque, MC_RunInfo.Cadence, MC_RunInfo.BikeSpeed, \
  56. cp_stFlg.ParaHistorySaveEEFinishFlg, cp_stFlg.ParaSaveEEFlg);
  57. // cp_history info update
  58. Can_voMC_Run_1ms();
  59. if (cadence_stFreGetOut.uwForwardCnt > 0)
  60. {
  61. torsensor_voCadenceCnt();
  62. cadence_stFreGetOut.uwForwardCnt = 0;
  63. maf_torque.value = torsensor_stTorSensorOut.uwTorquePu;
  64. MoveAverageFilter(&maf_torque);
  65. }
  66. torsensor_voDynamicOffset();
  67. torsensor_voTorADCwithTemp();
  68. // Tor assist cal
  69. // ass_CalIn.swFlxIqLimit = MC_RunInfo.SOC;
  70. ass_CalIn.SOCValue = socTest;
  71. if(cp_stFlg.RunModelSelect == CityBIKE )
  72. {
  73. ass_CalIn.swDirection = -1;
  74. }
  75. else if(cp_stFlg.RunModelSelect == MountainBIKE)
  76. {
  77. ass_CalIn.swDirection = 1;
  78. }
  79. else
  80. {
  81. ass_CalIn.swDirection = 1;
  82. }
  83. ass_CalIn.swFlxIqLimit = abs(flx_stCtrlOut.swIqLimPu);
  84. ass_CalIn.swPwrIqLimit = abs(pwr_stPwrLimOut2.swIqLimPu);
  85. ass_CalIn.uwbikespeed = bikespeed_stFreGetOut.uwLPFFrequencyPu;
  86. ass_CalIn.uwcadancelast = ass_CalIn.uwcadance;
  87. ass_CalIn.uwcadance = cadence_stFreGetOut.uwLPFFrequencyPu;
  88. ass_CalIn.uwcadancePer = cadence_stFreGetOut.uwFreqPercent;
  89. ass_CalIn.uwcadanceFWCnt = cadence_stFreGetOut.uwForwardCnt;
  90. ass_CalIn.uwGearSt = (cp_stBikeRunInfoPara.uwBikeGear <= 6) ? cp_stBikeRunInfoPara.uwBikeGear : 0;
  91. ass_CalIn.uwSpdFbkAbsPu = scm_uwSpdFbkLpfAbsPu;
  92. ass_CalIn.swSpdFbkPu = scm_stSpdFbkLpf.slY.sw.hi;
  93. ass_CalIn.uwBaseSpdrpm = cof_uwVbRpm;
  94. ass_CalIn.uwtorque = maf_torque.AverValue; // maf_torque.AverValue;//torsensor_stTorSensorOut.uwTorqueLPFPu;
  95. ass_CalIn.uwtorquelpf = torsensor_stTorSensorOut.uwTorqueLPFPu;
  96. ass_CalIn.uwtorquePer = torsensor_stTorSensorOut.uwTorquePu;
  97. ass_CalIn.swCurFdbPu = scm_swIqFdbLpfPu;
  98. ass_CalIn.swCurRefPu = scm_swIqRefPu;
  99. Assist();
  100. uart_swTorqRefNm = Assist_torqueper;
  101. // if(cp_stFlg.RunModelSelect == CityBIKE )
  102. // {
  103. // uart_swTorqRefNm = -Assist_torqueper;
  104. // }
  105. // else if(cp_stFlg.RunModelSelect == MountainBIKE )
  106. // {
  107. // uart_swTorqRefNm = Assist_torqueper;
  108. // }
  109. // else
  110. // {
  111. //
  112. // }
  113. // 3rd FSM flag judge and set
  114. // torque assist model flg
  115. if (ass_CalCoef.blAssistflag == TRUE && cp_stFlg.RunPermitFlg == TRUE && cp_stFlg.SpiOffsetFirstSetFlg ==1)
  116. {
  117. signal_state.Sensor = TRUE;
  118. }
  119. else if( cp_stFlg.SpiOffsetFirstSetFlg == 0 && cp_stFlg.RunPermitFlg == TRUE && cp_stFlg.SpiOffsetFirstSetFinishFlg == FALSE)
  120. {
  121. signal_state.Sensor = TRUE;
  122. }
  123. else
  124. {
  125. signal_state.Sensor = FALSE;
  126. }
  127. // spd assist model flg
  128. if((cp_stFlg.RunModelSelect == CityBIKE) || (cp_stFlg.RunModelSelect == MountainBIKE))
  129. {
  130. #if 0 // By throttle ADC signal
  131. if(bikethrottle_stBikeThrottleOut.uwThrottlePercent < 500)
  132. {
  133. AssistCNT ++;
  134. if(AssistCNT > 1000 && cp_stFlg.RunPermitFlg == TRUE)
  135. {
  136. signal_state.Assist = TRUE;
  137. AssistCNT = 1000;
  138. }
  139. }
  140. else
  141. {
  142. AssistCNT = 0;
  143. signal_state.Assist = FALSE;
  144. }
  145. #elif 0 // By walk assist GPIO signal
  146. #elif 1 //By can bus command code
  147. if(cp_stBikeRunInfoPara.uwBikeGear == 0x22)
  148. {
  149. AssistCNT ++;
  150. if(AssistCNT > 200 && cp_stFlg.RunPermitFlg == TRUE)
  151. {
  152. signal_state.Assist = TRUE;
  153. AssistCNT = 200;
  154. }
  155. }
  156. else
  157. {
  158. AssistCNT = 0;
  159. signal_state.Assist = FALSE;
  160. }
  161. #endif
  162. if(signal_state.Assist == TRUE)
  163. {
  164. //6km/H = 100m/min 1.67m/s
  165. if(cp_stFlg.RunModelSelect == CityBIKE)
  166. {
  167. uart_slSpdRefRpm = -(10000/(ass_ParaCong.uwWheelDiameter))*ass_ParaCong.uwNmBackChainring*ass_ParaCong.uwMechRationMotor/ass_ParaCong.uwNmFrontChainring;
  168. // cp_stBikeRunInfoPara.BikeSpeedKmH = 60; //constant display of 6km/h
  169. }
  170. else if(cp_stFlg.RunModelSelect == MountainBIKE)
  171. {
  172. uart_slSpdRefRpm = (10000/(ass_ParaCong.uwWheelDiameter))*ass_ParaCong.uwNmBackChainring*ass_ParaCong.uwMechRationMotor/ass_ParaCong.uwNmFrontChainring;
  173. // cp_stBikeRunInfoPara.BikeSpeedKmH = 60; //constant display of 6km/h
  174. }
  175. else
  176. {
  177. }
  178. }
  179. else
  180. {
  181. uart_slSpdRefRpm = 0;
  182. }
  183. }
  184. else
  185. {
  186. if ((uart_slSpdRefRpm >= 10 || uart_slSpdRefRpm <= -10) && cp_stFlg.RunPermitFlg == TRUE )
  187. {
  188. signal_state.Assist = TRUE;
  189. }
  190. else
  191. {
  192. signal_state.Assist = FALSE;
  193. }
  194. }
  195. // user code end here
  196. }
  197. void Event_5ms(void)
  198. {
  199. Can_voMC_Run_5ms();
  200. }
  201. void Event_10ms(void)
  202. {
  203. /* Throttle ADC voltage update */
  204. bikethrottle_voBikeThrottleADC();
  205. /* Speed command set */
  206. if(cp_stFlg.RunModelSelect != CityBIKE && cp_stFlg.RunModelSelect != MountainBIKE )
  207. {
  208. /* Use instrument */
  209. // Signal_detect();
  210. /* Use upper computer */
  211. // if(cp_stFlg.RotateDirectionSelect == ForwardRotate)
  212. // {
  213. // uart_slSpdRefRpm = ((SLONG)MC_MotorSPD_rpm_Percent*5000)/100;
  214. // }
  215. // else if(cp_stFlg.RotateDirectionSelect == BackwardRotate)
  216. // {
  217. // uart_slSpdRefRpm = -((SLONG)MC_MotorSPD_rpm_Percent*5000)/100;
  218. // }
  219. /* bikespeed closeloop control */
  220. // bikemotorspdref();
  221. // ass_CalIn.swDirection =-1;
  222. // uart_slSpdRefRpm = bikeSpdPIOut.swSpdRefRpm * ass_CalIn.swDirection;
  223. if(abs(uart_slSpdRefRpm) < 300)
  224. {
  225. uart_slSpdRefRpm = 0;
  226. }
  227. }
  228. /* Bike light control */
  229. Can_Light_switch();
  230. bikelight_voBikeLightControl(cp_stBikeRunInfoPara.uwLightSwitch);
  231. /* Trip cal when open */
  232. bikespeed_votempTripCal();
  233. }
  234. void Event_20ms(void)
  235. {
  236. stl_voDoRunTimeChecks();
  237. }
  238. void Event_100ms(void)
  239. {
  240. bikespeed_stFreGetOut.uwLPFFrequencyPu = (bikespeed_stFreGetOut.uwLPFFrequencyPu * bikespeed_stFreGetCof.uwBikeSpeedLPFGain +
  241. bikespeed_stFreGetOut.uwFrequencyPu * (100 - bikespeed_stFreGetCof.uwBikeSpeedLPFGain)) /
  242. 100;
  243. }
  244. UWORD ReadorWrite = 2;
  245. void Event_200ms(void)
  246. {
  247. // SendData(ID_MC_BC, MODE_REPORT, 0x1020, (uint8_t *)&MC_RunInfo.BikeSpeed);
  248. if (ReadorWrite == 3)
  249. {
  250. stErrorLog.NotesInfo1 = 1;
  251. stErrorLog.NotesInfo2 = 2;
  252. stErrorLog.NotesInfo3 = 3;
  253. que_ubPushIn(&stFlashErrorLog, &stErrorLog, sizeof(stErrorLog));
  254. ReadorWrite = 2;
  255. }
  256. Can_voMC_Run_200ms();
  257. bikelight_voGetBikeLightError(adc_stUpOut.uwU6VPu);
  258. display_voGetDisplayError(adc_stUpOut.uwU12VPu);
  259. bikespeed_voGetBikeSpeedPwrError(adc_stUpOut.uwU5VPu);
  260. /* Bike faults 200ms detect */
  261. // if((cp_stFlg.RunModelSelect == MountainBIKE) || (cp_stFlg.RunModelSelect == CityBIKE))
  262. // {
  263. // alm_stBikeIn.uwTroqReg = hw_uwADC0[7];
  264. // alm_stBikeIn.uwTroqPu = torsensor_stTorSensorOut.uwTorquePu;
  265. // alm_stBikeIn.blBikeSpdOvrFlg = bikespeed_stFreGetOut.blBikeSpeedSensorPwrErrorFlg;
  266. // alm_stBikeIn.blCadenceFreqOvrFlg = cadence_stFreGetOut.blCadenceSensorErrorFlg;
  267. // alm_stBikeIn.swMotorSpdDir = ass_CalIn.swDirection;
  268. // alm_stBikeIn.swMotorSpdPu = scm_stSpdFbkLpf.slY.sw.hi;
  269. // alm_stBikeIn.uwBikeSpdPu = bikespeed_stFreGetOut.uwFrequencyPu;
  270. // alm_stBikeIn.uwCadenceFreqPu = cadence_stFreGetOut.uwFrequencyPu;
  271. // alm_stBikeIn.uwMotorNTCReg = adc_stUpOut.MotorTempReg;
  272. // alm_stBikeIn.uwPCBNTCReg = adc_stUpOut.PCBTempReg;
  273. // alm_stBikeIn.uwThrottleReg = adc_stUpOut.uwThrottleReg;
  274. // alm_stBikeIn.blThrottleExistFlg = FALSE;
  275. // alm_stBikeIn.blMotorNTCExistFlg = FALSE;
  276. // alm_voDetec200MS(&alm_stBikeIn, &alm_stDetect200MSCoef);
  277. // }
  278. if (switch_flg.SysFault_Flag == TRUE)
  279. {
  280. SendData(ID_MC_BC, MODE_REPORT, 0x1104, (uint8_t *)&MC_ErrorCode.Code);
  281. }
  282. }
  283. void Signal_detect(void)
  284. {
  285. SWORD sign;
  286. // SWORD sign=1;/*V2 -1 V3 1*/
  287. // uart_slSpdRefRpm = - ((SLONG)MC_MotorSPD_rpm_Percent*5500)/100;
  288. // if(abs(uart_slSpdRefRpm) < 300)
  289. // {
  290. // uart_slSpdRefRpm = 0;
  291. // }
  292. if (MOTOR_ID_SEL == MOTOR_WELLING_MTB)
  293. {
  294. sign = 1;
  295. }
  296. else if(MOTOR_ID_SEL == MOTOR_WELLING_CITY)
  297. {
  298. sign = -1;
  299. }
  300. else
  301. {
  302. sign=1;
  303. }
  304. if(MC_ControlCode.GearSt == 0x01)
  305. {
  306. uart_slSpdRefRpm = sign *785;
  307. }
  308. else if(MC_ControlCode.GearSt == 0x02)
  309. {
  310. //uart_slSpdRefRpm = sign *3088;
  311. uart_slSpdRefRpm = sign *1000;
  312. }
  313. else if(MC_ControlCode.GearSt == 0x03)
  314. {
  315. uart_slSpdRefRpm = sign *3088;
  316. }
  317. else if(MC_ControlCode.GearSt == 0x04)
  318. {
  319. uart_slSpdRefRpm = sign*3603;
  320. }
  321. else if(MC_ControlCode.GearSt == 0x33 || MC_ControlCode.GearSt == 0x05)
  322. {
  323. // uart_slSpdRefRpm = sign *3500;
  324. uart_slSpdRefRpm = sign*4500;
  325. }
  326. else
  327. {
  328. uart_slSpdRefRpm = 0;
  329. }
  330. }
  331. void TimingTaskTimerServer(void)
  332. {
  333. TimingTaskTimerTick++;
  334. LoopServerExecutedFlag = 0;
  335. }
  336. void TimingTaskLoopServer(void)
  337. {
  338. SLONG cnt;
  339. TimingTaskTimerTickTempOld = TimingTaskTimerTickTemp;
  340. TimingTaskTimerTickTemp = TimingTaskTimerTick;
  341. TimingTaskTimerTickPassed = TimingTaskTimerTickTemp - TimingTaskTimerTickTempOld;
  342. if (LoopServerExecutedFlag == 0)
  343. {
  344. for (cnt = 0; cnt < proc_cnt; cnt++)
  345. {
  346. Op[cnt].tick -= TimingTaskTimerTickPassed;
  347. if (Op[cnt].tick <= 0)
  348. {
  349. Op[cnt].tick += Op[cnt].timespan;
  350. Op[cnt].proc();
  351. }
  352. }
  353. LoopServerExecutedFlag = 1;
  354. }
  355. }