PID控制算法学习笔记——算法入门

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、PID的工作原理
  • 二、控制策略
    • 1.比例控制
    • 2.积分控制
    • 3.微分控制
  • 总结
  • 参考文章


前言

PID,就是比例(proportional)、积分(integral)、微分(derivative),是一种常见的控制算法,在工业上有着非常广泛的应用。小到控制某个元件的温度,大到控制汽车的无人驾驶,都能应用PID算法。总之,PID的作用是将一个让一个物理量“保持稳定”。
接下来,是对PID算法的简单介绍。

才疏学浅,仅供参考


一、PID的工作原理

对于一些简单的,并且要求不高的控制,例如向一个水池里面蓄入30m³的水,达到目标之后关掉水管就可以了;或者使用热得快将水烧到60℃,只要在小于60℃时进行加热,大于60℃进行断电就能达到目的。
但是,在一些复杂的控制过程中,如果只是利用开关来控制一个物理量,往往会显得简单粗暴,因为传感器、单片机等部件的工作不是无限快的,控制需要时间。例如控制一辆汽车让其行驶速度保持在50km/h,当巡航系统检测到当前速度为45km/h,立刻向发动机发动加速命令,发动机瞬间加速,使行驶速度达到60km/h,此时定速巡航系统马上又发布刹车指令,于是发动机紧急制动……
在这种复杂的控制系统中,就需要使用PID控制算法。

一个常规的PID控制系统的原理图如下:
PID控制算法学习笔记——算法入门_第1张图片
由图可以看出 u ( t ) u(t) u(t) e ( t ) e(t) e(t)之间的关系,即:

u ( t ) = K p e ( t ) + K i ∫ 0 t e ( τ ) d τ + K d d e ( t ) d t u(t) = K_pe(t)+K_i\int_0^te(τ)dτ+K_d\frac{de(t)}{dt} u(t)=Kpe(t)+Ki0te(τ)dτ+Kddtde(t)
从公式中可以看出,在一个闭环控制中,PID的利用反馈来检测偏差,经过比例、积分、微分的过程来控制被要求控制的变量。

二、控制策略

1.比例控制

比例控制是PID中最简单的部分,仍然使用向水池中蓄水的例子。假设最终控制目的是让水池中的水位保持在1米的高度,如果初始水位为0.2米,那么当前水位和目标水位之间存在着一个误差,即error,此时的error为0.8。利用比例控制的方法向水池中加水,就是指加入的水量与误差是成正比的,即
u ( t ) = K p ∗ e r r o r ( t ) u(t)=K_p*error(t) u(t)=Kperror(t)
假设此时的比例控制系数 K p = 0.5 K_p=0.5 Kp=0.5,那么在 t = 1 t=1 t=1,即第一次施加控制时, u = 0.5 ∗ 0.8 = 0.4 u=0.5*0.8=0.4 u=0.50.8=0.4,这一次控制的水位变化量是0.4,此时的 e r r o r error error变为 0.8 − 0.4 = 0.4 0.8-0.4=0.4 0.80.4=0.4
t = 2 t=2 t=2时, u = 0.5 ∗ 0.4 = 0.2 u=0.5*0.4=0.2 u=0.50.4=0.2,此时的 e r r o r error error变为 0.4 − 0.2 = 0.2 0.4-0.2=0.2 0.40.2=0.2
如此循环下去,就是比例控制的运行方法。利用比例控制,水位最终可以达到我们的设定值。

2.积分控制

但是,仅仅使用比例控制会存在一些不足,最明显的一点就是稳态误差。
如果,在这个水池加水的过程中存在漏水的情况,每次加水都会漏掉0.1米高的水。假设此时的控制系数仍为 K p = 0.5 K_p=0.5 Kp=0.5,则会出现这样的状况:在某次加水过程结束后,当前水位为0.8,和目标值之间的误差 e r r o r = 0. , 2 error=0.,2 error=0.,2,则 u = 0.5 ∗ 0.2 = 0.1 u=0.5*0.2=0.1 u=0.50.2=0.1,每次加水量为0.1米高。在此时,加入0.1米高水量的同时会漏掉0.1米高的水量,水位稳定保持在0.8米处。
在这种情况下,水位目标是1米,但在0.8米处水位保持不变,且系统达到稳定状态。由此产生的误差就是稳态误差。在实际情况中,稳态误差的情况更加常见,比如控制汽车运动过程中的摩擦力,控制飞行器时产生的阻力,控制机械运动中产生的消耗等。
因此,单独的比例控制在很多时候无法满足要求,于是引入了另一个分量,该分量和误差的积分是正比关系,比例+积分控制为:
u ( t ) = K p ∗ e r r o r ( t ) + K i ∫ e r r o r u(t)=K_p*error(t)+K_i\int error u(t)=Kperror(t)+Kierror
在使用比例+积分的控制时,第一次误差为0.8,第二次误差为0.4,此时误差的积分为 ∫ e r r o r \int error error为1.2,这个时候的控制量除了比例控制中的那部分,还有积分系数 K i K_i Ki与积分项的乘积 K i ∗ ∫ e r r o r K_i*\int error Kierror。这个积分项会将前面若干次的误差进行累加,所以可以很好的消除稳态误差。

3.微分控制

假设,当水池的水位快要到达1米时,加入微分项可以防止水位超过1米。
考虑这样一个例子,一辆平稳行驶的汽车,当发现前方有红灯时,需要提前一段路程松开油门并踩下刹车;当车辆距离停车线非常近时,则用力踩刹车,让车辆迅速停下。整个过程可以看做加入微分的控制策略。
微分在离散情况下代表了两个时刻之间 e r r o r error error的差值,即
u ( t ) = K d ∗ ( e r r o r ( t ) − e r r o r ( t − 1 ) ) u(t) = K_d *(error(t) - error(t-1)) u(t)=Kd(error(t)error(t1))
在刹车的过程中, e r r o r error error的值是越来越小的,微分控制项一定是负数,它存在的作用就是避免汽车刹车不及闯过停车线。所以,距离控制目标越近,微分项越大。


总结

比例控制:快速到达指定目标
积分控制:累加过程,消除静态误差的干扰
微分控制:防止震荡,有效缓冲


参考文章

一文读懂PID控制算法
一文搞懂PID算法

你可能感兴趣的:(学习,算法)