PID基本知识:
PID调节器出现在上世纪30年代。其控制原理:一种闭环控制,主要时刻检测当前值,获得偏差,对偏差进行比例、积分和微分的控制。PID有3个控制单元组成,分别是比例单元(P)、积分单元(I)和微分单元(D)。在实际情况中,如果不是要求很高的产品,一般是不用PID三个单元的,正常情况下P是必须的,因此衍生出PD、PI等控制器。
什么是闭环控制:
举个例子,一个司机驾车时看到速度过高,便适当减速,通过检测当前速度来控制未来速度,这是一个闭环控制。
离散化PID:
在微处理器中,因为控制器是通过软件实现其控制的,而软件无法向人一样进行微分,积分计算,只能进行加减乘除,所以对模拟调节器进行离散化处理,也就是使用课本中微分积分的原始定义,从而实现根据时刻采集偏差值计算控制量。因此,我们需要使用离散的差分方程代替连续的微分方程。
离散化PID的实现方法:
根据微分积分的原始定义,当采样时间足够短时,可以将一介差分代替一介微分;用累加代替积分。
位置型PID:
位置闭环控制是根据编码器的脉冲累加测量电机位置信息,并对目标值进行比较,得到偏差,然后通过对偏差的比例、积分、微分输出控制量,使偏差量趋近于零的过程。比如运用在舵机角度精准控制等等。
void PID_init(void)
{
pid.err=0.0;
pid.err_last=0.0;
pid.voltage=0.0;
pid.integral=0.0;
pid.Kp=0.0;
pid.Ki=0.0;
pid.Kd=0.0;
}
// 位置型PID
float PID_realize(int fact_Speed,float plan_Speed)
{
pid.err=plan_Speed-fact_Speed;//获得偏差
pid.integral+=pid.err;//偏差的积分
pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);//差分方程
pid.err_last=pid.err;//保留上次偏差
return pid.voltage;//输出
}
增量型PID:
速度闭环控制是根据单位时间获取的脉冲数(M法测速)测量电机的速度信息,并与目标值进行比较,得到偏差,通过对偏差比例、积分、微分输出控制量,使偏差趋向于零的过程。
增量型PID
float PID_realize(int fact_Speed,float plan_Speed)
{
pid.err=plan_Speed-fact_Speed;//获得偏差
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;
}
PID控制参数整定:
控制目标:
稳定性、快速性、准确性。
评估控制系统指标:
最大超调量:响应曲线的最大峰值与稳态值的差。
上升时间:指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间。
静差:稳定值与设定值之差。
PID控制参数整定:
P用于提高响应速度,但会增大震荡
I用于减小静差,P、I一起控制着静差;当P很大,不易静差,当P很小,但I较大,也不易静差
D用于抑制震荡,会导致响应变慢。