控制系统中常用的PID算法

  PID的三个英文单词的首字母,全称是Proportion(比例)、Integral(积分)、Differential(微分),PID控制的简单说就是一个反馈控制,通过计算真实值和目标值偏差值,并将偏差值的比例、积分和微分值重新作为输入,最终使得再次输出的偏差减小,算法本身比较简单,难点在于对三个参数的系数进行设置。不同系统对偏差的敏感度不同,因此不同系统对应的系数调节,需要一定的个人经验和对系统本身的熟悉。

示例解析

  举例介绍下PID的应用,以控制专业经典的倒立摆实验为例简单说明,本篇把一支铅笔竖直放在手心,通过移动手保持铅笔不倒。

  • 目标值:铅笔保持竖直,数学描述为跟竖直方向的夹角为0( θ = 0 \theta=0 θ=0
  • 控制量:手的前后左右运动,数学描述为水平方向的运动加速度和方向( a a a γ \gamma γ),由于方向是确定的,因此实际PID算法需要计算的是加速度( a a a
  • 控制方式:当铅笔在某个水平方向( γ \gamma γ)开始存在竖直方向夹角( θ \theta θ)时,通过控制手在该水平方向运动( a a a)。

数学表示

  不论是否有解析解,可以建立一个以水平方向加速度为输入量,竖直方向角度为观测值: θ = f ( a , γ ) \theta=f(a,\gamma) θ=f(a,γ),即使没有一个确定的表达式,一样可以通过合适的PID控制保持铅笔不倒,PID算法表示如下,其中k为当前迭代的次数序号, C p 、 C i 、 C d C_p、C_i、C_d CpCiCd分别为PID对应的参数值。

  • 偏差值 : Δ θ k = 0 − θ k \Delta\theta_k = 0 - \theta_k Δθk=0θk
  • 比例值: C p Δ θ k C_p\Delta\theta_k CpΔθk
  • 积分值: C i ∑ n = 0 n = k Δ θ n C_i\sum_{n=0}^{n=k}{\Delta\theta_n} Cin=0n=kΔθn
  • 微分值: C d × ( Δ θ k − Δ θ k − 1 ) C_d \times(\Delta\theta_k-\Delta\theta_{k-1}) Cd×(ΔθkΔθk1)

  加速度控制量 = 比例值 + 积分制 + 微分值,即最终加速度的变化由观测值的偏差量来决定,即 a = g ( θ ) a=g(\theta) a=g(θ),而函数表达式为:
a = C p Δ θ k + C i ∑ n = 0 n = k Δ θ n + C d × ( Δ θ k − Δ θ k − 1 ) a=C_p\Delta\theta_k+C_i\sum_{n=0}^{n=k}{\Delta\theta_n}+C_d \times(\Delta\theta_k-\Delta\theta_{k-1}) a=CpΔθk+Cin=0n=kΔθn+Cd×(ΔθkΔθk1)

原理解析

  如果设置了合理的PID参数值,则可以通过铅笔跟竖直方向的偏离值,实时得到一个合适的加速度,最终使得铅笔跟竖直方向的偏离值为0,即始终保持竖直方向,最终实现倒立摆不倒。
  PID控制的三个分量有各自不同的属性和意义,P、I、D三个参数并非每个算法或系统都需要全部用到,经常用的是P控制、PD控制和PI控制,分别表示其中部分分量为0,如P控制为只有比例参数,另外两个分量为0;PD控制和PI控制类似。
  比例分量(P参数) 是一个最直观的对实时误差的调节,如果过小则达不到对偏离的跟随,即若偏离1度应该提供2个单位的加速度,如果p过小导致加速度的值不够2个单位,则会导致偏离值越来越大;相反过大也会导致超调,即如果p过大导致加速度值超过2个单位,则导致过冲后铅笔向反方向偏离,最终出现震荡的现象。
  积分分量(I参数) 是一个对累计的历史误差的调节,由于其对偏差有累计的功能,因此即使当前偏差为0也会有输出量,即可以消除系统的稳态误差,直到积分值为0才会停止控制。跟比例分量相比调节会慢半拍,如果参数值过大了会出现超调,过小会对误差跟踪太慢即需要更长时间对误差的累计才能达到需要的值。最常见的应用场景是需要保持一定的误差,比如对目标跟随的情况。
  微分分量(D参数) 是一个对未来误差的调节,由于其是对偏差变化率的记录,因此如果当前实时偏差值刚变为0也会由于跟上次存在一个偏离加速度,而存在输出量。跟比例分量比调节会更快,同样参数值过大会出现超调,过小会跟不上偏离的变化速度。常用的场景是需要一定的超前性的系统,比如用于克服被控对象的滞后的情况。由于其具有一定的前瞻性,因此有助于加快系统调节速度,缓解超调现象,但同样也容易放大噪声。

你可能感兴趣的:(嵌入式)