foc_algorithm.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. /**********************************
  2. * 文件名称: foc_algorithm.h
  3. * 功能描述: 磁场定向控制(FOC)算法头文件
  4. * 主要内容:
  5. * 1. 定义FOC相关结构体
  6. * 2. 声明FOC算法函数
  7. * 3. 声明PID控制器参数
  8. *
  9. * 注意事项:
  10. * - 包含各种坐标系的电流和电压结构体
  11. * - 包含EKF和参数识别相关接口
  12. * - 包含PID控制器参数
  13. **********************************/
  14. #ifndef RTW_HEADER_foc_algorithm_h_
  15. #define RTW_HEADER_foc_algorithm_h_
  16. #include <stddef.h>
  17. #ifndef foc_algorithm_COMMON_INCLUDES_
  18. # define foc_algorithm_COMMON_INCLUDES_
  19. #include "rtwtypes.h"
  20. #endif
  21. #include "MW_target_hardware_resources.h"
  22. #include "mw_cmsis.h"
  23. #ifndef rtmGetErrorStatus
  24. # define rtmGetErrorStatus(rtm) ((rtm)->errorStatus)
  25. #endif
  26. #ifndef rtmSetErrorStatus
  27. # define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val))
  28. #endif
  29. #define foc_algorithm_M (rtM)
  30. typedef struct tag_RTM RT_MODEL;
  31. /**
  32. * @brief FOC接口状态结构体
  33. * @details 包含EKF、电感识别和电阻/磁链识别的状态和接口
  34. */
  35. typedef struct {
  36. real_T EKF_States[4]; // EKF状态向量
  37. real_T L_Ident_States; // 电感识别状态
  38. real_T R_flux_Ident_States; // 电阻和磁链识别状态
  39. real32_T EKF_Interface[7]; // EKF接口输入
  40. real32_T R_flux_Ident_Interface[3]; // 电阻和磁链识别接口输入
  41. real32_T L_Ident_Interface[2]; // 电感识别接口输入
  42. real32_T R_flux_Ident_Output[2]; // 电阻和磁链识别输出
  43. real32_T L_Ident_Output; // 电感识别输出
  44. } FOC_INTERFACE_STATES_DEF;
  45. /**
  46. * @brief FOC输入结构体
  47. * @details 包含FOC算法所需的输入参数
  48. */
  49. typedef struct {
  50. real32_T Id_ref; // D轴电流参考值
  51. real32_T Iq_ref; // Q轴电流参考值
  52. real32_T speed_fdk; // 速度反馈值
  53. real32_T theta; // 电机角度
  54. real32_T ia; // A相电流
  55. real32_T ib; // B相电流
  56. real32_T ic; // C相电流
  57. real32_T Udc; // 直流母线电压
  58. real32_T Tpwm; // PWM周期
  59. real32_T Rs; // 定子电阻
  60. real32_T Ls; // 定子电感
  61. real32_T flux; // 磁链
  62. } FOC_INPUT_DEF;
  63. /**
  64. * @brief FOC输出结构体
  65. * @details 包含FOC算法的输出参数
  66. */
  67. typedef struct {
  68. real32_T Tcmp1; // PWM通道1占空比
  69. real32_T Tcmp2; // PWM通道2占空比
  70. real32_T Tcmp3; // PWM通道3占空比
  71. real32_T EKF[4]; // EKF输出
  72. real32_T L_RF[3]; // 电感、电阻和磁链识别结果
  73. } FOC_OUTPUT_DEF;
  74. /**
  75. * @brief 三相电流结构体
  76. */
  77. typedef struct
  78. {
  79. real32_T Ia; // A相电流
  80. real32_T Ib; // B相电流
  81. real32_T Ic; // C相电流
  82. }CURRENT_ABC_DEF;
  83. /**
  84. * @brief 两相静止坐标系电流结构体
  85. */
  86. typedef struct
  87. {
  88. real32_T Ialpha; // Alpha轴电流
  89. real32_T Ibeta; // Beta轴电流
  90. }CURRENT_ALPHA_BETA_DEF;
  91. /**
  92. * @brief 两相静止坐标系电压结构体
  93. */
  94. typedef struct
  95. {
  96. real32_T Valpha; // Alpha轴电压
  97. real32_T Vbeta; // Beta轴电压
  98. }VOLTAGE_ALPHA_BETA_DEF;
  99. /**
  100. * @brief 余弦正弦变换结构体
  101. */
  102. typedef struct
  103. {
  104. real32_T Cos; // 余弦值
  105. real32_T Sin; // 正弦值
  106. }TRANSF_COS_SIN_DEF;
  107. /**
  108. * @brief 两相旋转坐标系电流结构体
  109. */
  110. typedef struct
  111. {
  112. real32_T Id; // D轴电流
  113. real32_T Iq; // Q轴电流
  114. }CURRENT_DQ_DEF;
  115. /**
  116. * @brief 两相旋转坐标系电压结构体
  117. */
  118. typedef struct
  119. {
  120. real32_T Vd; // D轴电压
  121. real32_T Vq; // Q轴电压
  122. }VOLTAGE_DQ_DEF;
  123. /**
  124. * @brief 电流PID控制器结构体
  125. */
  126. typedef struct
  127. {
  128. real32_T P_Gain; // 比例系数
  129. real32_T I_Gain; // 积分系数
  130. real32_T D_Gain; // 微分系数
  131. real32_T B_Gain; // 反馈系数
  132. real32_T Max_Output; // 最大输出
  133. real32_T Min_Output; // 最小输出
  134. real32_T I_Sum; // 积分和
  135. real32_T Max_Integral; // 最大积分限制
  136. real32_T Min_Integral; // 最小积分限制
  137. }CURRENT_PID_DEF;
  138. // 外部变量声明
  139. /**
  140. * @brief 两相静止坐标系电流
  141. */
  142. extern CURRENT_ALPHA_BETA_DEF Current_Ialpha_beta;
  143. /**
  144. * @brief 实时模型结构体
  145. */
  146. struct tag_RTM {
  147. const char_T *errorStatus; // 错误状态
  148. };
  149. /**
  150. * @brief FOC接口状态
  151. */
  152. extern FOC_INTERFACE_STATES_DEF FOC_Interface_states;
  153. /**
  154. * @brief FOC输入参数
  155. */
  156. extern FOC_INPUT_DEF FOC_Input;
  157. /**
  158. * @brief FOC输出参数
  159. */
  160. extern FOC_OUTPUT_DEF FOC_Output;
  161. // 函数声明
  162. /**
  163. * @brief FOC算法初始化函数
  164. * @retval 无
  165. */
  166. extern void foc_algorithm_initialize(void);
  167. /**
  168. * @brief FOC算法主函数
  169. * @retval 无
  170. */
  171. extern void foc_algorithm_step(void);
  172. // PID控制器参数
  173. /**
  174. * @brief D轴PID控制器参数
  175. */
  176. extern real32_T D_PI_I; // D轴积分系数
  177. extern real32_T D_PI_KB; // D轴反馈系数
  178. extern real32_T D_PI_LOW_LIMIT; // D轴输出下限
  179. extern real32_T D_PI_P; // D轴比例系数
  180. extern real32_T D_PI_UP_LIMIT; // D轴输出上限
  181. /**
  182. * @brief Q轴PID控制器参数
  183. */
  184. extern real32_T Q_PI_I; // Q轴积分系数
  185. extern real32_T Q_PI_KB; // Q轴反馈系数
  186. extern real32_T Q_PI_LOW_LIMIT; // Q轴输出下限
  187. extern real32_T Q_PI_P; // Q轴比例系数
  188. extern real32_T Q_PI_UP_LIMIT; // Q轴输出上限
  189. /**
  190. * @brief 实时模型指针
  191. */
  192. extern RT_MODEL *const rtM;
  193. /***************************************
  194. * Clarke变换
  195. * 功能:将三相电流转换为alpha-beta坐标系电流
  196. * 描述:将120度三相坐标系转换为90度两相静止坐标系
  197. ***************************************/
  198. extern void Clarke_Transf(CURRENT_ABC_DEF Current_abc_temp,CURRENT_ALPHA_BETA_DEF* Current_alpha_beta_temp);
  199. /***************************************
  200. * SVPWM计算
  201. * 功能:将alpha-beta电压转换为PWM占空比
  202. * 描述:根据alpha-beta电压向量计算SVPWM占空比
  203. ***************************************/
  204. extern void SVPWM_Calc(VOLTAGE_ALPHA_BETA_DEF v_alpha_beta_temp,real32_T Udc_temp,real32_T Tpwm_temp);
  205. /***************************************
  206. * 角度转余弦正弦值
  207. * 功能:将角度转换为余弦和正弦值
  208. * 描述:使用ARM DSP库计算角度的余弦和正弦值
  209. ***************************************/
  210. extern void Angle_To_Cos_Sin(real32_T angle_temp,TRANSF_COS_SIN_DEF* cos_sin_temp);
  211. /***************************************
  212. * Park变换
  213. * 功能:将alpha-beta坐标系电流转换为DQ坐标系电流
  214. * 描述:使用余弦和正弦值将两相静止坐标系转换为两相旋转坐标系
  215. ***************************************/
  216. extern void Park_Transf(CURRENT_ALPHA_BETA_DEF current_alpha_beta_temp,TRANSF_COS_SIN_DEF cos_sin_temp,CURRENT_DQ_DEF* current_dq_temp);
  217. /***************************************
  218. * 反Park变换
  219. * 功能:将DQ坐标系电压转换为alpha-beta坐标系电压
  220. * 描述:使用余弦和正弦值将两相旋转坐标系转换为两相静止坐标系
  221. ***************************************/
  222. extern void Rev_Park_Transf(VOLTAGE_DQ_DEF v_dq_temp,TRANSF_COS_SIN_DEF cos_sin_temp,VOLTAGE_ALPHA_BETA_DEF* v_alpha_beta_temp);
  223. /***************************************
  224. * 电流PID控制器
  225. * 功能:计算电流PID控制器输出
  226. * 描述:根据参考值和反馈值计算PID控制器输出
  227. ***************************************/
  228. extern void Current_PID_Calc(real32_T ref_temp,real32_T fdb_temp,real32_T* out_temp,CURRENT_PID_DEF* current_pid_temp);
  229. /***************************************
  230. * 电压限制
  231. * 功能:限制电压向量幅值
  232. * 描述:确保电压向量不超过SVPWM的最大幅值
  233. ***************************************/
  234. extern void voltage_limit(float *vd, float *vq, float vdc);
  235. extern void motor_ekf_closeloop_run(void);
  236. extern void motor_hall_close_run(void);
  237. extern void motor_foc_openloop_run(void);
  238. extern FOC_INPUT_DEF* get_foc_input(void);
  239. extern FOC_OUTPUT_DEF* get_foc_ouput(void);
  240. extern CURRENT_PID_DEF* get_currd_pid(void);
  241. extern CURRENT_PID_DEF* get_currq_pid(void);
  242. extern CURRENT_DQ_DEF* get_curr_dq(void);
  243. #endif