SMDU.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. #include <MyProject.h>
  2. // ------------------------------------------------------------------------------------------------------------------
  3. // 1. PI控制器初始化
  4. /**
  5. @function HW_Zero_PI_Init
  6. @brief 0号硬件PI控制器初始化
  7. @date 2025-11-01
  8. */
  9. void HW_Zero_PI_Init(void)
  10. {
  11. PI0_KP = SKP;
  12. PI0_KI = SKI;
  13. PI0_EK = 0;
  14. PI0_EK1 = 0;
  15. PI0_UKMAX = SOUTMAX;
  16. PI0_UKMIN = SOUTMIN;
  17. PI0_UKH = 0;
  18. PI0_UKL = 0;
  19. }
  20. /**
  21. @function HW_One_PI_Init
  22. @brief 1号硬件PI控制器初始化
  23. @date 2025-11-01
  24. */
  25. void HW_One_PI_Init(void)
  26. {
  27. PI1_KP = 0;
  28. PI1_KI = 0;
  29. PI1_EK = 0;
  30. PI1_EK1 = 0;
  31. PI1_UKMAX = 0;
  32. PI1_UKMIN = 0;
  33. PI1_UKH = 0;
  34. PI1_UKL = 0;
  35. }
  36. /**
  37. @function HW_Two_PI_Init
  38. @brief 2号硬件PI控制器初始化
  39. @date 2025-11-01
  40. */
  41. void HW_Two_PI_Init(void)
  42. {
  43. PI2_KP = 0;
  44. PI2_KI = 0;
  45. PI2_EK = 0;
  46. PI2_EK1 = 0;
  47. PI2_UKMAX = 0;
  48. PI2_UKMIN = 0;
  49. PI2_UKH = 0;
  50. PI2_UKL = 0;
  51. }
  52. /**
  53. @function HW_Three_PI_Init
  54. @brief 3号硬件PI控制器初始化
  55. @date 2025-11-01
  56. */
  57. void HW_Three_PI_Init(void)
  58. {
  59. PI3_KP = 0;
  60. PI3_KI = 0;
  61. PI3_EK = 0;
  62. PI3_EK1 = 0;
  63. PI3_UKMAX = 0;
  64. PI3_UKMIN = 0;
  65. PI3_UKH = 0;
  66. PI3_UKL = 0;
  67. }
  68. // ------------------------------------------------------------------------------------------------------------------
  69. // 2. PI计算
  70. /**
  71. @function HW_Zero_Calc
  72. @brief 0号PI计算
  73. @param[in] Xn0: [输入/出]
  74. @return PI计算值
  75. @date 2025-11-01
  76. */
  77. int16_t HW_Zero_Calc(int16_t Xn0)
  78. {
  79. PI0_EK = Xn0;
  80. SMDU_RunBlock(0, PI);
  81. return PI0_UKH;
  82. }
  83. /**
  84. @function HW_One_Calc
  85. @brief 1号PI计算
  86. @param[in] Xn0: [输入/出]
  87. @return PI计算值
  88. @date 2025-11-01
  89. */
  90. int16_t HW_One_Calc(int16_t Xn0)
  91. {
  92. PI1_EK = Xn0;
  93. SMDU_RunBlock(1, PI);
  94. return PI1_UKH;
  95. }
  96. /**
  97. @function HW_Two_Calc
  98. @brief 2号PI计算
  99. @param[in] Xn0: [输入/出]
  100. @return PI计算值
  101. @date 2025-11-01
  102. */
  103. int16_t HW_Two_Calc(int16_t Xn0)
  104. {
  105. PI2_EK = Xn0;
  106. SMDU_RunBlock(2, PI);
  107. return PI2_UKH;
  108. }
  109. /**
  110. @function HW_Three_Calc
  111. @brief 3号PI计算
  112. @param[in] Xn0: [输入/出]
  113. @return PI计算值
  114. @date 2025-11-01
  115. */
  116. int16_t HW_Three_Calc(int16_t Xn0)
  117. {
  118. PI3_EK = Xn0;
  119. SMDU_RunBlock(3, PI);
  120. return PI3_UKH;
  121. }
  122. // ------------------------------------------------------------------------------------------------------------------
  123. // 3.LPF 低通滤波计算
  124. /**
  125. @function LPF_Zero_Update
  126. @brief 0号低通滤波计算
  127. @param[in] Xn1: [输入/出]
  128. ** Xn0: [输入/出]
  129. ** K: [输入/出]
  130. @return 滤波结果
  131. @date 2025-11-03
  132. */
  133. int16_t LPF_Zero_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  134. {
  135. LPF0_K = K << 8;
  136. LPF0_X = Xn1;
  137. LPF0_YH = Xn0;
  138. SMDU_RunBlock(0, LPF);
  139. return LPF0_YH;
  140. }
  141. /**
  142. @function LPF_One_Update
  143. @brief 1号低通滤波计算
  144. @param[in] Xn1: [输入/出]
  145. ** Xn0: [输入/出]
  146. ** K: [输入/出]
  147. @return 滤波结果
  148. @date 2025-11-03
  149. */
  150. int16_t LPF_One_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  151. {
  152. LPF1_K = K << 8;
  153. LPF1_X = Xn1;
  154. LPF1_YH = Xn0;
  155. SMDU_RunBlock(1, LPF);
  156. return LPF1_YH;
  157. }
  158. /**
  159. @function LPF_Two_Update
  160. @brief 2号低通滤波计算
  161. @param[in] Xn1: [输入/出]
  162. ** Xn0: [输入/出]
  163. ** K: [输入/出]
  164. @return 滤波结果
  165. @date 2025-11-03
  166. */
  167. int16_t LPF_Two_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  168. {
  169. LPF2_K = K << 8;
  170. LPF2_X = Xn1;
  171. LPF2_YH = Xn0;
  172. SMDU_RunBlock(2, LPF);
  173. return LPF2_YH;
  174. }
  175. /**
  176. @function LPF_Three_Update
  177. @brief 2号低通滤波计算
  178. @param[in] Xn1: [输入/出]
  179. ** Xn0: [输入/出]
  180. ** K: [输入/出]
  181. @return 滤波结果
  182. @date 2025-11-03
  183. */
  184. int16_t LPF_Three_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  185. {
  186. LPF3_K = K << 8;
  187. LPF3_X = Xn1;
  188. LPF3_YH = Xn0;
  189. SMDU_RunBlock(3, LPF);
  190. return LPF3_YH;
  191. }
  192. /* -------------------------------------------------------------------------------------------------
  193. Function Name : Atan_Us_MDU
  194. Description : XX-XX-XX
  195. Date : 2021-11-06
  196. Parameter : Xn1: [输入/出]
  197. ** Xn0: [输入/出]
  198. ** K: [输入/出]
  199. ------------------------------------------------------------------------------------------------- */
  200. int16 Atan_Us_MDU(int16 Xn1, int16 Xn0)
  201. {
  202. SCAT1_COS = Xn1;
  203. SCAT1_SIN = Xn0;
  204. SCAT1_THE = 0;
  205. SMDU_RunBlock(1, ATAN);
  206. return SCAT1_RES1;
  207. }
  208. /* -------------------------------------------------------------------------------------------------
  209. Function Name : Atan_Us_MDU
  210. Description : XX-XX-XX
  211. Date : 2021-11-06
  212. Parameter : Xn1: [输入/出]
  213. ** Xn0: [输入/出]
  214. ** Yn: [输入/出]
  215. ------------------------------------------------------------------------------------------------- */
  216. int16 DivQ_L_MDU(uint16 Xn1, uint16 Xn0, uint16 Yn)
  217. {
  218. DIV0_DAH = Xn1;
  219. DIV0_DAL = Xn0;
  220. DIV0_DB = Yn;
  221. SMDU_RunBlock(0, DIV);
  222. return DIV0_DQL;
  223. }
  224. int16 DivQ_L_MDU2(uint16 Xn1, uint16 Xn0, uint16 Yn)
  225. {
  226. DIV1_DAH = Xn1;
  227. DIV1_DAL = Xn0;
  228. DIV1_DB = Yn;
  229. SMDU_RunBlock(1, DIV);
  230. return DIV1_DQL;
  231. }
  232. /**
  233. * @brief 计算Is
  234. * @param[in] i_alp: alp轴电流
  235. * @param[in] i_bet: bet轴电流
  236. * @return is
  237. * @date 2022-07-29
  238. */
  239. uint16 Sqrt_alpbet(int16 i_alp, int16 i_bet)
  240. {
  241. SCAT2_COS = i_alp;
  242. SCAT2_SIN = i_bet;
  243. SMDU_RunBlock(2, ATAN);
  244. return SCAT2_RES1;
  245. }
  246. /**
  247. * @brief 乘法器
  248. * @param[in] Xn1: 乘数0(16位
  249. * @param[in] Xn2: 乘数1(16位)
  250. * @return Yn: 结果
  251. * @date 2022-11-25
  252. */
  253. int16 MULU_H_MDU(uint16 Xn0, uint16 Xn1)
  254. {
  255. MUL3_MA = Xn0;
  256. MUL3_MB = Xn1;
  257. SMDU_RunBlock(3,UMUL);
  258. return MUL3_MCH;
  259. }
  260. void MULS_H_MDU(int16 Xn0, int16 Xn1,uint16 xdata *lusResult32)
  261. {
  262. MUL0_MA = Xn0;
  263. MUL0_MB = Xn1;
  264. SMDU_RunBlock(0,SMUL);
  265. *lusResult32 = MUL0_MCH;
  266. *(lusResult32+1) = MUL0_MCL;
  267. }