基本算法
本例采用了增量式PID算法,算式如下:
PIDOUT = basicValue + Kp*d_error + Ki*error + Kd*dd_error
其中:
PIDOUT:PID输出控制参数,为PWM宽度的调整量
Kp:比例调节参数
Ki:积分调节参数
Kd:微分调节参数
error:误差量(为期望速度-实际速度,可以为正数或负数)
d_error:本次误差量与上次误差量之差(error-pre_error)
dd_error:上次误差量与上上次误差量之差(pre_error-pre_pre_error)
控制程序
void SpeedAdjust()
{
long d_error,dd_error,error;
error = (int)(speed_ept - now_speed);
d_error = error - pre_error;
dd_error = pre_error - pre_pre_error;
pre_error = error;
pre_pre_error = pre_error;
pwm_tmp = pwm_tmp + PID_P*d_error + PID_I*error + PID_D*dd_error;
if(now_speed>22)
{
Set_DCMotor(0,0);
}
else
{
if(pwm_tmp>=0)
{
Set_DCMotor(pwm_tmp,0);
}
else
{
Set_DCMotor(pwm_tmp,1);
}
}
before_speed = now_speed;
}
转自:http://blog.csdn.net/lczdk/article/details/54924825