算法分为两种,一种为开环而另一种闭环。开环算法的输入不受输出影响,而闭环算法的输入受输出影响,使输出不断接近我们所设定的期望值。而pid算法属于后者。
pid函数:
u(t) = kp [ e(t) +
e(t) dt + Td
] 连续
uk = kp * + ki
+ kd * (
-
)
P算法:
目的是为了减少测量值与期望值之差
:测量值与期望值只差
越大,P输出越大
D算法:
目的是为了抑制系统的剧烈反应(过充现象)
( -
):两次误差之差
( -
)越大,D输出越大
I算法:
目的是为了追求更精确的控制,消除稳态误差。稳态误差产生的原因可能是因为控制的机器要求移动太小,没有产生精确的输出使机器移动,导致产生稳态误差。
基础代码实现:
int PID_value(int measure , int calcu)
{
err = measure - calcu;//误差
err_sum+= err ;//误差累加
if(err_sum > 2000)
err_sum = 2000;
if(err_sum < -2000)
err_sum = -2000;//对err_sum进行限幅
err_dif = err - last_err;//误差的差值
last_err = err;//此次误差记录为”上次误差“
return Kp*err + Ki*err_sum + Kd*err_dif;
}