CadAssist.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. /**
  2. * @file CadAssist.h
  3. * @author xu, haifeng(xuhf58@midea.com)
  4. * @brief
  5. * @version 0.1
  6. * @date 2023-05-10
  7. *
  8. * @copyright Copyright (c) 2023
  9. *
  10. */
  11. #ifndef CADASSIST_H
  12. #define CADASSIST_H
  13. #include "typedefine.h"
  14. #include "macroequ.h"
  15. #include "asr.h"
  16. #include "syspar.h"
  17. #include "user.h"
  18. #include "bikeinformation.h"
  19. #if(INTELLIGENCADGEAR_EN !=0)
  20. #if (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_1000W)
  21. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  22. #define ASS_PID_KP _IQ8(15.0) /**< Q8. PID Kp */
  23. #define ASS_VOL_STEP_MAX _IQ8(1.5) /**< Q8. */
  24. #define ASS_VOL_DEC_STEP _IQ8(0.75) /**< Q8. */
  25. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  26. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  27. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  28. #define ASS_CAD_MAX_RPM 55
  29. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_750W)
  30. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  31. #define ASS_PID_KP _IQ8(15.0) /**< Q8. PID Kp */
  32. #define ASS_VOL_STEP_MAX _IQ8(1.5) /**< Q8. */
  33. #define ASS_VOL_DEC_STEP _IQ8(0.75) /**< Q8. */
  34. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  35. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  36. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  37. #define ASS_CAD_MAX_RPM 55
  38. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_500W)
  39. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  40. #define ASS_PID_KP _IQ8(15.0) /**< Q8. PID Kp */
  41. #define ASS_VOL_STEP_MAX _IQ8(1.5) /**< Q8. */
  42. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  43. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  44. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  45. #define ASS_MESH_CUR _IQ14(7.5/60) /**< Q14. Base 60A */
  46. #define ASS_CAD_MAX_RPM 55
  47. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_500W_958Ratio)
  48. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  49. #define ASS_PID_KP _IQ8(30.0) /**< Q8. PID Kp */
  50. #define ASS_VOL_STEP_MAX _IQ8(2.5) /**< Q8. */
  51. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  52. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  53. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  54. #define ASS_MESH_CUR _IQ14(7.5/60) /**< Q14. Base 60A */
  55. #define ASS_CAD_MAX_RPM 55
  56. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_350W)
  57. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  58. #define ASS_PID_KP _IQ8(15.0) /**< Q8. PID Kp */
  59. #define ASS_VOL_STEP_MAX _IQ8(1.5) /**< Q8. */
  60. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  61. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  62. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  63. #define ASS_MESH_CUR _IQ14(7.5/60) /**< Q14. Base 60A */
  64. #define ASS_CAD_MAX_RPM 55
  65. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_350W_958Ratio)
  66. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  67. #define ASS_PID_KP _IQ8(25.0) /**< Q8. PID Kp */
  68. #define ASS_VOL_STEP_MAX _IQ8(2.5) /**< Q8. */
  69. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  70. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  71. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  72. #define ASS_MESH_CUR _IQ14(7.5/60) /**< Q14. Base 60A */
  73. #define ASS_CAD_MAX_RPM 55
  74. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W)
  75. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  76. #define ASS_PID_KP _IQ8(20.0) /**< Q8. PID Kp */
  77. #define ASS_VOL_STEP_MAX _IQ8(2.0) /**< Q8. */
  78. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  79. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  80. #define ASS_PID_IERR_MIN _IQ14(2.0/60) /**< Q14. Base 60A */
  81. #define ASS_MESH_CUR _IQ14(5.0/60) /**< Q14. Base 60A */
  82. #define ASS_CAD_MAX_RPM 55
  83. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W_LowRatio)
  84. #define ASS_CUR_STEP 14 /**< Q14. Target Assist Current Step Value */
  85. #define ASS_PID_KP _IQ8(80.0) /**< Q8. PID Kp */
  86. #define ASS_VOL_STEP_MAX _IQ8(4.0) /**< Q8. */
  87. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  88. #define ASS_PID_ERR_MIN _IQ15(0.0/1400) /**< Q15. PID Min Err */
  89. #define ASS_PID_IERR_MIN _IQ14(2.0/60) /**< Q14. Base 60A */
  90. #define ASS_MESH_CUR _IQ14(5.0/60) /**< Q14. Base 60A */
  91. #define ASS_CAD_MAX_RPM 55
  92. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W_517Ratio)
  93. #define ASS_CUR_STEP 14 /**< Q14. Target Assist Current Step Value */
  94. #define ASS_PID_KP _IQ8(20.0) /**< Q8. PID Kp */
  95. #define ASS_VOL_STEP_MAX _IQ8(4.0) /**< Q8. */
  96. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  97. #define ASS_PID_ERR_MIN _IQ15(0.0/1400) /**< Q15. PID Min Err */
  98. #define ASS_PID_IERR_MIN _IQ14(2.0/60) /**< Q14. Base 60A */
  99. #define ASS_MESH_CUR _IQ14(5.0/60) /**< Q14. Base 60A */
  100. #define ASS_CAD_MAX_RPM 55
  101. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W_958Ratio)
  102. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  103. #define ASS_PID_KP _IQ8(40.0) /**< Q8. PID Kp */
  104. #define ASS_VOL_STEP_MAX _IQ8(2.5) /**< Q8. */
  105. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  106. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  107. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  108. #define ASS_MESH_CUR _IQ14(5.0/60) /**< Q14. Base 60A */
  109. #define ASS_CAD_MAX_RPM 55
  110. #else
  111. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  112. #define ASS_PID_KP _IQ8(40.0) /**< Q8. PID Kp */
  113. #define ASS_VOL_STEP_MAX _IQ8(3.0) /**< Q8. */
  114. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  115. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  116. #define ASS_PID_IERR_MIN _IQ14(2.0/60) /**< Q14. Base 60A */
  117. #define ASS_MESH_CUR _IQ14(5.0/60) /**< Q14. Base 60A */
  118. #define ASS_CAD_MAX_RPM 55
  119. #endif
  120. #else
  121. #define ASS_CAD_MAX_RPM 55
  122. #if (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_1000W)
  123. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  124. #define ASS_PID_KP _IQ8(7.5) /**< Q8. PID Kp */
  125. #define ASS_VOL_STEP_MAX _IQ8(1.0) /**< Q8. */
  126. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  127. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  128. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  129. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  130. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_750W)
  131. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  132. #define ASS_PID_KP _IQ8(7.5) /**< Q8. PID Kp */
  133. #define ASS_VOL_STEP_MAX _IQ8(2.0) /**< Q8. */
  134. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  135. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  136. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  137. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  138. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_500W)
  139. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  140. #define ASS_PID_KP _IQ8(7.5) /**< Q8. PID Kp */
  141. #define ASS_VOL_STEP_MAX _IQ8(2.0) /**< Q8. */
  142. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  143. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  144. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  145. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  146. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_500W_958Ratio)
  147. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  148. #define ASS_PID_KP _IQ8(7.5) /**< Q8. PID Kp */
  149. #define ASS_VOL_STEP_MAX _IQ8(2.0) /**< Q8. */
  150. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  151. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  152. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  153. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  154. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_350W)
  155. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  156. #define ASS_PID_KP _IQ8(7.5) /**< Q8. PID Kp */
  157. #define ASS_VOL_STEP_MAX _IQ8(1.0) /**< Q8. */
  158. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  159. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  160. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  161. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  162. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_350W_958Ratio)
  163. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  164. #define ASS_PID_KP _IQ8(7.5) /**< Q8. PID Kp */
  165. #define ASS_VOL_STEP_MAX _IQ8(4.0) /**< Q8. */
  166. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  167. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  168. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  169. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  170. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W)
  171. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  172. #define ASS_PID_KP _IQ8(10.0) /**< Q8. PID Kp */
  173. #define ASS_VOL_STEP_MAX _IQ8(2.5) /**< Q8. */
  174. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  175. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  176. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  177. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  178. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W_LowRatio)
  179. #define ASS_CUR_STEP 14 /**< Q14. Target Assist Current Step Value */
  180. #define ASS_PID_KP _IQ8(40.0) /**< Q8. PID Kp */
  181. #define ASS_VOL_STEP_MAX _IQ8(4.0) /**< Q8. */
  182. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  183. #define ASS_PID_ERR_MIN _IQ15(0.0/1400) /**< Q15. PID Min Err */
  184. #define ASS_PID_IERR_MIN _IQ14(2.0/60) /**< Q14. Base 60A */
  185. #define ASS_MESH_CUR _IQ14(5.0/60) /**< Q14. Base 60A */
  186. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W_517Ratio)
  187. #define ASS_CUR_STEP 14 /**< Q14. Target Assist Current Step Value */
  188. #define ASS_PID_KP _IQ8(20.0) /**< Q8. PID Kp */
  189. #define ASS_VOL_STEP_MAX _IQ8(4.0) /**< Q8. */
  190. #define ASS_VOL_DEC_STEP _IQ8(1.0) /**< Q8. */
  191. #define ASS_PID_ERR_MIN _IQ15(0.0/1400) /**< Q15. PID Min Err */
  192. #define ASS_PID_IERR_MIN _IQ14(2.0/60) /**< Q14. Base 60A */
  193. #define ASS_MESH_CUR _IQ14(5.0/60) /**< Q14. Base 60A */
  194. #define ASS_CAD_MAX_RPM 55
  195. #elif (MOTOR_ID_SEL == MOTOR_LUNGU_WELLING_HAL_POLE8_250W_958Ratio)
  196. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  197. #define ASS_PID_KP _IQ8(7.5) /**< Q8. PID Kp */
  198. #define ASS_VOL_STEP_MAX _IQ8(4.0) /**< Q8. */
  199. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  200. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  201. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  202. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  203. #else
  204. #define ASS_CUR_STEP 20 /**< Q14. Target Assist Current Step Value */
  205. #define ASS_PID_KP _IQ8(80) /**< Q8. PID Kp */
  206. #define ASS_VOL_STEP_MAX _IQ8(8) /**< Q8. */
  207. #define ASS_VOL_DEC_STEP _IQ8(0.5) /**< Q8. */
  208. #define ASS_PID_ERR_MIN _IQ15(0/1400) /**< Q15. PID Min Err */
  209. #define ASS_PID_IERR_MIN _IQ14(3.0/60) /**< Q14. Base 60A */
  210. #define ASS_MESH_CUR _IQ14(10.0/60) /**< Q14. Base 60A */
  211. #endif
  212. #endif
  213. #define ASS_CMD_SPEED_LPF_TIME 5000L /**< Cmd Low Pass Filter Time. Unit 1ms */
  214. #if(THROTTLEGEAR !=0)
  215. #define ASS_ONE_SPEED_PERCENT 60
  216. #define ASS_TWO_SPEED_PERCENT 72
  217. #define ASS_THREE_SPEED_PERCENT 84
  218. #define ASS_FOUR_SPEED_PERCENT 100
  219. #define ASS_FIVE_SPEED_PERCENT 100
  220. #endif
  221. #if(CADASSISTGEAR !=0)
  222. #define CAD_ONE_SPEED_PERCENT 60
  223. #define CAD_TWO_SPEED_PERCENT 72
  224. #define CAD_THREE_SPEED_PERCENT 84
  225. #define CAD_FOUR_SPEED_PERCENT 100
  226. #define CAD_FIVE_SPEED_PERCENT 100
  227. #endif
  228. /***************************************
  229. *
  230. * Type Definations
  231. *
  232. ***************************************/
  233. /**
  234. * @brief Assist Calculate State Machine Status
  235. *
  236. */
  237. typedef enum
  238. {
  239. CadAssStop = 0, /**< Stop State */
  240. CadAssStartup = 1, /**< Startup State */
  241. CadAssPro = 2, /**< Assist Calculate State */
  242. CadAssPreStop = 3 /**< Assist Stop Prepare State */
  243. } CAD_ASS_FSM_STATUS;
  244. /**
  245. * @brief Type of Spd Control PID
  246. *
  247. */
  248. typedef struct
  249. {
  250. //coef
  251. UWORD uwPidKp; /**助力kp< Q8. PID Kp */
  252. UWORD uwThrittlePidKp; /**< Q8. PID Kp */
  253. UWORD uwACTPidKp; /**< Q8. PID Kp */
  254. //input
  255. SWORD swIqRef; /**< Q14. PID Input q axis current reference */
  256. SWORD swIqFbk; /**< Q14. PID Input q axis current feedback */
  257. SWORD swPidRef; /**< Q15. PID Input Motor Speed reference */
  258. SWORD swPidFbk; /**< Q15. PID Input Motor Speed feedback */
  259. SWORD swPidLimMax; /**< Q8. PID Output Limit */
  260. SWORD swPidVolDec; /**< Q8. PID Output Limit */
  261. SWORD swDirection; /**< Motor Run Direction */
  262. //work var
  263. SLONG slPidErr; /**< Q15. The Err of PID Motor Speed reference and feedback*/
  264. SLONG slPidP; /**< Q8. PID Proportion Term Result */
  265. //out
  266. SWORD swPidOut; /**< Q8. PID Output Term Result */
  267. }CADASS_PID;
  268. /**
  269. * @brief Assist Calculate Coefficient Struct
  270. *
  271. */
  272. typedef struct
  273. {
  274. // Bike info
  275. UWORD uwWheelCircumferenceCm; /**< Unit: 1cm. Bike Wheel Perimeter. */
  276. UWORD uwMechRationMotor; /**< Q10. Motor To Bike Wheel Ratio */
  277. UWORD uwAssistMaxBikeSpeed; /**< Q4. Base 1Km/h. Assist Max Bike Speed */
  278. UWORD uwThrottleMaxBikeSpeed; /**< Q4. Base 1Km/h. Throttle Max Bike Speed */
  279. UWORD uwCartMaxBikeSpeed; /**< Q4. Base 1Km/h. Cart Bike Speed */
  280. UWORD uwMaxCadRpm; /**< Set Max Cadence Freqency Unit Rpm */
  281. UWORD uwCadencePulses; /**< Cadence Pulses for 1 Cycle */
  282. UWORD uwFluxPu; /**< Q12. Motor Rotor Flux */
  283. // Drive info
  284. UWORD uwMotorPoles; /**< Motor Pole Pairs*/
  285. UWORD uwCofCurMaxPu; /**< Q14. Max Assist Current */
  286. SWORD swKmhToMSpdPu; /**< Q15.1km/h to Unit motorspd pu */
  287. SLONG slBSpdPuToMSpdPu; /**< Q10.Transform form Bike speed pu(Q20) to motor speed pu(Q15) */
  288. SWORD swMSpdpuLimit; /**< Q15.Assist Max Speed.Calculate By ASS_SPD_LIMIT */
  289. SWORD swAssistSectionComp; /**< Q14.Cadence Control Speed Section Compensation Coefficient */
  290. SWORD swAssistMaxSpd;
  291. SWORD swThrottleMaxspd;
  292. } CADASS_COEF;
  293. typedef struct
  294. {
  295. UWORD uwGearOne;
  296. UWORD uwGearTwo;
  297. UWORD uwGearThree;
  298. UWORD uwGearFour;
  299. UWORD uwGearFive;
  300. UWORD MaxBikeSpeed;
  301. } GEAR_COEF;
  302. /**
  303. * @brief Candence Assist Parameter Input Struct
  304. *
  305. */
  306. typedef struct
  307. {
  308. SWORD swFlxIqLimitPu; /**< Q14. Flux Module Current Limit */
  309. SWORD swPwrIqLimitPu; /**< Q14. Power Limit Module Current Limit */
  310. UWORD uwBmsIqLimitPu; /**< Q14. Battery Management Module Current Limit */
  311. SWORD swAssMaxVolLimpu; /**< Q14. Voltage Limit Value */
  312. SWORD swDirection; /**< Motor Run Direction */
  313. UWORD uwGearSt; /**< Assist Gear Status */
  314. UWORD uwCadancePer; /**< Q14. Cadance output persentage.Fmax = 5Hz */
  315. UWORD uwCadanceFwCnt; /**< Cadance pulse count number */
  316. UWORD uwBikespeedPu; /**< Q20. Bike speed pu */
  317. SWORD swSpdFbkPu; /**< Q20. Motor speed pu */
  318. SWORD swIqRefpu; /**< Q14. q axis current reference */
  319. SWORD swIqFbkpu; /**< Q14. q axis current feedback */
  320. SWORD swUqOutputpu; /**< Q14. q axis voltage feedback */
  321. UWORD uwThrottlePercent; /**< Q0. Unit 0.1%. Throttle Percent */
  322. } CADASS_PER_IN;
  323. /**
  324. * @brief Candence Assist Process State Parameter Struct
  325. *
  326. */
  327. typedef struct
  328. {
  329. UWORD uw1msCnt; /**< Q0. 1ms Counter */
  330. UWORD uw10msCnt; /**< Q0. 10ms Counter */
  331. UWORD uwAssitMode; /**< Assist Mode */
  332. UWORD uwAssitModeLast; /**< Assist Mode Last */
  333. SWORD swAssistSpdCmd; /**< Q15. Assist Motor Speed reference */
  334. SWORD swCurrentMaxPu; /**< Q14. Assist Max Current */
  335. SWORD swUqLimitInitPu; /**< Q14. Assist Voltage Limit Init Value */
  336. SWORD swVoltageStep; /**< Q8. Assist Voltage Limit Slope Value */
  337. SLONG slVoltageSum; /**< Q22. Assist Voltage Limit Slope Value */
  338. SWORD swBikeSpd2MotSpdPu; /**< Q15.Motor Speed pu Caculate By Bike Speed pu(Q20)*/
  339. SWORD swSpdFbkPuRec[10]; /**< Q15. Assist Motor Speed Feedback Record */
  340. SWORD swSpdFbkPuAcc; /**< Assist Motor Speed Acceleration.10 - 3Km/s */
  341. SWORD swTargetAssCurPu; /**< Q14. Assist Target Current */
  342. SWORD swTargetAssCurAcc; /**< Q14. Assist Target Current Step Value */
  343. } CADASS_PER_PRO;
  344. /**
  345. * @brief Candence Assist Parameter Output Struct
  346. *
  347. */
  348. typedef struct
  349. {
  350. BOOL blAssistflag; /**< Assist Flag. TRUE or FALSE */
  351. BOOL blPreStopFlag; /**< PreStop Flag. TRUE or FALSE */
  352. SWORD swAssCurrentPu; /**< Q14. Actual Assist Current */
  353. SWORD swVoltLimitPu; /**< Q14. Assist Voltage Limit Value */
  354. } CADASS_PER_OUT;
  355. /**
  356. * @brief Candence Assist
  357. *
  358. */
  359. typedef struct
  360. {
  361. UWORD wwCdenceRpm;
  362. UWORD uwBikeRpm ;
  363. UWORD uwCadErrNow;
  364. UWORD uwCadErrBack;
  365. UWORD uwCadErrdata[10];
  366. UWORD uwWhellFitcnt;
  367. UWORD uwmatchNumb;
  368. UWORD uwmatchNumbBack;
  369. UWORD uwcnt;
  370. UWORD uwWhellFitCnt;
  371. BOOL blmatchMode;
  372. BOOL blCadChangeFlag;
  373. }MaTCHCAD_TRUCT;
  374. typedef struct
  375. {
  376. SWORD swAccCurLimitMax;
  377. UWORD uwAccCurLimitGear;
  378. UWORD uwUart5SPWM;
  379. }GEAR_CUR_TRUCT;
  380. typedef struct
  381. {
  382. UBYTE State; //0-Stop,1-加速,2-恒功率
  383. UWORD K_Init; //初始系数
  384. UWORD K_AccStep; //递增斜率
  385. UWORD K_DecStep; //递减斜率
  386. UWORD K_Result; //功率限制衰减系数
  387. }THROTTLE_POWER_LIMIT_STRUCT;
  388. extern MaTCHCAD_TRUCT CadSmart;
  389. extern GEAR_CUR_TRUCT GearCur;
  390. /****************************************
  391. *
  392. * Exported variable
  393. *
  394. ****************************************/
  395. //extern CADASS_PER_IN ass_stCadAssParaIn;
  396. //extern CADASS_PER_PRO ass_stCadAssParaPro;
  397. extern CADASS_COEF ass_stCadAssCoef;
  398. extern CADASS_PER_OUT ass_stCadAssCalOut;
  399. extern CADASS_PID ass_stCadAssSpdCtl;
  400. extern CADASS_PER_PRO ass_stCadAssParaPro;
  401. extern CAD_ASS_FSM_STATUS ass_enCadAssStatus;
  402. extern THROTTLE_POWER_LIMIT_STRUCT Throttle_PowerLimit_K;
  403. /************************************************************************
  404. Ram Allocation
  405. *************************************************************************/
  406. /***************************************
  407. *
  408. * Exported Function
  409. *
  410. ***************************************/
  411. /**
  412. * @brief Parameter Reset or Power On Init Function
  413. *
  414. * @note Call in main(),before EE intial
  415. */
  416. extern void ass_voParameterInit(void);
  417. /**
  418. * @brief Coefficient Get and Calculate Function
  419. *
  420. * @note Call in SysRdy_hook(),at first execution and Second State Flow Exit
  421. */
  422. extern void ass_voAssistCoefCal(void);
  423. extern void CadSpedLinitPowerInit(void);
  424. /**
  425. * @brief Assist Function
  426. *
  427. * @note Call in Event_1ms()
  428. */
  429. extern void ass_voAssistFunc(void);
  430. extern void CadSmartDisting(void);
  431. extern void GearLimitCurHandle(void);
  432. extern void ThrottlePowerLimitCal(BOOL ThrottleModeFlag, UWORD BikeSpeed, UWORD BikeSpeedLimit, SWORD PowerCur, SWORD PowerMax, THROTTLE_POWER_LIMIT_STRUCT* ThrottlePowerLimit);
  433. #endif