PID作为控制领域的基础算法,被广泛应用于各行各业。它的核心是三个参数,分别是Kp(比例系数)、Ki(积分系数)、Kd(微分系数)。经验丰富的应用工程师,都会有一套自己的口诀,针对常规的产品,这些口诀也是够用的。但是,当被控系统发生重大变化时,这些经验就不一定适用了。比如温度控制、位置控制、转速控制、电压控制等都有各自的传递特性,并且不同的负载又会不一样。如果我们能够推导出被控负载的传递函数,那么,可以利用控制原理计算出这三个核心参数。但遗憾的是,被控系统的模型往往非常复杂,计算量非常大,我们很难通过计算获得比较好的结果。最主要的,大部分应用工程师对PID的底层原理并不熟悉,所以,如果有一个自整定的工具帮我们预先调节出一个基准的参数,然后我们再将其根据实际情况进行微调,那么就会节省很多时间。
simulink中的PID模块中就提供了这样一个功能,官方称其为PID Tuner,翻译过来就是“PID调谐器”。下面基于matlab R2016b来详细说明PID Tuner的基本操作,希望对需要的朋友有帮助。
在matlab命令行窗口,通过open_system()打开转速PID控制模块:
open_system('scdspeedctrlpidblock');
过一会该示例模型将会被打开,它的核心是这个“PID Controller”,后面那一堆模块可以理解成是一个旋转系统的传递函数。
我们可以双击最右边的“Engine Speed(rpm)”来运行这个系统,先看看默认效果。可以看到,默认参数的抖动是非常厉害的,这显然无法接受。
接下来,我们使用PID Tuner对其进行整定。
双击scdspeedctrlpidblock左侧的“PID Controller”,在弹出的“Block Parameters: PID Controller”对话框点击中间的“Tune...”按钮。
PID Tuner启动后会自动识别对象的输入和输出,使用当前工作点进行线性化处理,计算出控制器所看到的线性化对象模型,也就是图中这条曲线。
点击工具栏右侧的“Show Parameters”可以看到当前PID的详细参数,包括P、I系数(这里没有用到D,所以显示的是n/a),下面还有Performance(性能)和Robustness(鲁棒性),调节时间(settling time)为2.88秒,超调量(Overshoot)为2.46%。
这里的“settling time”即“调节时间”又称“稳定时间”,指的是系统的输出从开始响应输入信号到进入稳态值(通常波动为 ±2% 或 ±5%即可视为稳态)所需要的时间。而“Overshoot”就是“超调量”,也就是系统输出超过稳态值的比例。
拖动工具栏的“response Time(seconds)”上面的滚动条可以改变响应时间,向右拖动加长,反之则缩短,这个参数会影响“调节时间”。
我们把“Response Time”拖动到3.1的位置,也可以在右侧的微调器的文本框中直接输入,此时曲线明显变得平缓了,没有一点超调,点击Show Parameters可以看到此时就是一个纯积分器(P=0)。此时的调节时间接近4秒。
刚刚加长响应时间的实验虽然减小了超调量,但是调整时间过长,接下来我们通过响应时间和鲁棒性的权衡来实现快且稳的PID参数整定。
首先,将响应时间调整到满意值,比如下图中Response Time=1.152秒时,调整时间约1.2秒,此时的超调量高达20%,这显然是不能接受的。
接下来,我们向右拖动Transient Behavior滑块,加大鲁棒性,可以看到超调量随着鲁棒性的提高而减小,到0.71时基本上没有超调了。
此时的调整时间约1.7秒,超调量几乎为0,非常nice!
让我们再次点击右上角的Show Parameters按钮,看看具体的PID参数。
点击右上角的“Update Block”即可将调整后的PID参数更新到PID控制器中。
成功后,回到Block Parameters: PID Controller窗口,在Main标签页即可看到刚刚更新的系数。
使用新的PID参数再次运行仿真,可以看到,波形好了很多,虽然有轻微超调,但是比之前那种帕金森波形要好的多。之所以不像PID Tuner那样平滑,是因为PID Tuner使用了线性化处理,而控制系统是非线性的,二者之间存在一定差异,不过此时我们可以手动进行微调,也可以在PID Tuner增大Transient Behavior参数来减小超调。
当Transient Behavior增大到0.77时,模型的响应几乎就没有超调了,而调整他时间基本上还是1.7秒,这比我们自己手动去调是不是方便很多?
PID Tuner进行自整定的前提是要通过当前系统状态,计算一个线性对象模型,如果线性化失败将无法进行后面的工作。
比如,像下面这种情况就是无法线性化的:
此时打开PID Tuner软件就会在下方出现一个感叹号,告诉我们当前PID控制器不稳定。不过还是能够看到一条响应曲线,像目前的这条曲线还能够手动去调试,但最坏的情况是没法调试的。我们可以通过点击左上角的Plant,在弹出的列表选择Re-linearlize Closed Loop获取一个稳定点。
接下来软件会自动弹出一个 CLOSED LOOP RE-LINEARLIZEION页面,点击工具栏的Run,运行一遍仿真。
仿真完毕后,右侧会显示当前PID的执行结果,将中间的垂线拖动到Error为0的位置,然后点击工具栏的Linearlize,重新线性化。
右侧窗口会显示重新线性化后的响应曲线,点击它或者左上角的“PID TUNNER”可以回到PID Tuner界面。
此时我们可以像之前一样进行PID 调谐了。