Arkadiy Turevskiy, MathWorks
PID控制普遍存在。虽然理论上简单,但PID控制器的设计和调整可能在实践中难以耗时。网络研讨会将在PID控制上以快速理论底漆开始。然后,MathWorks工程师将介绍一种简单而直接的方式来快速设计,调整和实现PID控制器。
通过演示,您将学习如何:
关于演示者:Arkadiy Turevskiy在技术营销小组中的数学营销组,支持Simulink和Control Design产品。s manbetx 845万博1manbetx万博1manbetx在加入Mathworks之前,他在Pratt&Whitney工作,他开发了用于大型飞机发动机的控制系统。
录制时间:2017年3月14日
你好,欢迎来到我们的网络研讨会,PID控制变得简单。我的名字是arkadiy turevskiy。我在Mathworks的控件团队中工作。我们将在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命令的排序参数添加的衍生术语来增加我们系统的稳定性。所以让我们这样做。PID控制器响应显示在绿线中。如您所见,它具有大致相同的响应时间,上升时间,作为PI控制器,所以它也很快。但与此同时,我们最小化过冲并在此处摆脱了这个欠潮,因此我们的系统更稳定。
所以我们需要比例术语来开始。然后,整数项消除了稳态错误。衍生术语使我们能够提高我们系统的稳定性。
那么,如果PID控制器仅仅是三个增益——比例增益、积分增益和导数增益——这里的问题是什么?您可以快速地编写一些C代码,将其与我们的机器原型连接起来,并开始调整这些收益。
好吧,事实证明,当你这样做时有多种挑战。有时,你的植物模型是不稳定的。因此,如果您开始在原型上调整它,整个闭环系统可能会变得不稳定。这可能会损坏您的植物。
可能存在称为Integrator Funsup的危险情况。而且您需要逻辑来防止该逻辑。我稍后会在一点点详细说明。
很多时候,当人们调整PID控制器时,他们会使用一些植物模型来作为PID控制器增益。但很多时候,这种植物模型是不可用的。在那种情况下我们该怎么做?
如果需要在微处理器上实现PID控制器,特别是如果该微处理器具有定点架构,则需要考虑采样和参数的离散化。这也是一个挑战。
我们看到的例子是一个简单的单输入单输出系统。但是很多系统都有多个输入和多个输出。我们也需要有能力处理这些问题。最后,即使你处理的是单输入单输出系统,植物的动态可以从一种操作条件到另一种会发生很大的变化。这些只是人们在设计和实现PID控制器时必须面对的一些挑战。
现在,我想回到我们开始的例子,发动机控制系统,并介绍为该系统设计PID控制器的工作流程,在此过程中,强调我们如何帮助您解决其中的一些挑战。现在让我们切换到MATLAB。让我们打开我们将要使用的示例。
因此,我们将为我们的发动机系统创建PID控制器的模型。我们还没有PID控制器,但我们有发动机子系统。让我们在内部导航。
这里有多个分量。如果你深入研究其中一个,你会发现我们在这里实现的方程是非线性的。这是另一个非线性方程。这里还有一个。所以在这种情况下,植物动态是非常非线性的。
在这个顶级模型中,我们有引擎子系统。我们有速度参考块。我们有一个求和模块,用于计算参考速度和测量速度之间的误差信号。
现在,让我们继续前进,添加PID控制器块。此外,我们还会采用了分离式PID控制器。让我们将这个块连接到我们的系统的其余部分。
让我们不要为此块打开块对话框。这里有很多选择。我不会解释所有人。这里有一个非常好的帮助文件,您可以阅读以获取有关此PID控制器块中所有不同选项的详细信息。
但我在这里只强调一些观点。您可以选择要实现的控制器类型:PI、PD、比例型、积分型或PID。您可以选择表单。我们提供了两种不同的表单供您选择。当你在块对话框中更改表单或其他任何更改时,你会看到控制器的表单得到更新。
当然,您可以指定采样时间。设为0.01秒。单击Apply。
我们可以改变控制器的增益。我们稍后会讨论这个问题。在高级选项卡中,我们可以指定输出饱和度。如果我们想的话,我们可以启动反收尘保护。我们稍后再讨论这些。
当我们制作这些更改时,如果我们希望看到在这里的引擎盖下实现的内容,我们始终可以右键单击此块,转到蒙版菜单,并在面具下查看。我们将看到我们使用基本Simulink块为此块实施的逻辑,例如增益,过滤器,集成商和求和块。万博1manbetx所以它永远不会是一个黑匣子。你总是看到这里实施的内容。
让我们回去这里。让我们在这里保持简单的设置,PID控制器。让我们跳过并行形式。让我们关闭输出命令上的限制。好吧。
而不是使用1,1,0和100的默认增益,让我们参加此系统。这个参数的kp,ki,kd。这些参数已经设置为完全是我们在Matlab中看到的这些值。我会在一秒钟内告诉你。让我们点击在此处申请。
并让我们还改变PID控制器中积分器的初始值,以便PID控制器块的初始输出等于9.并且从发动机子系统播放,我知道您需要大约9的节气门请求输出速度约为2,000rpm。所以让我们点击在此处申请。
而只是为了说服你,你开始使用默认的增益值,让我们去MATLAB。在这里,你看到这些参数设置为默认值的值。
让我们切换回Simulink模型。万博1manbetx现在让我们运行模拟。如果我们查看结果,我们会看到响应不稳定。这并不奇怪,因为我们还没有改变增值。
所以现在让我们谈谈你如何去调整增益值。我们可以通过进入块对话框并按下调谐按钮来执行此操作。这启动了一个名为PID调谐器的工具,这需要Simulink控制设计。万博1manbetx此工具在时间0线性化非线性Simulink模型,并打开您在此处查万博1manbetx看的PID调谐器应用程序。
并使用工具从线性Simulink模型获得的传递函数,它会自动提出PID控制器增益以提供不错的参考跟踪。万博1manbetx您可以在此处查看PID参数,增益值和其他特性。如果我们喜欢设计,我们可以简单地更新块参数。
块对话框中没有任何更改。但是如果你用MATLAB,我们看到增益值已经更新了。
让我们回到我们的Simulink模型。万博1manbetx现在让我们重新运行模拟。让我们看看结果。
现在我们看到我们摆脱了这种不稳定。我们有良好和稳定的反应。但也许我们想消除油门指令中的峰值,因为这可能不现实。
所以我们可以返回PID控制器块,让我们拥有的PID调谐器,并且可能会减慢我们系统的响应一点点。实际上,我们可以看一下我们可以查看控制器努力的另一个情节,所以我们指挥多少油门,看看它是如何变化的。所以随着默认的设计,我们在这里看到一穗。但是,如果我们继续慢一点,我们会减少尖峰。
因此,让我们在这里尝试这种设计。更新块再次参数。重新运行模拟。现在,我们有节气门命令没有秒杀出色,稳定的设计。
很快地,你们看到了我们如何使用PID Tuner应用来调整PID控制器增益,以及我们如何微调设计。如果你想使用更严格的调优工具,如波德图或根轨迹,我们有另一个应用程序,叫做控制系统设计师,你可以使用。但我现在不打算展示。
我接下来要讲的是你不知道植物模型的情况。你不知道描述你的工厂动态的方程式。但是你可能有机会接触到一个原型或者实际的过程或者你想要控制的工厂。
所以让我们假装我们不知道发动机的等式,但我们能够访问实际引擎。我们可以命令输入到发动机,如这里的油门请求,并测量输出。在这种情况下,我们正在进行开路测试,在那里我们只是命令油门,以2秒钟从大约8.9到约9.4的步骤方式更改。但我们也可以运行相同的初步控制器,也许我们想要改进的初步控制器,因此我们可以指挥速度参考变更对该控制器并测量产生的节流阀和从发动机的结果速度。
所以我想说的是,我们可以使用的数据不一定是开环数据,但它可能是由于闭环引擎操作而获得的数据。但是一旦测量了工厂的工厂和输出的输入,这里的想法就是我们可以使用此数据来识别来自数据的工厂模型,然后使用此识别的工厂模型调整我们的PID控制器。
所以让我们这样做。让我们打开PID调谐器应用程序。几乎与我们刚刚用于调整我们的Simulink模型中的PID控制器增益相同的应用程序。万博1manbetx但现在我们没有植物模型开始,所以我们需要识别新的工厂模型。
这为识别植物模型开辟了另一个窗口。我们需要首先将IO数据转换为工具。所以在这里你可以选择。您可以带来任意IO数据。但在我们的情况下,我们使用Step Response选项,因为我们所拥有的数据实际上是阶跃响应。
输出信号存储在可变输出中。我们知道的输入信号的振幅是0.5。它大约从8.9开始,或者实际上我们有输入信号,所以我们可以从那里得到初始值。我们知道这一步大约发生在2秒钟。我们的时间向量从0开始,组装时间为1/100秒。
让我们把数据带进来。现在我们看到绿色的曲线,这是测量的引擎速度,蓝色的曲线,这是一个模型的输出,我们试图把它输入到绿色的线。让我们看看输入数据,这是我们命令引擎的一个步骤,节气门步骤。
好吧。因此,要获得更好的契合,让我们在测量数据中删除偏移量。因此,我们将在2,000时启动此引擎速度,我们将在0中启动。所以我们将转到Preprocess,删除偏移量。让我们从所有信号中删除偏移量。我们删除初始信号值。
所以我们会更新这个问题。所以这是我们的新数据。我们将关闭此对话框。
这是在绿线中删除了偏移量的数据。我们现在正试着用一阶模型来拟合这个数据,你可以看到这里的公式。我们可以交互调整控制中的两个参数,稳态增益和该模型的时间常数。
我们可以尝试不同的结构;例如;一对欠阻尼极点。让我们选择一个不同的模型。我们可以交互地对其进行调整,或者我们可以让工具自动提出最佳参数值,以提供最优的适合度。
因此,如果我们这样做,那么在这里,这种工具就可以在这里拿出一个非常合适的。在右下角,您可以看到它适合的工厂的参数。现在让我们说我们对这个植物模型很满意,所以我们可以使用它并关闭此对话框。
现在我们在调整我们的PID控制器针对我们刚确定的这个模型。让我们选择带微分滤波器的PID控制器作为我们想要使用的PID控制器类型。我们看到我们现在有很好的阶跃响应稳态误差为零。我们可以让它快一点。一旦我们喜欢这个设计,我们可以导出它并将它保存在MATLAB工作空间变量c中。
现在,如果我们回到MATLAB,我们有一个变量c。如果你看它是什么,它是一个连续时间PID控制器用这些增益值。我们可以通过键入c.kp,c.ki访问这些增益值,等等等等。所以,现在我们可以把这些收益并把它们纳入在Simulink PID控制器块,用于进一步实施。万博1manbetx
因此,要总结,在本节中,我们看到了两种不同的方式整定PID控制器的,当你有描述工厂的动力学方程在Simulink的工厂模型的一种方式,而另一种方式,当你不知道的公式万博1manbetx但可使用测量的输入/输出数据。在这种情况下,您可以使用系统辨识工具箱集成到PID调节器应用程序首先确定从数据的工厂模型,然后使用该标识的工厂模式调整PID控制器的你 - 收益的参数。
所以让我们现在谈谈实施。这与我们刚刚合作的模型很多。但在这里,我们添加了零订单整洁的书来表示A到D转换。我们将我们的PID控制器放在这里的子系统内。我们还添加了数据类型转换块。
所以现在我们想做的就是将这个浮点转换为固定点设计的固定点设计,然后在固定点处理器上实现,然后生成代码。所以让我们首先运行模拟。所以让我们说这是我们开始工作的设计。您现在看到所有信号都是双打。
现在为了将这个设计扩展到固定点,我们将推出固定点工具,它和我们的产品一起发布,叫做固定点设计师。好吧。我们已经得到了刚才模拟的结果。因此,您将清除所有结果,并首先运行。我们将从用双精度覆盖控制器子系统中的所有参数开始。这就是这个设置的作用。
我们将运行模拟。我们将以我们命名为双倍的运行节省模拟结果。所以让我们这样做。让我们模拟我们的模型。
结果显示在这里。如你所见,对于PID控制器块中的所有参数,我们都使用双重数据类型。对于子系统内的所有信号,我们在模拟过程中获取最小值和最大值。
现在我们要做的是使用那些分和仿真过程中捕获最大值自动拿出定点定标。为了做到这一点,我们将向下滚动。而在这里,我们将配置建议部分长度的选项。我们要使用固定16位字长。而对于固定字长,我们希望该工具提出了部分的长度。因此,我们将留在这个选择。
我们要用于浮点信号的默认数据类型将与嵌入式硬件整数相同。我会在这意味着什么时解释。我们将希望使用带有一些安全裕度的模拟MIN / MAX数据作为固定点缩放。
现在让我们回到一个模型。在模型中,我所做的是在模型配置参数设置中,有一个节点叫做硬件实现。这里,我已经指定了我们想要在一个通用的16位嵌入式处理器上实现我们的控制器。我可以选一个特定的。但在这里,我想保留通用架构。
这里重要的是,这种方式,定点工具,当我们说默认数据类型是嵌入式硬件整数时,它知道我们的目标是16位处理器。有了这些,我们用这个工具来求分数长度。点击这里。
工具继续,然后提出你们在这里看到的建议。让我们继续对所有参数应用建议的分数长度。
让我们现在回到我们的Simulink模型。万博1manbetx打开PID控制器块并查看数据类型步骤。所以现在你看到这里的所有数据类型都是具有16位的固定点。
现在我们要做的是确保我们刚刚提出的定点缩放将使我们的结果接近我们的浮点设计。为此,我们将使用本地设置,即我们刚才看到的定点缩放,而不是像我们首先做的那样将所有数据类型重写为double。我们将把运行的结果保存到一个名为Fixed Point的运行中。
因此,让我们应用这些更改。让我们运行模拟。
我们看到我们现在有两个运行,定点和双。编译DT栏显示你在模拟过程中使用的数据类型。所以你看,我们使用的固定点对于固定点运行和双数据类型相对于初始运行。
现在让我们看看错误信号。让我向您展示模型中的位置。这是这个信号在这里。你看到我们正在记录它。这是参考设定点,参考速度和测量速度之间的差异。
对于信号,我们将比较运行。在上面这里,实际上有两个情节。他们看起来很接近。
但如果你放大一点,你会看到有区别。这就是你实际看到的。上面图中两条线的区别就在下面图中。我缩小一下。
这里需要注意的有趣的事情是在浮点数和定点数之间稳态值是不同的。放大这里可以看到。记住,这是一个定点缩放的模拟结果。所以定点缩放的结果,稳态误差不再是零。这是有趣的。这告诉你也许你需要在缩放单元格上多做一些工作,或者忍受这个非零稳态误差,或者去处理一些流程服务。
但这是你作为工程师的选择。这里的重要点是向您展示如何使用此固定点工具快速执行固定点缩放,如此所示。
现在,当我们这样做的时候,下一步是生成代码。有多个讨论如何配置代码生成的网络研讨会。我将快速地向你们展示如何从这个PID控制器块生成代码。同样,在现实生活中,你的控制器要比一个简单的PID控制器块复杂得多。但这个想法还是适用的。
比方说,构建一个子系统。我配置了这个模型来生成高效的代码,优化了ROM和RAM的效率。我会设置控制器增益参数,可调参数。我们会继续生成代码。
下面是生成的代码。你可以看到我们的收益。您可以在这里看到一些初始化代码。实现PID控制器的算法在这里。
那么你用这个生成的代码怎么办?当然,你可以把它放在处理器上并开始测试等等。但我非常迅速突出显示您称为循环测试的选项。这里的想法是拍摄此生成的代码并在Simulink中使用工厂模型在主机上测试它,以确保生成的代码为您在Simulink模型中的块完全相同。万博1manbetx
为了做到这一点,我们再次转到代码生成菜单。但是现在我们选择一个选项来生成s函数。同样,我们可以使这些参数可调。我们选择这个选项,Create Software-in-the-Loop块,然后单击Build。
同样,该工具再次为我们生成代码。但现在它还创建了一个块,你会暂时看到这里。此块被称为循环软件,SIL。所以让我们从这个模型中取出它,让我们将其复制到我们的原始模型。
让我们删除这个PID控制器块,我们设计并没有固定点缩放的,而是用软件在环仿真块替换它。如果我运行模拟,我会得到完全相同的结果,我们将在第二个看到的。
但是,如果我现在看在块掩码下,它不是我们之前看到的PID控制器块。我们实际上在这里调用生成的代码。所以,我们刚刚确保这个生成的代码为我们提供了与我们设计的PID控制器块完全相同的结果。
这段代码正在主机上运行。所以下一步是在处理器上测试它。但这超出了我今天要讨论的范围。
好吧。所以现在我们已经谈到了设计控制器,调整其收益和实现它,执行固定点缩放和生成代码。因此,让我们关闭这种模型,然后谈谈植物动态从一个操作条件转换到另一个运行条件时的情况。在这种情况下,它实际上会改变一点,从2000 pm到6,000 rpm。
让我打开脚本并向您展示。在这个脚本中,我们将要工作,让我在这里找到一个你在这里看到的开环引擎模型。所以我们将把这个模型从油门输入线性化到测量的速度输出。我们将使用的工具称为Simulink控件设计。这个工具有一个很好的图形应用程序,你可以使用它来线性化模型,或者你可以使用我在这里选择用于批处理模式线性化的编程工作流。万博1manbetx
在脚本中,我们将线性化我们的工厂模型,速度点从1400到6000,步长为200。使用来自Simulink Control万博1manbetx Design的命令,例如findop和linearize,我们将在所有这些不同的操作点上线性化模型,我们将在Bode图中绘制结果。
这个计算需要一秒钟。一旦创建了博德图,你可以看到这里实际上有24条不同的线,对应于24种不同条件下的引擎动力学,从14000转/分到6000转/分。你们可以看到,在发动机动力学中有很大的变化。我们刚刚绘制的结果变量叫做sys。
如果我在我的命令窗口中查看它,我会看到这是一个24个传输函数的数组。现在我想做的是所有这些24个传输功能的PID控制器。我可以再次使用PID调谐器应用程序或BODE绘图等工具来单独进行,或控制系统设计器,或者可以是根轨迹图。
但也有程序化的方法。在控制系统工具箱中有一个叫做PID调节的函数。所以我们要做的是用这个24个传递函数的数组设计一组24个PID控制器来得到闭环带宽为10弧度每秒相位裕度为70度只用两行代码。让我们执行这个单元格。好吧。如果我们看一下计算的结果,我们看到我们有一个24个PID控制器的数组我们刚刚创建的。
让我们看看如何将这些控制器的增益变化的速度。好吧。如此反复,速度变为1,400 RPM到6000 RPM。而且我们看到,增益都改变了不少。在这里,我们只是希望在比例和积分增益。
让我们计算和绘制应用于我们24个线性工厂模型的24个PID控制器的闭环步骤响应。所以我们看到这看起来相当不错。
当然,下一步是在Simulink中实现这24个PID控制器。万博1manbetx这称为增益调度。所以,我会打开一个不同的模型。好吧。我想告诉你的是,我们再次,我们有发动机子系统。我们有我们的PID块。
但是现在,在这个PID块中,我们选择了Source设置为External的这个选项。当我们这样做时,block获得额外的PID增益。我们现在可以使用查找表块提供这些。你可以看到我们在这里测量速度信号。我们把速度信号传递给查找块,查找表块。这些查找表实现了比例增益作为引擎速度的函数。
好吧。这里我们看到了形状。我们的想法是当引擎转速从1400转到6000转时,控制器增益也会相应调整。基本上,当我们改变操作条件时,我们从一个控制器切换到另一个控制器。
在这里,我们有一个信号生成器块,我们可以在其中创建多个测试用例来测试我们的控制器。我这里的第一个测试用例是一系列小步骤,一系列小步骤,以覆盖发动机的整个工作范围。所以让我们运行模拟。让我们看看结果。
好吧。所以在这里我们正在研究参考,品红色信号和实际的发动机速度,这里是蓝色信号。所以我们看到我们在操作范围内具有非常好的参考跟踪。
现在让我们回到模型,在这里运行一个不同的测试用例。现在我们要做几个大步骤,从1400转到6000转再回到1400转。让我们运行这个场景。让我们再看看结果。
这里,参考是这个红色信号。实际的速度是绿色信号。你注意到这里有一些奇怪的行为,这里有一个很大的超调。信号下降到参考值需要一段时间。我们下台的时候也是这样。
这实际上是我在网络研讨会开始时提到的条件叫做积分器收尾。这里发生的是,对于我们选择的增益,参考速度和实际速度之间的误差信号足够大以至于积分器项积分到一个很大的正数。然后需要一段时间当实际速度超过参考值时这个积分项回到0。如你所见,它会对控制器的性能产生负面影响。
我们可以通过增加积分抗饱和逻辑解决这个问题。而在PID控制器块,它真的很容易。您只需选择,它真的很容易做到。你只需选择要应用,单击确定抗饱和方法。现在我们重新运行模拟。
让我们看看结果。让我实际上删除了以前的结果。让我们看看新的。所以现在你看到使用防风逻辑的新运行给我们一个非常好的性能,在向上或向下的路上没有过冲,也没有过冲。
我们还可以通过比较所创建的油门命令来了解到底发生了什么。底部的红线是油门指令在我们没有防风保护的情况下运行。蓝线是在反收卷生产的时候。如你所见,当我们转动防风保护,节气门命令从25的最大值快得多。
网络研讨会的这一部分向您展示了如何在Simulink中快速设计和实现增益调度PID控制器,以及如何防止上盘。万博1manbetx
所以我想在这个网络研讨会中解决的最后一件事是设计了MIMO PID控制器。让我们关闭这个模型。正如我在网络研讨会开始的那样,我们必须处理的许多系统是具有多个输入和多个输出的系统。所以让我打开另一个模型。这是我们在这里看到的柴油发动机的模型。
如果我运行模拟,你会看到信号线上的数字。这些数字表示信号的尺寸。所以我们看到参考信号是两个信号,boost参考和EGR参考。柴油机分系统的输出有升压和EGR两个信号。有两个输出是我们要控制的。我们发动机的两个输入是VGT位置和EGR升力。
所以在这里,我们希望实现MIMO PID控制器来完成双倍控制。如果你看内部,你会看到我们有一个积分增益ki,这是两倍的矩阵;比例增益Kp,双矩阵;和提供干扰适合的增益,也是两倍的矩阵。因此,总共有12个参数我们想要调整。默认情况下,它们被设置为零。
因此,如果我们查看模拟结果,我们就会看到我们根本没有良好的参考跟踪。黄线表示升压和EGR的步骤变化。我们看到洋红色线条,实际信号根本不跟踪参考信号。
因此,为了设计我们的MIMO PID控制器,我们可以使用一种叫做控制系统调谐器的工具。这是一个工具,您可以使用它在Simulink或MATLAB中设计任何类型的MIMO或SISO控制器。其思想是使用基本块在Simulink中指定控制器的体系结构,然后使用此工具调整控制器的参数。万博1manbetx
让我们看看它是如何工作的。让我们在这里转到Tuning选项卡。让我们指定要调优的参数。
在我们的MIMO PID控制器中,我们想要调整这些矩阵。我们会详细说明的。然后在这里,我们可以指定一些调优目标。这里有各种各样的目标。
因此,让我们从步骤命令跟踪开始。我们希望从步进响应输入跟踪,这是我们的参考信号。让我向您展示它们的信号。这是一个升压参考和EGR参考。并且输出信号是柴油发动机子系统的输出和此处的信号,提升和EGR。
我们要问的工具来设计控制器给我们与闭环系统的一阶特性约5的时间常数,并显示步骤的命令,我们是指挥,我们的10升压,和3 EGR,所以你会据此调整幅度。所以,你会在这里键入这些数字,10和3。我们甚至可以要求或许真的比5快一点,所以也许3秒。现在,点击确定。
该工具前进并创建一个调整目标的剧情。洋红色线是我们要求的响应,在对角线术语和零信号上的零点响应的响应,以在通道之间提供最小的交叉耦合。
现在,我们只需按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国家站点没有针对您所在位置的访问进行优化。