【控制理论】PID再学习

PID简述

PID其实就是通过指令值reference value与反馈值feefback value之间的差值error 动态的调整控制量,实现既定控制效果。
假设我们要控制的是一个的水龙头向封闭水箱注水,使其液面高度为x,水箱初始液面高度为零。那么我们能控制的就是水龙头的开通程度c。其数学模型为就是dx=c,也就是说液面高度其实是水龙头开通程度的积分。传递函数为 1/s。

比例环节
  1. 在上述封闭水箱中,可以只采用比例环节 c=Kperror c=Kp*error,也就是说距离目标越远,水龙头开通程度就越大,当error为零时,c也为零,此时系统达到目标值。其中Kp代表了水龙头的粗细,即出水量大小对液位误差的敏感程度,假设水龙头开度与误差正比关系,越粗调的越快,也就是所谓的"增大比例系数一般会加快系统响应"
    【控制理论】PID再学习
  2. 假设水箱需要稳定的对外供水p,那么系统模型变为dx=c-p,其中p为正的常数。这时候我们发现如果控制器只有一个比例环节,那么当系统稳定,也就是dx=0时,恰好error=p/Kp error=p/Kp
    即在系统稳定 时,error不为零,液位离我们想要的高度总是差那么一点,这也就是所谓的稳态误差,或者叫静差。这时候P是固定的,那么当然kp越大,error就越小。这也就是所谓的有静差的情况下,增大比例系数可以减小静差。如下图
    【控制理论】PID再学习
    假定静差为10,可以看出Kp为1时,系统稳定在90左右;Kp为5和10时,静差极大减小但不能完全稳定在目标值
积分环节

从上面的式子可以看出,Kp再大那也只是个分母,不可能把P变成0的。然后有人就想到,第二小节里头那个水箱跟第一小节的相比,不就是多了一个漏水的窟窿么。它漏多少我给它补多少,那不就成了第一小节里的简单系统了么。靠谁补呢?积分环节这时候就派上用场了。
之前的控制器变成比例环节+积分环节:
c=Kperror+Ki0errordt . c=Kp*error+Ki \int_0^\infty error dt\,.
积分环节的意义就相当于增加了一个水龙头,这个水龙头的开关规则是水位比预定高度低就一直往大了拧,比预定高度高就一直往小拧。如果漏水速度不变,那么总有一天这个水龙头出水的速度恰好跟漏水的速度相等了,系统就和第一小节的那个一样了。那时,静差就没有了。这就是所谓的积分环节可以消除系统静差。
上式中Ki=Kp/Ti. Ki=Kp/Ti. Ti就是积分时间常数,积分时间常数越大,积分环节系数越小,积分环节就越不敏感(也就是第二个水龙头越细)。
当只有一个比例环节的水龙头注水的时候,是不会注水注多的,因为离得越近水龙头关的越小啊。但是当用俩水龙头注水的时候,在没到预定高度前第二个积分环节的水龙头可以一直在往大了拧的,那当到达预定高度的时候它恰好拧到最大,自然而然就会注水注多了。而多出去的这部分水就叫做“超调”。第二个水龙头越粗,多注的水就会越多,它调到恰好等于漏水速度的时间就会越快,但同时会多更多波折。
【控制理论】PID再学习
(比例系数都为5,积分时间常数分别为 10 5 1)
于是,老师告诉我们增大积分时间Ti(也就是减小积分系数Ki)有利于减小超调,减小振荡,使系统的稳定性增加,但是系统静差消除时间会变长。

上式采用的是固定比例系数,不同的积分时间常数。假如我们选用相同的积分时间常数,但是选择不同的比例系数会如何呢?
【控制理论】PID再学习
看到上面这幅图,一些记性好的童鞋可能就有疑问了。因为老师明明说过”过大的比例系数会使系统有比较大的超调,并产生振荡,使稳定性变坏“,但是上面这幅图里怎么比例大的反而超调小呢?
其实上面这幅图很好解释,上面我们说过PI控制器超调出现原因是积分这个水龙头在到达目标液位时也恰好开到了最大。而比例这个水龙头越粗,那么它在超出目标液位时对超调的抑制也就越明显。

问题1:积分系数Ki和比例系数Kp有关,代码中调解时需要考虑这个因素吗??

微分环节

在上面的系统中,我们是假设水箱排水是固定的一个值,但是实际情况中往往是变化的。假如我们的系统是 dx=cp(t) dx=c-p(t)
分析系统,我们的控制目标是让X=XdX=Xd
系统误差的定义是error=XdXerror=Xd-X
那么误差状态方程derror=dXddX=dXd(Kperror+KpTi0terrordtp(t))derror=dX_d-dX=dX_d-(Kp*error+\frac {Kp}{Ti}\int_0^t error dt-p(t))

假定Xd是一个常数,则dXd=0dX_d=0
derror=dX=KperrorKpTi0terrordt+p(t)derror=-dX=-Kp*error-\frac {Kp}{Ti}\int_0^t error dt+p(t)
当error为零时,前两项为零,只有p(t)随时间在变化。也就是说在误差error为零时,derror,那么error不恒为零。也就是说,当c变成p(t)的时候,error=0就不再是系统的稳定平衡点了,经典意义上系统不再稳定。

此时考虑加入微分环节,derror=dX=KperrorKpTi0terrordt+Kpτderror+p(t)derror=-dX=-Kp*error-\frac {Kp}{Ti}\int_0^t error dt+Kp*\tau d_{error}+p(t)
那么derror=KperrorKpTi0terrordt+p(t)1+Kpτderror=\frac {-Kp*error-\frac {Kp}{Ti}\int_0^t error dt+p(t)}{1+Kp*\tau }
对于任意t(t>0)微分环节都让de的变化减慢了,这也就是“微分环节主要作用是在响应过程中抑制偏差向任何方向的变化”“微分常数不能过大,否则会使响应过程提前制动,延长调节时间”而至于“微分环节会降低系统的抗干扰性能”,更多指的是大多数细微测量噪声造成的error很小,但瞬时的derror较大,微分环节相对于PI环节更容易收到这些细微噪声的影响。但是,无论如何选取微分参数 ,PID控制都不能使系统稳定。从这里,我们可以看到PID控制的局限。

转自 http://bbs.elecfans.com/forum.php?mod=viewthread&tid=539781&ordertype=1

分析一个控制系统,首先明确系统的物理模型,搞清楚输入、输出。分析是否存在干扰、干扰是否恒定。

根据系统模型确定PID结构以及参数

待写

积分退饱和

PI调节中,快不快看比例,稳不稳看积分。
在调节过程中,例如,在误差为10时积分项大于积分上限,达到饱和;此时误差反向时,积分项减小,小于积分上限,PI输出减小;若误差再增大时,积分项继续增大,但PI中仍以积分上限输出。积分项实际值比积分上限越大,进入积分饱和区越深。在深度进入饱和区时,若误差反向,积分项开始减小,但由于之前的积累,仍会大于积分上限。所以此时PI继续以积分上限输出,系统动态响应变差,控制效果减弱。

积分退饱和算法:
(1) 在积分项大于积分上限时,若误差没有反向,切除积分项,只保留比例调节;若误差开始反向,重新接入积分项。