本文灵感来自于 仪表云 视频:“10分钟了解PID工作流程”,下面附上连接

笔者属于控制入门,文中若有不当之处还请读者指出,欢迎大家讨论!

1.开闭环控制

在讲解PID之前,我不得不先讨论一下开闭环控制

开环控制

如图1:首先看一下开环控制的逻辑图,开环控制系统并不会根据“实际输出量”做对“给定输入量”调整。以电风扇控制为例:对于一个电风扇来说,给定恒定电压V,则其电风扇转速就会在N~M转速之间波动,从而输出一定风量

图 1

开环控制只关注输入,而不关注输出结果精度,输出结果是 不定的(取决于系统元件及校准精度情况),没有目标的。其输出不会反馈回输入参与控制。

闭环控制

还是以风扇控制来说,这里我们引入人的概念。就是人在吹风扇的时候,会考虑风的大小,而去调节电压。控制方式如图2

图 2

可见由于引入了人的因素,人不仅关注输入也关注输出结果,而且会根据输出结果去调整电压,使得最终结果达到人所希望的目标。人通过反馈信息来调整控制电压。

图2中红色部分表示人作用的结果:人通过风量误差调节电压

闭环控制不只关注输入,更关注输出结果,输出结果是有目标的,实际输出回返回输入参与控制,控制系统会根据实际输出控制输入,从而影响实际输出以达到目标

自动闭环控制:

实际生产生活中,为了提高自动化能力,我们需要使用控制器来把人替换掉。如图3

图 3

图3中我们将人换成了控制器,而最常见的控制器就是PID

2.控制器选择

这里我们利用一个小车沿着路线行驶的转向控制来讲解:

图4中小车向东行驶,车速恒定,其目标是最终沿着目标路径走(有目标,闭环控制),路径有方向,黑色箭头为路径延伸方向

图 4

在此,我们设定小车距离目标路径的实际距离为Cross Track Error ( Ep ),由于目标距离=0;所以 Ep也就是误差;

Ep方向:当小车在目标路径边,则Ep>0;若小车在目标路径边,则Ep<0

另外,如果小车想走到目标路径,就必须先拐弯,因此我们设定小车每次的转弯角度为Sa, Sa就是控制输出量

Sa方向:当Sa>0时,小车向(小车前进方向的左);当Sa<0时,小车向(小车前进方向的右)

注:实际距离为Cross Track Error ( Ep )可以通过视觉传感器,GPS定位等手段获取

如图5,可以借此画出小车闭环控制的逻辑图:

图 5

对于上述控制系统,我们已经确认了其闭环控制逻辑的一个重点:即输入输出(由上可知,该控制系统的输入是Ep;输出是Sa【Sa受Ep影响,包含Sa的符号】)

由于控制系统是一个循环控制,因此我们还需要设定它的控制周期。这里我们设定为1ms控制一次(控制周期越小,控制精度越高

OK,万事俱备,只欠东风。下面就到了重头戏!控制器的设计

虽然笔者在开闭环控制中讲过,PID是一种常见的控制器,但是为了让读者更好的理解控制器的作用,这里我们先讲一种最简单的控制器:Bang-Bang Control

说起来,Bang-Bang Control控制应该是笔者见到的最傻的控制器了

Bang-Bang Control:

当Ep 不等于 0时,就让|Sa|等于一个定值A°,每个控制周期的|Sa|都等于A°

Sa的符号由Ep决定,当Ep>0,则Sa>0;当Ep<0,则Sa<0

因此有:

其控制逻辑图如图6所示:

图 6

引入Bang-Bang Control的结果如图7所示

从图7中可以看到,当我们将目标路径向北移动后,小车立刻向北跑去,小车很快再次到达目标路径,但是小车始终在目标路径附近震荡

这是由于控制量Sa每次都是定值,当小车达到目标后,会由于Sa固定的缘故导致超调,而导致小车在目标路径处反复震荡(这也是笔者说它傻的原因,不会随机应变

注:在BangBang Control中,这里我们设置的控制周期是1ms,虽然我们设定每次控制量为小车转角为A°,但实际上可能由于控制周期的原因,小车还没转到A°,就已经进入了下一个控制周期了,请读者注意控制周期对实际控制结果的影响

OK,相信看到这里,读者已经对自动闭环控制有了初步的了解。也明白了控制器的选择会影响最终的控制结果,既然BangBang Control太傻,那我们就改用一个稍微聪明点的控制器:PID控制器

PID控制器详解请见:PID控制原理 二(PID使用详解)