Arkadiy Turevskiy, MathWorks
PID控制是无处不在的。虽然理论上简单,但PID控制器的设计和整定在实践中可能是困难和耗时的。网络研讨会将从PID控制的快速理论入门开始。MathWorks工程师将介绍一种简单而直接的方法来快速设计、调优和实现PID控制器。
通过演示,您将学习如何:
主讲人简介:Arkadiy Turevskiy在MathWorks的技术营销组工作,支持Simulink和控制设计产品。s manbetx 845万博1manbetx万博1manbetx在加入MathWorks之前,他在普惠公司(Pratt & Whitney)工作,为大型飞机发动机开发控制系统。
记录:2017年3月14日
大家好,欢迎来到我们的网络研讨会,PID控制变得简单。我叫阿卡迪·图列夫斯基。我在MathWorks的控制团队工作。对于那些不记得或不知道PID控制的人,我们将以一个快速入门的PID控制开始这个网络研讨会。然后我们将介绍在Simulink中设计和实现PID控制器的工作流程。万博1manbetx
在我们开始入门之前,让我们快速看一下我们今天要创建的最终产品。为了这个,让我切换到MATLAB。我们会打开一个Simulink模型。万博1manbetx
这是一个闭环发动机控制系统的模型。这可能是一个汽车发动机或工业机器上的发动机。发动机在子系统中建模,输入为油门,输出为速度。在这个MyController子系统中还有PID控制器。
如果我们运行模拟,您将看到这个PID控制器适用于定点数据类型。这是一个离散时间PID控制器。您还可以在右边看到模拟的结果。
你在右上角看到的黄线是一个速度参考信号。您可以看到,您正在命令速度从2,000 RPO更改为2,200 RPM。洋红色的线是实际测量的速度。正如你所看到的,控制系统或PID控制器在提供快速和稳定的参考跟踪方面做得很好。
在Simulink中设计并验证了PID控制器后,自动生成C代码。万博1manbetx我稍后将向您详细说明如何做到这一点。但是现在,让我简单地打开生成的代码并显示文件。
正如你在这里看到的,它大约有30行代码,其中实际的PID算法是在大约10行高效、紧凑、定点代码中实现的。当然,实际的控制系统将包含比简单的PID控制器更多的功能。但在这次网络研讨会中,我将只关注PID控制器的设计和生成代码。
现在,当我们看到最终的产品,让我们后退一步,讨论PID控制的基础知识。那么什么是PID控制呢?PID代表比例积分导数。如果你看这张来自维基百科的PID控制器的图片,你会看到我们试图控制的过程,就像我们的引擎模型。
你会看到从设定点减去测量输出来计算误差信号。然后PID控制器,在这里显示,通过使用三个不同的项来创建执行器请求,在这三个不同的框中显示:比例项,它是误差信号乘以增益KP;积分项,即增益KI除以误差信号的积分;导数项,就是导数增益KD乘以误差信号的导数。
为什么我们需要这三个不同的项?让我们切换回MATLAB。让我们用我准备的一个简单的脚本来看看。
在这个脚本中,我们将使用来自Control System Toolbox(例如TF)的命令来说明为什么我们需要三个不同的术语。我们将从创建一个植物模型的传递函数开始。我们称之为系统。如你所见,这是一个简单的二阶传递函数它有0.2秒的时间延迟。
我们来看看这个传递函数的阶跃响应。就像这样。我们可以检查开环系统的上升时间。我们看到大概是7.7秒。
我们现在从设计控制器开始。首先,我们要做的是只使用比例项。让我们从增益值3开始。使用控制系统工具箱中的命令,我们将计算闭环系统并绘制其阶跃响应。
阶跃响应现在用黄线表示。我们发现它比开环动力学快得多。但稳态误差不是0。换句话说,这里的闭环阶跃响应没有达到参考值1。
所以我们可以尝试通过增加比例增益值来解决这个问题。让我们试试。使用这里的这个小部件,我们可以增加增益并在脚本单元格中重新运行计算。如果我们这样做几次,我们会看到稳态区域变得越来越小,但这是以闭环系统的稳定性为代价的,我们开始看到孤立和增加的超调。所以增加比例增益并不是一个好的解决方案。
现在让我们加上积分项,积分增益为0.8,然后重新进行计算。现在我们比较比例增益0.3的纯比例控制器的响应,黄线,与比例积分控制器,或所谓的PI控制器,比例增益为3,积分增益为0.8。如你所见,积分项的加入消除了稳态误差同时又很好地保持了系统的稳定性所以我们的超调量很小也没有很多隔离。
我们可以使用这里的导数项对PID命令使用sort参数来增加系统的稳定性。我们来做一下。PID控制器的响应显示在绿线中。如你所见,它的响应时间,上升时间,和PI控制器差不多,所以它也很快。但同时,我们最小化了超调量去掉了这里的过调量,所以我们的系统更加稳定。
我们需要从比例项开始。然后积分项消除了稳态误差。导数项可以增加系统的稳定性。
那么,如果PID控制器只是三个增益——比例增益、积分增益和导数增益,那么这里的问题是什么?您可以快速地编写一些C代码,将其连接到我们的机器原型上,并开始调整这些增益。
事实证明,当你这样做的时候,会有很多挑战。有时,植物模型是不稳定的。所以如果你开始在原型上调整它,你的整个闭环系统就会变得不稳定。这可能会损害你的植物。
可能会出现一种叫做积分器上发条的危险情况。你需要逻辑来防止这种情况发生。我稍后会更详细地解释。
很多时候,当人们调整PID控制器时,他们会使用一些植物模型作为PID控制器增益。但是很多时候,这个植物模型是不可用的。在这种情况下我们该怎么做?
如果你需要在微处理器上实现你的PID控制器,特别是如果这个微处理器具有定点架构,那么你需要考虑抽样和参数的离散化。这也是一个挑战。
我们看的例子是一个简单的单输入单输出系统。但是很多系统都有多个输入和多个输出。我们也需要能够处理这些问题。最后,即使你处理的是单输入单输出系统,植物动态也会从一种操作条件到另一种操作条件发生很大的变化。这些只是人们在设计和实现PID控制器时必须面对的一些挑战。
现在我想回到我们开始的例子,引擎控制系统,并介绍为该系统设计PID控制器的工作流程,并在此过程中强调我们如何帮助您解决这些挑战。现在切换到MATLAB。让我们打开我们要做的例子。
这是一个模型,我们将为我们的引擎系统创建一个PID控制器。我们还没有一个PID控制器,但是我们有引擎子系统。让我们在里面导航。
这里有多个分量。如果你深入研究其中一个,你会发现我们在这里实现的方程是非线性的。这是另一个非线性方程。这里还有一个。在这种情况下,植物的动态是非常非线性的。
在这个顶级模型中,我们有引擎子系统。我们有速度参考块。我们有一个计算参考速度和测量速度之间误差信号的和块。
现在让我们继续,添加一个PID控制器块。我们将使用一个离散PID控制器。让我们把这个块连接到系统的其他部分。
我们不要打开这个block的对话框。这里有很多选择。我不会一一解释。这里有一个非常好的帮助文件,你可以阅读它来获得关于PID控制器块中所有不同选项的详细信息。
但我在这里只强调一些想法。您可以选择您想要实现的控制器类型:PI, PD,仅比例,仅积分,或PID。你可以选择形式。我们在这里提供了两种不同的形式供您选择。当您在块对话框中更改窗体或进行任何其他更改时,您将看到控制器的窗体得到更新。
当然,您可以指定采样时间。让我们将其设置为0.01秒。让我们点击Apply。
我们可以改变控制器的增益。我们稍后会讲到这个。在Advanced选项卡中,我们可以指定输出饱和度。如果我们愿意,我们可以启用防清盘保护。再说一次,我们稍后再讨论这个问题。
当我们进行这些更改时,如果我们想看看这里的底层实现了什么,我们总是可以右键单击这个块,转到蒙版菜单,并查看蒙版下面。我们将看到我们为这个块实现的逻辑使用基本的Simulink块,如增益,滤波器,积分器和求和块。万博1manbetx所以它绝不是一个黑匣子。你总会看到这里实现了什么。
我们回到这里。让我们保持这里的简单设置,PID控制器。让我们跳过平行形式。让我们关闭输出命令的限制。好的。
这里不使用默认增益1,1,0和100,我们把这个系统参数化。这个参数是kp ki kd。这些参数被设置成我们刚刚在MATLAB中看到的这些值。我马上给你们看。让我们点击这里的Apply。
我们也改变PID控制器中积分器的初始值使得PID控制器块的初始输出等于9。通过与发动机子系统的接触,我知道你需要大约9的油门请求来获得大约2000转/分的输出速度。因此,让我们点击这里的Apply。
为了让你相信你是从默认增益值开始的,让我们进入MATLAB。这里你可以看到这些参数的值设置为它们的默认值。
让我们切换回Simulink模型。万博1manbetx现在让我们运行模拟。如果我们看一下结果,我们会发现响应是不稳定的。这并不奇怪,因为我们还没有改变增益值。
现在我们来谈谈如何调整增益值。我们可以通过进入块对话框并按下Tune按钮来做到这一点。这就启动了一个叫做PID调谐器的工具,它需要Simulink控制设计。万博1manbetx这个工具在0时刻线性化非线性Simulink模型,打开这个PID万博1manbetx调谐器app,你在这里看到的。
并利用该工具从线性Simulink模型中得到的传递函数,自动得出PID控制器增益,以提供良好的参考跟踪。万博1manbetx你可以在这里检查PID参数,增益值和其他特征。如果我们喜欢这个设计,我们可以简单地更新块参数。
块对话框中没有任何变化。但是如果你进入MATLAB,我们会看到增益值已经更新了。
让我们回到Simulink模型。万博1manbetx现在让我们重新运行这个模拟。让我们看看结果。
现在我们看到我们摆脱了不稳定性。我们有很好的稳定的响应。但也许我们应该消除油门指令中的这个峰值,因为这可能是不现实的。
我们可以回到PID控制器块,打开我们的PID调谐器,可能会降低一点系统的响应。实际上,我们可以看另一个图我们可以看控制器的努力,我们控制了多少油门,看看它是如何变化的。在默认设计中,我们看到这里有一个尖峰。但是如果我们继续让它慢一点,我们就减少了峰值。
我们来试试这个设计。再次更新块参数。重新运行模拟。现在我们有了很好的,稳定的设计在油门指令中没有尖峰。
很快地,你们看到了我们如何用PID调谐器app调优PID控制器增益,以及我们如何微调设计。如果你想使用更严格的调优工具,如波德图或根轨迹,我们有另一个应用程序,称为控制系统设计器,你可以使用。但我现在不打算展示它。
我接下来要讲的是你不知道植物模型的情况。你不知道描述工厂动力学的方程式。但你可能有机会接触到一个原型或实际的过程或你想控制的植物。
假设我们不知道热机的方程,但是我们可以得到一个实际的热机。我们可以命令引擎的输入,就像这里的节气门要求,并测量输出。在这种情况下,我们正在做开环测试,我们只是命令油门在2秒内从8.9到9.4的步进方式改变。但我们也可以运行相同的初始控制器,也许我们想要改进它,所以我们可以命令该控制器的速度参考变化,测量发动机的节气门和最终速度。
所以我想说的是,我们可以使用的数据不一定是开环数据,但它可能是闭环引擎操作的结果。但是一旦你测量了植物的输入和植物的输出,这里的想法是我们可以用这些数据从数据中识别出一个植物模型,然后用这个识别出的植物模型来调整我们的PID控制器。
我们来做一下。让我们打开PID调谐器应用程序。这和我们刚刚在Simulink模型中用来调优PID控制器增益的应用程序差不多。万博1manbetx但是现在我们没有一个植物模型可以开始,所以我们需要确定一个新的植物模型。
这为确定植物模型打开了另一个窗口。我们需要从将IO数据引入工具开始。这里你可以选择。你可以带任意的IO数据。但在我们的例子中,我们使用阶跃响应选项,因为我们拥有的数据实际上是阶跃响应。
输出信号存储在一个变量输出中。我们知道输入信号的振幅是0.5。它从8.9开始,或者实际上我们有输入信号,所以我们可以从那里得到初始值。我们知道这一步发生在2秒左右。时间矢量从0开始,装配时间是1/100秒。
让我们把数据带进来。我们现在看到绿色的曲线,这是测量到的发动机转速,蓝色的曲线,这是一个模型的输出,我们试图把它输入到绿色的线。让我们再看看输入数据,这是我们对引擎的命令,即油门步骤。
好的。为了得到更好的拟合,让我们去掉测量数据中的偏移量。所以发动机转速不是从2000开始,而是从0开始。点击预处理,移除偏移量。让我们从所有信号中移除一个偏移量。我们去掉初始信号值。
我们会更新它。这是我们的新数据。我们将结束这个对话。
这是去掉偏移量后的数据在绿线上。现在我们试着将一阶模型,你看这里的公式,与数据拟合。我们可以交互地调整控制中的两个参数,稳态增益和该模型的时间常数。
我们可以尝试不同的结构;例如;一对欠阻尼杆。让我们选择一个不同的模型。我们可以交互地进行调整,或者让工具自动地提供最佳的适合度的最佳参数值。
如果我们这样做,这个工具就能很好地匹配这里,就像你们看到的。在右下角,你可以看到它所适合的植物的参数。现在假设我们对这个植物模型很满意,我们可以用它来结束这个对话框。
现在我们在为我们刚刚确定的这个植物模型整定PID控制器。让我们选择带有导数滤波器的PID控制器作为我们想要使用的PID控制器类型。我们现在有了很好的阶跃响应零稳态误差。我们可以让它更快一点。一旦我们喜欢这个设计,我们就可以导出它并将它保存在我们的MATLAB工作区中的变量c中。
现在如果我们回到MATLAB,我们有一个变量c,如果你看它是什么,它是一个连续时间PID控制器,有这些增益值。我们可以通过输入c。kp c。ki来访问这些增益值。所以现在我们可以将这些增益放入Simulink中的PID控制器块中进行进一步实现。万博1manbetx
总结一下,在本节中,我们研究了两种不同的整定PID控制器的方法,一种是当你在Simulink中有描述你的工厂动态的方程的工厂模型时,另一种是当你不知道方程但有测量输入/输出数据时。万博1manbetx在这种情况下,你使用集成到PID调谐器应用程序中的系统识别工具箱,首先从数据中识别一个植物模型,然后使用这个识别的植物模型来调优PID控制器的增益参数。
现在我们来谈谈实现。这和我们刚才用的模型差不多。但在这里,我们添加了零阶整本书来表示A到D的转换。我们把PID控制器放在子系统里面。我们还添加了数据类型转换块。
现在我们要做的是将这个浮点设计转换为定点设计,以便在定点处理器上实现,然后生成代码。让我们从运行模拟开始。假设这就是我们开始着手的设计。你看现在所有的信号都是双的。
现在,为了将这个设计扩展到定点,我们将推出定点工具,它与我们的产品一起发布,称为定点设计器。好的。我们已经得到了我们刚刚做过的模拟的结果。因此,您将首先清除所有结果和所有运行。我们将从重写控制器子系统中的所有参数开始用双精度值。这就是这个设置的作用。
我们将进行模拟。我们将把模拟的结果保存在一个名为Double的运行中。我们来做一下。让我们来模拟我们的模型。
结果显示在这里。如你所见,对于PID控制器块内的所有参数,我们使用双数据类型。对于子系统内部的所有信号,我们在模拟过程中捕获最小值和最大值。
现在我们要做的是使用这些在模拟过程中捕获的最小值和最大值来自动提出定点缩放。要做到这一点,我们向下滚动。在这里,我们将配置选项来提议分数长度。我们希望使用固定的16位字长。对于那个固定的单词长度,我们希望工具提出分数长度。所以我们会坚持这个选择。
浮点信号的默认数据类型将与嵌入式硬件整数相同。我马上会解释这是什么意思。我们将使用模拟最小/最大数据与一些安全裕度来作为定点缩放。
现在让我们回到一个模型上。在模型中,我所做的是在模型配置参数设置中,有一个称为硬件实现的节点。在这里,我已经指定我们想要在一个通用的16位嵌入式处理器上实现我们的控制器。我可以选一个特定的。但在这里,我想保留通用的架构。
这里重要的是,定点工具,当我们说默认数据类型与嵌入式硬件整数相同时,它知道我们的目标是16位处理器。有了这些,我们让工具为我们提出分数的长度。点击这里。
所以工具继续进行并提出了你在这里看到的建议。让我们继续,将建议的分数长度应用于所有参数。
现在让我们回到Simulink模型。万博1manbetx打开PID控制器块,查看数据类型步骤。现在你可以看到这里所有的数据类型都是16位的定点。
现在我们要做的是确保我们刚刚提出的定点缩放会给我们接近浮点设计的结果。为此,我们将使用局部设置,也就是我们刚才看到的定点缩放,而不是像我们第一次做的那样重写所有数据类型以使其加倍。我们会将运行的结果保存到一个名为Fixed Point的运行中。
让我们应用这些变化。让我们运行这个模拟。
我们看到我们现在有两个运行,定点和双。编译的DT列显示模拟过程中使用的数据类型。所以你可以看到,我们在fixed point运行中使用了定点,而在初始运行中使用了双数据类型。
现在我们来看看错误信号。让我告诉你它在模型的什么地方。就是这个信号。你可以看到我们在记录它。它是参考设定点、参考速度和被测速度之间的差值。
对于信号,我们将比较运行。在上面这里,实际上有两个图。他们看起来彼此很近。
但是如果你把它放大一点,你就会看到区别。这就是你实际看到的。上面图中两条线的差值就是你在下面图中看到的。我把它缩小。
这里要注意的有趣的事情是浮点数和不动点的稳态值是不同的。你可以看到,如果你放大这里。记住,这是一个定点缩放模拟的结果。定点缩放的结果是,稳态误差不再为零。这很有趣。这表明你可能需要在缩放单元上多花点功夫,或者接受这个非零稳态误差,或者使用一个过程服务。
但这是你作为工程师的选择。这里的重点是向你们展示如何用这个不动点工具快速做不动点缩放,如图所示。
那么现在,当我们完成这些之后,下一步就是生成代码。有许多网络研讨会讨论如何配置代码生成。我将快速展示如何从这个PID控制器块生成代码。同样,在现实生活中,你的控制器要比简单的PID控制器块复杂得多。但这个想法仍然是适用的。
比方说,建立一个子系统。我配置了这个模型以生成高效的代码,优化了ROM和RAM的效率。我将使那些控制器增益参数,可调参数。我们将继续生成代码。
下面是生成的代码。你可以看到我们的收获。这里有一些初始化代码。实现PID控制器的实际算法在这里。
那么如何处理生成的代码呢?当然,你可以把它放在处理器上开始测试,等等。但是我想很快地强调一个选项,你们称之为软件在环测试。这里的想法是使用这些生成的代码,并在一台主机上用Simulink中的植物模型测试它,以确保生成的代码给您的结果与您的Simulink模型中的块完全相同。万博1manbetx
为此,我们再次转到代码生成菜单。但是现在我们选择一个选项来生成一个S-Function。同样,我们可以使这些参数可调。我们选择这个选项,Create software -in- loop块,然后单击Build。
同样,该工具为我们生成代码。但现在它也创建了一个块,你马上就会看到。这个块被称为软件在循环,SIL。我们把它从这个模型中复制到原来的模型中。
让我们删除这个PID控制器块,我们为它设计并做了定点缩放,取而代之的是一个软件在循环块。如果我运行这个模拟,我将得到完全相同的结果,我们马上就会看到。
但如果我现在看块掩码下面,它不是我们之前看到的PID控制器块。我们在这里调用生成的代码。我们只是确保生成的代码给我们的结果与我们设计的PID控制器块完全相同。
这段代码在主机上运行。所以下一步是在处理器上测试它。但这超出了我今天要讲的范围。
好的。现在我们已经讨论了设计控制器,调优它的增益,并实现它,做定点缩放,并生成代码。让我们结束这个模型,接下来谈谈植物动力学从一种操作条件到另一种操作条件发生很大变化的情况。在这种情况下,它实际上改变了很多,从2000 PM到6000 RPM。
让我打开脚本,给你看看。所以在这个脚本中,我们要用一个开环引擎模型,就是你们看到的。所以我们将线性化这个模型从节流输入到测量速度输出。我们将使用的工具叫做Simulink Control Design。万博1manbetx这个工具有一个很好的图形应用程序,你可以使用它来线性化一个模型,或者你可以使用我在这里选择的用于批处理模式线性化的编程工作流。
在脚本中,我们将在一组从1400到6000的速度点上线性化我们的工厂模型,步长为200。使用来自Simulink Control万博1manbetx Design的命令,例如findop和linearize,我们将在所有这些不同的操作点上对模型进行线性化,并将结果绘制在Bode图中。
这个计算需要一秒钟。一旦博德图被绘制出来,你就会看到这里有24条不同的线,对应于24种不同条件下的发动机动态,范围从14000转到6000转。你可以看到有变化,发动机动力学的显著变化。我们刚刚绘制的结果变量叫做sys。
如果我在命令窗口中查看,我会看到这是一个包含24个传递函数的数组。现在我要做的是调整所有24个传递函数的PID控制器。我可以单独做,使用工具,如PID调谐器应用或波德图,或控制系统设计器,或根轨迹图。
但也有程序化的方法来做到这一点。在控制系统工具箱中有一个函数叫做PID调优。所以我们要做的就是用这个24个传递函数的数组设计一组24个PID控制器来获得闭环带宽为每秒10弧度相位裕度为70度只需要两行代码。我们来执行这个单元格。好的。如果我们看一下计算的结果,我们看到我们有一个由24个PID控制器组成的数组我们刚刚创建了这个数组。
让我们看看这些控制器的增益是如何改变速度的。好的。速度从1400转到6000转。我们看到收益变化很大。这里我们只看比例增益和积分增益。
让我们计算并绘制应用于24个线性工厂模型的24个PID控制器的闭环阶跃响应。我们看到这看起来很好。
下一步,当然是在Simulink中实现这24个PID控制器。万博1manbetx这叫做增益调度。因此,我将打开一个不同的模型。好的。我想向你们展示的是,我们有我们的引擎子系统。我们有PID块。
但是现在,在这个PID块内部,我们选择这个选项将Source设置为External。当我们这样做时,块得到额外的PID增益导入。我们现在可以使用查找表块来提供这些。你可以看到我们在测量速度信号。我们将速度信号传递给查找块,查找表块。这些查找表将比例增益作为发动机转速的函数实现。
好的。这里我们看到了图形。所以我们的想法是当引擎转速从1400转到6000转时,我们的控制器增益也会相应地调整。基本上,我们从一个控制器切换到另一个当我们改变操作条件时。
这里我们有一个信号构建块,在这里我们可以创建多个测试用例来测试我们的控制器。我这里的第一个测试用例是一系列向上和向下的小步骤,以覆盖发动机的整个工作范围。让我们来模拟一下。让我们看看结果。
好的。所以我们在这里看参考,洋红色的信号,和实际的发动机速度,这里的蓝色信号。我们看到我们在整个操作范围内有很好的参考跟踪。
现在让我们回到模型,在这里运行一个不同的测试用例。现在我们要做几个大步骤,从1400转到6000转再回到1400转。让我们运行这个场景。让我们再次看看结果。
这里,参考是这个红色信号。实际速度是绿色信号。你会注意到这里有一些奇怪的行为,这里有一个很大的超调。信号需要一段时间才能降到参考值。当我们下台时,同样的事情也会发生。
这实际上是我在网络研讨会开始时提到的条件积分器清盘。这里发生的是我们在这里选择的增益,参考速度和实际速度之间的误差信号足够大以至于积分器项积分为一个很大的正数。然后需要一段时间这个积分项回到0当实际速度超过参考速度时。如你所见,它对控制器的性能产生了负面影响。
我们可以通过添加积分器反清盘逻辑来解决这个问题。在PID控制器块中,这非常简单。你只需要选择——这真的很容易做到。您只需选择要应用的反清盘方法,单击OK。现在我们重新进行模拟。
让我们看看结果。让我把之前的运行从结果中删除。我们来看看这个新的。现在你可以看到,带有反上卷逻辑的新运行给了我们一个非常好的性能,在上升过程中没有超调,在下降过程中没有超调。
我们还可以通过比较创建的油门命令来了解发生了什么。所以底部的红线是油门命令和运行我们没有防上发条保护。蓝线是反上卷生产的运行状态。所以正如你所看到的,当我们打开防上发条保护,油门命令离开最大值25快得多。
这部分的网络研讨会向您展示了如何在Simulink中快速设计和实现增益预定PID控制器,以及如何防止上发条。万博1manbetx
在这次网络研讨会上我想讲的最后一件事是MIMO PID控制器的设计。让我们关闭这个模型。正如我在网络研讨会开始时提到的,我们要处理的很多系统都是有多个输入和多个输出的系统。我再打开一个模型。我们在这里看到的是一个柴油发动机的模型。
如果我运行模拟,你会看到信号线上的数字。这些数字代表了信号的尺寸。所以我们看到参考信号实际上是两个信号,boost参考和EGR参考。柴油机分系统的输出有升压和EGR两个信号。所以有两个输出是我们要控制的。发动机的两个输入是VGT位置和EGR升力。
在这里,我们要实现一个MIMO PID控制器来做2乘2的控制。如果你往里面看,你会看到我们有一个积分增益ki,这是一个2乘2矩阵;比例增益kp, 2乘2矩阵;而增益提供扰动拟合向前,也是二乘二矩阵。总共有12个参数需要调优。默认情况下,它们被设置为零。
所以如果我们看一下模拟的结果,我们会发现我们根本没有很好的参考跟踪。黄线表示boost和EGR的步骤变化。我们看到洋红色的线,实际的信号根本不跟踪参考信号。
因此,为了设计我们的MIMO PID控制器,我们可以使用一个叫做控制系统调谐器的工具。这是一个工具,你可以用它在Simulink或MATLAB中设计任何类型的MIMO或SISO控制器。万博1manbetx其思想是使用基本块在Simulink中指定控制器的体系结构,然后使用该工具调优控制器的参数。万博1manbetx
我们来看看这是怎么回事。让我们转到这里的Tuning选项卡。让我们指定要调优的参数。
在我们的MIMO PID控制器中,我们想要调优那些矩阵。我们将指定它们。然后在这里,我们可以指定一些调优目标。这里有各种类型的目标。
让我们以步进命令跟踪为例。我们想从阶跃响应输入跟踪,这是我们的参考信号。我给大家展示一下它们的信号。它是助推参考和EGR参考。输出信号是柴油机子系统的输出以及这里的信号,升压和EGR。
我们将要求工具设计控制器,为我们提供一个时间常数约为5的闭环系统的一阶特性,并显示我们正在命令的步骤命令,我们的10为升压,3为EGR,因此您将相应地调整大小。你在这里输入这些数字,10和3。我们甚至可以要求比5快一点的,比如3秒。让我们点击OK。
该工具继续执行并创建调优目标的绘图。洋红色的线是我们要求的响应,对角线上的快速响应非对角线上的零信号以提供通道之间最小的交叉耦合。
现在我们只需按下Tune,工具就会开始调整这些kp, ki和kff参数。现在,调优非常快,如你所见。我们现在要做的就是更新Simulink模型中的块。万博1manbetx
如果我们进入子系统内部,我们会看到所有的块参数都被更新了。现在我们可以运行模拟,看看结果。我们现在看到我们有很好的参考跟踪最小交叉耦合。所以当我们在升压上做一个步骤的改变时,对EGR的影响很小。反之亦然:当我们在EGR上做阶跃变化时,对升压的影响相对较小。所以我们很快就用PID调谐器工具设计了一个MIMO PID控制器。
总而言之,你看到了PID控制的快速入门。然后你看到了一个简单的工作流程关于如何进行整定,在MATLAB和Simulink中实现PID控制器。万博1manbetx我们使用的不同产品有Simus manbetx 845link;万博1manbetx控制系统工具箱;万博1manbetxSimulink控制设计;用于从输入/输出数据创建工厂模型的系统识别工具箱鲁棒控制工具箱,这是一个您需要使用控制系统调谐器的产品;定点设计器,用于定点缩放;和用于生成代码的嵌入式编码器。
如果你想了解更多,谷歌“PID控制MATLAB”,进入我们放在一起的页面,如何在MATLAB和Simulink中设计和实现PID控制器的所有资源。万博1manbetx差不多就是这样了。非常感谢。
您也可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。