主要内容

pidtune

线性被控对象模型的 PID 调节算法

说明

C = pidtune(sys,type) 为被控对象 sys 设计 type 类型的 PID 控制器。如果 type 指定的是单自由度 (1-DOF) PID 控制器,则将针对如图所示的单位反馈环设计该控制器:

如果 type 指定的是二自由度 (2-DOF) PID 控制器,则 pidtune 将按照下图反馈环所示设计 2-DOF 控制器:

pidtune 调节 PID 控制器 C 的参数,以平衡性能(响应时间)与稳健性(稳定裕度)。

示例

C = pidtune(sys,C0) 设计与控制器 C0 具有相同类型和形式的控制器。如果 sysC0 是离散时间模型,则 CC0 采用相同的离散积分器公式。

示例

C = pidtune(___,wc) 指定开环响应的第一个 0dB 增益穿越频率的目标值 wc

示例

C = pidtune(___,opts) 使用其他调节选项,例如目标相位裕度。使用 pidtuneOptions 指定选项集 opts

[C,info] = pidtune(___) 返回数据结构体 info,该结构体包含闭环稳定性、选定的开环增益穿越频率以及实际相位裕度等信息。

示例

示例

全部折叠

此示例说明如何为由下式给出的被控对象设计 PID 控制器:

sys=1(s+1)3.

首先,创建一个被控对象模型,并为其设计简单的 PI 控制器。

sys = zpk([],[-1 -1 -1],1); 
[C_pi,info] = pidtune(sys,'PI')
C_pi =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 1.14, Ki = 0.454
 
Continuous-time PI controller in parallel form.
Model Properties
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 0.5205
           PhaseMargin: 60.0000

C_pi 是表示 PI 控制器的 pid 控制器对象。info 的字段显示,调节算法选择约 0.52 弧度/秒的开环穿越频率。

检查受控系统的闭环阶跃响应(参考跟踪)。

T_pi = feedback(C_pi*sys, 1);
step(T_pi)

MATLAB figure

为了改进响应时间,您可以设置比 pidtune 自动选择的结果(即 0.52)更高的目标穿越频率。将穿越频率提高到 1.0。

[C_pi_fast,info] = pidtune(sys,'PI',1.0)
C_pi_fast =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 2.83, Ki = 0.0495
 
Continuous-time PI controller in parallel form.
Model Properties
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 1
           PhaseMargin: 43.9973

新控制器可实现更高的穿越频率,但代价是相位裕度降低。

比较两个控制器的闭环阶跃响应。

T_pi_fast = feedback(C_pi_fast*sys,1);
step(T_pi,T_pi_fast)

MATLAB figure

axis([0 30 0 1.4])
legend('PI','PI,fast')

性能下降的原因是 PI 控制器没有足够的自由度在 1.0 弧度/秒的穿越频率下实现良好的相位裕度。增加导数作用可以改进响应。

Gc 设计 PIDF 控制器,目标穿越频率为 1.0 弧度/秒。

[C_pidf_fast,info] = pidtune(sys,'PIDF',1.0)

信息字段显示,控制器中的导数作用允许调节算法设计一个更激进的控制器,以实现具有良好相位裕度的目标穿越频率。

比较快速 PI 和 PIDF 控制器的闭环阶跃响应和抗扰。

T_pidf_fast =  feedback(C_pidf_fast*sys,1);
step(T_pi_fast, T_pidf_fast);
axis([0 30 0 1.4]);
legend('PI,fast','PIDF,fast');

您可以将受控系统的输入(负载)抗扰与快速 PI 和 PIDF 控制器进行比较。为此,绘制从被控对象输入到被控对象输出的闭环传递函数的响应。

S_pi_fast = feedback(sys,C_pi_fast);
S_pidf_fast = feedback(sys,C_pidf_fast);
step(S_pi_fast,S_pidf_fast);
axis([0 50 0 0.4]);
legend('PI,fast','PIDF,fast');

上图表明,PIDF 控制器还展示了更快的抗扰能力。

为以下被控对象设计标准型 PID 控制器。

sys=1(s+1)3

要设计标准型控制器,需将标准型控制器作为 pidtuneC0 参量传入。

sys = zpk([],[-1 -1 -1],1);
C0 = pidstd(1,1,1); 
C = pidtune(sys,C0)
C =
 
             1      1          
  Kp * (1 + ---- * --- + Td * s)
             Ti     s          

  with Kp = 2.18, Ti = 2.57, Td = 0.642
 
Continuous-time PID controller in standard form
Model Properties

使用指定方法离散化积分器,进而设计离散时间 PI 控制器。

如果被控对象为离散时间模型,pidtune 会自动返回采用默认前向欧拉积分法的离散时间控制器。要指定其他积分方法,可使用 pidpidstd 创建具有所需积分方法的离散时间控制器。

