资源描述
实验九 SIMULINK仿真
一、实验目的
SIMULINK是一个对动态系统(包括连续系统、离散系统和混合系统)进行建模、仿真和综合分析的集成软件包,是MATLAB的一个附加组件,其特点是模块化操作、易学易用,而且能够使用MATLAB提供的丰富的仿真资源。在 SIMULINK环境中,用户不仅可以观察现实世界中非线性因素和各种随机因素对系统行为的影响,而且也可以在仿真进程中改变感兴趣的参数,实时地观察系统行为的变化。因此SIMULINK已然成为目前控制工程界的通用软件,而且在许多其他的领域,如通信、信号处理、DSP、电力、金融、生物系统等,也获得重要应用。对于信息类专业的学生来说,无论是学习专业课程或者相关课程设计还是在今后的工作中,掌握SIMULINK,就等于是有了一把利器。
本次实验的目的就是通过上机训练,掌握利用SIMULINK对一些工程技术问题(例如数字电路)进行建模、仿真和分析的基本方法。
二、实验预备知识
1. SIMULINK快速入门
在工程实际中,控制系统的结构往往很复杂,如果不借助专用的系统建模软件,则很难准确地把一个控制系统的复杂模型输入计算机,对其进行进一步的分析与仿真。1990年,Math Works软件公司为MATLAB提供了新的控制系统模型图输入与仿真工具,并命名为SIMULAB,该工具很快就在控制工程界获得了广泛的认可,使得仿真软件进入了模型化图形组态阶段。但因其名字与当时比较著名的软件SIMULA类似,所以1992年正式将该软件更名为SIMULINK。SIMULINK的出现,给控制系统分析与设计带来了福音。顾名思义,该软件的名称表明了该系统的两个主要功能:Simu(仿真)和Link(连接),即该软件可以利用系统提供的各种功能模块并通过信号线连接各个模块从而创建出所需要的控制系统模型,然后利用SIMULINK提供的功能来对系统进行仿真和分析。
n SIMULINK的启动
首先启动MATLAB,然后在MATLAB主界面中单击上面的Simulink按钮或在命令窗口中输入simulink命令。命令执行之后将弹出simulink的模块库浏览器,如图1所示。
n SIMULINK的模块库
Simulink的模块库有两部分组成:基本模块和各种应用工具箱。
ü 系统提供的应用工具箱有:
Communications Blockset(通信模块集) Control System Toolbox(控制系统工具箱)
Dials & Gauges Blockset(面板和仪表模块集) DSP Blockset(数字信号处理模块集)
基本的simulink模块
常用模块
各领域内的工具箱
图1: Simulink模块库浏览器
Fixed-Point Blockset
(定点模块集)
Fuzzy Logic Toolbox
(模糊逻辑工具箱)
NCD Blockset
(非线性控制设计模块集)
Neural Network Blockset
(神经网络模块集)
RF Blockset
( 射频模块集)
Power System Blockset
(电力系统模块集)
Real-Time Windows Target
(实时窗口目标库)
Real-Time Workshop
(实时工作空间库)
Stateflow(状态流程库)
Simulink Extras
( Simulink附加库)
System ID Blockset(系统辨识模块集)
ü Simulink的基本模块按功能进行分类,包括以下8类子库:
Continuous(连续系统模块)
Discrete(离散系统模块)
Function & Tables(函数和平台模块)
Math(数学运算模块)
Nonlinear(非线性模块)
Signals & Systems(信号和系统模块)
Sinks(接收器模块)
Sources(输入源模块)
下面列出一些基本模块的功能说明,以供实际使用时查询。
表1:连续系统模块(Continuous)功能
模块名
功能简介
模块名
功能简介
Integrator
输入信号积分
Derivative
输入信号微分
State-Space
线性状态空间系统模型
Transport Delay
输入信号延时一个固定时间再输出
Transfer-Fcn
线性传递函数模型
Variable Transport Delay
输入信号延时一个可变时间再输出
Zero-Pole
以零极点表示的传递函数模型
表2:离散系统模块(Discrete)功能
模块名
功能简介
模块名
功能简介
Discrete-time Integrator
离散时间积分器
Discrete Filter
IIR与FIR滤波器
Discrete State-Space
离散状态空间系统模型
Discrete Zero-Pole
以零极点表示的离散传递函数模型
Discrete Transfer-Fcn
离散传递函数模型
Zero-Order Hold
零阶采样和保持器
First-Order Hold
一阶采样和保持器
Unit Delay
一个采样周期的延时
表3:函数和平台模块(Function & Tables)功能
模块名
功能简介
模块名
功能简介
Fcn
用自定义的函数(表达式)进行运算
MATLAB Fcn
利用matlab的现有函数进行运算
S-Function
调用自编的S函数的程序进行运算
Look-Up Table
建立输入信号的查询表(线性峰值匹配)
Look-Up Table(2-D)
建立两个输入信号的查询表(线性峰值匹配)
表4:数学运算模块(Math)功能
模块名
功能简介
模块名
功能简介
Sum
加减运算
Product
乘运算
Dot Product
点乘运算
Gain
增益模块
Math Function
包括指数函数、对数函数、求平方、开根号等常用数学函数
Trigonometric Function
三角函数,包括正弦、余弦、正切等
MinMax
最值运算
Abs
取绝对值
Sign
符号函数
Logical Operator
逻辑运算
Real-Imag to Complex
由实部和虚部输入合成复数输出
Complex to Magnitude-Angle
由复数输入转为幅值和相角输出
Magnitude-Angle to Complex
由幅值和相角输入合成复数输出
Complex to Real-Imag
由复数输入转为实部和虚部输出
Relational Operator
关系运算
表5:非线性模块(Nonlinear)功能
模块名
功能简介
模块名
功能简介
Saturation
饱和输出,让输出超过某一值时能够饱和
Relay
滞环比较器,限制输出值在某一范围内变化
Switch
开关选择,依据第二输入端的值,选择输出第一或第三输入端的值
Manual Switch
手动选择开关
表6:信号和系统模块(Signal & Systems)功能
模块名
功能简介
模块名
功能简介
In1
输入端
Out1
输出端
Mux
将多个单一输入转化为一个复合输出
Demux
将一个复合输入转化为多个单一输出
Ground
给未连接的输入端接地,输出0
Terminator
连接到没有连接的输出端,终止输出
SubSystem
空的子系统
Enable
使能子系统
表7:接收器模块(Sinks)功能
模块名
功能简介
模块名
功能简介
Scope
示波器
XY Graph
显示二维图形
To Workspace
输出到MATLAB的工作空间
To File(.mat)
输出到数据文件
Display
实时的数值显示
Stop Simulation
输入非0时停止仿真
表8:输入源模块(Sources)功能
模块名
功能简介
模块名
功能简介
Constant
常数信号
Clock
时钟信号
From Workspace
输入信号来自MATLAB的工作空间
From File(.mat)
输入信号来自数据文件
Signal Generator
信号发生器,可以产生正弦、方波、锯齿波及随意波
Repeating Sequence
重复信号
Pulse Generator
脉冲发生器
Sine Wave
正弦波信号
Step
阶跃波信号
注:在simulnk模块库浏览器的help菜单系统中可查询以上各模块的详细功能和使用说明。
通常,用户创建的Simulink模型包含下列三部分“组件”:
l 输入信号源( Sources):可以是常数、时钟、白噪声、正弦波、阶梯波、扫频信号、脉冲生成器、随机数产生器等信号源或者是用户自定义的信号;
l 系统( System):即被模拟系统的 SIMULINK 方框图;系统模块作为中心模块是Simulink仿真建模所要解决的主要部分。
l 接收器(即输出、显示部分Sink):可以是示波器、图形记录仪(XY Graph)等。
源 模 块
系 统 模 块
输出显示模块
当然对于具体的 SIMULINK 模型而,不一定完全地包含这三大组件。例如:研究初始条件对系统影响就不必包含信号源组件。
n 创建SIMULINK模型
在simulink中创建系统模型的步骤:
① 新建一个空白的模型窗口(只有在模型窗口中才能创建用户自己的系统模型)。方式是:依次单击simulink模块库浏览器的“File”菜单®New®Model,将弹出一个如图2所示的模型窗口。
② 在simulink模块库浏览器中,将创建系统模型所需要的功能模块用鼠标拖放到新建的模型窗口中,如图2所示。
③ 将各个模块用信号线连接,设置仿真参数,保存所创建的模型(后缀名.mdl)。
图2: 新建模型窗口
图3:振动位移的仿真结果
④ 点击模型窗口中的按钮,运行仿真。
例1:已知某振动系统的振动速度,初始条件x(0)=0,利用simulink仿真该系统的振动位移。
分析:要计算振动位移必须解上述微分方程,因此需要一个积分模块(Integrator),被积函数是sin(t),因此需要一个正弦波输入源模块(Sine Wave),积分器的输出(i.e.振动位移x(t))用示波器观察,因此需要一个显示输出模块Scope。所用各模块如下所示:
步骤1:如上所述新建模型窗口;
步骤2:从源模块库(Sources)中用鼠标拖放一个正弦波模块(Sine Wave)至模型窗口中,然后从连续模块库(Continuous)中拖放一个积分模块(Integrator),再从输出显示模块库(Sinks)拖放一个示波器模块(Scope)。
步骤3:将各模块的输入、输出用信号线按如下所示依次连接(连接方法:将鼠标移动到模块的输出端,此时鼠标箭头成十字形,按住左键,移动鼠标到另一个模块的输入端,当出现两个十字形光标重影时,释放左键完成信号线的连接),然后保存模型。
步骤4:运行仿真,然后双击示波器模块,可观察到仿真结果如图3所示。
2. Simulink功能模块的处理与修饰
下面介绍对模块的一些基本操作,包括模块的移动、复制、删除、转向、改变大小、模块命名、颜色设定、参数设定等。操作模块前要先选定模块,鼠标左键点击模块即选中,此时模块四角出现4个黑色标记,若要同时选中多个模块,则按住Shift键,同时点击想要选中的模块即可。
n 模块的移动
选中模块,按住鼠标左键将其拖曳到所需的位置即可。若要脱离信号线而移动,可按住shift键,再进行拖曳。
n 模块的复制
方法1:选中模块,然后按住鼠标右键进行拖曳即可复制同样的一个功能模块。
方法2:选中模块,Ctrl+C复制,Ctrl+V粘贴;
n 模块的删除
选中模块,按Delete键即可。若要删除多个模块,可以同时按住Shift键,再用鼠标选中多个模块,按Delete键即可。也可以用鼠标选取某区域,再按Delete键就可以把该区域中的所有模块和线等全部删除。
n 模块的旋转
为了能够顺序连接功能模块的输入和输出端,功能模块有时需要转向。选中模块,在菜单Format中选择Flip Block旋转180度,选择Rotate Block顺时针旋转90度。
n 调整模块的大小
选中模块,对模块四角出现的4个黑色标记进行拖曳即可。
n 模块的命名
先用鼠标在需要更改的名称上单击一下,然后直接更改即可。名称在功能模块上的位置也可以变换180度,可以用Format菜单中的Flip Name来实现,也可以直接通过鼠标进行拖曳。Hide Name可以隐藏模块名称。
n 设定模块的颜色
Format菜单中的Foreground Color可以改变模块的前景颜色,Background Color可以改变模块的背景颜色;而模型窗口的颜色可以通过Screen Color来改变。
n 设定模块参数
用鼠标双击模块,就可以进入模块的参数设定窗口,从而对模块进行参数设定。参数设定窗口包含了该模块的基本功能帮助,为获得更详尽的帮助,可以点击其上的help按钮。通过对模块的参数设定,就可以获得需要的功能模块。
3. 信号线的处理与修饰
信号线也即功能模块之间的连接线。对simulink信号线的操作包括绘制信号线、移动线段、移动节点、删除信号线、信号线分支、设定信号线的标签。
n 绘制信号线
由模块的输出端口拖曳鼠标到另一模块的输入端口,或拖曳鼠标由输入端口到输出端口,如下图所示。拖动模块还可以调整所绘信号线的弯折状态。
n 移动线段
若想移动信号线的某段,单击选中此段。移动鼠标到目标线段上,则鼠标的形状变为移动图标。按住鼠标,并拖曳到新位置。放开鼠标,则信号线被移动到新的位置。
n 移动节点
单击选中某个节点,如图。按住鼠标左键拖曳节点到新位置,然后释放鼠标,则可将节点移动到新的位置。
n 删除信号线
同删除模块一样,删除信号线可以选中信号线,然后按Delete 键,或者利用菜单【Edit/Clear】或【Edit/Cut】选项进行删除。
n 设定信号线的标签
每段信号线都可以有一个标签。双击要标注的信号线,则信号线的附近就会出现一个编辑区,在编辑区内输入标签的内容即可,如左下图所示。
n 给信号线加分支
若要给信号线加分支,只需将鼠标移动到分支的起点位置,按住Ctrl 键+鼠标左键,拖动到目标模块的输入端,释放鼠标和Ctrl键即可,如右上图所示。
4. 设置仿真参数(选读)
【说明:该部分属本次实验的进阶内容,如因时间关系可跳过不看。在一般情况下,如无特殊要求,仿真参数无需特别设置,使用系统默认值即可。 】
设置模型的仿真参数是Simulink仿真重要的一环。通常在完成建模之后就可以对模型进行动态仿真了,但是在仿真前必须对模型的仿真参数进行相关的设置才能保证仿真的有效性。在模型窗口中依次点击顶层菜单Simulation®Configuration Parameters,弹出设置仿真参数的对话框如下:
仿真参数设置对话框主要包含以下五个选项卡:
① 解法设置(Solver)
它允许用户设置仿真的开始和结束时间,选择解法器,说明解法器参数及选择一些输出选项。
② 数据的输入/输出(Data Import/Export)
它允许用户从MATLAB的工作空间(Workspace)输入模型所需参数或将运行结果输出到工作空间。
③ 优化选项(Optimization)
主要是对仿真性能进行优化设置。
④ 诊断项(Diagnostics)
允许用户选择Simulink在仿真中显示的警告信息的等级。
⑤ 实时工具对话框诊断项(Real-Time Workshop)
主要用于与C语言编辑器的交换,通过它可以直接从SIMULINK模型生成代码并且自动建立可以在不同环境下运行的程序,这些环境包括实时系统和单机仿真。
一般情况下,主要使用前面2个选项卡,因此下面主要介绍1、2两个选项卡的参数设置:
n 解法器(Solver)选项卡的参数设置
ü 仿真时间(Simulation time)
Start time和Stop time设置仿真的起始和停止时间,单位是秒。注意这里的时间概念与真实的时间并不一样,因为实际的运行时间和计算机的性能、模型的复杂程度、解法、步长、误差要求等等因素有关。
ü 解法器(Solver)选择
一般情况下,被模拟系统的工作过程都可以由一组微分方程来描述,因此用于系统动态仿真的解法器和求解微分方程组的解法器相同。这些解法器分为两种:
变步长模式解法器: ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。
除discrete方法外,其他的解法在实验二中有介绍。Discrete方法使用于模型中没有连续状态的情况,这时系统会自动选择这种方法。系统默认的变步长解法器是ode45。
固定步长模式解法器:ode5,ode4,ode3,ode2,ode1和discrete。
ode5:系统默认的定步长解法器,是ode45的固定步长版本,适用于大多数连续,不适用于刚性系统。
ode4:四阶龙格-库塔法,具有一定的计算精度。
ode3:固定步长的ode23解法。
ode2:改进的欧拉法。
ode1:欧拉法。
discrete:是一个实现积分的固定步长解法器,它适合于离散无连续状态的系统。
ü 仿真步长选择
Type选项中指定仿真的步长选取方式,可供选择的有Variable-step(变步长)和Fixed-step(固定步长)方式。变步长模式可以在仿真的过程中改变步长,提供误差控制和过零检测。固定步长模式在仿真过程中提供固定的步长,不提供误差控制和过零检测。
ü 步长参数
对于变步长模式,用户可以设置最大的和推荐的初始步长参数,缺省情况下,步长自动地确定,它由值auto表示。
(a) Maximum step size(最大步长参数):它决定了解法器能够使用的最大时间步长,它的缺省值为“仿真时间/50”,即整个仿真过程中至少取50个取样点,但这样的取法对于仿真时间较长的系统则可能带来取样点过于稀疏,而使仿真结果失真。一般建议对于仿真时间不超过15s的采用默认值即可,对于超过15s的每秒至少保证5个采样点,对于超过100s的,每秒至少保证3个采样点。
(b) Initial step size(初始步长参数):一般建议使用“auto”默认值即可。
ü 仿真精度(对于变步长模式)
(a) Relative tolerance(相对误差):它是指误差相对于状态的值,是一个百分比,缺省值为1e-3,表示状态的计算值要精确到0.1%。
(b) Absolute tolerance(绝对误差):表示误差值的门限,或者是说在状态值为零的情况下,可以接受的误差。如果它被设成了auto,那么simulink为每一个状态设置初始绝对误差为1e-6。
n 数据的输入/输出(Data Import/Export)选项卡的参数设置
此页主要用来设置SIMULINK与MATLAB工作空间交换信息的有关选项,通过此页的设置可以从MATLAB的工作空间(Workspace)获取模型所需参数或将SIMULINK运行结果输出到工作空间。它包含三项(如图):
① 从MATLAB工作空间获得系统输入(Load from workspace)
② 仿真结果输出到MATLAB的工作空间(Save to workspace)
③ 存储选项(Save option)
ü 从MATLAB工作空间加载(Load from workspace)
虽然Simulink提供了多种系统输入信号,但并不能完全满足需要。Simulink允许使用用户自定义的信号作为系统输入信号。在Load from workspace框中,用户可以设置MATLAB中的变量作为系统输入信号或系统状态初值,如下所述:
(1)Input:用来设置系统输入信号,其格式为[t, u],其中t、u 均为列向量,t 为输入信号的时间向量,u 为相应时刻的信号取值。可以使用多个信号输入,如[t, u1, u2]。输入信号与Simulink的接口由Inport模块(In1模块)实现。例如:
在Matlab命令窗口输入:
>> t=1:20;t=t';u=[sin(t),cos(t)];xInitial=[0 1];
后运行上述模型即可从Matlab的工作空间获得信号输入与结果输出。
(2)Initial state:用来设置系统状态变量的初始值。初始值xInitial可为列向量。
注意:使用xInitial state所设置的状态变量初始值会自动覆盖系统模块中的设置。
ü 仿真结果输出到MATLAB的工作空间(Save to workspace)
此选项可以将系统的仿真结果、系统仿真时刻、系统中的状态或指定的信号输出到MATLAB的工作空间中,以便用户对其进行定量分析,如下所述:
(1)Time:输出系统仿真时刻。
(2)States:输出系统模型中的所有状态变量。
(3)Output:输出系统模型中的所有由Output 模块(即Out1 模块)表示的信号。
(4)Final state:输出系统模型中的状态变量的最终取值,即最后仿真时刻处的状态值。
ü 存储选项(Save option)
(1)Limit data points to last:表示输出数据的长度(从信号的最后数据点记起)。对于向量而言即其维数,对于矩阵而言即其秩。
(2)Format:表示输出数据类型。共有三种形式:Structure with Time(带有仿真时间变量的结构体)、Structure(不带仿真时间变量的结构体)、Array(信号数组)。
(3)Decimation: 设定了一个亚采样因子,它的缺省值为1,也就是对每一个仿真时间点产生值都保存,而若为2,则是每隔一个仿真时刻才保存一个值。
(4)Output options:输出选项,包含3个可选项
l Refine output(细化输出):可以增加输出数据的点数,使得输出数据更加平滑。一般当仿真输出太稀松时,使用此选项。与该选项配套的参数设置是refine factor(细化因子),若细化因子定为2,则输出数据点数加倍,若为3则输出3倍的数据点数,依次类推,默认值是1。通常要产生更光滑的输出曲线,通过改变精细因子比减小仿真步长更有效。精细输出只能在变步长模式中才能使用,并且在ode45效果最好。
l Produce additional output:它允许用户直接指定产生输出的时间点。一旦选择了该项,则在它的右边出现一个output times编辑框,在这里用户指定额外的仿真输出点,它既可以是一个时间向量,也可以是表达式。与精细因子相比,这个选项会改变仿真的步长。
l Produce specified output only:它的意思是让simulink只在指定的时间点上产生输出。为此解法器要调整仿真步长以使之和指定的时间点重合。这个选项在比较不同的仿真时可以确保它们在相同的时间输出。
5. 启动仿真
设置仿真参数和选择解法器之后,就可以启动仿真而运行。方法: 选择Simulink菜单下的start选项来启动仿真,如果模型中有些参数没有定义,则会出现错误信息提示框。如果一切设置无误,则开始仿真运行。
下面给出一个实际的建模仿真的例子。
例2:一个生长在罐中的细菌的简单模型
假定细菌的出生率和当前细菌的总数成正比,死亡率和当前的总数的平方成正比。若以x代表当前细菌的总数,则细菌的出生率可表示为:
birth_rate = bx
细菌的死亡率可表示为:
death_rate = px2
细菌总数的总变化率可表示为出生率与死亡率之差。因此系统可用如下微分方程表示:
假定,b=1/hour;p= 0.5/hour,当前细菌的总数为100,计算一个小时后罐中的细菌总数。
模型分析:
首先,这是一个一阶系统,因此用一个解微分方程的积分模块是必要的。积分模块的输入为(也即1式的右边项),输出为x:
其次,需要一个乘法模块(Product)以实现x2,需要2个增益模块(Gain)来实现px2和bx(即分别将x2和x增益p和b倍),需要一个求和模块(Sum)实现bx- px2。最后需要一个示波器模块(Scope)用于显示输出。所需各模块如下图所示:
步骤一:新建模型窗口
依次单击simulink库浏览器的“File”菜单®New®Model,建立一个新的模型窗口;
步骤二:选择功能模块
从连续系统模块库(Continuous)中拖放一个积分模块到模型窗口,从数学库(Math)中分别拖放一个乘法模块、一个增益模块、一个求和模块到模型窗口;最后从显示输出库(Sinks)拖放一个示波器模块到模型窗口。在模型窗口中选中增益模块(Gain),按住Ctrl键的同时拖动鼠标,在适当的位置释放,即可复制出第二个增益模块。最后将以上各模块进行合理布局,如上图所示。
步骤三:信号线连接
按照前述的方法将各模块之间连接起来,如下图所示:
步骤四:模块参数的设置
按下图所示设置模块的运行参数:
其它的仿真参数采用系统默认值即可。仿真的起始时间默认为0,终止时间默认为10.0。若需要改变仿真时间,可打开仿真参数设置对话框(Simulation®Configuration Parameters),设置【Star time】和【Stop time】即可。
步骤五:保存模型
步骤六:运行仿真
点击模型窗口中的按钮,运行仿真。仿真结束后,双击示波器模块,可观察到仿真的结果曲线,如右图示。
6. 模型的注释
使用模型注释可以使模型更易读懂,其效果如同MATLAB 程序中的注释行一样。对于经常使用Simulink的用户,养成经常使用注释的习惯是非常重要的。
ü 增加注释的方法
在模型窗口中的任何想要注释的部位上双击鼠标,将会出现一个编辑框,在该框内输入想要注释的内容即可。
ü 改变注释字体
要改变注释内容的字体,先选中注释,选择模型窗口菜单中的【Format Font】选项,就会出现一个字体选择的对话框,选中认为合适的字体,然后按【OK】。
7. 模型拷贝到Word文档
在simulink中创建的模型要想复制到word文档,可依次点击模型窗口下的菜单Edit®Copy Model to Clipboard,然后在word文档中粘贴即可。
三、实验内容
本次实验任务是学习使用Simulink对数字电路进行仿真和设计——8线3线编码器的设计。所谓8线3线编码器是指有8个信号输入端和3个输出端的编码器,其功能是对输入的8个信号进行编码,输出3个二进制数。
8线3线编码器的真值表如下:
表一: 8线3线编码器真值表
输入信号
输出信号
J0
J1
J2
J3
J4
J5
J6
J7
Y0
Y1
Y2
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
根据真值表写出输入输出间的逻辑函数如下:
下面使用Simulink来实现这个数字电路系统,一共分三个步骤:
步骤一:添加模块
首先按照前述方法建立新的模型窗口,然后将本次仿真需要的模块添加到模型中。这里一共需要三种模块:
① 逻辑运算模块——与非门(3个),用于实现编码器输入信号间的逻辑运算功能;
② 离散脉冲源(8个),用于8个端口的脉冲信号输入;
③ 示波器(3个),用于显示输出的信号;
上述各模块在simulink模块库中的位置:
与非门模块(即Logical Operator):simulink模块库®Logic and Bit Operations子库;
离散脉冲源模块(Pulse Generator):simulink模块库®Sources子库;
示波器模块(Scope):simulink模块库®Sinks子库;
按照上述位置,找到相应模块,将其复制到模型窗口当中,如下图所示:
下面将模块的数量凑齐。
(a) 单击逻辑运算模块(Logical Operator)的名称,将其更名为Y0,以方便识别,接着选中该模块,按住Ctrl键,同时拖动鼠标到新的位置释放,此时将复制出一个名为Y1的逻辑模块,按照此法,再复制出Y2;
(b) 将脉冲源的名字改为J0,按后按住Ctrl键拖动7次,可得到8个离散脉冲源,名字分别是J0、J1、…、J7;最后依次法将示波器复制3个,这样所需的模块数量都已备齐。再将这些模块适当布局,如下图所示:
步骤二:修改模块参数
(a) 首先双击逻辑模块Y0,打开模块参数设置对话框,如下图所示。将参数Operator修改为“NAND(与非)”,输入节点数(Number of input ports)修改为4,然后单击OK;其它两个逻辑模块Y1和Y2也做同样修改。
(b) 双击示波器模块Scope1,在打开一个界面中,点击Parameter图标(如左下图所示),可以打开示波器的参数设置对话框,将坐标轴的数目(Number of axes)修改为3,这样做的目的是同时显示3幅图形(即3个与非门的输出信号波形)。同样地,将另外两个示波器Scope2和Scope3的坐标轴数目修改为4。
点击该图标
(c) 最后修改脉冲源的属性。双击脉冲源J0,弹出模块的参数设置对话框,如图所示。选择脉冲类型(Pulse type)为“基于采样(Sample based)”。接下来有5个参数需要设置,分别解释如下:
Amplitude 脉冲信号的幅度
Period 脉冲信号的周期(以样本数为单位)
Pulse width 脉冲宽度(即电平为1的时间,以样本数为单位)
Pulse delay 相位延迟(以样本数为单位)
Sample time 采样时间长度
观察本例的真值表,注意到信号J0~J7的长度为8,且J0到J7依次为低电平,所以将J0到J7的周期设为8,脉冲宽度设为7,相位延迟依次设为-7到0,脉冲幅度和采样时间使用默认值。这样在零时刻,J0为低电平,其余输入为高电平;经过一个采样时间后,J1变为低电平,如此持续下去,到第7个采样时间,J7就变为低电平,实现了设计要求。
步骤三:连线及仿真
根据逻辑表达式,J4、J5、J6、J7连接到Y0的输入端,J2、J3、J6、J7连接到Y1的输入端,J1、J3、J5、J7连接到Y2的输入端,然后用示波器Scope1监视Y2、Y1、Y0的输出;另外将J0~J3连接到Scope2、J4~J7连接到Scope3,以监视J0~J7这8个波形,结果如下图所示:
连接完成后,即可运行仿真(仿真参数采用默认设置即可)。仿真结束后,双击Scope1~Scope3观察波形结果,如下所示。
上图是编码器的输出波形,图中可以看出,输出的三位二进制码(Y2Y1Y0)依次是:000、001、010、011、100、101、110、111,实现了编码的功能。
Scope2显示J0~J3的输入波形:
Scope3显示J4~J7的输入波形:
从上面2个图可以看到,J0~J7以8为周期,依次出现0电平。
展开阅读全文