如何使用Matlab的PID控制器

664 阅读8分钟

使用Matlab的PID控制器

控制器是一个系统的响应修改器。这些系统可能是一个机器人控制,甚至是一个工厂。在开环情况下,系统的控制系统受输入的影响而产生输出信号。大多数情况下,在这种开环情况下,由于系统不够智能,所需的性能无法得到满足。

由于所有工厂都需要一定的输出,控制反馈被添加到开环系统中。这是为了感知工厂的输出,然后将其反馈给系统以进行必要的调整。

在反馈系统中,有一个参考信号,是期望值或最终目标。控制器的主要目的是将误差移至零,这意味着所有的要求都得到满足。误差是当前测量值和预期输出之间的差异。

PID控制器是一个首字母缩写,代表比例积分衍生。这些术语显示了在将它们相加产生控制器输出之前,是如何处理误差项的。

误差是通过输入乘以K_pK\_p作为比例路径,乘以K_iK\_i然后积分作为积分路径,乘以K_dK\_d然后微分作为导数路径来设置的。这三个K是增益,可以在有特殊要求的工厂中调整。

在本教程中,我们将看到如何使用Matlab创建一个PID控制器以及改变参数K_pK\_pK_iK\_iK_dK\_d的各种效果。这是为了让我们更好地理解控制器的构造和功能。

先决条件

  1. 安装了[Matlab]。
  2. 对[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] 。这意味着分母是s2s^2 + 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

执行上面的代码可以得到一个阶跃函数的图。

请注意,在工作区,我们看到指定的传递函数。

The step function

得到的传递函数图

阶跃响应看起来像一个平滑的阶跃函数。这意味着系统正在响应。H 我们在反馈1 ,但系统上升到0.5 ,如图所示(y轴)。这意味着我们得到了一些稳态误差。

当我们也看一下时基(x轴),它需要大约5秒的时间才能最终停止接近其稳态值,这是相对较长的收敛。误差可以被纠正,但我们首先初始化常数(K_pK\_pK_iK\_iK_dK\_d)。

这些变量将帮助我们获得一个稳态系统。

Kp = 1;   % proportional constant
Ki = 0;   % integral constant
Kd = 0;   % derivative constant

在这一点上,我们创建了一个控制器,它用Gc 表示。我们将使用PID 函数并传递K_pK\_pK_iK\_iK_dK\_d

这意味着我们通过传递常数来创建一个PID控制器。

Gc = pid(Kp,Ki,Kd); % the contoller.

当我们看变量时,K_iK\_iK_dK\_d都是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),然后加上步长,得到步长响应。

基本上,做完这些并重新运行程序后,我们会有两张图,即没有控制器的系统的阶跃响应和有控制器的系统的阶跃响应。

现在,由于带控制器的系统的阶跃响应的比例增益(K_pK\_p)为1,所以这两幅图将是相同的。

plot of the step responses 阶跃响应图

我们现在来看看改变P、I和D的效果,因为我们做了一个阶跃响应,但它们的传递函数是相同的。现在我们将改变PID控制器的常数。

让我们从K_pK\_p开始。

具体操作如下。

  • 突出显示Kp变量。
  • 将鼠标悬停在该变量上,右键单击。
  • 在新窗口中,选择增量值和运行部分。

我们将有一个新的界面,如下图所示。

changing the PID constant Kp 改变数值的界面

我们将有一个新的工具来改变Kp值并在改变后自动运行程序。K_pK\_p的初始值是1,但我们将通过点击工具上的加号将其改为2。因为图形一直在变化,我们看不到效果,所以我们将在步骤M之后立即添加hold on 函数。这是为了能够看到改变数值后的每个图形。

当我们在加入hold on 函数后运行程序时,我们会有这样的结果。

step response when value is changed 改变K_pK\_p时的步骤反应图

在上面的图片中,我们得到了一个有反馈的植物,这是橙色的情节,它在大约5秒内渐进到0.5。红色图是一个较低的代码,我们把控制器放在其中。

我们所做的只是把一个峰值控制器和峰值控制器放在一起,使系统做它要做的事情,但速度更快,并改变稳态误差。

为了使稳态在我们的图中可见,我们遵循以下程序。

  • 右键单击图中的任何一点。
  • 点击特征。
  • 点击稳态。

image showing the steady states 显示稳态的图片

当你把鼠标悬停在这些点上时,我们可以看到,当时间到了无穷大时,蓝色的图会变成0.5,红色的图会变成0.667。我们希望红色图的稳态,也就是控制器的稳态变成1。

这意味着我们得到了一些稳态误差。为了纠正这一点,我们将增加K_pK\_p,直到达到它。

注意,每次我们增加K_pK\_p,程序中的数值就会发生变化。

How Kp changes 改变K_pK\_p值的效果

Final plot of the Kp and the initial 具有所需输出响应的最终图

我们现在将增加K_dK\_d。就像傅里叶数列中的脉冲序列有无限个项的状态一样,如果你不通过接近无限的高项,那么你的输出边缘就会出现振铃。

这意味着,我们需要允许更高的频率进入控制器,将振荡变成一个更方正的边缘(单位响应)。这些高频率是通过增加K_dK\_d进入系统的。

How the response changes with change in K_d 改变K_dK\_d值的效果

plot of final response and initial response 与所需输出响应的最终图

K_dK\_d为8,K_pK\_p为24时,系统稳定下来。当我们看阶跃响应时,我们的控制响应到了0.96,但我们要求它在1,因为它是一个单位响应。我们不会得到1,除非我们进行一些整合。这意味着我们也将增加K_iK\_i值。

我们将增加K_iK\_i。我们观察到,当我们把K_iK\_i增加到2时,阶跃响应会变成1。由于这是它的要求点,我们将把它留在那里。

How response changes with changes in K_i 改变K_iK\_i的效果

plot of final response and initial response 带有所需输出响应的最终图

我们的PID控制器是K_pK\_pK_iK\_iK_dK\_d的最终值。我们现在用PID函数来得到Gc,这就是我们的控制器。当我们在命令窗口中输入Gc ,我们就可以得到传递函数。

transfer function

下面是上述控制的完整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成为分析系统响应的特殊工具。