![0d1be47f883dfd5d5a81cdb5ee46dbf9.png](https://i-blog.csdnimg.cn/blog_migrate/6dd988092348dd697289183a8d058bc0.jpeg)
本文首发自微信公众号“汽车技术馆”!
相信很多做工程的朋友都很熟悉PID的概念,至少会经常听到这个概念,那么这个简称背后所包含的含义是否已经完全理解了呢?如果你已经深刻的理解了,就麻烦看看本文有哪里讲述不对的地方 ,给予指正。如果你还不太清楚这个背后的含义,那么就看看这篇文章能否给你一点启发。
老套的含义
小编觉得,所有讲述PID的文章必定会提到PID的基础概念,P是比例调节,I是积分调节,D是微分调节,所以呢,小编不打算花什么时间在这个上面,因为这些概念并不能帮助大家去理解其真正的含义,我们直接进入下一个环节。
P到底如何起作用?
P 比例作用是对偏差瞬间做出反应,偏差一旦产生,立即产生作用,使其控制量朝减少偏差的方向变化,控制作用的强弱取决于比例系数,比例系数越大,控制作用越强。
ok,是不是还是不好理解?
我们通过一个例子给大家进行说明,比如你要给一壶水进行加热,而加热的装置就是你需要使用PID调节的东西,我们来看一下P是如何起作用的,首先大家要明白,PID三个参数都是常量,一旦确定以后就是固定的,比如在一开始对水加热的时候,水温是25度的常温,而期望达到的温度是60度,此刻温度的偏差是60-25=35度,所以P给加热装置的作用是P乘以这个温度差值,经过一个周期之后,下次调节的时候,温度可能到了30度,那温度的偏差就是60-30=30度,同样P对加热装置起到的作用就是P乘以30,因此越接近目标温度,P的作用越小。我们再反会一开始加热的状态,温度差值35度,当P为1的时候,起到的作用是35*1,而如果P为2呢,起到的作用就是35*2,是不是P的数值越大,其控制作用越强,这就是我们在一开始给出大家的结论描述。
下面我们在matlab的仿真中看一下两者的差异
首先我们使用matlab自带的PID模块快速的建立一个模型
![bb6875306af57089aad2036e0f19345e.png](https://i-blog.csdnimg.cn/blog_migrate/171b066c2dd8475ca873c6c20ab2232d.png)
假设一个温度加热的传递函数如模型所示
首先我们设置P=1; I=0; =0
仿真结果如下
![26ba7f9e04763e03b16384fbdc54534a.png](https://i-blog.csdnimg.cn/blog_migrate/dae0ada76293954932c3564e9c9cfa6a.png)
然后设置P=2; I=0; D=0
仿真结果如下
![8e34e976e75c35dfb498cd6055b37cec.png](https://i-blog.csdnimg.cn/blog_migrate/02cb4c99df14b242bfb3e7c6567ff6c3.png)
然后将两个放在一起做一下对比
![34d123650e28d6a826867f19bc156adf.png](https://i-blog.csdnimg.cn/blog_migrate/b6eb8cfadd4cda8687fecf46c223cb06.png)
蓝色的为P=2的结果,黄色的为P=1的结果
通过结果来看,哪个的调节作用更强?
很明显当P=2的时候的调节作用是强于P=1的时候的。
相信这个概念大家应该理解了吧?如果还有不理解的欢迎留言!
为什么说I是为了解决静态误差?
很对朋友不太理解I的作用,我觉得根本原因在于没有深刻的理解静态误差的概念,所以我们首先来说一说静态误差。
还是沿着之前的例子往下说,我们需要给一壶水进行加热,加热功率的大小就是需要PID调节的东西,大家考虑一下,如果有一个时刻加热的速度正好等于了水的散热的速度,那么水的温度是不是就不会再升高了,如何理解呢?前面我们说了P的作用是和温度差有关的,假设当温度到达了50度,这个时候的温度差值是60-50=10度,此刻P起到的作用就是P乘以10,而这个时候水的散热正好需要10乘以P的功率,再没有I和D的作用的情况下,系统是不是就达到了一个稳态状态,虽然水壶一直被加热但是温度并不会上升,这个时候实际温度到目标温度之间的差值就是静态误差,我们通过一个仿真结果来说明,还是上面的那个结果
![5877c6907cc91dc22524df0c69d2e3bb.png](https://i-blog.csdnimg.cn/blog_migrate/320514b3e140892a5ce78d5a9337cbdb.png)
我们看到,当系统处于一个稳定状态的时候,实际的温度和目标的温度之间存在一个稳定的差值,这就是静态误差。
I又是如何起作用的呢?前面我们提到了,从数学概念上来说,I就是积分,积谁呢?积温度偏差的分,只要实际温度和目标温度存在偏差就会把这个偏差进行累加,然后把这个积分后的结果作用到加热设备上。
比如,我们这里随便添加一个积分参数,设置PID参数为
P=1; I=1;D=0
仿真结果如下
![e4c7d8e1e7283851d66b50d8ecf5cc68.png](https://i-blog.csdnimg.cn/blog_migrate/1eac7cba6f242affeb653bc7ef287f42.png)
大家看一下,稳定下来后的静态偏差是不是几乎没有了,我们可以和参数为P=1; I=0; D=0的状态做一个对比
![f84e08b880f79edc88f283f2ddef67bc.png](https://i-blog.csdnimg.cn/blog_migrate/cb92f8a72670dd57cc66cc63d27fad50.png)
黄色的为P=1;I=1;D=0的仿真结果
红色的为P=1;I=0;D=0的仿真结果
是不是很明显?
同样基于这个对比图还可以多理解两个概念:
积分会增加系统的超调量——可以看到,当I=1的时候,实际的温度值明显是要高于I=0的状态的,因为累计的误差起作用了嘛,所以产生的超调肯定会多一些。
积分会增加响应时间——从两条变化曲线是可以看出的,上面的一条到达稳定的时间比下面的一条要长一些,确实是增加了响应时间。
D真的可以预测未来吗?
接下来我们要说一说D的作用,在数学概念里,D是微分,微分有什么样的物理意义?简单来说,就是微小单元的斜率,斜率代表的就是变化速度,还是按照原来的例子,假设温度加热到55度,下一次调节时温度加热到了57度,下下一次温度加热到了58度,那么温度第一次变化了2度,第二次温度变化了1度,因此温度的变化速度是下降的,进而产生的结果就是提高D的调节作用。反之,如果在温度为55度后,下一次调节时温度调节到了56度,下下次调节时温度加热到58度,那么温度第一次变化了1度,第二次变化了2度,因此温度的变化速度是上升的,进而产生的结果是降低D的调节作用。
我们还是仿真一下,设置参数
P=1 ; I =1; D=0.5
仿真结果如下
![2f36070d2a0d618ba8403a23c547799c.png](https://i-blog.csdnimg.cn/blog_migrate/5f9af7d647085cf4291b8b269f014795.png)
和之前P=1 ; I=1 ; D=0的仿真结果做一个对比
![cce9443dfb1a9a7deca464b40ad797e8.png](https://i-blog.csdnimg.cn/blog_migrate/42c3f329067e541e6dc9dc3068ff8b2e.png)
两个曲线很明显,不需要进行说明了吧!
可以看出,当参数D介入作用以后,明显的遏制了偏差的变化趋势,没有使温度出现明显的超调,而且使得系统快速的达到了目标稳定态。
总结
所以说,总结一句话
P专注于当下,I总结的是过去,D预测未来!
PS:小编之前困惑于PID好久,一直没有比较直观的理解,网上找了一些资料也没有写的特别直白的,多数都是理论性的描述,正好最近小编迷恋于Matlab,顺便也又研究了一下PID,把自己更深刻一点的理解分享给大家,也附带上matlab仿真的结果,更加便于理解,如果有哪里讲的不对的地方还希望高手多多指点,共同进步!感谢!