sys = c2d(tf([1 1],[1 5 6]),0.1);
C0 = pid(1,1,'Ts',0.1,'IFormula','BackwardEuler');  
C = pidtune(sys,C0)
C =
 
             Ts*z 
  Kp + Ki * ------
              z-1 

  with Kp = -0.0658, Ki = 1.32, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time PI controller in parallel form.
Model Properties

C0 作为输入时,pidtune 设计的控制器 C 会与 C0 具有相同的形式、类型和离散化方法。显示结果表明,C 的积分项采用后向欧拉积分法。

指定梯形积分器,并对所得控制器进行比较。

C0_tr = pid(1,1,'Ts',0.1,'IFormula','Trapezoidal');
Ctr = pidtune(sys,C0_tr)
Ctr =
 
       Ts*(z+1)
  Ki * --------
       2*(z-1) 

  with Ki = 1.32, Ts = 0.1
 
Sample time: 0.1 seconds
Discrete-time I-only controller.
Model Properties

为以下传递函数表示的被控对象设计二自由度 PID 控制器:

G(s)=1s2+0.5s+0.1.

使用目标带宽 1.5 弧度/秒。

wc = 1.5;
G = tf(1,[1 0.5 0.1]);
C2 = pidtune(G,'PID2',wc)
C2 =
 
                       1              
  u = Kp (b*r-y) + Ki --- (r-y) + Kd*s (c*r-y)
                       s              

  with Kp = 1.26, Ki = 0.255, Kd = 1.38, b = 0.665, c = 0
 
Continuous-time 2-DOF PID controller in parallel form.
Model Properties

使用类型 'PID2' 会导致 pidtune 生成一个二自由度控制器,表示为 pid2 对象。显示画面确认了此结果。显示画面还说明 pidtune 可调节所有控制器系数,包括设定值权重 bc,以平衡性能和稳健性。

输入参数

全部折叠

用于控制器设计的被控对象的单输入单输出动态系统模型sys 可以是:

  • 任何类型的 SISO 动态系统模型,包括数值 LTI 模型和辨识模型。如果 sys 是可调模型或不确定模型,pidtune 会基于 sys 的当前值或标称值设计控制器。

  • 连续时间或离散时间模型。

  • 稳定、不稳定或积分型系统。但是,含不稳定极点的被控对象可能无法通过 PID 控制实现稳定。

  • 包含任何类型时滞的模型。但是,时滞较长的被控对象可能无法通过 PID 控制达到足够的性能。

  • 被控对象模型数组。如果 sys 是数组,pidtune 会为数组中的每个被控对象设计单独的控制器。

如果被控对象具有不稳定极点,且 sys 属于以下类型之一:

  • frd 模型

  • 具有内部时滞且无法转换为 I/O 延迟的 ss 模型

则必须使用 pidtuneOptions 指定被控对象中不稳定极点的数量(如果有)。

要设计的控制器的控制器类型,指定为字符向量。术语控制器类型指控制器动作中包含的项。例如,PI 控制器仅包含比例项和积分项,而 PIDF 控制器包含比例项、积分项和滤波导数项。type 的可选值汇总如下。有关这些控制器类型的更多详细信息,请参阅PID Controller Types for Tuning

单自由度控制器

  • 'P' - 纯比例

  • 'I' - 纯积分

  • 'PI' - 比例和积分

  • 'PD' - 比例和导数

  • 'PDF' - 比例和导数,其中导数项带有一阶滤波器

  • 'PID' - 比例、积分和导数

  • 'PIDF' - 比例、积分和导数,其中导数项带有一阶滤波器

二自由度控制器

  • 'PI2' - 二自由度比例和积分

  • 'PD2' - 二自由度比例和导数

  • 'PDF2' - 二自由度比例和导数,其中导数项带有一阶滤波器

  • 'PID2' - 二自由度比例、积分和导数

  • 'PIDF2' - 二自由度比例、积分和导数,其中导数项带有一阶滤波器

有关二自由度 PID 控制器的详细信息,请参阅Two-Degree-of-Freedom PID Controllers

具有固定设定点权重的二自由度控制器

  • 'I-PD' - 二自由度 PID,其中 b = 0、c = 0

  • 'I-PDF' - 二自由度 PIDF,其中 b = 0、c = 0

  • 'ID-P' - 二自由度 PID,其中 b = 0、c = 1

  • 'IDF-P' - 二自由度 PIDF,其中 b = 0、c = 1

  • 'PI-D' - 二自由度 PID,其中 b = 1、c = 0

  • 'PI-DF' - 二自由度 PIDF,其中 b = 1、c = 0

有关固定设定点权重二自由度 PID 控制器的更多详细信息,请参阅PID Controller Types for Tuning

控制器形式

