Matlab simulink建模与仿真 第四章(非线性模块库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili

一、非线性模块库中的模块概览

二、动态饱和和死区模块

1、Saturation Dynamic动态饱和模块

(1)Saturation饱和模块可认为是Saturation Dynamic动态饱和模块的功能子集,它们都能限制输出的上下限,不同的是动态饱和模块每个时刻的输出上下限(即Limit output功能)是由当前的外界输入决定的(当然,动态饱和模块的输出上下限也可以通过双击模块直接设定)。这里仅介绍Saturation Dynamic动态饱和模块。

(2)如下例所示,up端口输入的是该模块的输出上限信号,lo端口输入的是该模块的输出下限信号,u端口输入的则是需要处理的输入信号。

2、Dead Zone Dynamic动态死区模块

(1)Dead Zone死区模块可认为是Dead Zone Dynamic动态死区模块的功能子集,它们有上死区和下死区的概念,当输入信号在死区范围内时输出为0,否则按输入信号原本的值与最近死区边界的差值(最近死区边界做减数)进行输出,不同的是动态死区模块每个时刻的死区范围是由当前的外界输入决定的。这里仅介绍Dead Zone Dynamic动态死区模块。

(2)如下例所示,up端口输入的是该模块的上死区信号,lo端口输入的是该模块的下死区信号,u端口输入的则是需要处理的输入信号。

三、反向间隙及继电器模块

1、Backlash反向间隙模块

(1)齿隙指的是两个互相啮合的齿轮在传动过程中存在的间隙,当某一个齿轮突然反向转动时,齿隙的存在将使得另一个齿轮不能马上也跟着反转。在simulink中可以用Backlash模块模拟齿隙(由死区宽度指定),或者与这种物理现象相类似的其它具有非线性特征的物理现象。

(2)当仿真开始时,Backlash模块的死区中心位于设定的初始输出值处(即上死区和下死区的平均值等于初始输出值);在仿真过程中,死区宽度保持不变,死区宽度的作用见下例。

(3)下例所示的Backlash模块,其死区宽度为1,初始时刻时输出值为0,故初始时刻的死区位于[-0.5, 0.5]。

①由于死区的存在,当输入的正弦信号的值从0达到0.5以后,Backlash模块才会有大于0的输出。

②当输入的正弦信号的值从0.5达到1以后,其值开始下降,这对应的实际物理现象可以是齿轮反转,由于死区的宽度为1,Backlash模块的输出会保持不变一段时间,直到输入达到0及以下(正好下降了一个死区宽度),输出才会开始下降。

③当输入的正弦信号的值从0达到-1以后,其值开始上升,这对应的实际物理现象可以是齿轮再反转,由于死区的宽度为1,Backlash模块的输出会保持不变一段时间,直到输入达到0及以上(正好上升了一个死区宽度),输出才会开始上升。

2、Relay继电器模块

(1)继电器中有开启点和关闭点的概念:

①当输入信号的值小于关闭点,逐渐向关闭点靠近时,当达到关闭点后,继电器的输出仍保持关闭点的值,直到输入信号的值大于开启点,继电器的输出才会切换为开启点的值。

②当输入信号的值大于开启点,逐渐向开启点靠近时,当达到开启点后,继电器的输出仍保持开启点的值,直到输入信号的值小于关闭点,继电器的输出才会切换为关闭点的值。

(2)下例所示的Relay模块,其开启点和关闭点分别为0.5和-0.5,开启点输出为1,关闭点输出为0。

四、比例极限及穿越点检查模块

1、Rate Limiter比例极限模块

(1)Rate Limiter比例极限模块可认为是Rate Limiter Dynamic动态比例极限模块的功能子集,动态比例极限模块每个时刻的比例极限都由当前输入的up和lo信号决定,比例极限模块的比例极限则是在窗口中进行设定,除此之外二者没有差别,下面主要介绍比例极限模块。

(2)当输入信号u的变化率大于上升比例极限(大于0)或者小于下降比例极限(小于0)时,比例极限模块将会按照比例极限值对输入信号进行“缓变”处理,这和饱和模块类似,只是限制的是数值变化率而不是数值。

(3)下例所示的比例极限模块,其上下比例极限分别为0.5和-0.5。

2、Hit Crossing穿越点检测模块

(1)当输入信号达到某个条件时,穿越点检测模块会产生相应的布尔类型输出,除了下面三种情况外,穿越点检测模块的输出均为0。

①如果输入信号沿指定方向(Hit crossing direction)越过偏移值(Hit crossing offset),则穿越点检测模块在越过时输出1。

②如果输入信号沿指定方向到达偏移值(这个时刻称为“击中时间”),然后停留在偏移值上,则从击中时间到信号离开偏移值的时间内,穿越点检测模块输出1。

③如果输入信号恒定且等于偏移值,则只有在指定方向为任一(either)的情况下,穿越点检测模块才会输出1。

(2)下例所示的穿越点检测模块,其偏移值为1,指定方向为either。

五、量化及归零模块

1、Quantizer量化模块

(1)量化模块的功能是按照所设定的时间间隔,将输入的平滑信号量化为阶梯状信号,其量化规则如下,其中u为输入信号,q为时间间隔(Quantization interval),y为输出信号,round函数起到一个四舍五入的作用。

(2)下例所示的量化模块,其时间间隔为0.01。

2、Wrap To Zero归零模块

(1)归零模块的功能是如果输入大于所设定的阈值(Threshold),输出结果归零,否则输出信号等于输入信号。

(2)下例所示的归零模块,其阈值为5。

六、库仑摩擦和粘滞摩擦模块

1、概述

        所有的摩擦力可以划分为两大类——库仑摩擦和粘滞摩擦,前者与运动速度无关(当然,静止与非静止还是需要关注的),后者与运动速度成正比关系。

2、Coulomb & Viscous Friction模块

(1)在simulink中,可以使用Coulomb & Viscous Friction模块模拟库仑摩擦及粘滞摩擦,模块计算摩擦力的公式为y = sign(x) * (Gain * abs(x) + Offset),其中x为输入信号(速度),y为输出(摩擦力),sign为符号函数,abs为取绝对值函数。

①符号函数sign(x):当x>0时,sign(x)=1;当x=0时,sign(x)=0;当x<0时,sign(x)=-1。

②取绝对值函数abs(x):当x≥0时,abs(x)=x;当x<0时,abs(x)=-x。

(2)默认情况下,Offset是一个具有四个元素的向量[1 3 2 0],此默认向量使用四个不同的偏移值测试相同的输入值,实际上用户可以指定具有不同元素数目的向量。

(3)Coulomb & Viscous Friction模块接受一个输入并产生一个输出,输入可以是标量、向量或矩阵。

①对于向量或矩阵输入,偏移量和增益必须具有与输入相同的维度或为标量。

②对于标量输入,输出将是标量、向量或矩阵,具体取决于偏移量和增益的维度。

<think>好的,我现在需要回答用户关于Matlab SimulinkSaturation Block的用法和功能的问题。首先,我得先回忆一下Saturation Block的基本作用。记得这个模块是用来限制输入信号的上下限的,也就是说,当输入超过设定的上限或下限时,输出会被限制在设定的范围内。这可能用于防止信号超出系统允许的范围,比如保护执行器或避免数值溢出。 接下来,我需要确认用户的具体需求。他们可能想知道如何配置这个模块,比如如何设置上下限,以及如何在Simulink模型中使用它。用户可能还需要一个简单的示例,帮助他们理解实际应用场景。此外,用户可能关心这个模块在不同情况下的行为,例如当输入在范围内、低于下限或高于上限时输出的变化。 然后,我需要参考用户提供的引用内容,看看是否有相关的模块或例子可以借鉴。例如,引用[1]提到了Math Operator模块中的一些常用模块,虽然Saturation不在其中,但可以推测它属于信号处理或连续系统中的模块。引用[2]和[4]涉及控制系统和MPPT的设计,可能在这些应用中会用到Saturation Block来限制控制信号的幅度,防止执行器饱和或系统过载。 接下来,我需要组织回答的结构。按照用户的要求,回答需要结构清晰,分步骤说明使用方法,并给出示例。可能需要包括以下部分:功能简介、参数设置、使用方法、示例模型搭建步骤,以及相关问题。同时,要确保使用中文,并且行内公式用$...$,独立公式用$$...$$。 在功能简介部分,我需要明确说明Saturation Block的作用,即限制信号的范围。参数设置需要解释Upper limit和Lower limit这两个主要参数,以及如何处理动态变化的情况。使用方法部分应分步骤说明如何添加模块、配置参数、连接信号等。示例教程可以举一个简单的模型,比如限制正弦波的幅度,这样用户容易理解。最后,生成的相关问题需要考虑用户可能的进一步疑问,如动态限幅、应用场景、比较其他限幅模块等。 需要检查是否有引用需要标注。例如,在提到Simulink模块的位置时,如果引用中有相关模块的说明,可以添加引用标识。但根据提供的引用内容,可能没有直接提到Saturation Block,所以可能不需要引用。不过,用户提供的引用中有关于添加模块的步骤(如引用[2]和[3]中的add_block),这可能示例中的模块添加有关,因此可以在示例步骤中引用这些方法。 最后,确保回答中的LaTeX格式正确,例如在公式中使用$...$,如当提到限幅公式时,写成$y = \text{sat}(u)$,并正确使用代码块展示模型搭建步骤和示例结果。同时,生成的示例模型需要展示输入和输出的对比,比如使用Scope模块显示原始正弦波和经过限幅后的信号。 现在需要将这些思考整理成一个连贯的回答,确保各部分逻辑清晰,步骤明确,并包含用户要求的所有部分。</think>### Matlab Simulink Saturation Block 用法详解 #### 一、功能简介 Saturation Block(饱和模块)用于限制输入信号的动态范围,当输入信号$u$超过预设的**上限值**(Upper limit)或**下限值**(Lower limit)时,输出$y$将被限制在设定范围内[^1]。其数学表达式为: $$ y = \begin{cases} \text{Upper limit} & u \geq \text{Upper limit} \\ u & \text{Lower limit} < u < \text{Upper limit} \\ \text{Lower limit} & u \leq \text{Lower limit} \end{cases} $$ #### 二、关键参数设置 1. **Upper limit**:输入信号允许的最大值(默认值=0.5) 2. **Lower limit**:输入信号允许的最小值(默认值=-0.5) 3. **Treat as gain when linearizing**:线性化时是否视为增益(高级选项) #### 三、使用方法(分步骤说明) 1. **添加模块** 在Simulink库浏览器中选择:`Simulink → Discontinuities → Saturation`,拖拽至模型画布[^2]。 ```matlab add_block('simulink/Discontinuities/Saturation', [modelName '/Saturation']); ``` 2. **配置参数** 双击模块打开属性窗口,设置上下限值。例如限制信号在$[-1, 5]$范围内: - Upper limit = `5` - Lower limit = `-1` 3. **信号连接** 将输入信号源(如Sine Wave模块)连接到Saturation输入端,输出端连接Scope或后续处理模块[^3]。 #### 四、示例教程:限制正弦波幅度 **步骤1:搭建模型** - 添加以下模块: ```matlab add_block('simulink/Sources/Sine Wave', [modelName '/Sine']); add_block('simulink/Discontinuities/Saturation', [modelName '/Saturation']); add_block('simulink/Sinks/Scope', [modelName '/Scope']); ``` **步骤2:参数设置** - Sine Wave频率=1Hz,幅值=10(原始信号范围$[-10,10]$) - Saturation模块设置:Upper limit=5,Lower limit=-5 **步骤3:仿真结果** 运行仿真后,Scope显示原始正弦波被限制在$[-5,5]$范围内(见图1)。 ![输入输出对比](示例图:原始信号为±10的正弦波,输出被截断为±5的平顶波形) #### 五、典型应用场景 1. 保护执行器(如电机扭矩限制) 2. 防止数值溢出(如积分器抗饱和) 3. 信号规范化处理(如归一化到特定范围)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zevalin爱灰灰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值