博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何通俗地解释 PID 参数整定?
阅读量:4031 次
发布时间:2019-05-24

本文共 3702 字,大约阅读时间需要 12 分钟。

(https://www.zhihu.com/question/23088613/answer/23942834)

作者:忘川孤帆
链接:https://www.zhihu.com/question/23088613/answer/23942834
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
由于PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别。你提到的这些结论其实都是根据经验总结出来的。
既然你说是从来没有接触过PID,那我就举例尽量说明一下PID控制是怎么一回事。
1)假设我们面对的系统是一个简单的水箱的液位,要从空箱开始注水直到达到某个高度,而你能控制的变量是注水笼头的开关大小。那么这个简单的数学模型就是
dx=u
对于这个简单的系统,我们甚至只需要一个
比例环节
u=k_{p} e
就能将其控制住。
说白了,也就是水箱液位离预定高度远的时候就开大点,离的近的时候就开小点,随着液位逐步接近预定高度逐渐关掉水龙头。
此时,
k_{p} 的大小代表了水龙头的粗细(即出水量大小对液位误差的敏感程度,假设水龙头开度与误差正比关系),越粗调的越快,也就是所谓的"
增大比例系数一般会加快系统响应"。如下图:
<img src="https://pic2.zhimg.com/1bf9717813a61536a354d075804f58c1_b.jpg" data-rawheight="420" data-rawwidth="561" class="origin_image zh-lightbox-thumb" width="561" data-original="https://pic2.zhimg.com/1bf9717813a61536a354d075804f58c1_r.jpg">
2)假设咱们这个水箱不仅仅是装水的容器了,还需要持续稳定的给用户供水。
那这个系统的数学模型就需要增加一项:
dx=u-c,这里这个
c是个正的常数。
这时候我们发现如果控制器只有一个比例环节,那么当系统稳定,也就是
dx=0的时候,恰好
e=\frac{c}{k_{p}}
e在系统稳定时不为0,液位离我们想要的高度总是差那么一点,这也就是所谓的稳态误差,或者叫静差。
这时候
c是固定的,那么当然
k_{p} 越大,
e就越小。这也就是所谓的
增大比例系数P在有静差的情况下有利于减小静差。如下图:
<img src="https://pic2.zhimg.com/a51fc3b348843992aa4344afdf95c6c9_b.jpg" data-rawheight="420" data-rawwidth="561" class="origin_image zh-lightbox-thumb" width="561" data-original="https://pic2.zhimg.com/a51fc3b348843992aa4344afdf95c6c9_r.jpg">
3) 从上面的式子
e=\frac{c}{k_{p}} 大家可以看出来,
k_{p} 再大那也只是个分母,不可能把
e变成0的。老是调不到预定位置老板是会骂人的,这可咋办?
然后有人就想到,第二小节里头那个水箱跟第一小节的相比,不就是多了一个漏水的窟窿么。它漏多少我给它补多少,那不就成了第一小节里的简单系统了么。靠谁补呢?积分环节这时候就派上用场了。
我们把之前的控制器变成
比例环节+积分环节:u=k_{p} e +k_{i}\int_{0}^{t} edt
积分环节的意义就相当于你增加了一个水龙头,这个水龙头的开关规则是水位比预定高度低就一直往大了拧,比预定高度高就往小了拧。如果漏水速度不变,那么总有一天这个水龙头出水的速度恰好跟漏水的速度相等了,系统就和第一小节的那个一样了。那时,静差就没有了。这就是所谓的
积分环节可以消除系统静差。
4)啥叫
积分时间常数呢?一般PID控制里,表示积分环节敏感度的那个系数
k_{i}=\frac{k_{p} }{T_{i}}  , 这个
T_{i}就是积分时间常数。从这个式子我们可以看出,积分时间常数越大,积分环节系数就越小,积分环节就越不敏感(也就是第二个水龙头越细)。
当咱们只有一个比例环节的水龙头注水的时候,是不会注水注多的,因为离得越近水龙头关的越小啊。
但是当咱们用俩水龙头注水的时候,在没到预定高度前第二个积分环节的水龙头可以一直在往大了拧的,那当到达预定高度的时候它恰好拧到最大,自然而然就会注水注多了。而多出去的这部分水就叫做“
超调”。第二个水龙头越粗,多注的水就会越多,它调到恰好等于漏水速度的时间就会越快,但同时会多更多波折。
于是,老师告诉我们
增大积分时间I有利于减小超调,减小振荡,使系统的稳定性增加,但是系统静差消除时间变长。如下图:
<img src="https://pic4.zhimg.com/7d20a7bb08b55a6e4003011ecde23623_b.jpg" data-rawheight="420" data-rawwidth="561" class="origin_image zh-lightbox-thumb" width="561" data-original="https://pic4.zhimg.com/7d20a7bb08b55a6e4003011ecde23623_r.jpg">
5)接下来我们来看点有意思的东西。还是上面这个系统,假如我们选用相同的积分时间常数,但是选择不同的比例系数会如何呢?
<img src="https://pic1.zhimg.com/a224805640cbca84abe63225e4106758_b.jpg" data-rawheight="420" data-rawwidth="561" class="origin_image zh-lightbox-thumb" width="561" data-original="https://pic1.zhimg.com/a224805640cbca84abe63225e4106758_r.jpg">看到上面这幅图,一些记性好的童鞋可能就有疑问了。因为老师明明说过”
看到上面这幅图,一些记性好的童鞋可能就有疑问了。因为老师明明说过”
过大的比例系数会使系统有比较大的超调,并产生振荡,使稳定性变坏“,但是上面这幅图里怎么比例大的反而超调小呢?
其实上面这幅图很好解释,小节4里我们说明了PI控制器超调出现原因是积分这个水龙头在到达目标液位时也恰好开到了最大。而比例这个水龙头越粗,那么它在超出目标液位时对超调的抑制也就越明显。
这里,我想再强调的是:
PID参数整定的结论是根据普遍经验总结的,但是针对某个具体的系统不一定完全适用。
6) 在上面的系统中,我们假设用户用水的固定的一个值,但是实际情况中用户的用水量往往是变化的。假如我们的系统是
dx=u-c(t)呢?
来分析一下:
我们的控制目标是让
x=x_{d} ,系统误差的定义是:
e=x_{d} -x;
那么误差状态方程就是
de=dx_{d}-dx=dx_{d}-k_{p} e -\frac{k_{p} }{T_{i}}  \int_{0}^{t} edt+c(t)
上面我们设定的控制目标是个常数,所以
dx_{d}=0
那么
de=-k_{p} e -\frac{k_{p} }{T_{i}}  \int_{0}^{t} edt+c(t)
从上面这个式子我们可以看出,当
e=0时,
\frac{k_{p} }{T_{i}}  \int_{0}^{t} edt不再变化,而
c(t)是始终变化的。
那么此时
de不恒为零,也就是说
e不恒为零。
也就是说,当
c变成
c(t)的时候,
e=0就不再是系统的稳定平衡点了,经典意义上系统不再稳定。
7)这里加一个微分环节D变成PID控制会不会让系统重新稳定呢?
当加入微分环节,
de=-k_{p} e -\frac{k_{p} }{T_{i}}  \int_{0}^{t} edt-k_{p}\tau  de  +c(t)
那么
de=\frac{-k_{p} e -\frac{k_{p} }{T_{i}}  \int_{0}^{t} edt+c(t)}{1+k_{p}\tau  }
对于任意
\tau
\tau >0),微分环节都让
de的变化减慢了,这也就是
微分环节主要作用是在响应过程中抑制偏差向任何方向的变化
微分常数不能过大,否则会使响应过程提前制动,延长调节时间
而至于“
微分环节会降低系统的抗干扰性能”,更多指的是大多数细微测量噪声造成的
e很小,但瞬时的
de较大,微分环节相对于PI环节更容易收到这些细微噪声的影响。
但是,
无论如何选取微分参数
\tau ,PID控制都不能使系统稳定。
从这里,我们可以看到PID控制的局限。
——————————————————————————————————————————
微分环节想了很久,最后还是觉得想到的例子都不够清楚准确,还是用式子更顺手一些。
希望大家不要死记口诀,多用所学到的控制理论来针对具体问题具体分析。
——————————————————————————————————————————
2015-9-26:谢 指正。第7小节那个结论的准确说法应该是“
微分环节会提高系统抗扰动能力,降低系统抗噪声能力”。

你可能感兴趣的文章
No.147 - LeetCode1108
查看>>
No.148 - LeetCode771
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
FE:http状态码
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mac:移动python包路径
查看>>
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql alter table 修改列属性的字符集
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
单纯的把Y通道提取出来能正确显示出灰度图来为什么我的Qt就显示不出来呢转换有问题呀?
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>