当您使用 type 输入时,pidtune 会设计并联型(pidpid2)控制器。如果要设计标准型(pidstdpidstd2)控制器,请改用输入 C0 而非 type

如果 sys 是采样时间为 Ts 的离散时间模型,pidtune 会设计具有相同 Ts 的离散时间控制器。控制器的积分和导数作用均采用 ForwardEuler 离散积分器公式。如果要设计采用不同离散积分器公式的控制器,请改用输入 C0 而非 type

有关 PID 控制器形式和公式的详细信息,请参阅:

所设计控制器的 PID 参数设置属性,指定为 pidpidstdpid2pidstd2 对象。如果提供 C0pidtune 会:

  • 设计与 C0 类型相同的控制器。

  • 如果 C0pid 控制器,返回 pid 控制器。

  • 如果 C0pidstd 控制器,返回 pidstd 控制器。

  • 如果 C0pid2 控制器,返回二自由度 pid2 控制器。

  • 如果 C0pidstd2 控制器,返回二自由度 pidstd2 控制器。

  • 如果 sys 是离散时间系统,返回与 C0 具有相同 IformulaDformula 值的控制器。有关 IformulaDformula 的详细信息,请参阅 pidpid2pidstdpidstd2 参考页。

调节后开环响应的 0dB 增益穿越频率的目标值。以弧度/TimeUnit 为单位指定 wc,其中 TimeUnitsys 的时间单位。穿越频率 wc 大致决定控制带宽。闭环响应时间约为 1/wc

增大 wc 可加快响应速度。减小 wc 可提高稳定性。如果省略 wcpidtune 会根据被控对象动态特性自动选择一个在响应和稳定性之间取得平衡的值。

指定 pidtune 设计算法的其他调节选项(如目标相位裕度或设计侧重点)的选项集。使用 pidtuneOptions 创建 opts

输出参量

全部折叠

sys 设计的控制器。如果 sys 是线性模型数组,pidtune 会为每个线性模型设计控制器并返回一个 PID 控制器数组。

控制器形式:

  • 如果 pidtune 的第二个参量是 typeCpidpid2 控制器。

  • 如果 pidtune 的第二个参量是 C0

    • 如果 C0pid 对象,Cpid 控制器。

    • 如果 C0pidstd 对象,Cpidstd 控制器。

    • 如果 C0pid2 对象,Cpid2 控制器。

    • 如果 C0pidstd2 对象,Cpidstd2 控制器。

控制器类型:

  • 如果 pidtune 的第二个参量是 typeC 通常具有指定类型。

  • 如果 pidtune 的第二个参量是 C0C 通常与 C0 类型相同。

但在任一情况下,如果算法能用比 typeC0 指定的更低阶控制器实现足够的性能和稳健性,pidtune 会返回动作项少于指定的 C。例如,即使 type'PIDF'C 也可能是 PI 控制器。

时域:

  • Csys 具有相同时域。

  • 如果 sys 是离散时间模型,Csys 具有相同采样时间。

  • 如果指定了 C0CC0 具有相同的 IformulaDformula。如果未指定 C0IformulaDformula 均为 Forward Euler。有关 IformulaDformula 的详细信息,请参阅 pidpid2pidstdpidstd2 参考页。

如果指定了 C0C 还会从 C0 获取 InputNameOutputName 等模型属性。有关模型属性的详细信息,请参阅各类型动态系统模型的参考页。

包含有关调节后 PID 环路的性能和稳健性信息的数据结构体。info 的字段包括:

  • Stable - 表示闭环稳定性的布尔值。如果闭环稳定,Stable 为 1,否则为 0。

  • CrossoverFrequency - 开环系统 C*sys 的第一个 0dB 穿越频率,以 rad/TimeUnit 为单位,其中 TimeUnitsysTimeUnit 属性中指定的时间单位。

  • PhaseMargin - 调节后 PID 环路的相位裕度,以度为单位。

如果 sys 是被控对象模型数组,则 info 是包含每个调节后 PID 环路相关信息的数据结构体数组。

提示

  • 默认情况下,带有 type 输入的 pidtune 会返回并联型 pid 控制器。要设计标准型控制器,请使用 pidstd 控制器作为输入参量 C0。有关并联型和标准型控制器的详细信息,请参阅 pidpidstd 参考页。

  • 有关实时编辑器中的交互式 PID 调节,请参阅调节 PID 控制器实时编辑器任务。此任务可以交互方式设计 PID 控制器,并为实时脚本自动生成 MATLAB® 代码。

算法

有关 MathWorks® PID 调节算法的信息,请参阅 PID 调节算法

替代功能

参考

[1] Åström, Karl J., and Tore Hägglund. Advanced PID Control. Research Triangle Park, NC: ISA-The Instrumentation, Systems, and Automation Society, 2006.

版本历史记录

在 R2010b 中推出