SMDU.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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 = FiledWeakenKp;
  28. PI1_KI = FiledWeakenKi;
  29. PI1_EK = 0;
  30. PI1_EK1 = 0;
  31. PI1_UKMAX = 0;
  32. PI1_UKMIN = _Q15((float) -35.0 / 180.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_KD = 0;
  46. PI2_EK = 0;
  47. PI2_EK1 = 0;
  48. PI2_EK2 = 0 ;
  49. PI2_UKMAX = 0;
  50. PI2_UKMIN = 0;
  51. PI2_UKH = 0;
  52. PI2_UKL = 0;
  53. }
  54. /**
  55. * @function HW_Three_PI_Init
  56. * @brief 3号硬件PI控制器初始化
  57. * @date 2025-11-01
  58. */
  59. void HW_Three_PI_Init(void)
  60. {
  61. PI3_KP = 0;
  62. PI3_KI = 0;
  63. PI3_KD = 0;
  64. PI3_EK = 0;
  65. PI3_EK1 = 0;
  66. PI3_EK2 = 0 ;
  67. PI3_UKMAX = 0;
  68. PI3_UKMIN = 0;
  69. PI3_UKH = 0;
  70. PI3_UKL = 0;
  71. }
  72. // ------------------------------------------------------------------------------------------------------------------
  73. // 2. PI计算
  74. /**
  75. * @function HW_Zero_Calc
  76. * @brief 0号PI计算
  77. * @param[in] Xn0: [输入/出]
  78. * @return PI计算值
  79. * @date 2025-11-01
  80. */
  81. int16_t HW_Zero_Calc(int16_t Xn0)
  82. {
  83. PI0_EK = Xn0;
  84. SMDU_RunBlock(0, 7);
  85. return PI0_UKH;
  86. }
  87. /**
  88. * @function HW_One_Calc
  89. * @brief 1号PI计算
  90. * @param[in] Xn0: [输入/出]
  91. * @return PI计算值
  92. * @date 2025-11-01
  93. */
  94. int16_t HW_One_Calc(int16_t Xn0)
  95. {
  96. PI1_EK = Xn0;
  97. SMDU_RunBlock(1, 7);
  98. return PI1_UKH;
  99. }
  100. /**
  101. * @function HW_Two_Calc
  102. * @brief 2号PI计算
  103. * @param[in] Xn0: [输入/出]
  104. * @return PI计算值
  105. * @date 2025-11-01
  106. */
  107. int16_t HW_Two_Calc(int16_t Xn0)
  108. {
  109. PI2_EK = Xn0;
  110. SMDU_RunBlock(2, 7);
  111. return PI2_UKH;
  112. }
  113. /**
  114. * @function HW_Three_Calc
  115. * @brief 3号PI计算
  116. * @param[in] Xn0: [输入/出]
  117. * @return PI计算值
  118. * @date 2025-11-01
  119. */
  120. int16_t HW_Three_Calc(int16_t Xn0)
  121. {
  122. PI3_EK = Xn0;
  123. SMDU_RunBlock(3, 7);
  124. return PI3_UKH;
  125. }
  126. // ------------------------------------------------------------------------------------------------------------------
  127. // 3.LPF 低通滤波计算
  128. /**
  129. * @function LPF_Zero_Update
  130. * @brief 0号低通滤波计算
  131. * @param[in] Xn1: [输入/出]
  132. ** Xn0: [输入/出]
  133. ** K: [输入/出]
  134. * @return 滤波结果
  135. * @date 2025-11-03
  136. */
  137. int16_t LPF_Zero_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  138. {
  139. LPF0_K = K;
  140. LPF0_X = Xn1;
  141. LPF0_YH = Xn0;
  142. SMDU_RunBlock(0, 6);
  143. return LPF0_YH;
  144. }
  145. /**
  146. * @function LPF_One_Update
  147. * @brief 1号低通滤波计算
  148. * @param[in] Xn1: [输入/出]
  149. ** Xn0: [输入/出]
  150. ** K: [输入/出]
  151. * @return 滤波结果
  152. * @date 2025-11-03
  153. */
  154. int16_t LPF_One_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  155. {
  156. LPF1_K = K;
  157. LPF1_X = Xn1;
  158. LPF1_YH = Xn0;
  159. SMDU_RunBlock(1, 6);
  160. return LPF1_YH;
  161. }
  162. /**
  163. * @function LPF_Two_Update
  164. * @brief 2号低通滤波计算
  165. * @param[in] Xn1: [输入/出]
  166. ** Xn0: [输入/出]
  167. ** K: [输入/出]
  168. * @return 滤波结果
  169. * @date 2025-11-03
  170. */
  171. int16_t LPF_Two_Update(int16_t Xn1, int16_t Xn0, int16_t K)
  172. {
  173. LPF2_K = K;
  174. LPF2_X = Xn1;
  175. LPF2_YH = Xn0;
  176. SMDU_RunBlock(2, 6);
  177. return LPF2_YH;
  178. }