基于STM32F103C8T6的同步电机驱动-电流环PI与力矩模式
本系列文章:
- 基于STM32F103C8T6的同步电机驱动-CubeMX配置与IQmath调用
- 基于STM32F103C8T6的同步电机驱动-PWM驱动代码以及SVPWM的实现
- 基于STM32F103C8T6的同步电机驱动-ADC采样与基于MT6701的角度获取
- 基于STM32F103C8T6的同步电机驱动-电流采样去直流偏置
- 基于STM32F103C8T6的同步电机驱动-电流环PI与力矩模式
一、电流环PI控制器代码编写
本文中选用的电流环控制器为抗积分饱和PI控制器。
/****file:my_pid.c*****/
#include "my_pid.h"//电流环参数
uint16_t wb = 200; //电流环带宽
float Kp_c = 0.168f; //电流环P参数:Kp_c=wb*L
float Ki_c = 0.0612f; //电流环I参数:Ki_c=wb*R*Ts
float Ka_c = 5.9523f; //电流环A参数:Ka_c=1/Kp_c/*********************************************************************** 函数名称: id_pi_contral* 功能描述: 电流环PI控制器* 输入参数: _iq id_now;_iq id_tar;* 输出参数: _iq id_out;* 返 回 值: 无* 修改日期 版本号 修改人 修改内容* -----------------------------------------------* 2024/07/05 V1.0 TONY0925 创建***********************************************************************/
_iq id_pi_contral(_iq id_now,_iq id_tar)
{static _iq err_id = _IQ(0);static _iq u_id = _IQ(0);static _iq out_id = _IQ(0);static _iq excess_id = _IQ(0);static _iq sum_id = _IQ(0);//PI电流环1.预期值与测量值作差得到偏差值err_id = id_tar - id_now;//PI电流环2.计算PI控制器预输出值u_id = sum_id + _IQmpy( _IQ(Kp_c) , err_id );//PI电流环3.进行限幅输出,得到最终输出值if (u_id >_IQ(Umax)){out_id = _IQ(Umax);}else if (u_id <_IQ(-Umax)){out_id = _IQ(-Umax);}else{out_id = u_id;} //PI电流环4.将预输出值与实际输出值作差得到饱和差值excess_id = u_id - out_id;//PI电流环5.将饱和差值代入积分累计项sum_id = sum_id + _IQmpy