/********************************** * 文件名称: 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 #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