struct _pid{
float SetSpeed; //定义设定值
float ActualSpeed; //定义实际值
float err; //定义偏差值
float err_next; //定义上一个偏差值
float err_last; //定义最上前的偏差值
float Kp,Ki,Kd; //定义比例、积分、微分系数
};
struct _pid pid;
void PID_init(void)
{
pid.SetSpeed=0.0;
pid.ActualSpeed=0.0;
pid.err=0.0;
pid.err_last=0.0;
pid.err_next=0.0;
pid.Kp=0.25;
pid.Ki=0.02;
pid.Kd=0.1; //根据系统调整参数
}
float PID_realize(float speed)
{
float freq = 0;
pid.ActualSpeed=speed;
pid.err=pid.ActualSpeed-pid.SetSpeed;
pid.err_last+=pid.err; //用来计算累积误差
freq = pid.Kp*pid.err + pid.Ki*(pid.err_last) + pid.Kd*(pid.err-pid.err_next);
pid.err_next=pid.err; //用来计算误差增量
return freq;
}
一种C语言PID算法
于 2023-03-29 09:36:47 首次发布