| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- /**********************************
- * 文件名称: foc_algorithm.h
- * 功能描述: 磁场定向控制(FOC)算法头文件
- * 主要内容:
- * 1. 定义FOC相关结构体
- * 2. 声明FOC算法函数
- * 3. 声明PID控制器参数
- *
- * 注意事项:
- * - 包含各种坐标系的电流和电压结构体
- * - 包含EKF和参数识别相关接口
- * - 包含PID控制器参数
- **********************************/
- #ifndef RTW_HEADER_foc_algorithm_h_
- #define RTW_HEADER_foc_algorithm_h_
- #include <stddef.h>
- #ifndef foc_algorithm_COMMON_INCLUDES_
- # define foc_algorithm_COMMON_INCLUDES_
- #include "rtwtypes.h"
- #endif
- #include "MW_target_hardware_resources.h"
- #include "mw_cmsis.h"
- #ifndef rtmGetErrorStatus
- # define rtmGetErrorStatus(rtm) ((rtm)->errorStatus)
- #endif
- #ifndef rtmSetErrorStatus
- # define rtmSetErrorStatus(rtm, val) ((rtm)->errorStatus = (val))
- #endif
- #define foc_algorithm_M (rtM)
- typedef struct tag_RTM RT_MODEL;
- /**
- * @brief FOC接口状态结构体
- * @details 包含EKF、电感识别和电阻/磁链识别的状态和接口
- */
- typedef struct {
- real_T EKF_States[4]; // EKF状态向量
- real_T L_Ident_States; // 电感识别状态
- real_T R_flux_Ident_States; // 电阻和磁链识别状态
- real32_T EKF_Interface[7]; // EKF接口输入
- real32_T R_flux_Ident_Interface[3]; // 电阻和磁链识别接口输入
- real32_T L_Ident_Interface[2]; // 电感识别接口输入
- real32_T R_flux_Ident_Output[2]; // 电阻和磁链识别输出
- real32_T L_Ident_Output; // 电感识别输出
- } FOC_INTERFACE_STATES_DEF;
- /**
- * @brief FOC输入结构体
- * @details 包含FOC算法所需的输入参数
- */
- typedef struct {
- real32_T Id_ref; // D轴电流参考值
- real32_T Iq_ref; // Q轴电流参考值
- real32_T speed_fdk; // 速度反馈值
- real32_T theta; // 电机角度
- real32_T ia; // A相电流
- real32_T ib; // B相电流
- real32_T ic; // C相电流
- real32_T Udc; // 直流母线电压
- real32_T Tpwm; // PWM周期
- real32_T Rs; // 定子电阻
- real32_T Ls; // 定子电感
- real32_T flux; // 磁链
- } FOC_INPUT_DEF;
- /**
- * @brief FOC输出结构体
- * @details 包含FOC算法的输出参数
- */
- typedef struct {
- real32_T Tcmp1; // PWM通道1占空比
- real32_T Tcmp2; // PWM通道2占空比
- real32_T Tcmp3; // PWM通道3占空比
- real32_T EKF[4]; // EKF输出
- real32_T L_RF[3]; // 电感、电阻和磁链识别结果
- } FOC_OUTPUT_DEF;
- /**
- * @brief 三相电流结构体
- */
- typedef struct
- {
- real32_T Ia; // A相电流
- real32_T Ib; // B相电流
- real32_T Ic; // C相电流
- }CURRENT_ABC_DEF;
- /**
- * @brief 两相静止坐标系电流结构体
- */
- typedef struct
- {
- real32_T Ialpha; // Alpha轴电流
- real32_T Ibeta; // Beta轴电流
- }CURRENT_ALPHA_BETA_DEF;
- /**
- * @brief 两相静止坐标系电压结构体
- */
- typedef struct
- {
- real32_T Valpha; // Alpha轴电压
- real32_T Vbeta; // Beta轴电压
- }VOLTAGE_ALPHA_BETA_DEF;
- /**
- * @brief 余弦正弦变换结构体
- */
- typedef struct
- {
- real32_T Cos; // 余弦值
- real32_T Sin; // 正弦值
- }TRANSF_COS_SIN_DEF;
- /**
- * @brief 两相旋转坐标系电流结构体
- */
- typedef struct
- {
- real32_T Id; // D轴电流
- real32_T Iq; // Q轴电流
- }CURRENT_DQ_DEF;
- /**
- * @brief 两相旋转坐标系电压结构体
- */
- typedef struct
- {
- real32_T Vd; // D轴电压
- real32_T Vq; // Q轴电压
- }VOLTAGE_DQ_DEF;
- /**
- * @brief 电流PID控制器结构体
- */
- typedef struct
- {
- real32_T P_Gain; // 比例系数
- real32_T I_Gain; // 积分系数
- real32_T D_Gain; // 微分系数
- real32_T B_Gain; // 反馈系数
- real32_T Max_Output; // 最大输出
- real32_T Min_Output; // 最小输出
- real32_T I_Sum; // 积分和
- real32_T Max_Integral; // 最大积分限制
- real32_T Min_Integral; // 最小积分限制
- }CURRENT_PID_DEF;
- // 外部变量声明
- /**
- * @brief 两相静止坐标系电流
- */
- extern CURRENT_ALPHA_BETA_DEF Current_Ialpha_beta;
- /**
- * @brief 实时模型结构体
- */
- struct tag_RTM {
- const char_T *errorStatus; // 错误状态
- };
- /**
- * @brief FOC接口状态
- */
- extern FOC_INTERFACE_STATES_DEF FOC_Interface_states;
- /**
- * @brief FOC输入参数
- */
- extern FOC_INPUT_DEF FOC_Input;
- /**
- * @brief FOC输出参数
- */
- extern FOC_OUTPUT_DEF FOC_Output;
- // 函数声明
- /**
- * @brief FOC算法初始化函数
- * @retval 无
- */
- extern void foc_algorithm_initialize(void);
- /**
- * @brief FOC算法主函数
- * @retval 无
- */
- extern void foc_algorithm_step(void);
- // PID控制器参数
- /**
- * @brief D轴PID控制器参数
- */
- extern real32_T D_PI_I; // D轴积分系数
- extern real32_T D_PI_KB; // D轴反馈系数
- extern real32_T D_PI_LOW_LIMIT; // D轴输出下限
- extern real32_T D_PI_P; // D轴比例系数
- extern real32_T D_PI_UP_LIMIT; // D轴输出上限
- /**
- * @brief Q轴PID控制器参数
- */
- extern real32_T Q_PI_I; // Q轴积分系数
- extern real32_T Q_PI_KB; // Q轴反馈系数
- extern real32_T Q_PI_LOW_LIMIT; // Q轴输出下限
- extern real32_T Q_PI_P; // Q轴比例系数
- extern real32_T Q_PI_UP_LIMIT; // Q轴输出上限
- /**
- * @brief 实时模型指针
- */
- extern RT_MODEL *const rtM;
- /***************************************
- * Clarke变换
- * 功能:将三相电流转换为alpha-beta坐标系电流
- * 描述:将120度三相坐标系转换为90度两相静止坐标系
- ***************************************/
- extern void Clarke_Transf(CURRENT_ABC_DEF Current_abc_temp,CURRENT_ALPHA_BETA_DEF* Current_alpha_beta_temp);
- /***************************************
- * SVPWM计算
- * 功能:将alpha-beta电压转换为PWM占空比
- * 描述:根据alpha-beta电压向量计算SVPWM占空比
- ***************************************/
- extern void SVPWM_Calc(VOLTAGE_ALPHA_BETA_DEF v_alpha_beta_temp,real32_T Udc_temp,real32_T Tpwm_temp);
- /***************************************
- * 角度转余弦正弦值
- * 功能:将角度转换为余弦和正弦值
- * 描述:使用ARM DSP库计算角度的余弦和正弦值
- ***************************************/
- extern void Angle_To_Cos_Sin(real32_T angle_temp,TRANSF_COS_SIN_DEF* cos_sin_temp);
- /***************************************
- * Park变换
- * 功能:将alpha-beta坐标系电流转换为DQ坐标系电流
- * 描述:使用余弦和正弦值将两相静止坐标系转换为两相旋转坐标系
- ***************************************/
- 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);
- /***************************************
- * 反Park变换
- * 功能:将DQ坐标系电压转换为alpha-beta坐标系电压
- * 描述:使用余弦和正弦值将两相旋转坐标系转换为两相静止坐标系
- ***************************************/
- 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);
- /***************************************
- * 电流PID控制器
- * 功能:计算电流PID控制器输出
- * 描述:根据参考值和反馈值计算PID控制器输出
- ***************************************/
- extern void Current_PID_Calc(real32_T ref_temp,real32_T fdb_temp,real32_T* out_temp,CURRENT_PID_DEF* current_pid_temp);
- /***************************************
- * 电压限制
- * 功能:限制电压向量幅值
- * 描述:确保电压向量不超过SVPWM的最大幅值
- ***************************************/
- extern void voltage_limit(float *vd, float *vq, float vdc);
- extern void motor_ekf_closeloop_run(void);
- extern void motor_hall_close_run(void);
- extern void motor_foc_openloop_run(void);
- extern FOC_INPUT_DEF* get_foc_input(void);
- extern FOC_OUTPUT_DEF* get_foc_ouput(void);
- extern CURRENT_PID_DEF* get_currd_pid(void);
- extern CURRENT_PID_DEF* get_currq_pid(void);
-
- extern CURRENT_DQ_DEF* get_curr_dq(void);
- #endif
|