本人最近在TMS320F28335上实现BLDC的位置环PID控制,现在是在TI官网上用了他的PID代码,但是这个参数很多,而且网上对这个代码没有解释,而且PID调参又该怎么做呢,需要做系统辨识来仿真吗?求教!
void pidcontrol(int position_expected, int position_actual) //## 写成位置环,10kHz
{
// #include "pid_grando.h" // PID头文件
// SP_normal=0.1;//先按照之前使电机旋转的值给pwm赋值
float output = 0;
///*## 应该要采用增量式PID。这个代码看结构图应该是属于增量式PID。这个属于串级PID。
pid.param.Kp = 0.5;
pid.param.Ki = 0.005;
pid.param.Kd = 0;
pid.param.Kr = 1.0;
pid.param.Km = 1.0;
pid.param.Umax = 1.0;
pid.param.Umin = -1.0;
pid.term.Ref = position_expected;
pid.term.Fbk = position_actual;
PID_MACRO(pid);
output = pid.term.Out; //## PID的输出改变占空比
SP_normal += output; //## -=还是+=?
//##限定最大最小占空比,现在是随便定的阈值,需要修改
SP_normal = (SP_normal > 0.7) ? 0.7 : SP_normal;
SP_normal = (SP_normal < 0.01) ? 0.01 : SP_normal;
//##*/
}
|