CadAssist.h 28 KB

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