使用Matlab的PID控制器
控制器是一个系统的响应修改器。这些系统可能是一个机器人控制,甚至是一个工厂。在开环情况下,系统的控制系统受输入的影响而产生输出信号。大多数情况下,在这种开环情况下,由于系统不够智能,所需的性能无法得到满足。
由于所有工厂都需要一定的输出,控制反馈被添加到开环系统中。这是为了感知工厂的输出,然后将其反馈给系统以进行必要的调整。
在反馈系统中,有一个参考信号,是期望值或最终目标。控制器的主要目的是将误差移至零,这意味着所有的要求都得到满足。误差是当前测量值和预期输出之间的差异。
PID控制器是一个首字母缩写,代表比例积分衍生。这些术语显示了在将它们相加产生控制器输出之前,是如何处理误差项的。
误差是通过输入乘以作为比例路径,乘以然后积分作为积分路径,乘以然后微分作为导数路径来设置的。这三个K是增益,可以在有特殊要求的工厂中调整。
在本教程中,我们将看到如何使用Matlab创建一个PID控制器以及改变参数、和的各种效果。这是为了让我们更好地理解控制器的构造和功能。
先决条件
- 安装了[Matlab]。
- 对[Matlab]语言的正确理解。
我们首先需要清除变量和命令窗口。然后设置传递函数的变量。
传递函数是一个输入信号与控制器输出信号的比率。参考输入通过传递函数运行,在受控输出响应中产生输出。
下面是设置传递函数变量的代码。
clear all
clc
% The transfer function variables.
% It has both the numerator and denominator values.
num = [ 1 ];
den = [ 1 3 1];
在上面的传递函数变量中,分子设置为[1] ,分母设置为[1 3 1] 。这意味着分母是 + 3s + 1。
在得到传递函数变量后,我们要通过将传递变量传递给传递函数来设置工厂。
% We denote the transfer function as tf.
Gp = tf(num, den); % setting the transfer function.
H = 1; % feedback transfer function. It shows the expected
% unit response.
为了保持简单,反馈传递函数被设置为1 ,但如果有需要,所有这些都可以在以后修改。
我们将设置控制器。在设置PID控制器时,我们设置了一个变量m ,它将给出工厂的反馈和传递函数。
m = feedback(Gp); %feedback of the plant.
实际上,上面的代码所做的是,它使用feedback 函数作为前向传递函数,H 作为反馈。你将做反馈传递函数m 的阶跃响应。
阶跃响应是系统输出的时间行为,当它在短时间内从零变为一。
我们使用step 函数做阶跃响应,如下所示。
step(m) %step response
执行上面的代码可以得到一个阶跃函数的图。
请注意,在工作区,我们看到指定的传递函数。

