pid
并联型 PID 控制器
说明
使用 pid 创建并联型比例-积分-导数 (PID) 控制器模型对象,或将动态系统模型转换为并联型 PID 控制器。
pid 控制器模型对象可以表示连续时间或离散时间的并联型 PID 控制器。
连续时间 -
离散时间 -
其中:
Kp 是比例增益。
Ki 是积分增益。
Kd 是导数增益。
Tf 是一阶导数滤波器时间常数。
IF(z) 是离散时间控制器中用于计算积分的积分器方法。
DF(z) 是离散时间控制器中用于计算导数滤波器的积分器方法。
然后,您可以将此对象与控制架构的其他组件(如被控对象、作动器、传感器)相组合,以表示您的控制系统。有关详细信息,请参阅使用模型对象进行控制系统建模。
您可以通过直接指定控制器参数,或通过将另一种类型的模型(如传递函数模型 tf)转换为 PID 控制器形式,来创建 PID 控制器模型对象。
您还可以使用 pid 来创建广义状态空间 (genss) 模型或不确定状态空间 (uss (Robust Control Toolbox)) 模型。
创建对象
您可以通过以下方式之一获得 pid 控制器模型。
使用
pid函数创建模型。使用
pidtune函数为被控对象模型调节 PID 控制器。在pidtune函数的type参量中指定单自由度 PID 控制器类型,以获得并联型 PID 控制器。例如:sys = zpk([],[-1 -1 -1],1); C = pidtune(sys,'PID');使用以下工具以交互方式为被控对象模型调节 PID 控制器:
调节 PID 控制器实时编辑器任务。
语法
描述
输入参量
比例增益,指定为有限实数值或可调对象。
要创建
pid控制器对象,请使用有限实数标量值。要创建
pid控制器对象数组,请使用有限实数值数组。要创建可调控制器模型,请使用可调参数 (
realp) 或广义矩阵 (genmat)。要创建可调增益调度控制器模型,请使用通过
tunableSurface创建的可调曲面。
积分增益,指定为有限实数值或可调对象。
要创建
pid控制器对象,请使用有限实数标量值。要创建
pid控制器对象数组,请使用有限实数值数组。要创建可调控制器模型,请使用可调参数 (
realp) 或广义矩阵 (genmat)。要创建可调增益调度控制器模型,请使用通过
tunableSurface创建的可调曲面。
导数增益,指定为有限实数值或可调对象。
要创建
pid控制器对象,请使用有限实数标量值。要创建
pid控制器对象数组,请使用有限实数值数组。要创建可调控制器模型,请使用可调参数 (
realp) 或广义矩阵 (genmat)。要创建可调增益调度控制器模型,请使用通过
tunableSurface创建的可调曲面。
一阶导数滤波器的时间常数,指定为有限实数值或可调对象。
要创建
pid控制器对象,请使用有限实数标量值。要创建
pid控制器对象数组,请使用有限实数值数组。要创建可调控制器模型,请使用可调参数 (
realp) 或广义矩阵 (genmat)。要创建可调增益调度控制器模型,请使用通过
tunableSurface创建的可调曲面。
采样时间,指定为:
0(适用于连续时间系统)。表示离散时间系统采样周期的正标量。以
TimeUnit属性指定的时间单位指定Ts。
在 pid 控制器数组中,所有控制器应用相同的 Ts。
PID 控制器模型不支持未指定的采样时间 (Ts = -1)。
离散化控制器的离散积分器公式取决于您使用的 c2d 离散化方法,如下表所示。
c2d 离散化方法 | IFormula | DFormula |
|---|---|---|
'zoh' | ForwardEuler | ForwardEuler |
'foh' | Trapezoidal | Trapezoidal |
'tustin' | Trapezoidal | Trapezoidal |
'impulse' | ForwardEuler | ForwardEuler |
'matched' | ForwardEuler | ForwardEuler |
有关 c2d 离散化方法的详细信息,请参阅 c2d。
如果您需要不同的离散积分器公式,可通过直接将 Ts、IFormula 和 DFormula 设置为所需值来对控制器进行离散化。然而,这种方法不会为离散化后的控制器计算新的增益和滤波器常数值。因此,与使用 c2d 相比,这种方法可能会导致连续时间和离散时间 PID 控制器之间的匹配度较差。
动态系统,指定为一个 SISO 动态系统模型或 SISO 动态系统模型数组。您可以使用的动态系统包括:
广义或不确定的 LTI 模型,如
genss或uss(Robust Control Toolbox) 模型。得到的 PID 控制器假设:
对于可调控制设计模块,采用可调组件的当前值。
对于不确定的控制设计模块,采用标称模型值。
辨识的 LTI 模型,如
idtf(System Identification Toolbox)、idss(System Identification Toolbox)、idproc(System Identification Toolbox)、idpoly(System Identification Toolbox) 和idgrey(System Identification Toolbox) 模型。
属性
PID 控制器系数,指定为标量。在创建 pid 控制器对象或对象数组时,在 Kp、Ki、Kd 和 Tf 输入参量中指定这些系数。
离散时间 pid 控制器积分器的离散积分器公式 IF(z):
将 IFormula 指定为以下公式之一:
'ForwardEuler'- IF(z) =此公式最适合小采样时间,此时与控制器的带宽相比,奈奎斯特极限较大。对于较大的采样时间,
ForwardEuler公式可能会导致不稳定,即使在离散化连续时间稳定的系统时也是如此。'BackwardEuler'- IF(z) =BackwardEuler公式的一个优点是,使用此公式离散化稳定的连续时间系统始终会产生稳定的离散时间结果。'Trapezoidal'- IF(z) =Trapezoidal公式的一个优点是,使用此公式离散化稳定的连续时间系统始终会产生稳定的离散时间结果。在所有可用的积分公式中,Trapezoidal能使离散化系统的频域特性与相应连续时间系统的频域特性最为接近。
当 C 是连续时间控制器时,IFormula 为 ''。
离散时间 pid 控制器导数滤波器的离散积分器公式 DF(z):
将 DFormula 指定为以下公式之一:
'ForwardEuler'- DF(z) =此公式最适合小采样时间,此时与控制器的带宽相比,奈奎斯特极限较大。对于较大的采样时间,
ForwardEuler公式可能会导致不稳定,即使在离散化连续时间稳定的系统时也是如此。'BackwardEuler'- DF(z) =BackwardEuler公式的一个优点是,使用此公式离散化稳定的连续时间系统始终会产生稳定的离散时间结果。'Trapezoidal'- DF(z) =Trapezoidal公式的一个优点是,使用此公式离散化稳定的连续时间系统始终会产生稳定的离散时间结果。在所有可用的积分公式中,Trapezoidal能使离散化系统的频域特性与相应连续时间系统的频域特性最为接近。
对于没有导数滤波器 (Tf = 0) 的 pid 控制器,DFormula 的 Trapezoidal 值不可用。
当 C 是连续时间控制器时,DFormula 为 ''。
此 属性 为只读。
系统输入的时间延迟。对于 pid 控制器对象,InputDelay 始终为 0。
此 属性 为只读。
系统输出的时间延迟。对于 pid 控制器对象,OutputDelay 始终为 0。
采样时间,指定为:
0(适用于连续时间系统)。表示离散时间系统采样周期的正标量。以
TimeUnit属性指定的时间单位指定Ts。
如果 pid 是 PID 控制器数组,则所有控制器应用相同的 Ts。
时间变量单位,指定为以下项之一:
'nanoseconds''microseconds''milliseconds''seconds''minutes''hours''days''weeks''months''years'
更改 TimeUnit 不会影响其他属性,但会更改整体系统行为。可使用 chgTimeUnit 在不修改系统行为的情况下转换时间单位。
输入通道名称,指定为以下项之一:
字符向量
''(未指定名称)
也可以按如下方式将名称 error 赋给控制器模型 C 的输入。
C.InputName = 'error';您可以使用简化形式 u 来引用 InputName 属性。例如,C.u 等效于 C.InputName。
使用 InputName 可以:
识别模型显示和绘图上的通道。
互连模型时指定连接点。
输入通道单位,指定为以下项之一:
字符向量。
''(未指定单位)。
使用 InputUnit 指定输入信号单位。InputUnit 不会影响系统行为。
例如,可按如下方式将浓度单位 'mol/m^3' 赋给控制器模型 C 的输入。
C.InputUnit = 'mol/m^3';输入通道组。PID 控制器模型不需要此属性。
默认情况下,InputGroup 是不包含字段的结构体。
输出通道名称,指定为以下项之一:
字符向量。
''(未指定名称)。
例如,可按如下方式将名称 'control' 赋给控制器模型 C 的输出。
C.OutputName = 'control';您还可以使用简化形式 y 来引用 OutputName 属性。例如,C.y 等效于 C.OutputName。
使用 OutputName 可以:
识别模型显示和绘图上的通道。
互连模型时指定连接点。
输出通道单位,指定为以下项之一:
字符向量。
''(未指定单位)。
使用 OutputUnit 指定输出信号单位。OutputUnit 不会影响系统行为。
例如,可按如下方式将单位 'volts' 赋给控制器模型 C 的输出。
C.OutputUnit = 'volts';输出通道组。PID 控制器模型不需要此属性。
默认情况下,OutputGroup 是不包含字段的结构体。
用户指定的要与系统关联的文本,指定为字符向量或字符向量元胞数组。例如,'System is MIMO'。
要与系统关联的用户指定数据,指定为任何 MATLAB 数据类型。
系统名称,指定为字符向量。例如,'system_1'。
模型数组的采样网格,指定为结构体数组。
使用 SamplingGrid 跟踪与模型数组中每个模型相关联的变量值,包括辨识的线性时不变 (IDLTI) 模型数组。
将结构体的字段名称设置为采样变量的名称。将字段值设置为与数组中每个模型相关联的采样变量值。所有采样变量都必须为数值标量,所有由采样值组成的数组都必须与模型数组的维度匹配。
例如,您可以通过拍摄线性时变系统在时间 t = 0:10 处的快照,创建一个 11×1 线性模型数组 sysarr。以下代码随线性模型存储时间采样。
sysarr.SamplingGrid = struct('time',0:10)同样,您可以通过对两个变量 zeta 和 w 独立采样,创建一个 6×9 模型数组 M。以下代码将 (zeta,w) 值映射到 M。
[zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>) M.SamplingGrid = struct('zeta',zeta,'w',w)
当显示 M 时,数组中的每个条目都包括对应的 zeta 和 w 值。
M
M(:,:,1,1) [zeta=0.3, w=5] =
25
--------------
s^2 + 3 s + 25
M(:,:,2,1) [zeta=0.35, w=5] =
25
----------------
s^2 + 3.5 s + 25
...对于通过在多个参数值或工作点处线性化 Simulink® 模型生成的模型数组,软件会自动使用与数组中每个条目对应的变量值填充 SamplingGrid。例如,Simulink Control Design™ 命令 linearize (Simulink Control Design) 和 slLinearizer (Simulink Control Design) 会自动填充 SamplingGrid。
默认情况下,SamplingGrid 是不包含字段的结构体。
示例
创建一个具有比例和导数增益且在导数项带有滤波器的连续时间控制器。为此,将积分增益设置为零。将其他增益和滤波器时间常数设置为所需值。
Kp = 1;
Ki = 0; % No integrator
Kd = 3;
Tf = 0.5;
C = pid(Kp,Ki,Kd,Tf)C =
s
Kp + Kd * --------
Tf*s+1
with Kp = 1, Kd = 3, Tf = 0.5
Continuous-time PDF controller in parallel form.
Model Properties
显示结果显示控制器类型、公式和参数值,并验证控制器没有积分器项。
创建一个使用梯形离散化公式的离散时间 PI 控制器。
要创建离散时间 PI 控制器,请使用 Name,Value 语法来设置 Ts 的值和离散化公式。
C1 = pid(5,2.4,'Ts',0.1,'IFormula','Trapezoidal') % Ts = 0.1s
C1 =
Ts*(z+1)
Kp + Ki * --------
2*(z-1)
with Kp = 5, Ki = 2.4, Ts = 0.1
Sample time: 0.1 seconds
Discrete-time PI controller in parallel form.
Model Properties
您也可以通过在所有四个 PID 参数 Kp、Ki、Kd 和 Tf 之后提供 Ts 作为第五个输入参量来创建相同的离散时间控制器。由于您只需要一个 PI 控制器,因此将 Kd 和 Tf 设置为零。
C2 = pid(5,2.4,0,0,0.1,'IFormula','Trapezoidal')
C2 =
Ts*(z+1)
Kp + Ki * --------
2*(z-1)
with Kp = 5, Ki = 2.4, Ts = 0.1
Sample time: 0.1 seconds
Discrete-time PI controller in parallel form.
Model Properties
显示结果显示 C1 和 C2 是相同的。
在您创建 PID 控制器时,可以设置动态系统属性 InputName 和 OutputName。例如,当您使用 connect 命令将创建的该 PID 控制器与其他动态系统模型互连时,这会很有用。
C = pid(1,2,3,'InputName','e','OutputName','u')
C =
1
Kp + Ki * --- + Kd * s
s
with Kp = 1, Ki = 2, Kd = 3
Continuous-time PID controller in parallel form.
Model Properties
显示结果未显示 PID 控制器的输入名称和输出名称,但您可以检查这些属性的值。例如,验证控制器的输入名称。
C.InputName
ans = 1×1 cell array
{'e'}
创建一个 2×3 的 PI 控制器网格,其中数组行中的比例增益范围为 1 到 2,列中的积分增益范围为 5 到 9。
要构建该 PID 控制器数组,请先从表示增益的数组开始着手。
Kp = [1 1 1;2 2 2]; Ki = [5:2:9;5:2:9];
当您将这些数组传递给 pid 命令时,该命令将返回该数组。
pi_array = pid(Kp,Ki,'Ts',0.1,'IFormula','BackwardEuler'); size(pi_array)
2x3 array of PID controller. Each PID has 1 output and 1 input.
或者,使用 stack 命令构建 PID 控制器数组。
C = pid(1,5,0.1) % PID controllerC =
1
Kp + Ki * --- + Kd * s
s
with Kp = 1, Ki = 5, Kd = 0.1
Continuous-time PID controller in parallel form.
Model Properties
Cf = pid(1,5,0.1,0.5) % PID controller with filterCf =
1 s
Kp + Ki * --- + Kd * --------
s Tf*s+1
with Kp = 1, Ki = 5, Kd = 0.1, Tf = 0.5
Continuous-time PIDF controller in parallel form.
Model Properties
pid_array = stack(2,C,Cf); % stack along 2nd array dimension这些命令返回一个 1×2 的控制器数组。
size(pid_array)
1x2 array of PID controller. Each PID has 1 output and 1 input.
数组中的所有 PID 控制器必须具有相同的采样时间、离散积分器公式和动态系统属性,例如 InputName 和 OutputName。
将标准型 pidstd 控制器转换为并联型。
标准型 PID 用总比例增益 Kp、积分和导数时间常数 Ti 和 Td 以及滤波器除数 N 来表示控制器动作。您可以使用 pid 命令将任何标准型控制器转换为并联型控制器。例如,假设有以下标准型控制器。
Kp = 2; Ti = 3; Td = 4; N = 50; C_std = pidstd(Kp,Ti,Td,N)
C_std =
1 1 s
Kp * (1 + ---- * --- + Td * ------------)
Ti s (Td/N)*s+1
with Kp = 2, Ti = 3, Td = 4, N = 50
Continuous-time PIDF controller in standard form
Model Properties
使用 pid 将此控制器转换为并联型控制器。
C_par = pid(C_std)
C_par =
1 s
Kp + Ki * --- + Kd * --------
s Tf*s+1
with Kp = 2, Ki = 0.667, Kd = 8, Tf = 0.08
Continuous-time PIDF controller in parallel form.
Model Properties
将表示 PID 控制器的连续时间动态系统转换为并联型 pid。
以下具有一个积分器和两个零点的动态系统相当于一个 PID 控制器。
创建 H 的 zpk 模型。然后使用 pid 命令来获得以 PID 增益 Kp、Ki 和 Kd 表示的 H。
H = zpk([-1,-2],0,3); C = pid(H)
C =
1
Kp + Ki * --- + Kd * s
s
with Kp = 9, Ki = 6, Kd = 3
Continuous-time PID controller in parallel form.
Model Properties
将表示带有导数滤波器的 PID 控制器的离散时间动态系统转换为并联型 pid。
创建一个表示 PIDF 控制器(两个零点和两个极点,包括 z = 1 处的积分器极点)的离散时间 zpk 模型。
sys = zpk([-0.5,-0.6],[1 -0.2],3,'Ts',0.1);当您将 sys 转换为 PID 形式时,结果取决于您为转换指定的离散积分器公式。例如,对积分器和导数都使用默认的 ForwardEuler 公式。
Cfe = pid(sys)
Cfe =
Ts 1
Kp + Ki * ------ + Kd * -----------
z-1 Tf+Ts/(z-1)
with Kp = 2.75, Ki = 60, Kd = 0.0208, Tf = 0.0833, Ts = 0.1
Sample time: 0.1 seconds
Discrete-time PIDF controller in parallel form.
Model Properties
现在使用 Trapezoidal 公式进行转换。
Ctrap = pid(sys,'IFormula','Trapezoidal','DFormula','Trapezoidal')
Ctrap =
Ts*(z+1) 1
Kp + Ki * -------- + Kd * -------------------
2*(z-1) Tf+Ts/2*(z+1)/(z-1)
with Kp = -0.25, Ki = 60, Kd = 0.0208, Tf = 0.0333, Ts = 0.1
Sample time: 0.1 seconds
Discrete-time PIDF controller in parallel form.
Model Properties
显示结果显示所得系数值和函数形式的差异。
对于这个特定的动态系统,您不能对导数滤波器采用 BackwardEuler 公式来将 sys 转换为并联型 PID。这样做会导致 Tf < 0,这是不允许的。在这种情况下,pid 会返回错误。
对连续时间 PID 控制器进行离散化,并设置积分和导数滤波器公式。
创建一个连续时间控制器,并使用 c2d 命令的零阶保持方法对其进行离散化。
Ccon = pid(1,2,3,4); % continuous-time PIDF controller Cdis1 = c2d(Ccon,0.1,'zoh')
Cdis1 =
Ts 1
Kp + Ki * ------ + Kd * -----------
z-1 Tf+Ts/(z-1)
with Kp = 1, Ki = 2, Kd = 3.04, Tf = 4.05, Ts = 0.1
Sample time: 0.1 seconds
Discrete-time PIDF controller in parallel form.
Model Properties
显示结果显示 c2d 为离散时间控制器计算新的 PID 增益。
离散化控制器的离散积分器公式取决于 c2d 离散化方法。对于 zoh 方法,IFormula 和 DFormula 都是 ForwardEuler。
Cdis1.IFormula
ans = 'ForwardEuler'
Cdis1.DFormula
ans = 'ForwardEuler'
如果您想使用与 c2d 返回的公式不同的公式,那么您可以直接将控制器的 Ts、IFormula 和 DFormula 属性设置为所需值。
Cdis2 = Ccon; Cdis2.Ts = 0.1; Cdis2.IFormula = 'BackwardEuler'; Cdis2.DFormula = 'BackwardEuler';
但是,这些命令不会为离散化控制器计算新的 PID 增益。要查看这一点,可以检查 Cdis2 并将系数与 Ccon 和 Cdis1 进行比较。
Cdis2
Cdis2 =
Ts*z 1
Kp + Ki * ------ + Kd * -------------
z-1 Tf+Ts*z/(z-1)
with Kp = 1, Ki = 2, Kd = 3, Tf = 4, Ts = 0.1
Sample time: 0.1 seconds
Discrete-time PIDF controller in parallel form.
Model Properties
版本历史记录
在 R2010b 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)