打字猴:1.70107785e+09
1701077850
1701077851 PID控制可能是应用最为广泛的一种控制算法,初次接触它的人肯定会觉得这是个高深的问题。有朋友说了,我连微积分都忘了(或者没学明白),还怎么去理解PID?你放心,本节我们看图说话,包你理解透彻。
1701077852
1701077853 如图16.1所示,京城里的黄包车夫祥子有一天碰到了位“大”主顾,一个100kg重的胖客人,他让祥子把他从前门大街头(图中0位置)拉到前门大街尾(图中1位置)。他的要求还颇多,既要最省时间,又要车正好停在街尾,不能冲过了头。
1701077854
1701077855 假设祥子的拉力用F表示,地面的摩擦力用f表示,注意,我们这里的摩擦力是正比于速度的。我们高中物理课本上常常把摩擦力认为是一个恒定值,实际上它与物体运动的速度有着非常复杂的关系,既非简单的恒定也非简单的正比,还有一门专门的学科叫作摩擦学(Tribology),我有一个朋友就是在一家硬盘公司研究磁头与盘片之间的摩擦。在这里为简单起见,暂且假设摩擦力与速度成正比。
1701077856
1701077857
1701077858
1701077859
1701077860 图16.1 祥子拉车的问题
1701077861
1701077862 听罢胖客人的要求,祥子琢磨了一下该怎么拉这个车。如果一味地追求速度,从头到尾使出同样的力道来拉这个车,那么到了前门大街尾这车准停不住,得冲过头,到时候这胖子不给车钱可就白忙活了。于是祥子想,我开始的时候用大一点力,加速快一点;到了接近街尾的时候我就减小力,让车自身的阻力来减速。用数学公式来表示,拉力F=Kp(1-x)。其中x表示某时刻黄包车的位置,Kp称为比例增益(Proportional Gain)。为了谨慎起见,我们替祥子求解了一下运动方程,得到了他的位置随时间的变化的曲线,如图16.2所示(获得图中所示曲线,Kp取为300,胖客人和黄包车的质量一起设定为1)。
1701077863
1701077864
1701077865
1701077866
1701077867 图16.2 仅有比例增益时,祥子的位置与时间的关系
1701077868
1701077869 从图中可见,尽管采取了这样的策略,祥子最终还是会拉过头,只好再往回拉。往回拉的时候还是采用同样的策略,则又会矫枉过正,如此反复,要好几次才能最终停在街尾。有没有什么更好的办法呢?实际上如果真让祥子拉的话,当他快靠近街尾(1位置)的时候,他不仅不会再使劲拉车,反而会身子稍向后仰,给车一个阻力,使得车子在到达街尾时速度减为零。如果用一个简化的数学模型来描述这个过程的话,拉力F=Kp(1-x)-KdV。其中Kd称为微分增益(Differential Gain),V为黄包车的速度。之所以Kd被称作微分增益是因为速度V可以看成是位置关于时间的微分,即V=dx/dt。如果Kp还是取为300,则Kd可以取一个比较小的值,比如30。这样一来,在离街尾比较远的时候,拉力中的第一项Kp(1-x)远大于第二项KdV,所以F是正的,这表示祥子在用很大的力气往前拉;而离街尾比较近,而且车速已经很大时,拉力中的第二项开始比第一项大,所以F是负的,这表示祥子开始身子稍向后仰,阻挡车子向前运动的趋势。我们求解此时的运动方程,画出位置与时间的关系如图16.3所示。你看,这是不是非常完美地达到了胖客人的要求呢!在很短的时间就到达了街尾,更可贵的是,到了那儿车就稳稳地停住了,没有如图16.2所示冲过头的现象。
1701077870
1701077871
1701077872
1701077873
1701077874 图16.3 加入微分增益时,祥子的位置与时间的关系
1701077875
1701077876 你刚刚看到的就是PID控制中的P和D,图16.2和图16.3展示的现象具有广泛的代表性。如果我们只有比例控制(即P),那么最终结果就是会出现过冲现象和围绕着设定值慢慢衰减的振荡,慢慢衰减是因为有地面的阻力。如果阻力大一点,过冲现象就会轻一些,这个振荡也会衰减得快一点;如果没有阻力,那么最终就会围绕设定值持续大幅振荡,祥子的黄包车也永远不可能刚好停在街尾了。而加入微分控制(即D),则有效抑制了过冲和振荡,如果设置得当,还能完全消除这两种现象。
1701077877
1701077878 有读者会问,那么PID中间的I(积分控制)干嘛用的呢?在前面说的例子中的确用不上,但是如果这个死胖子故意使坏,他在车后面与前门城楼上拴了一根巨大的橡皮筋,如图16.4所示。橡皮筋上的张力T=- kx。其中k是弹性系数,负号表示橡皮筋的张力指向左边。
1701077879
1701077880
1701077881
1701077882
1701077883 图16.4 胖子在使坏
1701077884
1701077885 祥子并不知情,但是可以想见,如果祥子还是按照F=Kp(1- x)- KdV的方式来拉这个车的话,他会遇到这么一个情况,那就是在接近街尾的时候,橡皮筋上的力越来越大,而他的拉力则越来越小,总有这么一处橡皮筋的张力与Kp(1- x)相等。过了这一点以后,黄包车所受的橡皮筋的张力就比祥子的拉力还要大,于是车子就会在这个地方附近徘徊,永远也到不了街尾了。解这个过程的运动方程,可得如图16.5所示曲线。
1701077886
1701077887
1701077888
1701077889
1701077890 图16.5 有橡皮筋拉住的黄包车永远也到不了街尾
1701077891
1701077892
1701077893 这个时候,祥子肯定会觉得不对劲,怎么总是到不了街尾呢?于是他在F=Kp ( 1-x )-KdV的基础上加了一项:,这最后一项的Ki就是积分增益(Integral Gain),是一个比Kp和Kd都要小得多的值。当黄包车由于橡皮筋的拖曳怎么也到不了指定位置的时候,(1—x)始终是正的,这一项通过时间的累积就会越来越大,终于祥子的拉力超过了橡皮筋,把车拉向前去。我们把这个运动过程画出图来,如图16.6所示。可以看出它和图16.3几乎一样,黄包车迅速地到达了街尾,并且稳定地停在了那儿。如果没有拴在车后的这根橡皮筋,而是街道有个坡度,街头低街尾高,那么也需要这个积分增益才能到达街尾,否则就只能到Kp(1-x)=mgsinθ的地方了(m是黄包车和乘客的总重量,θ是街道与水平面所形成的角度)。
1701077894
1701077895
1701077896
1701077897
1701077898 图16.6 加入积分增益以后问题解决了
1701077899
[ 上一页 ]  [ :1.70107785e+09 ]  [ 下一页 ]