PID Controller (2DOF)
连续时间或离散时间二自由度 PID 控制器
![](pid2dof_block_icon.png)
库:
Simulink /
Continuous
描述
PID Controller (2DOF) 模块实现一个二自由度 PID 控制器(PID、PI 或 PD)。该模块与时域参数设置为连续时间的 Discrete PID Controller (2DOF) 模块相同。
该模块基于参考信号与测得的系统输出之间的差异来生成输出信号。此模块根据您指定的设定点权重(b 和 c)来计算比例和导数动作的加权差异信号。模块输出等于对各差异信号进行的比例、积分和导数动作的总和,其中的每个动作根据增益参数 P、I 和 D 进行加权。导数动作通过一阶极点进行滤波。
该模块支持多种控制器类型和结构体。此模块中可配置的选项包括:
控制器类型(PID、PI 或 PD)- 请参阅控制器参数。
控制器形式(Parallel 或 Ideal)- 请参阅形式参数。
时域(连续或离散)- 请参阅时域参数。
初始条件和重置触发器 - 请参阅源和外部重置参数。
输出饱和界限和内置抗饱和机制 - 请参阅限制输出参数。
无扰动切换和多环控制的信号跟踪 - 请参阅启用跟踪模式参数。
当您更改这些选项时,模块的内部结构体会通过激活不同的可变子系统而发生更改。(请参阅Implement Variations in Separate Hierarchy Using Variant Subsystems。)要检查模块及其可变子系统的内部结构体,请右键点击该模块,然后选择封装 > 查看封装内部。
PID 增益调整
可手动或自动调整 PID 控制器系数和设定点权重。自动调整需要 Simulink® Control Design™ 软件。有关自动调整的详细信息,请参阅选择调节方法参数。
端口
输入
Ref — 参考信号
标量 | 向量
被控对象要遵循的参考信号,如图所示。
当参考信号是向量时,该模块分别对每个信号起作用,从而向量化 PID 系数并产生相同维度的向量输出信号。您可以将 PID 系数和一些其他参数指定为与输入信号具有相同维度的向量。这样做相当于为输入信号中的每一项指定单独的 PID 控制器。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
Port_1( y ) — 测得的系统输出
标量 | 向量
控制器接收的反馈信号,来自被控对象输出。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
ydot — 外部源的导数
标量 | 向量
自 R2024a 起
将被控对象信号 y 的导数直接作为输入提供给模块。当您的模型中有可用的导数信号并且希望跳过模块内导数的计算时,这很有帮助。
依存关系
要启用此输入端口,请选择具有导数动作的控制器类型并启用使用来自外部的导数。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
P — 比例增益
标量 | 向量
比例增益,从模块外部的信源提供。外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。
依存关系
要启用此端口,请将控制器参数源设置为外部。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
I — 积分增益
标量 | 向量
积分增益,由模块外部的信源提供。外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。
当您从外部提供增益时,还会对积分增益中的时变进行积分。这是由于 PID 增益是在模块内实现而造成的。有关详细信息,请参阅控制器参数源参数。
依存关系
要启用此端口,请将控制器参数源设置为外部,并将控制器设置为具有积分动作的控制器类型。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
I*Ts — 积分增益乘以采样时间
标量 | 向量
对于离散时间控制器,积分增益乘以控制器采样时间,由模块外部的源提供。外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。
注意
PID 调节工具,如 PID 调节器和 Closed-Loop PID Autotuner 模块,可调节增益 I,但无法调节增益 I*T s。因此,将从调节工具获得的积分增益值乘以采样时间,然后将其提供给此端口。
当您使用 I*Ts 而不是 I 时,模块需要较少的计算来执行积分。这会改进生成代码的执行时间。
对于连续时间控制器,禁用使用 I*Ts 并改用 I 端口。
依存关系
要启用此端口,请将控制器参数源设置为外部,将控制器设置为具有积分动作的控制器类型,并启用使用 I*Ts 参数。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
D — 导数增益
标量 | 向量
导数增益,由模块外部的信源提供。外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。
当您从外部提供增益时,还会对导数增益中的时变进行微分。这是由于 PID 增益是在模块内实现而造成的。有关详细信息,请参阅控制器参数源参数。
依存关系
要启用此端口,请将控制器参数源设置为外部,并将控制器设置为具有导数动作的控制器类型。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
N — 滤波器系数
标量 | 向量
导数滤波器系数,由模块外部的信源提供。外部系数输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。
依存关系
要启用此端口,请将控制器参数源设置为外部,并将控制器设置为具有滤波后的导数的控制器类型。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
b — 比例设定点权重
标量 | 向量
比例设定点权重,由模块外部的信源提供。外部输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。
依存关系
要启用此端口,请将控制器参数源设置为外部。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
c — 导数设定点权重
标量 | 向量
导数设定点权重,由模块外部的信源提供。外部输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 系数,并将它们提供给模块。
依存关系
要启用此端口,请将控制器参数源设置为外部,并将控制器设置为具有导数动作的控制器类型。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
Reset — 外部重置触发器
标量
用于将积分器和滤波器重置为其初始条件的触发器。使用外部重置参数指定触发重置的信号类型。端口图标指示该参数中指定的触发器类型。例如,下图显示外部重置设置为上升沿的连续时间 PID(二自由度)模块。
当触发事件发生时,模块将积分器和滤波器重置为由积分器初始条件和滤波器初始条件参数或 I0 和 D0 端口指定的初始条件。
注意
为了符合汽车行业软件可靠性协会 (MISRA™) 的软件标准,您的模型必须使用布尔值信号来驱动 PID controller 模块的外部重置端口。
依存关系
要启用此端口,请将外部重置设置为无以外的任何值。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
| Boolean
I0 — 积分器初始条件
标量 | 向量
积分器初始条件,由模块外部的信源提供。
依存关系
要启用此端口,请将初始条件源设置为外部,并将控制器设置为具有积分动作的控制器类型。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
D0 — 滤波器初始条件
标量 | 向量
导数滤波器的初始条件,由模块外部的信源提供。
依存关系
要启用此端口,请将初始条件源设置为外部,并将控制器设置为具有导数动作的控制器类型。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
up — 输出饱和上限
标量 | 向量
模块输出的上限,由模块外部的源提供。如果比例、积分和导数动作的加权总和超过此端口上提供的值,则模块输出保持在该值。
依存关系
要启用此端口,请选择限制输出,并将输出饱和源设置为外部。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
lo — 输出饱和下限
标量 | 向量
模块输出的下限,由模块外部的源提供。如果比例、积分和导数动作的加权总和低于此端口上提供的值,则模块输出保持在该值。
依存关系
要启用此端口,请选择限制输出,并将输出饱和源设置为外部。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
TR — 跟踪信号
标量 | 向量
控制器输出要跟踪的信号。激活信号跟踪后,跟踪信号与模块输出之间的差异将反馈给积分器输入。信号跟踪可用于实现系统在两个控制器之间的无扰动切换。它也可用于在多环控制系统中防止模块饱和。有关详细信息,请参阅启用跟踪模式参数。
依存关系
要启用此端口,请选择启用跟踪模式参数。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
TDTI — 离散积分器时间
标量
离散积分器时间,作为标量提供给模块。您可以使用自己的离散时间积分器采样时间值来定义该模块在 Simulink 中或外部硬件上运行的速率。当在条件执行子系统中使用该模块时,离散时间积分器时间的值应与外部中断的平均采样率相匹配。
换句话说,您可以为以下任何积分器方法指定 Ts
,使该值与外部中断的平均采样率相匹配。在离散时间内,控制器传递函数的导数项为:
其中 α(z) 取决于您使用此参数指定的积分器方法。
- 前向欧拉
- 后向欧拉
- 梯形
有关离散时间积分的详细信息,请参阅 Discrete-Time Integrator 模块参考页。有关条件执行子系统的详细信息,请参阅条件执行子系统概述。
依存关系
要启用此端口,请将时域设置为离散时间并选择 PID 控制器位于条件执行子系统内选项。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
输出
Port_1( u ) — 控制器输出
标量 | 向量
控制器输出,通常基于输入信号、输入信号的积分和输入信号的导数,经由设定点权重和比例、积分和导数增益参数加权求和。通过一阶极点过滤导数操作。控制器信号中存在哪些项取决于您为控制器参数选择的内容。当前设置的基本控制器传递函数显示在模块参数的补偿器公式部分中和封装下。其他参数修改模块输出,例如上限和下限饱和参数指定的饱和界限。
当任一输入为向量信号时,控制器输出是向量信号。在这种情况下,模块充当 N 个独立 PID 控制器,其中 N 是输入向量中的信号数。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
参数
控制器 — 控制器类型
PID (默认) | PI | PD
指定在控制器中包含比例项、积分项和导数项中的哪些项。
- PID
比例、积分和导数动作。
- PI
仅比例和积分动作。
- PD
仅比例和导数动作。
提示
当前设置的控制器输出显示在模块参数的补偿器公式部分中和封装下。
编程用法
模块参数:Controller |
类型:字符串、字符向量 |
值:"PID" 、"PI" 、"PD" |
默认值:"PID" |
形式 — 控制器结构
并行 (默认) | 理想
指定控制器结构是“并行”还是“理想”。
- 并行
比例、积分和导数增益 P、I 和 D 的应用彼此独立。例如,对于并行形式的连续时间二自由度 PID 控制器,控制器输出 u 为:
其中 r 是参考信号,y 是测得的被控对象输出信号,b 和 c 是设定点权重。
对于并行形式的离散时间二自由度控制器,控制器输出为:
其中积分器方法和滤波器方法参数分别确定 α(z) 和 β(z)。
- 理想
比例增益 P 作用于所有动作的总和。例如,对于理想形式的连续时间二自由度 PID 控制器,控制器输出为:
对于理想形式的离散时间二自由度 PID 控制器,传递函数为:
其中积分器方法和滤波器方法参数分别确定 α(z) 和 β(z)。
提示
当前设置的控制器输出显示在模块参数的补偿器公式部分中和封装下。
编程用法
模块参数:Controller |
类型:字符串、字符向量 |
值:"Parallel" 、"Ideal" |
默认值:"Parallel" |
时域 — 指定连续时间或离散时间控制器
连续时间 (默认) | 离散时间
选择离散时间时,建议您为模块指定显式采样时间。请参阅采样时间(-1 表示继承) 参数。选择离散时间也会启用积分器方法和滤波器方法参数。
当 PID Controller 模块位于具有同步状态控件(请参阅 State Control (HDL Coder) 模块)的模型中时,您不能选择连续时间。
注意
PID Controller (2DOF) 和 Discrete PID Controller (2DOF) 模块是相同的,只是此参数的默认值不同。
编程用法
模块参数:TimeDomain |
类型:字符串、字符向量 |
值:"Continuous-time" 、"Discrete-time" |
默认值:"Continuous-time" |
PID 控制器位于条件执行子系统内 — 启用离散积分器时间端口
off (默认) | on
对于离散时间 PID 控制器,启用离散时间积分器端口以使用您自己的离散时间积分器采样时间值。为确保正确积分,请使用 TDTI
端口提供标量值 Δt,用于精确的离散时间积分。
依存关系
要启用此参数,请将时域设置为离散时间。
编程用法
模块参数:UseExternalTs |
类型:字符串、字符向量 |
值:"on" 、"off" |
默认值:"off" |
采样时间(-1 表示继承) — 采样之间的离散间隔
-1 (默认) | 正标量
通过输入正标量值(例如 0.1)指定采样时间。默认的离散采样时间为 -1,表示该模块从上游模块继承其采样时间。但是,建议您显式设置控制器采样时间,尤其是在您预计上游模块的采样时间会发生变化时。控制器系数 P、I、D 和 N 的影响取决于采样时间。因此,对于给定的一组系数值,更改采样时间会更改控制器的性能。
有关详细信息,请参阅 指定采样时间。
要实现连续时间控制器,请将时域设置为连续时间。
提示
如果要使用外部指定的或可变的采样时间运行模块,请将此参数设置为 -1 并将模块放在 Triggered Subsystem 中。然后,在所需的采样时间触发该子系统。
依存关系
要启用此参数,请将时域设置为离散时间。
编程用法
模块参数:SampleTime |
类型:标量 |
值: -1 、正标量 |
默认值: -1 |
积分器方法 — 离散时间控制器中积分的计算方法
前向欧拉 (默认) | 后向欧拉 | 梯形
在离散时间内,控制器传递函数的积分项为 Ia(z),其中 a(z) 取决于您使用此参数指定的积分器方法。
- 前向欧拉
正向矩形(左手)逼近方法,
这种方法最适合较小的采样时间,此时奈奎斯特限制与控制器带宽相比来说比较大。对于较大的采样时间,前向欧拉方法可能带来不稳定性,即使离散的是在连续时间下表现稳定的系统。
- 后向欧拉
反向矩形(右手)逼近方法,
后向欧拉方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。
- 梯形
双线性逼近法。
梯形方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。在所有可用的积分方法中,梯形方法可在离散化系统与对应的连续时间系统的频域属性之间生成最接近的匹配。
提示
当前设置的控制器公式显示在模块参数的补偿器公式部分中和封装下。
有关离散时间积分的详细信息,请参阅Discrete-Time Integrator模块参考页。
依存关系
要启用此参数,请将时域设置为离散时间,并将控制器设置为具有积分动作的控制器类型。
编程用法
模块参数:IntegratorMethod |
类型:字符串、字符向量 |
值:"Forward Euler" 、"Backward Euler" 、"Trapezoidal" |
默认值:"Forward Euler" |
滤波器方法 — 离散时间控制器中导数的计算方法
前向欧拉 (默认) | 后向欧拉 | 梯形
在离散时间内,控制器传递函数的导数项为:
其中 α(z) 取决于您使用此参数指定的滤波器方法。
- 前向欧拉
正向矩形(左手)逼近方法,
这种方法最适合较小的采样时间,此时奈奎斯特限制与控制器带宽相比来说比较大。对于较大的采样时间,前向欧拉方法可能带来不稳定性,即使离散的是在连续时间下表现稳定的系统。
- 后向欧拉
反向矩形(右手)逼近方法,
后向欧拉方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。
- 梯形
双线性逼近法。
梯形方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。在所有可用的积分方法中,梯形方法可在离散化系统与对应的连续时间系统的频域属性之间生成最接近的匹配。
提示
当前设置的控制器公式显示在模块参数的补偿器公式部分中和封装下。
有关离散时间积分的详细信息,请参阅Discrete-Time Integrator模块参考页。
依存关系
要启用此参数,请将时域设置为离散时间并启用使用滤波导数。
编程用法
模块参数:FilterMethod |
类型:字符串、字符向量 |
值:"Forward Euler" 、"Backward Euler" 、"Trapezoidal" |
默认值:"Forward Euler" |
常设
源 — 控制器增益和滤波器系数的信源
内部 (默认) | 外部
- 内部
使用模块参数 P、I、D、N、b 和 c 分别指定控制器增益、滤波器系数和设定点权重。
- 外部
使用模块输入在外部指定 PID 增益、滤波器系数和设定点权重。对于当前控制器类型需要的每个参数,模块上会出现一个额外的输入端口。
如果为参数启用外部输入,您可以在模块外部计算它们的值,并将它们作为信号输入提供给模块。
外部输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 增益,并将它们提供给模块。
如果从外部提供增益,则会分别对积分和导数增益值的时变进行积分和微分。导数设定点权重 c 也被求导。出现这种结果是因为在连续时间和离散时间中,增益都会在积分或微分之前应用于信号。例如,对于采用外部输入的连续时间 PID 控制器,积分项的实现方式如下图所示。
在进行积分之前,系统会在模块内将输入信号 u 乘以外部提供的积分增益 I。此实现的结果为:
因此,积分增益包含在积分中。类似地,在模块的导数项中,进行微分之前会乘以导数增益,从而导致导数增益 D 和导数设定点权重 c 被求导。
编程用法
模块参数:ControllerParametersSource |
类型:字符串、字符向量 |
值:"internal" 、"external" |
默认值:"internal" |
比例(P) — 比例增益
1 (默认) | 标量 | 向量
为比例增益指定有限实数增益值。控制器形式可以是:
并行 - 比例动作独立于积分和导数动作。例如,对于并行形式的连续时间二自由度 PID 控制器,控制器输出 u 为:
其中 r 是参考信号,y 是测得的被控对象输出信号,b 和 c 是设定点权重。
对于并行形式的离散时间二自由度控制器,控制器输出为:
其中积分器方法和滤波器方法参数分别确定 α(z) 和 β(z)。
理想 - 比例增益乘以积分和导数项。例如,对于理想形式的连续时间二自由度 PID 控制器,控制器输出为:
对于理想形式的离散时间二自由度 PID 控制器,传递函数为:
其中积分器方法和滤波器方法参数分别确定 α(z) 和 β(z)。
可调: Yes
依存关系
要启用此参数,请将控制器参数源设置为内部。
编程用法
模块参数:P |
类型:标量、向量 |
默认值:1 |
积分(I) — 积分增益
1 (默认) | 标量 | 向量
为积分增益指定有限实数增益值。
可调: Yes
依存关系
要启用此参数,请在常设选项卡中将控制器参数源设置为内部,并将控制器设置为具有积分动作的类型。
编程用法
模块参数:I |
类型:标量、向量 |
默认值:1 |
积分 (I*Ts) — 积分增益乘以采样时间
1 (默认) | 标量 | 向量
对于离散时间控制器,为积分增益乘以采样时间指定有限实数增益值。
注意
PID 调节工具,如 PID 调节器和 Closed-Loop PID Autotuner 模块,可调节增益 I,但无法调节增益 I*T s。因此,将从调节工具获得的积分增益值乘以采样时间,然后将其写入此参数。
当您使用 I*Ts 而不是 I 时,模块需要较少的计算来执行积分。这会改进生成代码的执行时间。
对于连续时间控制器,禁用使用 I*Ts 并改用 I 参数。
可调: No
依存关系
要启用此参数,请在常设选项卡中将控制器参数源设置为内部,将控制器设置为具有积分动作的类型,并启用使用 I*Ts 参数。
编程用法
模块参数:I |
类型:标量、向量 |
默认值:1 |
使用 I*Ts — 使用积分增益乘以采样时间
off
(默认) | on
对于具有积分动作的离散时间控制器,该模块将积分增益作为输入,并在内部将其乘以采样时间,作为执行积分的一部分。如果您启用此参数,您将显式指定积分增益乘以采样时间作为输入 (I*Ts),代替积分增益 (I)。这样做可以减少内部计算的次数,并且在您要改进所生成代码的执行时间时非常有用。
如果您启用信号跟踪或抗饱和模式反算,并且启用 I*Ts,则还必须将跟踪增益参数 Kt 设置为 Kt*Ts
,并将反算系数 Kb 设置为 Kb*Ts
。
对于连续时间控制器,启用此参数对积分增益不起作用。
依存关系
要启用此参数,请将控制器设置为具有积分动作的控制器类型。
编程用法
模块参数:UseKiTs |
类型:字符串、字符向量 |
值:"on" 、"off" |
默认值:"on" |
导数(D) — 导数增益
0 (默认) | 标量 | 向量
为导数增益指定有限实数增益值。
可调: Yes
依存关系
要启用此参数,请在常设选项卡中将控制器参数源设置为内部,并将控制器设置为 PID 或 PD。
编程用法
模块参数:D |
类型:标量、向量 |
默认值:0 |
使用来自外部的导数 — 指定在模块输入端口上的导数
off
(默认) | on
自 R2024a 起
选择此选项可将被控对象信号 y 的导数直接指定为模块的输入 ydot。当您的模型中有可用的导数信号并且希望跳过模块内导数的计算时,这很有帮助。
依存关系
要启用此选项,请选择具有导数动作的控制器类型。
使用滤波导数 — 将滤波器应用于导数项
on
(默认) | off
仅针对离散时间 PID 控制器,取消选中此选项以将滤波后的导数替换为未滤波的离散时间微分器。执行此操作时,控制器输出的导数项变为:
对于连续时间 PID 控制器,始终对导数项进行滤波。
依存关系
要启用此参数,请将时域设置为离散时间,并将控制器设置为具有导数项的类型。
编程用法
模块参数:UseFilter |
类型:字符串、字符向量 |
值:"on" 、"off" |
默认值:"on" |
滤波器系数(N) — 导数滤波器系数
100 (默认) | 标量 | 向量
为滤波器系数指定有限实数增益值。滤波器系数确定滤波器在模块的导数动作中的极点位置。滤波器极点的位置取决于时域参数。
当时域为连续时间时,极点位置为
s = -N
。当时域为离散时间时,极点位置取决于滤波器方法参数。
滤波器方法 滤波器极点的位置 前向欧拉 后向欧拉 梯形
模块不支持 N = Inf
(理想的未滤波导数)。当时域为离散时间时,可以清除使用滤波导数以删除导数滤波器。
可调: Yes
依存关系
要启用此参数,请在常设选项卡中将控制器参数源设置为内部,并将控制器设置为 PID 或 PD。
编程用法
模块参数:N |
类型:标量、向量 |
默认值:100 |
设定点权重(b) — 比例设定点权重
1 (默认) | 标量 | 向量
控制器比例项的设定点权重。二自由度控制器输出的比例项为 P (br - y),其中 r 是参考信号,y 是测得的被控对象输出。将 b 设置为 0 将去除对参考信号的比例动作,这样可以减少系统响应对设定点步长变化的过冲。更改 b 和 c 的相对值会改变扰动抑制和设定点跟踪之间的平衡。
可调: Yes
依存关系
要启用此参数,请在常设选项卡中将控制器参数源设置为内部。
编程用法
模块参数:b |
类型:标量、向量 |
默认值:1 |
设定点权重(c) — 导数设定点权重
1 (默认) | 标量 | 向量
控制器导数项的设定点权重。二自由度控制器的导数项作用于 cr - y,其中 r 是参考信号,y 是测量的被控对象输出。因此,将 c 设置为 0 将去除对参考信号的导数动作,这样可以减少对设定点步长变化的瞬时响应。将 c 设置为 0 可产生一种既能实现有效的扰动抑制和顺利的设定点跟踪,又不会产生过多瞬时响应的控制器。更改 b 和 c 的相对值会改变扰动抑制和设定点跟踪之间的平衡。
可调: Yes
依存关系
要启用此参数,请在常设选项卡中将控制器参数源设置为内部并将控制器设置为具有导数动作的类型。
编程用法
模块参数:c |
类型:标量、向量 |
默认值:1 |
选择调节方法 — 用来自动调整控制器系数的工具
基于传递函数(PID 调节器) (默认) | 基于频率响应
如果您有 Simulink Control Design 软件,则可以自动调整在模块内部应用的 PID 系数。为此,请使用此参数选择调整工具,然后点击调节。
- 基于传递函数(PID 调节器)
使用 PID 调节器,您可以在检查相关系统响应以验证性能的同时交互调节 PID 系数。PID 调节器可以调节所有系数 P、I、D 和 N 以及设定点系数 b 和 c。默认情况下,这种 PID 调节器适合线性化被控对象模型。对于无法线性化的模型,您可以根据从仿真或测量的响应数据估算出的被控对象模型来调整 PID 系数。有关详细信息,请参阅 Design Two-Degree-of-Freedom PID Controllers (Simulink Control Design)。
- 基于频率响应
使用基于频率响应的 PID 调节器,它根据通过仿真获得的频率响应估计数据来调节 PID 控制器系数。这种调整方法特别适用于不可线性化或线性化为零的被控对象。基于频率响应的 PID 调节器调节系数 P、I、D 和 N,但不调节设定点系数 b 和 c。有关详细信息,请参阅Design PID Controller from Plant Frequency-Response Data (Simulink Control Design)。
这两种调整方法都采用单环路控制配置。Simulink Control Design 软件提供适合更复杂配置的其他调整方法。有关调整 PID Controller 模块的其他方法的信息,请参阅Choose a Control Design Approach (Simulink Control Design)。
依存关系
要启用此参数,请在常设选项卡中将控制器参数源设置为内部。
启用过零检测 — 在重置时以及在进入或退出饱和状态时检测过零点
on (默认) | off
过零检测可以准确无误地确定信号的不连续性,而无需检测特别小的时间步,因为这样可能会大大延长仿真时间。如果在 PID Controller 模块中选择限制输出或者激活外部重置,激活过零检测可以缩短仿真时的计算时间。选择此参数可在以下时间激活过零检测:
在初始状态重置时
在进入上限或下限饱和状态时
在退出上限或下限饱和状态时
有关过零检测的详细信息,请参阅过零检测。
编程用法
模块参数:ZeroCross |
类型:字符串、字符向量 |
值:"on" 、"off" |
默认值:"on" |
初始化:
源 — 积分器和导数初始条件的信源
内部 (默认) | 外部
Simulink 使用初始条件在仿真开始时或在指定的触发事件发生时初始化积分器和导数滤波器(或未滤波的导数)输出。(请参阅外部重置参数。)这些初始条件确定初始模块输出。使用此参数选择如何向模块提供初始条件值。
- 内部
使用积分器初始条件和滤波器初始条件参数指定初始条件。如果未选择使用滤波导数,请使用微分器参数指定未滤波的微分器的初始条件,而不是滤波器初始条件。
- 外部
使用模块输入从外部指定初始条件。额外的输入端口 Io 和 Do 出现在模块中。如果未选择使用滤波导数,请在 Do 处提供未滤波的微分器的初始条件,而不是滤波器初始条件。
编程用法
模块参数:InitialConditionSource |
类型:字符串、字符向量 |
值:"internal" 、"external" |
默认值:"internal" |
积分器 — 积分器初始条件
0 (默认) | 标量 | 向量
Simulink 在仿真一开始或在发生指定的触发事件时(请参阅外部重置)使用积分器初始条件来初始化积分器。积分器初始条件与滤波器初始条件一起确定 PID controller 模块的初始输出。
积分器初始条件不能是 NaN
或 Inf
。
依存关系
要使用此参数,请在初始化选项卡中将源设置为内部,然后将控制器设置为具有积分动作的类型。
编程用法
模块参数:InitialConditionForIntegrator |
类型:标量、向量 |
默认值:0 |
滤波器 — 滤波器初始条件
0 (默认) | 标量 | 向量
Simulink 在仿真一开始或在发生指定的触发事件时(请参阅外部重置)使用滤波器初始条件来初始化导数滤波器。积分器初始条件与滤波器初始条件一起确定 PID controller 模块的初始输出。
滤波器初始条件不能是 NaN
或 Inf
。
依存关系
要使用此参数,请在初始化选项卡中将源设置为内部,并使用具有导数滤波器的控制器。
编程用法
模块参数:InitialConditionForFilter |
类型:标量、向量 |
默认值:0 |
微分器 — 未滤波的导数的初始条件
0 (默认) | 标量 | 向量
使用未滤波的导数时,Simulink 使用此参数在仿真一开始或在发生指定的触发事件时(请参阅外部重置)初始化微分器。积分器初始条件和导数初始条件一起确定 PID controller 模块的初始输出。
导数初始条件不能是 NaN
或 Inf
。
依存关系
要使用此参数,请将时域设置为离散时间,清除使用滤波导数复选框,然后在初始化选项卡中,将源设置为内部。
编程用法
模块参数:DifferentiatorICPrevScaledInput |
类型:标量、向量 |
默认值:0 |
初始条件设置 — 应用初始条件的位置
自动 (默认) | 输出
使用此参数指定是否将积分器初始条件和滤波器初始条件参数应用于对应的模块状态或输出。您只能在命令行中使用 set_param
设置模块的 InitialConditionSetting
参数来更改此参数。
- 自动
除非模块在触发子系统或函数调用子系统中且启用了简化初始化模式,否则其他所有情况下均使用此选项。
- 输出
当模块在触发子系统或函数调用子系统中且启用了简化初始化模式时,使用此选项。
有关初始条件设置参数的详细信息,请参阅 Discrete-Time Integrator 模块。
此参数只能通过编程用法访问。
编程用法
模块参数:InitialConditionSetting |
类型:字符串、字符向量 |
值:"Auto" 、"Output" |
默认值:"Auto" |
外部重置 — 用于重置积分器和滤波器值的触发器
无 (默认) | 上升沿 | 下降沿 | 任一沿 | 电平
指定使模块将积分器和滤波器重置为初始条件的触发条件。(如果未选择使用滤波导数,则触发器会将积分器和微分器重置为初始条件。)选择无之外的任何选项都将在模块上启用重置端口以接收外部重置信号。
- 无
积分器和滤波器(或微分器)输出在仿真开始时设置为初始条件,在仿真期间不会重置。
- 上升沿
当重置信号具有上升沿时重置输出。
- 下降沿
当重置信号具有下降沿时重置输出。
- 任一沿
当重置信号上升或下降时重置输出。
- 电平
当重置信号具有以下情况之一时重置输出:
在当前时间步为非零值时
从上一时间步的非零更改为当前时间步的零时
此选项在重置信号非零时使输出保持在初始条件。
依存关系
要启用此参数,请将控制器设置为具有导数或积分动作的类型。
编程用法
模块参数:ExternalReset |
类型:字符串、字符向量 |
值:"none" 、"rising" 、"falling" 、"either" 、"level" |
默认值:"none" |
线性化时忽略重置 — 强制线性化以忽略重置
off (默认) | on
选择此项可强制 Simulink 和 Simulink Control Design 线性化命令忽略在外部重置参数中指定的任何重置机制。忽略重置状态将允许您围绕某个工作点对模型进行线性化,即使该工作点会导致模块重置也一样。
编程用法
模块参数:IgnoreLimit |
类型:字符串、字符向量 |
值:"off" 、"on" |
默认值:"off" |
启用跟踪模式 — 激活信号跟踪
off (默认) | on
信号跟踪使模块输出能够跟随您在 TR 端口提供的跟踪信号。激活信号跟踪后,跟踪信号与模块输出之间的差异将反馈给由跟踪增益 (Kt) 参数指定的增益为 Kt
的积分器输入。跟踪信号具有多种应用,包括无扰动切换和避免多多环控制结构中的饱和。
无扰动切换
使用信号跟踪可以实现系统在两个控制器之间切换时的无扰动切换。假设您要在 PID 控制器和另一个控制器之间转移控制权。为此,将控制器输出连接到 TR 输入,如下图所示。
有关详细信息,请参阅Bumpless Control Transfer with a Two-Degree-of-Freedom PID Controller。
多环控制
使用信号跟踪来防止多环控制方法中的模块饱和。有关使用单自由度 PID 控制器说明此方法的示例,请参阅Prevent Block Windup in Multiloop Control。
依存关系
要启用此参数,请将控制器设置为具有积分动作的类型。
编程用法
模块参数:TrackingMode |
类型:字符串、字符向量 |
值:"off" 、"on" |
默认值:"off" |
跟踪系数(Kt) — 信号跟踪反馈环的增益
1 (默认) | 标量
选择启用跟踪模式时,信号 TR 与模块输出之间的差异将反馈到具有增益 Kt
的积分器输入。使用此参数指定该反馈环中的增益。
对于离散时间控制器,如果您选择模块的使用 I*Ts 参数,则将此参数设置为值 Kt*Ts
,其中 Kt
是所需增益,Ts
是采样时间。
依存关系
要启用此参数,请选择启用跟踪模式。
编程用法
模块参数:Kt |
类型:标量 |
默认值:1 |
饱和
输出饱和限制输出 — 将模块输出限制为指定的饱和值
off (默认) | on
激活此选项可限制模块输出,因此无需在控制器后面另加 Saturation 模块。它还允许您激活模块内置的抗饱和机制(请参阅抗饱和方法参数)。使用下限和上限参数指定输出饱和界限。您也可以在外部指定饱和界限作为模块输入端口。
编程用法
模块参数:LimitOutput |
类型:字符串、字符向量 |
值:"off" 、"on" |
默认值:"off" |
源 — 输出饱和界限的源
内部 (默认) | 外部
使用此参数指定如何提供模块输出的饱和上限及饱和下限。
- 内部
使用上限和下限参数指定输出饱和界限。
- 外部
使用模块输入端口从外部指定输出饱和界限。额外的输入端口 up 和 lo 出现在该模块上。您可以使用输入端口来实现由 Simulink 模型中的逻辑或其他计算确定并传递给该模块的输出饱和上限和下限。
编程用法
模块参数:SatLimitsSource |
类型:字符串、字符向量 |
值:"internal" 、"external" |
默认值:"internal" |
上限 — 模块输出的饱和上限
Inf
(默认) | 标量
指定模块输出的上限值。一旦比例、积分和导数动作的加权和高于饱和上限,模块输出将保持在该上限值。
依存关系
要启用此参数,请选择限制输出。
编程用法
模块参数:UpperSaturationLimit |
类型:标量 |
默认值:Inf |
下限 — 模块输出的饱和下限
-Inf
(默认) | 标量
指定模块输出的下限。一旦比例、积分和微分动作的加权和低于饱和下限时,模块输出将保持在该下限值。
依存关系
要启用此参数,请选择限制输出。
编程用法
模块参数:LowerSaturationLimit |
类型:标量 |
默认值:-Inf |
线性化时忽略饱和界限 — 强制线性化以忽略输出限制
off (默认) | on
强制 Simulink 和 Simulink Control Design 线性化命令忽略在上限和下限参数中指定的模块输出限制。忽略输出限制允许您围绕某个工作点对模型进行线性化,即使该工作点会导致模块超出输出限制也一样。
依存关系
要启用此参数,请选择限制输出参数。
编程用法
模块参数:LinearizeAsGain |
类型:字符串、字符向量 |
值:"off" 、"on" |
默认值:"off" |
抗饱和方法 — 积分器抗饱和方法
无 (默认) | 反算 | 钳位
如果选中了限制输出且控制器组件的加权和超出了指定的输出限制,模块输出将保持在指定的限制值。但是,积分器输出可以继续增加(积分器饱和),从而加大了模块输出与模块组件之和之间的差距。换句话说,即使输出看起来在饱和界限范围内,模块中的内部信号也可以无限大。如果没有积分器抗饱和机制,可能会产生以下两种结果:
如果进入积分器的信号的符号始终不变,积分器将继续积分直到溢出。溢出值是积分器输出的数据类型的最大值或最小值。
如果进入积分器的信号的符号在加权和超出输出界限时发生改变,它将需要很长时间来防止积分器饱和,并返回位于模块饱和界限范围内的加权和。
无论哪种情况,控制器性能都会受到影响。要在没有抗饱和机制的情况下消除饱和效果,可能需要解调控制器(例如,通过减小控制器增益),从而导致控制器速度缓慢。要避免此问题,请使用此参数激活抗饱和机制。
- 无
不使用抗饱和机制。
- 反算
当模块输出饱和时,通过将饱和控制信号与非饱和控制信号之间的差异反馈给积分器来防止积分器饱和。下图表示连续时间控制器的反算反馈电路。要查看控制器配置的实际反馈电路,请右键点击该模块,然后选择封装 > 查看封装内部。
使用反算系数(Kb) 参数指定抗饱和反馈电路的增益。通常,设置
Kb = I
(对于具有导数动作的控制器,设置Kb = sqrt(I*D)
)是恰当的。对于饱和时间相对较长的被控对象,反算很有效。[1]- 钳位
当模块组件之和超出输出限制且积分器输出与模块输入具有相同的符号时,积分停止。当模块组件之和超出输出限制且积分器输出与模块输入具有相反的符号时,积分恢复。钳位有时称为条件积分。
对于饱和时间相对较小的被控对象,钳位可能很有用;但对于饱和时间较大的被控对象,它可能产生不良的瞬时响应。[1]
依存关系
要启用此参数,请选择限制输出参数。
编程用法
模块参数:AntiWindupMode |
类型:字符串、字符向量 |
值:"none" 、"back-calculation" 、"clamping" |
默认值:"none" |
反算系数(Kb) — 抗饱和反馈环的增益系数
1 (默认) | 标量
当模块输出饱和时,back-calculation
抗饱和方法防止积分器饱和。它通过向积分器反馈饱和控制信号与非饱和控制信号之间的差异来实现此目的。使用反算系数(Kb) 参数指定抗饱和反馈电路的增益。有关详细信息,请参阅抗饱和方法参数。
对于离散时间控制器,如果选择模块的使用 I*Ts 参数,则将此参数设置为值 Kb*Ts
,其中 Kb
是所需的系数,Ts
是采样时间。
依存关系
要启用此参数,请选择限制输出参数,并将抗饱和方法参数设置为反算。
编程用法
模块参数:Kb |
类型:标量 |
默认值:1 |
限制输出 — 将积分器输出限制为指定的饱和界限
off (默认) | on
启用此参数可将积分器输出限制在指定范围内。当积分器输出达到界限时,积分动作将关闭以防止积分饱和。使用下限和上限参数指定饱和界限。
依存关系
要启用此参数,请将控制器设置为具有积分动作的控制器类型。
编程用法
模块参数:LimitIntegratorOutput |
类型:字符串、字符向量 |
值:"off" 、"on" |
默认值:"off" |
上限 — 积分器的饱和上限
Inf
(默认) | 标量
指定积分器输出的上限。一旦积分器输出超出此值,就会保持为该值。
依存关系
要启用此参数,请在积分器饱和下,选择限制输出。
编程用法
模块参数:UpperIntegratorSaturationLimit |
类型:标量 |
默认值:Inf |
下限 — 积分器的饱和下限
-Inf
(默认) | 标量
指定积分器输出的下限。一旦积分器输出低于此值,就会保持为该值。
依存关系
要启用此参数,请在积分器饱和下,选择限制输出。
编程用法
模块参数:LowerIntegratorSaturationLimit |
类型:标量 |
默认值:-Inf |
数据类型
此选项卡中的参数主要用于使用 Fixed-Point Designer™ 生成定点代码。它们定义在生成代码时如何存储和处理与模块关联的数值量。
如果需要为定点代码生成配置数据类型,请点击打开定点工具并使用该工具配置选项卡中的其余参数。有关使用定点工具的信息,请参阅Autoscaling Data Objects Using the Fixed-Point Tool (Fixed-Point Designer)。
使用定点工具后,在必要时可以使用此选项卡中的参数调整定点数据类型设置。对于与模块关联的每个量,您可以指定:
浮点或定点数据类型,包括数据类型是否继承自模块中的上游值。
量的最小值和最大值,用于确定如何对量进行定标以使用定点表示。
要获取帮助以选择适当的值,请点击 以打开对应量的数据类型助手。有关详细信息,请参阅使用数据类型助手指定数据类型。
“数据类型”选项卡中具体列出的量取决于您配置 PID 控制器模块的方式。通常,您可以为以下类型的量配置数据类型:
乘积输出 - 存储在模块封装下执行的乘法的结果。例如,P 乘积输出存储增益模块的输出,该输出是模块输入与比例增益 P 的乘积。
参数 - 存储数值模块参数的值,例如 P、I 或 D。
模块输出 - 存储位于 PID 控制器模块封装下的模块的输出。例如,使用积分器输出指定名为 Integrator 的模块输出的数据类型。此模块位于 Integrator 子系统中的封装下,并计算控制器操作的积分项。
累加器 - 存储与求和模块关联的值。例如,SumI2 累加器设置与求和模块 SumI2 关联的累加器的数据类型。此模块位于 Anti-Windup 子系统的 Back Calculation 子系统中的封装下。
通常,您可以通过查看 PID Controller 模块封装并检查其子系统来查找与任何列出的参数关联的模块。您还可以使用模型资源管理器在封装下搜索列出的参数名称,例如 SumI2
。(请参阅模型资源管理器。)
匹配输入和内部数据类型
默认情况下,模块中的所有数据类型都设置为继承: 从内部规则继承。使用此设置时,Simulink 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。
在某些情况下,模块内的数据类型之间可能会发生不兼容。例如,在连续时间下,封装下的 Integrator 模块只能接受 double 类型的信号。如果模块输入信号的类型不能转换为 double,例如 uint16,则生成代码时类型继承的内部规则会生成错误。
为了避免此类错误,可以使用“数据类型”设置强制进行数据类型转换。例如,您可以将 P 乘积输出、I 乘积输出和 D 乘积输出显式设置为 double,确保到达连续时间积分器的信号类型为 double。
通常,不建议在连续时间下将模块用于代码生成应用。但是,如果您将某些值显式设置为与模块中的下游信号约束不兼容的数据类型,则在离散时间下会发生类似的数据类型错误。在这种情况下,请使用“数据类型”设置确保所有数据类型在内部兼容。
定点运算参数整数舍入模式 — 定点运算的舍入模式
向下 (默认) | 向上 | 收敛 | 最邻近值 | 舍入 | 最简 | 零
指定定点运算的舍入模式。有关详细信息,请参阅舍入 (Fixed-Point Designer)。
模块参数始终舍入到最邻近的可表示值。要控制模块参数的舍入方法,请在封装字段中使用 MATLAB® 舍入函数输入表达式。
编程用法
模块参数:RndMeth |
类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Floor' |
对整数溢出进行饱和处理 — 溢出操作的方法
off
(默认) | on
指定对溢出是进行饱和处理还是绕回处理。
off
- 溢出将绕回到数据类型可以表示的合适值。例如,数字 130 不适合一个有符号的 8 位整数,因此绕回 -126。
on
- 将溢出饱和处理为数据类型能够表示的最小值或最大值。例如,一个有符号的 8 位整数的溢出可以饱和处理为 -128 或 127。
提示
如果您的模型存在可能的溢出,而您希望在生成的代码中进行显式饱和保护,请考虑选中此复选框。
如果您希望优化生成的代码的效率,请考虑清除此复选框。
清除此复选框还可以帮助您避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。
一般情况下,代码生成进程可以检测到何时不可能发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
模块参数:SaturateOnIntegerOverflow |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
锁定数据类型设置以防止被定点工具更改 — 防止定点工具覆盖数据类型
off
(默认) | on
选择此参数可防止定点工具覆盖您对此模块指定的数据类型。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
状态属性
此选项卡中的参数主要用于代码生成。
状态名称(例如,'position') — 连续时间滤波器和积分器状态的名称
''
(默认) | 字符向量
对于连续时间 PID 控制器,为与积分器或滤波器关联的状态分配唯一名称。(有关离散时间 PID 控制器中的状态名称的信息,请参阅状态名称参数。)状态名称的用途举例如下:
用于生成代码中的对应变量
作为在仿真期间记录状态时存储名称的一部分
用于通过线性化模块获得的线性模型中的对应状态
有效的状态名称以字母或下划线字符开始,后跟字母数字或下划线字符。
依存关系
要启用此参数,请将时域设置为连续时间。
编程用法
参数:IntegratorContinuousStateAttributes 、FilterContinuousStateAttributes |
类型:字符向量 |
默认值:'' |
状态名称 — 离散时间滤波器和积分器状态的名称
空字符串 (默认) | 字符串 | 字符向量
对于离散时间 PID 控制器,为与积分器或滤波器关联的状态分配唯一名称。(有关连续时间 PID 控制器中的状态名称的信息,请参阅状态名称(例如,'position') 参数。)
有效的状态名称以字母或下划线字符开始,后跟字母数字或下划线字符。状态名称的用途举例如下:
用于生成代码中的对应变量
作为在仿真期间记录状态时存储名称的一部分
用于通过线性化模块获得的线性模型中的对应状态
有关在代码生成中使用状态名称的详细信息,请参阅C Data Code Interface Configuration for Model Interface Elements (Simulink Coder)。
依存关系
要启用此参数,请将时域设置为离散时间。
编程用法
参数:IntegratorStateIdentifier 、FilterStateIdentifier |
类型:字符串、字符向量 |
默认值:"" |
状态名称必须解析为 Simulink 信号对象 — 要求将状态名称解析为信号对象
off
(默认) | on
选择此参数会要求将离散时间积分器或滤波器状态名称解析为 Simulink 信号对象。
依存关系
要为离散时间积分器或滤波器状态启用此参数,请执行下列操作:
将时域设置为离散时间。
指定积分器或滤波器状态名称的值。
将模型配置参数信号解析设置为无以外的值。
编程用法
模块参数:IntegratorStateMustResolveToSignalObject 、FilterStateMustResolveToSignalObject |
类型:字符串、字符向量 |
值:"off" 、"on" |
默认值:"off" |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
详细信息
二自由度 PID 控制器的分解
二自由度 PID 控制器可以解释为具有预滤波器的 PID 控制器或具有前馈元素的 PID 控制器。
在并行形式中,可以通过以下模块图等效建模二自由度 PID 控制器,其中 C 是单自由度 PID 控制器,F 是参考信号上的预滤波器。
Ref 是参考信号,y 是来自测量系统输出的反馈,u 是控制器输出。对于并行形式的连续时间二自由度 PID 控制器,F 和 C 的传递函数为
其中 b 和 c 是设定点权重。
对于理想形式的二自由度 PID 控制器,传递函数为
类似的分解适用于离散时间二自由度控制器。
此外,还可以通过以下模块图来建立并行二自由度 PID 控制器模型:
在此实现中,Q 的作用相当于对参考信号进行前馈调节。对于并行形式的连续时间二自由度 PID 控制器,Q 的传递函数为
对于理想形式的二自由度 PID 控制器,传递函数为
C 的传递函数与滤波器分解中的相同。
类似的分解适用于离散时间二自由度控制器。
参考
[1] Visioli, A., "Modified Anti-Windup Scheme for PID Controllers," IEE Proceedings - Control Theory and Applications, Vol. 150, Number 1, January 2003
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
对于连续时间 PID 控制器(时域设置为连续时间):
考虑使用 模型离散化器 将连续时间模块映射到支持代码生成的离散等效值。要访问模型离散化器,请在 App 选项卡的控制系统下,点击模型离散化器。
不建议用于生产代码。
对于离散时间 PID 控制器(时域设置为离散时间):
位于触发子系统层次结构中时取决于绝对时间。
生成的代码在特定条件下依赖于
memcpy
或memset
函数 (string.h
)。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
仅对离散时间 PID 控制器支持定点代码生成(时域设置为离散时间)。
版本历史记录
在 R2009b 中推出R2024a: 使用来自外部源的导数信号
PID Controller 模块现在允许您将被控对象信号 y 的导数直接作为模块的输入。当您的模型中有可用的导数信号并且希望跳过模块内导数的计算时,这很有帮助。
要启用提供导数的输入端口,请选择具有导数动作的控制器类型并启用使用外部源的导数参数。
R2022b: 积分器和滤波器的初始条件超出饱和界限时会发生错误
现在,当积分器或滤波器初始条件值超出输出饱和界限时,模块会出错。在以前的版本中,当这些初始条件具有这样的值时,模块不会出错。
如果此更改影响到您的模型,请更新 PID 积分器或滤波器初始条件值,使这些值在输出饱和界限范围内。
R2021b: ReferenceBlock
参数返回不同路径
R2020b: ReferenceBlock
参数返回不同路径
从 R2020b 开始,get_param
函数为 ReferenceBlock
参数返回不同值。ReferenceBlock
参数是所有 Simulink 模块共有的属性,它给出模块链接到的库模块的路径。PID Controller (2DOF) 和 Discrete PID Controller (2DOF) 模块现在链接到 'pid_lib/PID Controller (2DOF)'
。以前,这些模块链接到 'simulink/Continuous/PID Controller (2DOF)'
。
此更改不会影响任何其他功能或工作流。您仍可以将先前的路径与 set_param
函数结合使用。
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)