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)的命令来说明为什么我们需要三个不同的术语。我们将从创建植物模型的传递函数开始。我们叫它sys。正如你所看到的,它是一个简单的二阶传递函数时滞是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的block对话框。这里有很多选择。我不会一一解释。这里有一个非常好的帮助文件,你可以阅读,以获得关于PID控制器块中所有不同选项的详细信息。
但我在这里只强调一些观点。您可以选择要实现的控制器类型:PI、PD、比例型、积分型或PID。您可以选择表单。我们提供了两种不同的表单供您选择。当你在块对话框中更改表单或其他任何更改时,你会看到控制器的表单得到更新。
当然,您可以指定采样时间。设为0.01秒。单击Apply。
我们可以改变控制器的增益。我们稍后会讨论这个问题。在高级选项卡中,我们可以指定输出饱和度。如果我们想的话,我们可以启动反收尘保护。我们稍后再讨论这些。
当我们进行这些更改时,如果我们想看看在这里的罩下实现了什么,我们总是可以在这个块上单击鼠标右键,进入蒙版菜单,然后在蒙版下查看。我们将看到使用基本的Simulink块(如增益、滤波器、积分器和求和块)为这个块实现的逻辑。万博1manbetx所以它从来都不是一个黑盒子。你总能看到这里实现了什么。
我们回到这里。让我们保持简单的设置,PID控制器。我们跳过平行形式。让我们关闭输出命令的限制。好吧。
这里不使用默认增益1,1,0和100,我们将这个系统参数化。这个参数是kp ki kd。这些参数被设置成我们在MATLAB中看到的值。我马上就给你们看。点击Apply。
我们也来改变PID控制器中积分器的初始值这样PID控制器块的初始输出就等于9。通过玩引擎子系统,我知道你需要一个大约9的油门请求来获得大约2000转/分钟的输出速度。点击应用。
为了让你们相信,你是用默认增益值开始的,让我们用MATLAB。这里你可以看到这些参数的值设置为默认值。
让我们切换回Simulink模型。现在让我万博1manbetx们运行模拟。如果我们看一下结果,就会发现反应是不稳定的。这并不奇怪,因为我们还没有改变增益值。
现在我们来讨论一下如何调整增益值。我们可以通过进入方块对话框并按下Tune按钮来做到这一点。这启动了一个叫做PID Tuner的工具,它需要Simulink控制设计。万博1manbetx这个工具在时间0时线性化非线性Simulink模型,并打开你在这万博1manbetx里看到的PID调谐器应用程序。
并利用该工具从线性Simulink模型得到的传递函数,自动得出PID控制器增益,以提供良好的参考跟踪。您可以在此处查看PID参数、增万博1manbetx益值和其他特性。如果我们喜欢这个设计,我们可以简单地更新块参数。
块对话框中没有任何更改。但如果您去MATLAB,我们会看到增益值已更新。
让我们回到我们的Simulink模型。万博1manbetx现在让我们重新运行模拟。让我们看看结果。
所以现在我们看到我们摆脱了这个不稳定。我们有很好且稳定的回应。但也许我们想在油门命令中消除这种尖峰,因为也许这不是现实的。
我们可以回到PID控制器,打开这个PID调谐器,也许会让系统的响应变慢一点。实际上,我们可以看另一个图我们可以看控制器的努力,我们控制了多少油门,看看它是如何变化的。在默认设计中,我们看到一个峰值。但如果我们继续放慢速度,就能减少峰值。
我们来试试这个设计。再次更新块参数。重新运行模拟。现在我们有了很好的,稳定的设计没有油门命令的尖峰。
很快地,你们看到了我们如何使用PID Tuner应用来调整PID控制器增益,以及我们如何微调设计。如果你想使用更严格的调优工具,如波德图或根轨迹,我们有另一个应用程序,叫做控制系统设计师,你可以使用。但我现在不打算展示。
我接下来要讲的是你不知道植物模型的情况。你不知道描述你的工厂动态的方程式。但是你可能有机会接触到一个原型或者实际的过程或者你想要控制的工厂。
假设我们不知道热机的方程,但是我们可以得到一个实际的热机。我们可以向引擎输入指令,比如这里的油门请求,然后测量输出。在这种情况下,我们正在做开环测试,我们只是命令节气门在2秒内从8.9左右改变到9.4左右。但我们也可以运行同样的初始控制器,也许我们想要改进它,所以我们可以命令控制器的速度参考变化并测量由此产生的油门和引擎产生的速度。
所以我想说的是,我们可以使用的数据不一定是开环数据,但它可能是闭环引擎运行的结果。但是,一旦你测量了设备的输入和输出,这里的想法是我们可以使用这些数据从数据中识别设备模型,然后使用这些识别的设备模型来调整我们的PID控制器。
那我们就这么做吧。让我们打开PID调谐器应用程序。与我们在Simulink模型中用于调整PID控制器增益的应用程序几乎相同。但是现在我们还没有一个工厂模型,所以我们需要确定一个新的工厂模型。万博1manbetx
这为识别植物模型打开了另一个窗口。我们需要从将IO数据引入工具开始。这里你可以选择。您可以携带任意的IO数据。但在我们的例子中,我们使用步进响应选项,因为我们拥有的数据实际上是步进响应。
输出信号存储在变量输出中。并且我们知道的输入信号的幅度为0.5。它从大约8.9开始,或实际上我们有输入信号,所以我们可以从那里获得初始值。我们知道这一步骤发生在大约2秒钟。我们的时间向量从0开始,组装时间为1/100秒。
让我们把数据带进来。现在我们看到绿色的曲线,这是测量的引擎速度,蓝色的曲线,这是一个模型的输出,我们试图把它输入到绿色的线。让我们看看输入数据,这是我们命令引擎的一个步骤,节气门步骤。
好吧。为了得到更好的拟合,我们去掉测量数据中的偏移。所以发动机的启动速度不是2000,而是0。我们会到Preprocess,移除偏移量。让我们去掉所有信号的偏移量。然后去掉初始信号值。
所以我们会更新它。这是我们的新数据。我们将关闭此对话框。
所以这里是绿线中删除偏移的数据。我们现在正在尝试符合第一个订单模型 - 您在此处查看此处的公式 - 到此数据。我们可以在我们的控制中互动调整两个参数,稳态增益和该模型的时间常数。
我们可以尝试不同的结构;例如;一对被透明的杆子。所以让我们选择一个不同的模型。我们可以交互方式调整这一功能,或者我们可以让工具自动提出提供最佳拟合的最佳参数值。
如果我们这样做,这个工具就能很好地匹配这里,就像你看到的。在右下角,你可以看到设备的参数。现在让我们说我们对这个植物模型很满意,所以我们可以使用它并关闭这个对话框。
现在我们正在调整我们刚才识别的该工厂模型的PID控制器。让我们选择带有导数滤波器的PID控制器作为我们要使用的PID控制器的类型。我们看到我们现在具有零稳态错误的良好步骤响应。我们可以让它变得更快。一旦我们喜欢这种设计,我们就可以将其导出并将其保存在变量C中的Matlab工作空间中。
现在如果我们回到MATLAB,我们有一个变量c,如果你看看它是什么,它是一个有这些增益值的连续时间PID控制器。我们可以通过键入c.kp, c.ki等等来访问这些增益值。所以现在我们可以将这些增益放入Simulink中的PID控制器块中进行进一步的实现。万博1manbetx
总结,在本节中,我们研究了两种不同的方式优化的PID控制器,当你有一种方式植物模型在模型描述植物的动力学方程,另一种当你不知道方程而获得测量输入/输出数据。万博1manbetx在这种情况下,你使用系统识别工具箱集成到PID调谐器应用程序,首先从数据识别植物模型,然后使用这个识别的植物模型来调整你的参数- PID控制器的增益。
现在我们来谈谈实现。这和我们刚才用的模型差不多。但是在这里,我们加入了零阶整本书来表示A到D的转换。我们把PID控制器放在这个子系统里。我们还添加了数据类型转换块。
现在我们要做的是将浮点设计转换为定点设计,以便在定点处理器上实现,然后生成代码。让我们从运行模拟开始。假设这就是我们开始研究的设计。你看,现在所有的信号都是双倍的。
现在为了将这个设计扩展到固定点,我们将推出固定点工具,它和我们的产品一起发布,叫做固定点设计师。好吧。我们已经得到了刚才模拟的结果。因此,您将清除所有结果,并首先运行。我们将从用双精度覆盖控制器子系统中的所有参数开始。这就是这个设置的作用。
我们将进行模拟。我们将把模拟结果保存在一个名为Double的运行中。那我们就这么做吧。让我们模拟一下我们的模型。
结果显示在这里。如你所见,对于PID控制器块中的所有参数,我们都使用双重数据类型。对于子系统内的所有信号,我们在模拟过程中获取最小值和最大值。
现在我们要做的是使用这些在模拟过程中捕获的最小值和最大值来自动得出定点缩放。为此,我们将向下滚动。在这里,我们将配置选项来建议分数长度。我们希望使用固定的16位字长。对于这个固定的单词长度,我们希望这个工具提出分数长度。所以我们会坚持这个选择。
我们希望用于浮点信号的默认数据类型将与嵌入式硬件整数相同。我马上解释一下这意味着什么。我们希望使用模拟最小/最大数据,并将一些安全裕度作为定点缩放。
现在让我回到模型一秒钟。在模型中,我所做的就是在模型配置参数设置中,有一个名为硬件实现的节点。在这里,我已经指定了我们希望在通用16位嵌入式处理器上实现我们的控制器。我可以选择一个特定的那里。但在这里,我想留在通用架构。
这里重要的是,这种方式,定点工具,当我们说默认数据类型是嵌入式硬件整数时,它知道我们的目标是16位处理器。有了这些,我们用这个工具来求分数长度。点击这里。
工具继续,然后提出你们在这里看到的建议。让我们继续对所有参数应用建议的分数长度。
现在让我们回到Simulink模型。打开PID控制器块,查万博1manbetx看数据类型步骤。现在你可以看到这里所有的数据类型都是16位的定点数据。
现在我们想做的就是确保我们刚提出的固定点缩放将为我们提供接近我们浮点设计的结果。为此,而不是将所有数据类型覆盖为双倍,我们首先使用,我们将使用本地设置,我们刚刚看到的固定点缩放。我们将保存运行的结果成为一个名为REDION POINT。
所以让我们来应用更改。让我们运行模拟。
我们看到我们现在有两个运行,Fixed Point和Double。编译的DT列显示了模拟期间使用的数据类型。我们在固定点运行中使用了固定点双数据类型用于初始运行。
现在让我们看看错误信号。让我告诉你它在模型的哪个位置。就是这个信号。你可以看到我们正在记录它。它是参考设定值、参考速度和测量速度之间的差异。
对于信号,我们将比较运行。在上面这里,实际上有两个情节。他们看起来很接近。
但如果你放大一点,你会看到有区别。这就是你实际看到的。上面图中两条线的区别就在下面图中。我缩小一下。
因此,这里有趣的是要注意的,浮点与固定点之间存在稳定状态值差异。如果您放大此处,您可以看到。现在,请记住,这是具有固定点缩放的模拟的结果。因此,固定点缩放的结果,您不再具有零稳态错误。所以这很有意思。这向您展示了您需要更多地在缩放单元上工作一点,或者可以使用此非零稳态错误,或者可以转到一点点的进程服务。
但那是你作为工程师的选择。这里的重点是向你们展示如何使用这个定点工具快速进行定点缩放,如下所示。
现在,当我们这样做的时候,下一步是生成代码。有多个讨论如何配置代码生成的网络研讨会。我将快速地向你们展示如何从这个PID控制器块生成代码。同样,在现实生活中,你的控制器要比一个简单的PID控制器块复杂得多。但这个想法还是适用的。
比方说,构建一个子系统。我配置了这个模型来生成高效的代码,优化了ROM和RAM的效率。我会设置控制器增益参数,可调参数。我们会继续生成代码。
这是生成的代码。你在这里看到了我们的收益。您可以在此处查看一些初始化代码。并且实现了我们PID控制器的实际算法在此处。
那么如何处理生成的代码呢?当然,你可以把它放在处理器上,然后开始测试,等等。但我想快速强调一个选项,你们称之为软件在循环中测试。这里的想法是使用生成的代码,并在主机上用Simulink中的植物模型测试它,以确保生成的代码给您的结果与Simulink模型中的块完全相同。万博1manbetx
为了做到这一点,我们再次转到代码生成菜单。但是现在我们选择一个选项来生成s函数。同样,我们可以使这些参数可调。我们选择这个选项,Create Software-in-the-Loop块,然后单击Build。
同样,该工具为我们生成代码。但现在,它也创建了一个块,您将立即在这里看到。该模块称为软件在环,SIL。让我们从这个模型中取出来,复制到原始模型中。
让我们删除我们设计并执行了固定点缩放的PID控制器块,然后将其替换为循环块。如果我运行模拟,我会得到完全相同的结果,因为我们将在一秒钟内看到。
但是如果我现在看看块掩码下面,它不是我们以前看到的PID控制器块。我们实际上是在这里调用生成的代码。同样,我们只是确保生成的代码给出的结果与我们设计的PID控制器块完全相同。
此代码在主机上运行。所以下一步是在处理器上测试它。但这就是我今天想覆盖的范围。
好吧。现在我们已经讨论了控制器的设计,增益的调优,实现,定点缩放,以及生成代码。让我们结束这个模型,然后讨论当植物动态从一种操作条件到另一种操作条件发生很大变化时的情况。在这种情况下,它实际上改变了很多,从2,000 PM到6,000 RPM。
让我打开脚本并向您展示。所以在这个剧本中,我们将继续工作 - 让我在这里找到它 - 使用您在此处看到的开环引擎模型。因此,我们将从节气门输入线性化该模型以测量速度输出。我们将使用的工具被称为Simulink控制设计。万博1manbetx此工具有一个很好的图形应用程序,您可以执行 - 您可以使用它来线性化模型,或者您可以使用我选择在此处使用的程序化工作流以进行批处理模式线性化。
在脚本中,我们将线性化我们的工厂模型,速度点从1400到6000,步长为200。使用来自Simulink Control万博1manbetx Design的命令,例如findop和linearize,我们将在所有这些不同的操作点上线性化模型,我们将在Bode图中绘制结果。
此计算需要一秒钟。一旦创建了Bode Plot,您认为实际上有24个不同的线路对应于24种不同条件的发动机动态,跨越1,4000rpm至6,000 rpm。你看到有变化,发动机动力学的显着变化。我们刚绘制的结果变量被称为SYS。
如果我在命令窗口中查看它,我将看到这是一个由24个传递函数组成的数组。现在我要做的是对所有这24个传递函数的PID控制器进行调整。我可以单独做,再次使用工具,如PID Tuner应用程序或Bode绘图,或控制系统设计器,或可能根轨迹绘图。
但是还有程序的方法来做。Control System Toolbox中有一个名为PID曲调的函数。因此,我们将要做的是,使用这阵列的24个传输功能,并设计一组24个PID控制器,以获得每秒10个弧度的闭环带宽,并且只有两行代码的相位率为70度。所以让我们执行这个单元格。好吧。如果我们查看计算结果,我们看到我们刚刚创建的24个PID控制器数组。
让我们看看这些控制器的增益是如何改变速度的。好吧。再一次,速度从1400转到6000转。我们看到收益正在发生很大的变化。这里我们只考虑比例增益和积分增益。
让我们计算并绘制应用于24个线性对象模型的24个PID控制器的闭环步长响应。这看起来很好。
下一步,当然,在Simulink中实现这24个PID控制器。万博1manbetx这叫做增益调度。为此,我将打开一个不同的模型。好吧。我想向你们展示的是,我们有引擎子系统。我们有PID块。
但是现在,在这个PID块中,我们选择了Source设置为External的这个选项。当我们这样做时,block获得额外的PID增益。我们现在可以使用查找表块提供这些。你可以看到我们在这里测量速度信号。我们把速度信号传递给查找块,查找表块。这些查找表实现了比例增益作为引擎速度的函数。
好吧。所以我们看到了形状。因此,由于发动机速度从1,400 rpm更换为6,000 rpm,因此我们的控制器增益相应地调整。所以基本上,我们正在从一个控制器切换到另一个控制器,因为我们改变了操作条件。
这里我们有一个信号构建块,在这里我们可以创建多个测试用例来测试控制器。我这里的第一个测试案例是一系列向上的小步骤和一系列向下的小步骤,来覆盖引擎的整个操作范围。让我们运行这个模拟。让我们看看结果。
可以这里我们看到的是参考信号,洋红色信号,和实际发动机转速,蓝色信号。所以我们看到,在整个工作范围内,我们有很好的参考跟踪。
现在让我们回到模型,在这里运行一个不同的测试用例。现在我们要做几个大步骤,从1400转到6000转再回到1400转。让我们运行这个场景。让我们再看看结果。
这里,参考是这个红色信号。实际的速度是绿色信号。你注意到这里有一些奇怪的行为,这里有一个很大的超调。信号下降到参考值需要一段时间。我们下台的时候也是这样。
这实际上是我在网络研讨会开始时提到的条件叫做积分器收尾。这里发生的是,对于我们选择的增益,参考速度和实际速度之间的误差信号足够大以至于积分器项积分到一个很大的正数。然后需要一段时间当实际速度超过参考值时这个积分项回到0。如你所见,它会对控制器的性能产生负面影响。
我们可以通过添加积分器反收拢逻辑来解决这个问题。在PID控制器中,这很简单。你只需要选择,这很容易做到。你只需要选择你想要应用的反结束方法,点击确定。现在我们重新运行模拟。
让我们看看结果。让我把之前的运行从结果中移除。让我们看看这个新的。所以现在你看到新的运行与反收盘逻辑给了我们一个非常好的性能,在上升时没有超调,或在下降时没有超调。
我们还可以通过比较所创建的油门命令来了解到底发生了什么。底部的红线是油门指令在我们没有防风保护的情况下运行。蓝线是在反收卷生产的时候。如你所见,当我们转动防风保护,节气门命令从25的最大值快得多。
网络研讨会的这一部分向您展示了如何在Simulink中快速设计和实现增益调度PID控制器,以及如何防止上盘。万博1manbetx
最后我想讲的是MIMO PID控制器的设计。让我们关闭这个模型。正如我在网络研讨会开始时提到的,我们要处理的很多系统都是有多个输入和多个输出的系统。让我打开另一个模型。这是一个柴油发动机的模型。
如果我运行模拟,你会看到信号线上的数字。这些数字表示信号的尺寸。所以我们看到参考信号是两个信号,boost参考和EGR参考。柴油机分系统的输出有升压和EGR两个信号。有两个输出是我们要控制的。我们发动机的两个输入是VGT位置和EGR升力。
这里,我们想实现一个MIMO PID控制器来实现2乘2的控制。如果你看里面,你会看到我们有一个积分增益ki,它是2乘2矩阵;比例增益kp, 2乘2矩阵;并将增益提供扰动拟合向前,也是2乘2矩阵。总共有12个我们想调优的参数。它们在默认情况下被设置为零。
因此,如果我们看一下模拟的结果,我们会发现我们根本没有很好的参考跟踪。黄线表示增压和EGR中的阶跃变化。我们看到洋红线,实际信号根本不跟踪参考信号。
因此,要设计我们的MIMO PID控制器,我们可以使用称为控制系统调谐器的工具。这是一种工具,可以用于在Simulink或MATLAB中设计任何类型的MIMO或SISO控制器。万博1manbetx该想法是使用基本块在Simulink中指定控制器的体系结构,然后使用此工具调整控制器的参数。万博1manbetx
让我们看看它是如何工作的。让我们在这里转到Tuning选项卡。让我们指定要调优的参数。
在我们的MIMO PID控制器中,我们希望调整这些矩阵。我们将指定它们。然后,我们可以指定许多调整目标。这里有各种各样的目标。
让我们从step命令跟踪开始。我们需要从阶跃响应输入进行跟踪,这是我们的参考信号。让我给你看一下它们是什么信号。这是一个增压参考和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控制系统工具箱;万博1manbetx仿真软件控制设计;用于从输入/输出数据创建工厂模型的系统识别工具箱;鲁棒控制工具箱,这是一个产品,你需要使用控制系统调谐器;定点设计器,用于定点缩放;以及用于生成代码的嵌入式编码器。
如果你想了解更多,谷歌“PID控制MATLAB”的页面,我们把如何在MATLAB和Simulink中设计和实现PID控制器的所有资源放在一起。万博1manbetx差不多就是这样了。非常感谢。
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。