CadAssist.h 25 KB

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