得到的传递函数图
阶跃响应看起来像一个平滑的阶跃函数。这意味着系统正在响应。H 我们在反馈1 ,但系统上升到0.5 ,如图所示(y轴)。这意味着我们得到了一些稳态误差。
当我们也看一下时基(x轴),它需要大约5秒的时间才能最终停止接近其稳态值,这是相对较长的收敛。误差可以被纠正,但我们首先初始化常数(、和)。
这些变量将帮助我们获得一个稳态系统。
Kp = 1; % proportional constant
Ki = 0; % integral constant
Kd = 0; % derivative constant
在这一点上,我们创建了一个控制器,它用Gc 表示。我们将使用PID 函数并传递、和。
这意味着我们通过传递常数来创建一个PID控制器。
Gc = pid(Kp,Ki,Kd); % the contoller.
当我们看变量时,和都是0。这意味着我们有一个PID控制器,要通过1 。
创建另一个闭环传递函数(Mc)。这将是带有控制的传递函数,因为使用常数进行控制的控制器和预期的单位响应(H)都在这里传递。
Mc = feedback(Gc*Gp, H); %transfer function with control.
step(Mc) %step response of the transfer function with control.
grid on
在这种情况下,前向路径是控制器(Gc)、工厂(Gp)和H的乘积,然后获得反馈。我们首先运行程序,得到传递函数(Mc),然后加上步长,得到步长响应。
基本上,做完这些并重新运行程序后,我们会有两张图,即没有控制器的系统的阶跃响应和有控制器的系统的阶跃响应。
现在,由于带控制器的系统的阶跃响应的比例增益()为1,所以这两幅图将是相同的。
阶跃响应图
我们现在来看看改变P、I和D的效果,因为我们做了一个阶跃响应,但它们的传递函数是相同的。现在我们将改变PID控制器的常数。
让我们从开始。
具体操作如下。
- 突出显示Kp变量。
- 将鼠标悬停在该变量上,右键单击。
- 在新窗口中,选择增量值和运行部分。
我们将有一个新的界面,如下图所示。
改变数值的界面
我们将有一个新的工具来改变Kp值并在改变后自动运行程序。的初始值是1,但我们将通过点击工具上的加号将其改为2。因为图形一直在变化,我们看不到效果,所以我们将在步骤M之后立即添加hold on 函数。这是为了能够看到改变数值后的每个图形。
当我们在加入hold on 函数后运行程序时,我们会有这样的结果。
改变时的步骤反应图
在上面的图片中,我们得到了一个有反馈的植物,这是橙色的情节,它在大约5秒内渐进到0.5。红色图是一个较低的代码,我们把控制器放在其中。
我们所做的只是把一个峰值控制器和峰值控制器放在一起,使系统做它要做的事情,但速度更快,并改变稳态误差。
为了使稳态在我们的图中可见,我们遵循以下程序。
- 右键单击图中的任何一点。
- 点击特征。
- 点击稳态。
显示稳态的图片
当你把鼠标悬停在这些点上时,我们可以看到,当时间到了无穷大时,蓝色的图会变成0.5,红色的图会变成0.667。我们希望红色图的稳态,也就是控制器的稳态变成1。
这意味着我们得到了一些稳态误差。为了纠正这一点,我们将增加,直到达到它。
注意,每次我们增加,程序中的数值就会发生变化。
改变值的效果
具有所需输出响应的最终图
我们现在将增加。就像傅里叶数列中的脉冲序列有无限个项的状态一样,如果你不通过接近无限的高项,那么你的输出边缘就会出现振铃。
这意味着,我们需要允许更高的频率进入控制器,将振荡变成一个更方正的边缘(单位响应)。这些高频率是通过增加进入系统的。
改变值的效果
与所需输出响应的最终图
当为8,为24时,系统稳定下来。当我们看阶跃响应时,我们的控制响应到了0.96,但我们要求它在1,因为它是一个单位响应。我们不会得到1,除非我们进行一些整合。这意味着我们也将增加值。
我们将增加。我们观察到,当我们把增加到2时,阶跃响应会变成1。由于这是它的要求点,我们将把它留在那里。
改变的效果
带有所需输出响应的最终图
我们的PID控制器是、和的最终值。我们现在用PID函数来得到Gc,这就是我们的控制器。当我们在命令窗口中输入Gc ,我们就可以得到传递函数。

下面是上述控制的完整Matlab代码。
%PID example
clear all
clc
% The transfer function variables. We have the values for the numerator
% and the denominator
num = [ 1 ];
den = [ 1 3 1];
% We denote the transfer function as tf.
Gp = tf(num, den); % setting the transfer function.
H = 1; % feedback transfer function. It shows the expected
% unit response.
M = feedback( Gp, H); %feedback of the plant.
step(M) %step response
hold on
grid on
%%
Kp = 1; % proportional constant
Ki = 0; % integral constant
Kd = 0; % derivative constant
Gc = pid(Kp,Ki,Kd); % the contoller.
Mc = feedback(Gc*Gp, H); %transfer function with control.
step(Mc) %step response of the transfer function with control.
grid on
结论
Matlab有助于分析响应,并可用于获得稳定状态的响应,如前所示。这有助于达到系统的最佳性能,这是系统的要求。
这使得Matlab成为分析系统响应的特殊工具。