SMDU.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /**
  2. * @copyright None
  3. * @file SMDU.c
  4. * @author Comment Vivre
  5. * @date 2025-11-03
  6. * @brief None
  7. */
  8. #include <MyProject.h>
  9. // ------------------------------------------------------------------------------------------------------------------
  10. // 1. PI控制器初始化
  11. /**
  12. @function HW_Zero_PI_Init
  13. @brief 0号硬件PI控制器初始化
  14. @date 2025-11-01
  15. */
  16. void HW_Zero_PI_Init(void)
  17. {
  18. PI0_KP = SKP;
  19. PI0_KI = SKI;
  20. PI0_EK = 0;
  21. PI0_EK1 = 0;
  22. PI0_UKMAX = SOUTMAX;
  23. PI0_UKMIN = SOUTMIN;
  24. PI0_UKH = 0;
  25. PI0_UKL = 0;
  26. }
  27. /**
  28. @function HW_One_PI_Init
  29. @brief 1号硬件PI控制器初始化
  30. @date 2025-11-01
  31. */
  32. void HW_One_PI_Init(void)
  33. {
  34. PI1_KP = FiledWeakenKp;
  35. PI1_KI = FiledWeakenKi;
  36. PI1_EK = 0;
  37. PI1_EK1 = 0;
  38. PI1_UKMAX = 0;
  39. PI1_UKMIN = _Q15((float) -35.0 / 180.0) ;
  40. PI1_UKH = 0;
  41. PI1_UKL = 0;
  42. }
  43. /**
  44. @function HW_Two_PI_Init
  45. @brief 2号硬件PI控制器初始化
  46. @date 2025-11-01
  47. */
  48. void HW_Two_PI_Init(void)
  49. {
  50. PI2_KP = 0;
  51. PI2_KI = 0;
  52. PI2_KD = 0;
  53. PI2_EK = 0;
  54. PI2_EK1 = 0;
  55. PI2_EK2 = 0 ;
  56. PI2_UKMAX = 0;
  57. PI2_UKMIN = 0;
  58. PI2_UKH = 0;
  59. PI2_UKL = 0;
  60. }
  61. /**
  62. @function HW_Three_PI_Init
  63. @brief 3号硬件PI控制器初始化
  64. @date 2025-11-01
  65. */
  66. void HW_Three_PI_Init(void)
  67. {
  68. PI3_KP = 0;
  69. PI3_KI = 0;
  70. PI3_KD = 0;
  71. PI3_EK = 0;
  72. PI3_EK1 = 0;
  73. PI3_EK2 = 0 ;
  74. PI3_UKMAX = 0;
  75. PI3_UKMIN = 0;
  76. PI3_UKH = 0;
  77. PI3_UKL = 0;
  78. }
  79. // ------------------------------------------------------------------------------------------------------------------
  80. // 2. PI计算
  81. /**
  82. @function HW_Zero_Calc
  83. @brief 0号PI计算
  84. @param[in] Xn0: [输入/出]
  85. @return PI计算值
  86. @date 2025-11-01
  87. */
  88. int16_t HW_Zero_Calc(int16_t Xn0)
  89. {
  90. PI0_EK = Xn0;
  91. SMDU_RunBlock(0, 7);
  92. return PI0_UKH;
  93. }
  94. /**
  95. @function HW_One_Calc
  96. @brief 1号PI计算
  97. @param[in] Xn0: [输入/出]
  98. @return PI计算值
  99. @date 2025-11-01
  100. */
  101. int16_t HW_One_Calc(int16_t Xn0)
  102. {
  103. PI1_EK = Xn0;
  104. SMDU_RunBlock(1, 7);
  105. return PI1_UKH;
  106. }
  107. /**
  108. @function HW_Two_Calc
  109. @brief 2号PI计算
  110. @param[in] Xn0: [输入/出]
  111. @return PI计算值
  112. @date 2025-11-01
  113. */
  114. int16_t HW_Two_Calc(int16_t Xn0)
  115. {
  116. PI2_EK = Xn0;
  117. SMDU_RunBlock(2, 7);
  118. return PI2_UKH;
  119. }
  120. /**
  121. @function HW_Three_Calc
  122. @brief 3号PI计算
  123. @param[in] Xn0: [输入/出]
  124. @return PI计算值
  125. @date 2025-11-01
  126. */
  127. int16_t HW_Three_Calc(int16_t Xn0)
  128. {
  129. PI3_EK = Xn0;
  130. SMDU_RunBlock(3, 7);
  131. return PI3_UKH;
  132. }
  133. // ------------------------------------------------------------------------------------------------------------------
  134. // 3.LPF 低通滤波计算
  135. /**
  136. @function LPF_Zero_Update
  137. @brief 0号低通滤波计算
  138. @param[in] Xn1: [输入/出]
  139. ** Xn0: [输入/出]
  140. ** K: [输入/出]
  141. @return 滤波结果
  142. @date 2025-11-03
  143. */
  144. int16_t LPF_Zero_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  145. {
  146. LPF0_K = K;
  147. LPF0_X = Xn1;
  148. LPF0_YH = Xn0;
  149. SMDU_RunBlock(0, 6);
  150. return LPF0_YH;
  151. }
  152. /**
  153. @function LPF_One_Update
  154. @brief 1号低通滤波计算
  155. @param[in] Xn1: [输入/出]
  156. ** Xn0: [输入/出]
  157. ** K: [输入/出]
  158. @return 滤波结果
  159. @date 2025-11-03
  160. */
  161. int16_t LPF_One_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  162. {
  163. LPF1_K = K;
  164. LPF1_X = Xn1;
  165. LPF1_YH = Xn0;
  166. SMDU_RunBlock(1, 6);
  167. return LPF1_YH;
  168. }
  169. /**
  170. @function LPF_Two_Update
  171. @brief 2号低通滤波计算
  172. @param[in] Xn1: [输入/出]
  173. ** Xn0: [输入/出]
  174. ** K: [输入/出]
  175. @return 滤波结果
  176. @date 2025-11-03
  177. */
  178. int16_t LPF_Two_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  179. {
  180. LPF2_K = K;
  181. LPF2_X = Xn1;
  182. LPF2_YH = Xn0;
  183. SMDU_RunBlock(2, 6);
  184. return LPF2_YH;
  185. }