PID Controller
连续时间或离散时间 PID 控制器
库:
Simulink /
Continuous
描述
PID Controller 模块实现一个 PID 控制器(PID、PI、PD、仅 P 或仅 I)。该模块与时域参数设置为连续时间的 Discrete PID Controller 模块相同。
此模块的输出是输入信号、输入信号积分和输入信号导数的加权和。权重为比例、积分和导数增益参数。通过一阶极点过滤导数操作。
该模块支持多种控制器类型和结构体。此模块中可配置的选项包括:
控制器类型(PID、PI、PD、仅 P 或仅 I)- 请参阅控制器参数。
控制器形式(Parallel 或 Ideal)- 请参阅形式参数。
时域(连续或离散)- 请参阅时域参数。
初始条件和重置触发器 - 请参阅源和外部重置参数。
输出饱和界限和内置抗饱和机制 - 请参阅限制输出参数。
无扰动切换和多环控制的信号跟踪 - 请参阅启用跟踪模式参数。
当您更改这些选项时,模块的内部结构体会通过激活不同的可变子系统而发生更改。(请参阅Implement Variations in Separate Hierarchy Using Variant Subsystems。)要检查模块及其可变子系统的内部结构体,请右键点击该模块,然后选择封装 > 查看封装内部。
控制配置
在一个常见的实现中,PID Controller 模块在反馈环的前馈路径中运行。
模块的输入通常是一个误差信号,这是参考信号与系统输出之间的误差。有关允许设定点加权的双输入模块,请参阅 PID Controller (2DOF)。
PID 增益调整
PID 控制器系数可手动或自动调整。自动调整需要 Simulink® Control Design™ 软件。有关自动调整的详细信息,请参阅选择调节方法参数。
示例
使用 PID Controller 模块进行抗饱和控制
此示例说明当作动器饱和时,如何使用抗饱和方案来防止 PID 控制器中的积分饱和。Simulink® 中的 PID Controller 模块提供两种内置的抗饱和方法(back-calculation
和 clamping
),还提供一种跟踪模式来处理更复杂的工业场景。PID Controller 模块支持几个功能,这些功能允许它在常见的工业场景下处理控制器饱和问题。
Bumpless Control Transfer Between Manual and PID Control
Achieve bumpless control transfer when switching from manual control to proportional integral derivative (PID) control. The model uses the PID Controller block in Simulink® to control a first-order process with dead-time.
Engine Timing Model with Closed Loop Control
Develop and implement a closed loop control algorithm for the open loop engine model described in Model Engine Timing Using Triggered Subsystems. In this example, the model sldemo_enginewc
contains a controller that regulates engine speed using a fast throttle actuator such that changes in load torque have minimal effect. The controller is implemented using a discrete PI controller.
端口
输入
Port_1( u ) — 误差信号输入
标量 | 向量
参考信号与受控系统输出之间的差异,如下图所示。
当误差信号是向量时,该模块分别对每个信号起作用,从而向量化 PID 系数并产生相同维度的向量输出信号。您可以将 PID 系数和一些其他参数指定为与输入信号具有相同维度的向量。这样做相当于为输入信号中的每一项指定单独的 PID 控制器。
数据类型: 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
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( y ) — 控制器输出
标量 | 向量
控制器输出,通常基于输入信号、输入信号的积分和输入信号的导数,经由比例、积分和导数增益参数加权求和。通过一阶极点过滤导数操作。控制器信号中存在哪些项取决于您为控制器参数选择的内容。当前设置的基本控制器传递函数显示在模块参数的补偿器公式部分中和封装下。其他参数修改模块输出,例如上限和下限饱和参数指定的饱和界限。
当任一输入为向量信号时,控制器输出是向量信号。在这种情况下,模块充当 N 个独立 PID 控制器,其中 N 是输入向量中的信号数。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
参数
控制器 — 控制器类型
PID (默认) | PI | PD | P | I
指定在控制器中包含比例项、积分项和导数项中的哪些项。
- PID
比例、积分和导数动作。
- PI
仅比例和积分动作。
- PD
仅比例和导数动作。
- P
仅比例动作。
- I
仅积分动作。
提示
当前设置的控制器传递函数显示在模块参数的补偿器公式部分中和封装下。
编程用法
模块参数:Controller |
类型:字符串、字符向量 |
值:"PID" 、"PI" 、"PD" 、"P" 、"I" |
默认值:"PID" |
形式 — 控制器结构
并行 (默认) | 理想
指定控制器结构是“并行”还是“理想”。
- 并行
控制器输出是比例、积分和导数动作的总和,三者分别用 P、I 和 D 独立进行加权。例如,对于连续时间并行形式 PID 控制器,传递函数为:
对于离散时间并行形式的控制器,传递函数为:
其中积分器方法和滤波器方法参数分别确定 α(z) 和 β(z)。
- 理想
比例增益 P 作用于所有动作的总和。例如,对于连续时间理想形式 PID 控制器,传递函数为:
对于离散时间理想形式的控制器,传递函数为:
其中积分器方法和滤波器方法参数分别确定 a(z) 和 b(z)。
提示
当前设置的控制器传递函数显示在模块参数的补偿器公式部分中和封装下。
编程用法
模块参数:Controller |
类型:字符串、字符向量 |
值:"Parallel" 、"Ideal" |
默认值:"Parallel" |
时域 — 指定连续时间或离散时间控制器
连续时间 (默认) | 离散时间
选择离散时间时,建议您为模块指定显式采样时间。请参阅采样时间(-1 表示继承) 参数。选择离散时间也会启用积分器方法和滤波器方法参数。
当 PID Controller 模块位于具有同步状态控件(请参阅 State Control (HDL Coder) 模块)的模型中时,您不能选择连续时间。
注意
PID Controller 和 Discrete PID Controller 模块是相同的,只是此参数的默认值不同。
编程用法
模块参数: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 |
积分器方法 — 离散时间控制器中积分的计算方法
前向欧拉 (默认) | 后向欧拉 | 梯形
在离散时间内,控制器传递函数的积分项为 Iα(z),其中 α(z) 取决于您使用此参数指定的积分器方法。
- 前向欧拉
正向矩形(左手)逼近方法,
这种方法最适合较小的采样时间,此时奈奎斯特限制与控制器带宽相比来说比较大。对于较大的采样时间,前向欧拉方法可能带来不稳定性,即使离散的是在连续时间下表现稳定的系统。
- 后向欧拉
反向矩形(右手)逼近方法,
后向欧拉方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。
- 梯形
双线性逼近法。
梯形方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。在所有可用的积分方法中,梯形方法可在离散化系统与对应的连续时间系统的频域属性之间生成最接近的匹配。
提示
当前设置的控制器公式显示在模块参数的补偿器公式部分中和封装下。
注意
对于后向欧拉或梯形方法,如果出现以下情况之一,则不能为模块生成 HDL 代码:
选择了限制输出且抗饱和方法为无以外的值。
选择了启用跟踪模式。
有关离散时间积分的详细信息,请参阅Discrete-Time Integrator模块参考页。
依存关系
要启用此参数,请将时域设置为离散时间,并将控制器设置为具有积分动作的控制器类型。
编程用法
模块参数:IntegratorMethod |
类型:字符串、字符向量 |
值:"Forward Euler" 、"Backward Euler" 、"Trapezoidal" |
默认值:"Forward Euler" |
滤波器方法 — 离散时间控制器中导数的计算方法
前向欧拉 (默认) | 后向欧拉 | 梯形
在离散时间内,控制器传递函数的导数项为:
其中 α(z) 取决于您使用此参数指定的滤波器方法。
- 前向欧拉
正向矩形(左手)逼近方法,
这种方法最适合较小的采样时间,此时奈奎斯特限制与控制器带宽相比来说比较大。对于较大的采样时间,前向欧拉方法可能带来不稳定性,即使离散的是在连续时间下表现稳定的系统。
- 后向欧拉
反向矩形(右手)逼近方法,
后向欧拉方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。
- 梯形
双线性逼近法。
梯形方法的一个优点是:使用这种方法离散稳定的连续时间系统始终会生成稳定的离散时间结果。在所有可用的积分方法中,梯形方法可在离散化系统与对应的连续时间系统的频域属性之间生成最接近的匹配。
提示
当前设置的控制器公式显示在模块参数的补偿器公式部分中和封装下。
有关离散时间积分的详细信息,请参阅Discrete-Time Integrator模块参考页。
依存关系
要启用此参数,请将时域设置为离散时间并启用使用滤波导数。
编程用法
模块参数:FilterMethod |
类型:字符串、字符向量 |
值:"Forward Euler" 、"Backward Euler" 、"Trapezoidal" |
默认值:"Forward Euler" |
常设
源 — 控制器增益和滤波器系数的信源
内部 (默认) | 外部
如果为参数启用外部输入,您可以在模块外部计算 PID 增益和滤波器系数,并将它们作为信号输入提供给模块。
- 内部
使用模块参数 P、I、D 和 N 指定控制器增益和滤波器系数。
- 外部
使用模块输入从外部指定 PID 增益和滤波器系数。对于当前控制器类型需要的每个参数,模块上会出现一个额外的输入端口。
外部增益输入非常有用,例如,当您希望将不同的 PID 参数化映射到模块的 PID 增益时。您还可以使用外部增益输入来实现增益调度 PID 控制。在增益调度控制中,您可以通过模型中的逻辑或其他计算确定 PID 增益,并将它们提供给模块。
小心
如果启用外部增益输入,请避免使增益依赖模块输出 y。如果存在这样的依存关系,生成的 PID 传递函数会导致代数环,因为计算模块输出值需要知道模块输出值。这种代数环容易带来不稳定性和发散性。尝试用时间和模块输入来表示收益,而不是输出。有关代数环的详细信息,请参阅代数环概念。
如果从外部提供增益,则会分别对积分和导数增益值的时变进行积分和微分。出现这种结果是因为在连续时间和离散时间中,增益都会在积分或微分之前应用于信号。例如,对于采用外部输入的连续时间 PID 控制器,积分项的实现方式如下图所示。
在进行积分之前,系统会在模块内将输入信号 u 乘以外部提供的积分增益 I。此实现的结果为:
因此,积分增益包含在积分中。类似地,在模块的导数项中,进行微分之前会乘以导数增益,从而导致导数增益 D 被微分。
编程用法
模块参数:ControllerParametersSource |
类型:字符串、字符向量 |
值:"internal" 、"external" |
默认值:"internal" |
比例(P) — 比例增益
1 (默认) | 标量 | 向量
为比例增益指定有限实数增益值。控制器形式可以是:
并行 - 比例动作独立于积分和导数动作。例如,对于连续时间并行 PID 控制器,传递函数为:
对于离散时间并行形式的控制器,传递函数为:
其中积分器方法和滤波器方法参数分别确定 α(z) 和 β(z)。
理想 - 比例增益乘以积分和导数项。例如,对于连续时间理想 PID 控制器,传递函数为:
对于离散时间理想形式的控制器,传递函数为:
其中积分器方法和滤波器方法参数分别确定 α(z) 和 β(z)。
可调: Yes
依存关系
要启用此参数,请在常设选项卡中,将控制器参数源设置为内部,并将控制器设置为 PID、PD、PI 或 P。
编程用法
模块参数: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 |
选择调节方法 — 用来自动调整控制器系数的工具
基于传递函数(PID 调节器) (默认) | 基于频率响应
如果您有 Simulink Control Design 软件,则可以自动调整 PID 系数。为此,请使用此参数选择调整工具,然后点击调节。
- 基于传递函数(PID 调节器)
使用 PID 调节器,您可以在检查相关系统响应以验证性能的同时交互调节 PID 系数。默认情况下,这种 PID 调节器适合线性化被控对象模型。对于无法线性化的模型,您可以根据从仿真或测量的响应数据估算出的被控对象模型来调整 PID 系数。有关详细信息,请参阅 Simulink 中基于模型的 PID 调节简介 (Simulink Control Design)。
- 基于频率响应
使用基于频率响应的 PID 调节器,它根据通过仿真获得的频率响应估计数据来调节 PID 控制器系数。这种调整方法特别适用于不可线性化或线性化为零的被控对象。有关详细信息,请参阅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。
多环控制
使用信号跟踪来防止多环控制方法中的模块饱和,如以下模型中所示。
Inner Loop 子系统包含下图所示的模块。
由于 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" |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
参考
[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
)。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
此模块具有一个默认 HDL 架构。
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
仅对离散时间 PID 控制器支持 HDL 代码生成(时域设置为离散时间)。
如果积分器方法设置为后向欧拉或梯形,则在以下任一情况下不能为模块生成 HDL 代码:
选择了限制输出且抗饱和方法为无以外的任何值。
选择了启用跟踪模式。
要生成 HDL 代码,请执行以下操作:
使用离散时间 PID 控制器。在时域部分中,指定离散时间。
保留使用滤波导数复选框处于选中状态。
在内部指定滤波器和积分器的初始条件。在初始化选项卡上,将源指定为内部。
您可以在内部和外部为 HDL 代码生成指定滤波器系数。在常设选项卡上,对于源,您可以使用内部或外部。
将外部重置设置为无。
当您使用双精度输入时,不要将抗饱和方法设置为钳位。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
仅对离散时间 PID 控制器支持定点代码生成(时域设置为离散时间)。
版本历史记录
在 R2009b 中推出R2024a: 使用来自外部源的导数信号
PID Controller 模块现在允许您将被控对象信号 y 的导数直接作为模块的输入。当您的模型中有可用的导数信号并且希望跳过模块内导数的计算时,这很有帮助。
要启用提供导数的输入端口,请选择具有导数动作的控制器类型并启用使用外部源的导数参数。
R2022b: 积分器和滤波器的初始条件超出饱和界限时会发生错误
现在,当积分器或滤波器初始条件值超出输出饱和界限时,模块会出错。在以前的版本中,当这些初始条件具有这样的值时,模块不会出错。
如果此更改影响到您的模型,请更新 PID 积分器或滤波器初始条件值,使这些值在输出饱和界限范围内。
R2021b: ReferenceBlock
参数返回不同路径
R2020b: ReferenceBlock
参数返回不同路径
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)