|
/***********PID*********/
1.
struct _pid
{
floatSetSpeed;//定义设定值
floatActualSpeed;//定义实际值
floaterr;//定义偏差值
floaterr_next;//定义上一个偏差值
floaterr_last;//定义最上前的偏差值
floatKp,Ki,Kd;//定义比例、积分、微分系数
}pid;
void PID_init()
{
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.2;//自定义
pid.Ki=0.015;//自定义
pid.Kd=0.2;//自定义
}
float PID_realize(float speed)
{
pid.SetSpeed=speed;
pid.err=pid.SetSpeed-pid.ActualSpeed;
float
incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
pid.ActualSpeed+=incrementSpeed;
pid.err_last=pid.err_next;
pid.err_next=pid.err;
return pid.ActualSpeed;
}
int main()
{
PID_init();
int count=0;
while(count<1000)
{
float speed=PID_realize(200.0);
printf("%f\n",speed);
count++;
}
return 0;
}
PID调试一般原则
a. 在输出不振荡时,增大比例增益P。
b. 在输出不振荡时,减小积分时间常数Ti。
c. 输出不振荡时,增大微分时间常数Td。 |
|