1、电机控制基于的仿真电机控制基于的仿真1 Simulink简介 Simulink是一个用来对动态系统进行建模、仿真是一个用来对动态系统进行建模、仿真和分析的软件包。使用和分析的软件包。使用Simulink来建模、分析和来建模、分析和仿真各种动态系统仿真各种动态系统(包括连续系统、离散系统和混包括连续系统、离散系统和混合系统合系统),将是一件非常轻松的事情。它提供了一,将是一件非常轻松的事情。它提供了一种图形化的交互环境,只需用鼠标拖动的方法便种图形化的交互环境,只需用鼠标拖动的方法便能迅速地建立起系统框图模型,甚至不需要编写能迅速地建立起系统框图模型,甚至不需要编写一行代码。一行代码。利用利用S
2、imulink进行系统的建模仿真,其最大的优进行系统的建模仿真,其最大的优点是易学、易用,并能依托点是易学、易用,并能依托MATLAB提供的丰富提供的丰富的仿真资源。的仿真资源。提供了仿真库的扩充和定制机制提供了仿真库的扩充和定制机制 Simulink的开放式结构允许用户扩展仿真环境的开放式结构允许用户扩展仿真环境的功能:采用的功能:采用MATLAB、FORTRAN和和C代码代码生成自定义模块库,并拥有自己的图标和界面。生成自定义模块库,并拥有自己的图标和界面。与与MATLAB工具箱的集成工具箱的集成 由于由于Simulink可以直接利用可以直接利用MATLAB的诸多资的诸多资源与功能,因而用
3、户可以直接在源与功能,因而用户可以直接在 Simulink下完下完成诸如数据分析、过程自动化、优化参数等工成诸如数据分析、过程自动化、优化参数等工作。作。Simulink应用领域应用领域2 Simulink启动及模型建立启动及模型建立 Simulink的启动主要有以下两种方法:的启动主要有以下两种方法:在在MATLAB的命令窗口中输入的命令窗口中输入simulink,结果结果是在桌面上出现一个是在桌面上出现一个Simulink Library Browser的窗口。的窗口。单击单击MATLAB主窗口的快捷按钮主窗口的快捷按钮 ,打开,打开Simulink Library Browser窗口窗口
4、。Simulink模型窗口的建立模型窗口的建立 在在Simulink中打开一个空白的模型窗口的方法:中打开一个空白的模型窗口的方法:选中选中Simulink菜单系统中的菜单系统中的File|New|Model菜单项后,菜单项后,会生成一个会生成一个Simulink窗口;窗口;单击单击Simulink工具栏中的工具栏中的“新建模型新建模型”图标;图标;在在MATLAB的命令窗口中选择的命令窗口中选择File|New|New Model菜菜单项;单项;启动启动Simulink,建立系统模型的基本操作,建立系统模型的基本操作依次表示新建、打开依次表示新建、打开系统模型文件系统模型文件依次表示新建、打
5、开与依次表示新建、打开与保存系统模型文件保存系统模型文件正弦波,电路中常用到的正弦信号(Sine Wave)模块,双击图标,在弹出的窗口中调整相关参数。在生成子系统之后,用户可以对子系统进行各种与系统模块相类似的操作,这时子系统相当于具有一定功能的系统模块。To Workspace(写到工作空间)基于MATLAB/Simulink的乘法模块(Product)数字逻辑函数模块包括复合逻辑模块(Combinational Logic)、逻辑运算符模块(Logical Operator)、位逻辑运算符模块(Bitwise Logical Operator)等。x0:初始状态值,当flag的值为0时才
6、有效;在建立了空的模块窗口后,用户可以在此窗口中创建自己需要的Simulink模型。TI DSP Developers KitFixed-Point Blockset(定点模块集)矢量的点乘模块(Dot Product)Sine Wave来自sources;Gain来自Math Operations;功能:产生正态分布的随机数,默认的随机数是期望为0,方差为1的标准正态分布量。Utility Functions(实用函数库)Stop Simulation(停止仿真)Quantizer(量化)信号输出模块(Sinks)包括的主要模块如图7.simget函数用来获得模型的参数设置值。当输入为非零时
7、,停止系统仿真。通带 DPSK(Differential Phase Shift Keying,差分相移键控法)调制、解调两个模块。Simulink的模块库的模块库 Simulink的模块库能够对系统模块进行有效的管理与组织的模块库能够对系统模块进行有效的管理与组织可以直接将模块库中的模块拖动或者拷贝到用户的系统模可以直接将模块库中的模块拖动或者拷贝到用户的系统模型中以构建动态系统模型。型中以构建动态系统模型。模块搜索模块搜索 模块描述模块描述 系统模块系统模块 系统模块库系统模块库 Simulink公共模块库公共模块库 Simulink中最为基础、最为通用的模块库,它可以被应用中最为基础、最
8、为通用的模块库,它可以被应用到不同的专业领域中。到不同的专业领域中。连续模块连续模块continuous、非连续模块、非连续模块discontinuous 离散模块离散模块discrete、查找表模块、查找表模块Look-up Table 数学运算数学运算Math Operations 模型验证模块模型验证模块Model Verification 模型扩充工具模型扩充工具Model-Wide Utilities 端口和子系统模块端口和子系统模块Ports&Subsystems、信号属性模块信号属性模块Signal Attributes 信号路由模块信号路由模块Signal Routing、接收
9、模块、接收模块Sinks 输入模块输入模块Sources 用户自定义函数模块用户自定义函数模块User-Defined FunctionsSimulink的部分专业模块库的部分专业模块库DSP Blockset数字信号处理工具包数字信号处理工具包Fixed-Point Blockset定点运算控制系统仿真工具包定点运算控制系统仿真工具包Power System Blockset电力电动系统工具包电力电动系统工具包Dials&Gauges Blockset交互图形和控制面板设计工具包交互图形和控制面板设计工具包Communications Blockset通讯系统工具包通讯系统工具包CDMA R
10、eference Blockset CDMACDMA通讯系统设计和分析工具包通讯系统设计和分析工具包Nonlinear Control Design Blockset非线性控制设计工具箱非线性控制设计工具箱Motorola DSP Developers KitMotorola DSP开发工具箱开发工具箱TI DSP Developers KitTI DSP开发工具箱开发工具箱对对Simulink库浏览器的基本操作有:库浏览器的基本操作有:(1)使用鼠标左键单击系统模块库,如果模块库为多层结构,使用鼠标左键单击系统模块库,如果模块库为多层结构,则单击则单击“+”号载入库。号载入库。(2)使用鼠标
11、右键单击系统模块库,可在单独的窗口打开库。使用鼠标右键单击系统模块库,可在单独的窗口打开库。(3)使用鼠标左键单击系统模块,在模块描述栏中显示此模块使用鼠标左键单击系统模块,在模块描述栏中显示此模块的描述。的描述。(4)使用鼠标右键单击系统模块,可以得到:系统模块的帮助使用鼠标右键单击系统模块,可以得到:系统模块的帮助信息信息;将系统模块插入到系统模型中将系统模块插入到系统模型中;查看系统模块的参数查看系统模块的参数设置设置;以及回到系统模块的上一层库。以及回到系统模块的上一层库。此外还可以进行以下操作:此外还可以进行以下操作:(1)使用鼠标左键选择并拖动系统模块,并将其拷贝到使用鼠标左键选择
12、并拖动系统模块,并将其拷贝到系统模型中。系统模型中。(2)在模块搜索栏中搜索所需的系统模块。在模块搜索栏中搜索所需的系统模块。例:例:简单系统的输入为一个正弦波信号,输出为简单系统的输入为一个正弦波信号,输出为此正弦波信号与一个常数的乘积。要求建立系统此正弦波信号与一个常数的乘积。要求建立系统模型,并以图形方式输出系统运算结果。模型,并以图形方式输出系统运算结果。已知系统的数学描述为已知系统的数学描述为 系统输入:系统输入:u(t)=sin t,t0 系统输出:系统输出:y(t)=au(t),a0相关操作:相关操作:模块库模块库 Sine Wave来自来自sources;Gain来自来自Mat
13、h Operations;Scope来自来自Sinks 连接方法连接方法(1)拖动对应端口进行连接拖动对应端口进行连接(2)单击起始模块后,按单击起始模块后,按Ctrl键再单击目标模块键再单击目标模块 模块复制模块复制 传统方式传统方式Ctrl+C/Ctrl+V、或、或Ctrl键再拖动模块键再拖动模块 模块插入模块插入 对于单输入单输出模块,只需将这个模块移到线上就对于单输入单输出模块,只需将这个模块移到线上就可以自动连接。可以自动连接。连线操作连线操作 连线分支连线分支 使用鼠标右键单击需要分支的信号连线(光标使用鼠标右键单击需要分支的信号连线(光标变成变成“+”),然后拖动到目标模块。),
14、然后拖动到目标模块。使用鼠标左键单击并拖动以改变信号连线使用鼠标左键单击并拖动以改变信号连线的路径。的路径。按下按下Shift键的同时,在信号连线上单击鼠键的同时,在信号连线上单击鼠标左键并拖动,可以生成新的节点。标左键并拖动,可以生成新的节点。在节点上使用鼠标左键单击并拖动,可以在节点上使用鼠标左键单击并拖动,可以改变信号连线路径。改变信号连线路径。信号组合信号组合 在利用在利用Simulink进行系统仿真时,在很多进行系统仿真时,在很多情况下,需要将系统中某些模块的输出信号(一情况下,需要将系统中某些模块的输出信号(一般为标量)组合成一个向量信号,并将得到的信般为标量)组合成一个向量信号,
15、并将得到的信号作为另外一个模块的输入。号作为另外一个模块的输入。来自来自Signal Routing的的Bus Creator3 Simulink模型仿真模型仿真 系统模块参数设置与系统仿真参数设置系统模块参数设置与系统仿真参数设置 双击系统模块,打开系统模块的参数设置对话框。双击系统模块,打开系统模块的参数设置对话框。在参数设置对话框中设置合适的模块参数。在参数设置对话框中设置合适的模块参数。设置合适的系统仿真参数以进行动态系统的仿真设置合适的系统仿真参数以进行动态系统的仿真 在在Simulation菜单的菜单的Simulation parameters.子菜单子菜单中进行设置,如仿真时间等
16、中进行设置,如仿真时间等 运行仿真运行仿真 单击系统模型编辑器上的单击系统模型编辑器上的Play图标图标(黑色三角黑色三角)或选择或选择Simulation菜单下的菜单下的Start便可以对系统进行仿真分析。便可以对系统进行仿真分析。仿真结束后双击仿真结束后双击Scope模块以显示系统仿真的输出结模块以显示系统仿真的输出结果果4 Simulink子系统介绍子系统介绍 Simulink提供的子系统功能可以大大地增强提供的子系统功能可以大大地增强Simulink系统模型框图的可读性。系统模型框图的可读性。子系统可以理解为一种子系统可以理解为一种“容器容器”,此容器能够将,此容器能够将一组相关的模块
17、封装到一个单独的模块中,并且一组相关的模块封装到一个单独的模块中,并且与原来系统模块组的功能一致。与原来系统模块组的功能一致。子系统建立方法子系统建立方法(2种种)在已有的系统模型中建立子系统:在已有的系统模型中建立子系统:首先框选待封装的区域,即在模型编辑器背景首先框选待封装的区域,即在模型编辑器背景中单击鼠标左键并拖动,选中需要放置到子系中单击鼠标左键并拖动,选中需要放置到子系统中的模块与信号(或在按下统中的模块与信号(或在按下Shift键的同时,键的同时,用鼠标左键单击所需模块);然后选择用鼠标左键单击所需模块);然后选择Edit菜菜单下的单下的Create Subsystem,即可建立
18、子系统。,即可建立子系统。建立空的子系统:建立空的子系统:Subsystems模块库中的模块建立子系统。这模块库中的模块建立子系统。这样建立的子系统内容为空,然后双击子系统对样建立的子系统内容为空,然后双击子系统对其进行编辑。其进行编辑。子系统操作子系统操作 在在生成子系统之后,用户可以对子系统进生成子系统之后,用户可以对子系统进行各种与系统模块相类似的操作,这时子系统行各种与系统模块相类似的操作,这时子系统相当于具有一定功能的系统模块。例如,子系相当于具有一定功能的系统模块。例如,子系统的命名、子系统视图的修改、子系统的显示统的命名、子系统视图的修改、子系统的显示颜色等等。当然子系统也有其特
19、有的操作,如颜色等等。当然子系统也有其特有的操作,如子系统的显示(用鼠标左键双击子系统模块即子系统的显示(用鼠标左键双击子系统模块即可打开子系统)、子系统的封装等等。可打开子系统)、子系统的封装等等。Inport输入模块与输入模块与Outport输出模块输出模块 在系统模型中建立子系统时,在系统模型中建立子系统时,Simulink会自会自动生成动生成Inport模块(模块(Sources模块库中的模块库中的In1模块)模块)与与Outport模块(模块(Sinks模块库中的模块库中的Out1模块)。模块)。Inport模块作为子系统的输入端口,模块作为子系统的输入端口,Outport作为作为子
20、系统的输出端口,它们被用来完成子系统和主子系统的输出端口,它们被用来完成子系统和主系统之间的通讯。系统之间的通讯。Inport和和Outport用来对信号进行传递,不改用来对信号进行传递,不改变信号的任何属性;另外,信号标签可以越过它变信号的任何属性;另外,信号标签可以越过它们进行传递。如果需要建立多输入多输出的子系们进行传递。如果需要建立多输入多输出的子系统,则需要使用多个统,则需要使用多个Inport模块与模块与Outport模块,模块,而且最好使用合适的名称对而且最好使用合适的名称对Inport模块与模块与Outport模块进行命名。模块进行命名。5 Simulink与与Matlab的接
21、口设计的接口设计 由由MATLAB工作空间变量设置系统模块参工作空间变量设置系统模块参数数 模块参数可以是常量也可以工作空间变量模块参数可以是常量也可以工作空间变量 直接使用直接使用MATLAB工作空间中的变量设置模块工作空间中的变量设置模块参数。参数。使用变量的表达式设置模块参数。使用变量的表达式设置模块参数。例如,如果例如,如果a是定义在是定义在MATLAB中的变量,则表达中的变量,则表达式式a、a2+5、exp(a)等均可以作为系统模块的参等均可以作为系统模块的参数数Communications Blockset(通信模块集)Simulink所使用的信号可以是标量也能够传递和使用向量信号
22、。Fixed-Point Blockset输入曲线是以时间为横轴的绘图区域。转换库(Transformations)系统模块参数设置与系统仿真参数设置数据保存类型有三种:带时间变量的结构体(structure with time)、结构体(structure)以及数组变量(Array)。具体方法:在模块库浏览器中找到所需模块,选中该模块后右击鼠标,把它加入到一个模型窗口中即可完成模块的建立。显示模块(Display)把In 模块的输出直接送到Out模块的输入端;Simulink电路仿真Discrete-Time Integrator(离散时间积分器)Inport模块作为子系统的输入端口,Out
23、port作为子系统的输出端口,它们被用来完成子系统和主系统之间的通讯。6选择开关模块(Switch)DSP Sinks(DSP 接收库)接着从 SimulinkMath 模块库内拖出一个加法器,将它的输入端设置为三个。通带 QAM、解调及演示三个模块。sys:通用返回函数;注意:从运算速度角度,Math function模块要比Fcn模块慢。Control System Toolbox(控制系统工具箱)85 离散时间系统和混合系统 将信号输出到将信号输出到MATLAB工作空间中工作空间中 使用示波器模块使用示波器模块Scope的输出信号,可以的输出信号,可以使用户对输出的信号进行简单的定性分析
24、。使用户对输出的信号进行简单的定性分析。使用使用Sinks模块库中的模块库中的To Workspace 模块,模块,可以轻易地将信号输出到可以轻易地将信号输出到MATLAB工作空间中。工作空间中。信号输出的名称在信号输出的名称在To Workspace模块的对话模块的对话框中设置,此对话框还可以设置输出数据的点框中设置,此对话框还可以设置输出数据的点数、输出的间隔,以及输出数据的类型等。其数、输出的间隔,以及输出数据的类型等。其中输出类型有三种形式:数组、结构以及带有中输出类型有三种形式:数组、结构以及带有时间变量的结构。仿真结束或暂停时信号被输时间变量的结构。仿真结束或暂停时信号被输出到工作
25、空间中。出到工作空间中。使用工作空间变量作为系统输入信号使用工作空间变量作为系统输入信号 Simulink与与MATLAB的数据交互是相互的,除的数据交互是相互的,除了可以将信号输出到了可以将信号输出到MATLAB工作空间中之外,用工作空间中之外,用户还可以使用户还可以使用MATLAB工作空间中的变量作为系统工作空间中的变量作为系统模型的输入信号。使用模型的输入信号。使用Sources模块库中的模块库中的From Workspace模块可以将模块可以将MATLAB工作空间中的变量工作空间中的变量作为系统模型的输入信号。此变量的格式如下所示:作为系统模型的输入信号。此变量的格式如下所示:t=0:
26、0.1:10;x=sin(t);input=t,x;系统输入信号系统输入信号input的作用相当于的作用相当于Sources模块中的模块中的Sine Wave模块模块 向量与矩阵向量与矩阵 Simulink所使用的信号可以是标量也能够传所使用的信号可以是标量也能够传递和使用向量信号。例如,向量增益可以作递和使用向量信号。例如,向量增益可以作用在一个标量信号上,产生一个向量输出。用在一个标量信号上,产生一个向量输出。Simulink 最重要的特性就是支持矩阵形式最重要的特性就是支持矩阵形式的信号,它可以区分行和列向量并传递矩阵。的信号,它可以区分行和列向量并传递矩阵。通过对模块做适当的配置,可以
27、使模块能够通过对模块做适当的配置,可以使模块能够接受矩阵作为模块参数。接受矩阵作为模块参数。MATLAB Function与与Function模块模块 除了使用上述的方式进行除了使用上述的方式进行Simulink与与MATLAB之间之间的数据交互,用户还可以使用的数据交互,用户还可以使用Functions and Tables 模块模块库中的库中的 Function模块(简称为模块(简称为Fcn模块)或模块)或Functions and Tables 模块库中的模块库中的MATLAB Function模块(简称为模块(简称为MATLAB Fcn模块)进行彼此间的数据交互。模块)进行彼此间的数据
28、交互。Fcn模块一般用来实现简单的函数关系,在模块一般用来实现简单的函数关系,在Fcn模块中:模块中:(1)输入总是表示成输入总是表示成u,u可以是一个向量。可以是一个向量。(2)可以使用可以使用 C 语言表达式,例如语言表达式,例如sin(u1)+cos(u2)。(3)输出永远为一个标量。输出永远为一个标量。(2)可以使用可以使用 C 语言表达式,例如语言表达式,例如sin(u1)+cos(u2)。(3)输出永远为一个标量。输出永远为一个标量。MATLAB Fcn一般用来调用一般用来调用MATLAB函数来实现一函数来实现一定的功能,在定的功能,在MATLAB Fcn模块中:模块中:(1)所要
29、调用的函数只能有一个输出(可以是一个向所要调用的函数只能有一个输出(可以是一个向量)。量)。(2)单输入函数只需使用函数名,多输入函数输入需单输入函数只需使用函数名,多输入函数输入需要引用相应的元素,如要引用相应的元素,如mean、sqrt、myfunc(u(1),u(2)。(3)在每个仿真步长内都需要调用在每个仿真步长内都需要调用MATLAB解释器。解释器。使用使用Fcn模块与模块与MATLAB Fcn模块进行模块进行Simulink与与MATLAB之间的数据交互。之间的数据交互。使用使用Fcn与与MATLAB Fcn模块进行数据交互模块进行数据交互 函数表达式函数表达式 Matlab 函数
30、 MATLAB函数6 Scope高级使用技术高级使用技术打印输出打印输出 参数设置参数设置 视图整体缩放视图整体缩放 Y轴缩放轴缩放 视图自动缩放视图自动缩放 X轴缩放轴缩放 保存当前坐标轴设置保存当前坐标轴设置 恢复坐标轴设置恢复坐标轴设置 悬浮悬浮Scope开关开关 悬浮时信号选择悬浮时信号选择 去除坐标轴选择去除坐标轴选择 系统输入信号input的作用相当于Sources模块中的Sine Wave模块功能:在构造完全离散的系统时,代替连续积分的功能。说明:输入的数学表达式应符合C语言编程规范;Data Store Memory(数据存储器)Simulink的状态模块可以是连续的、离散的,
31、或者它们二者的结合。Subsystem(子系统)842 条件执行子系统输入模块Sources把In 模块的输出直接送到Out模块的输入端;Sine Wave来自sources;Gain来自Math Operations;MATLAB Fcn一般用来调用MATLAB函数来实现一定的功能,在MATLAB Fcn模块中:对于单输入单输出模块,只需将这个模块移到线上就可以自动连接。Power System Blockset(3)选择了错误的解法。输出信号也类似,这就扩大了仿真系统与各种外部软件和硬件的接口能力。在 SIMULINK 模块库中,有两个特殊模块:Enable 模块和Trigger 模块。按
32、下Shift键的同时,在信号连线上单击鼠标左键并拖动,可以生成新的节点。C,C+,Ada,and Fortan S-Functions需要编译为Mex文件,就和其它MEX文件一样,Simulink可以随时动态的调用这些文件。在节点上使用鼠标左键单击并拖动,可以改变信号连线路径。1输入常数模块(Constant)1)Scope的参数设置的参数设置 使用使用Scope模块的参数设置选项卡能够对模块的参数设置选项卡能够对系统仿真输出结果显示进行更多的控制,而不系统仿真输出结果显示进行更多的控制,而不仅仅是上述的简单控制。图仅仅是上述的简单控制。图36、图、图37所示分别所示分别为为Scope模块参数
33、设置选项卡中的模块参数设置选项卡中的General选选项卡与项卡与Data History选项卡。选项卡。Scope模块的模块的General选项卡选项卡坐标系标签坐标系标签 坐标系数目坐标系数目 显示时间范围显示时间范围 悬浮悬浮Scope 开关开关 Scope模块的模块的Data history选项卡选项卡信号显示点数限制信号显示点数限制 保存信号至工作空保存信号至工作空间变量间变量 下面简单介绍一下各选项卡的功能与使用。下面简单介绍一下各选项卡的功能与使用。1)坐标系数目(坐标系数目(Number of axes)功能描述:在一个功能描述:在一个Scope输出模块中使用多输出模块中使用多
34、个坐标系窗口同时输出多个信号。在默认设置个坐标系窗口同时输出多个信号。在默认设置下,下,Scope模块仅显示一个坐标系窗口。模块仅显示一个坐标系窗口。2)悬浮悬浮Scope开关(开关(Floating scope)功能描述:将功能描述:将Scope模块切换为悬浮模块切换为悬浮Scope模块。模块。3)显示时间范围(显示时间范围(Time range)功能描述:设置信号显示的时间范围。注意:信功能描述:设置信号显示的时间范围。注意:信号显示的时间范围与系统仿真时间范围并不等同,号显示的时间范围与系统仿真时间范围并不等同,并且坐标系所示的时间范围并非为绝对时间,而并且坐标系所示的时间范围并非为绝对
35、时间,而是指相对时间范围,坐标系的左下角的时间偏移是指相对时间范围,坐标系的左下角的时间偏移(Time offset)给出了时间的起始偏移量(即显)给出了时间的起始偏移量(即显示时间范围的起始时刻)。示时间范围的起始时刻)。4)坐标系标签(坐标系标签(Tick labels)功能描述:确定功能描述:确定Scope模块中各坐标系是否带有模块中各坐标系是否带有坐标轴标签。坐标轴标签。下方坐标系使用标签(下方坐标系使用标签(bottom axis only)以及)以及都不使用标签(都不使用标签(none)。用户最好使用标签,这)。用户最好使用标签,这有利于对信号的观察理解有利于对信号的观察理解.5)
36、信号显示点数限制信号显示点数限制(Limit data points to last)功能描述:限制信号显示的数据点的数目,功能描述:限制信号显示的数据点的数目,Scope模块会自动对信号进行截取以显示信号的最后模块会自动对信号进行截取以显示信号的最后n个点(这里个点(这里n为设置的数值)。为设置的数值)。6)保存信号至工作空间变量保存信号至工作空间变量(Save data to workspace)功能描述:将由功能描述:将由Scope模块显示的信号保存到模块显示的信号保存到Matlab工作空间变量中,以便于对信号进行更多的工作空间变量中,以便于对信号进行更多的定量分析。数据保存类型有三种:
37、带时间变量的结定量分析。数据保存类型有三种:带时间变量的结构体(构体(structure with time)、结构体()、结构体(structure)以及数组变量(以及数组变量(Array)。这与前面所介绍的)。这与前面所介绍的Sinks模块库中的模块库中的To workspace模块类似。模块类似。在数学上表现为一组微分方程或差分方程;Workspace输入已有的函数作为仿真的激励信号。对二阶微分程进行拉氏变换:它外表以方块图形式呈现,且采用分层结构。基带 SSB-AM(Single Side Band Amplitude Modulation,单边带调幅)、解调及演示三个模块。31 通信
38、模块集中的模块库仿真算法设置:龙格-库塔法的 5 阶算法(ode5)。sampleTime=1;Data Type Conversion(数据类型转换)Subsystem(子系统)Bus 信号选择模块(Bus Selector)触发使能子系统(Trigged and Enabled Subsystem)。交错模块及两个演示模块。MATLAB Fcn一般用来调用MATLAB函数来实现一定的功能,在MATLAB Fcn模块中:8可变传输延迟模块(Variable Transport Delay)功能:用于实现以下数学方程描述的系统:5随机数模块(Random Number)如果仿真的结果不精确,其
39、原因很可能是:sys=mdlGetTimeOfNextVarHit(t,x,u);数值分析:积分模块的应用 此外,在此外,在Scope模块中的坐标系中单击鼠标右模块中的坐标系中单击鼠标右键,选择弹出菜单中坐标系属性设置命令键,选择弹出菜单中坐标系属性设置命令(axes properties),将弹出下图所示的坐),将弹出下图所示的坐标系属性设置对话框。用户可以对标系属性设置对话框。用户可以对Scope模块模块的坐标系标题与显示信号范围进行合适的设置,的坐标系标题与显示信号范围进行合适的设置,以满足仿真输出结果显示的需要。以满足仿真输出结果显示的需要。坐标系属性设置对话框坐标系属性设置对话框 设
40、置信号显设置信号显示幅值范围示幅值范围坐标系标题:一坐标系标题:一般采用信号名称般采用信号名称7 S函数的设计和调用函数的设计和调用S函数是扩展函数是扩展Simulink功能的强有力工具,它使用户可以利功能的强有力工具,它使用户可以利用用MATLAB、C语言、语言、C+语言等程序创建自己定义的语言等程序创建自己定义的Simulink模块。模块。C,C+,Ada,and Fortan S-Functions需要编译为需要编译为Mex文件,就和其它文件,就和其它MEX文件一样,文件一样,Simulink可以随时动态的调用这些文件。可以随时动态的调用这些文件。S函数使用的是一种比较特殊的调用格式,可
41、以和函数使用的是一种比较特殊的调用格式,可以和Simulink求解器交互式操作。求解器交互式操作。S-Functions功能非常全面,适用于连功能非常全面,适用于连续、离散以及混合系统。续、离散以及混合系统。S函数允许用户向模型中添加自己编写的模块,只要按照一函数允许用户向模型中添加自己编写的模块,只要按照一些简单的规则,就可以在些简单的规则,就可以在S-Functions添加设计算法。在编添加设计算法。在编写好写好S-Functions之后就可以在之后就可以在S-Functions模块中添加相模块中添加相应得函数名,也可以通过封装技术来订制自己的交互界面。应得函数名,也可以通过封装技术来订制
42、自己的交互界面。S函数的调用函数的调用 在在Simulink使用使用S-Functions的方法就是从的方法就是从Simulink中的中的User-Defined Functions模块库中向模块库中向Simulink模型文件窗口中拖放模型文件窗口中拖放S-Function模块。模块。然后在然后在S-Functions模块的对话框中的模块的对话框中的S-Functions Name框中输入框中输入S函数的文件名,在函数的文件名,在S-Functions Parameters框中输入框中输入S函数的参数值。函数的参数值。在点击在点击edit的选项后可以编辑的选项后可以编辑S函数的代码部分,函数的
43、代码部分,利用利用S函数实现需要的功能主要是代码部分的修函数实现需要的功能主要是代码部分的修改。改。对于代码部分的修改,可以使用对于代码部分的修改,可以使用MATLAB语言按语言按照照S-Functions的格式来编写代码。的格式来编写代码。MATLAB提提供了一个模板文件,方便供了一个模板文件,方便S-Function的编写,该的编写,该模板文件位于模板文件位于MATLAB根目录根目录toolbox/Simulink/blocks下下 模板函数的代码如下:模板函数的代码如下:function sys,x0,str,ts=sfuntmpl(t,x,u,flag)switch flag,case
44、 0,sys,x0,str,ts=mdlInitializeSizes;case 1,sys=mdlDerivatives(t,x,u);case 2,sys=mdlUpdate(t,x,u);case 3,sys=mdlOutputs(t,x,u);case 4,sys=mdlGetTimeOfNextVarHit(t,x,u);case 9,sys=mdlTerminate(t,x,u);otherwise error(Unhandled flag=,num2str(flag);endfunction sys,x0,str,ts=mdlInitializeSizessizes=simsiz
45、es;sizes.NumContStates =0;sizes.NumDiscStates =0;sizes.NumOutputs =0;sizes.NumInputs =0;sizes.DirFeedthrough=1;sizes.NumSampleTimes=1;sys=simsizes(sizes);x0 =;str=;ts =0 0;function sys=mdlDerivatives(t,x,u)sys=;function sys=mdlUpdate(t,x,u)sys=;function sys=mdlOutputs(t,x,u)sys=;function sys=mdlGetT
46、imeOfNextVarHit(t,x,u)sampleTime=1;sys=t+sampleTime;function sys=mdlTerminate(t,x,u)sys=;M文件文件S-Functions可用的子函数说明如下:可用的子函数说明如下:(1)mdlInitializeSizes:定义:定义S-Function模块的模块的基本特性,包括采样时间、连续或者离散状态的基本特性,包括采样时间、连续或者离散状态的初始条件和初始条件和sizes数组。数组。(2)mdlDerivatives:计算连续状态变量的微分:计算连续状态变量的微分方程。方程。(3)mdlUpdate:更新离散状态、
47、采样时间和主:更新离散状态、采样时间和主时间同步的要求。时间同步的要求。(4)mdlOutputs:计算:计算S-Function的输出。的输出。(5)mdlGetTimeOfNextVarHit:计算下一个采样计算下一个采样时间点的绝对时间。时间点的绝对时间。(6)mdlTerminate:结束仿真任务。:结束仿真任务。S-function默认的默认的4个输入参数个输入参数t、x、u和和flag,他们的次序不能变动,各自代表的意义是:他们的次序不能变动,各自代表的意义是:t:表示当前仿真时刻,是采用绝对计量的时间:表示当前仿真时刻,是采用绝对计量的时间值,是从仿真开始模型运行时间的计量值。值
48、,是从仿真开始模型运行时间的计量值。x:模块的状态向量,包括连续状态向量和离散:模块的状态向量,包括连续状态向量和离散状态向量。状态向量。u:模块的输入向量。:模块的输入向量。flag:执行不同操作的标记变量。:执行不同操作的标记变量。S-Function默认的默认的4个返回参数为个返回参数为sys、x0、str和和ts,他们的次序也不能改变,代表的意义为:,他们的次序也不能改变,代表的意义为:sys:通用返回函数;:通用返回函数;x0:初始状态值,当:初始状态值,当flag的值为的值为0时才有效;时才有效;str:没有明确定义,是:没有明确定义,是Math Works为将来应用为将来应用所作
49、的保留。所作的保留。ts:一个:一个m2矩阵,它的两列分别表示采样时间矩阵,它的两列分别表示采样时间间隔和偏移。间隔和偏移。8 使用命令操作对系统进行仿真使用命令操作对系统进行仿真 支持命令窗口运行仿真的函数有支持命令窗口运行仿真的函数有4个,即个,即sim、simset、simget和和set_param。(1)sim函数函数sim函数的作用是运行一个由函数的作用是运行一个由Simulink建立的模型,建立的模型,其调用格式为:其调用格式为:t,x,y =sim(modname,timespan,options,ut);通带 MPSK 调制、解调及演示三个模块。Probe(探测器)非线性模块
50、(Nonlinear)中包括一些常用的非线性模块,如图7.Outport(输出端口)基带 SSB-AM(Single Side Band Amplitude Modulation,单边带调幅)、解调及演示三个模块。仿真步长设置:定步长(Fixed-Step)。基于MATLAB/Simulink的乘法模块(Product)再如通信系统也是多速率系统。线性状态空间模块(State-Space)Terminator(终结器)数值分析:积分模块的应用4离散状态空间模块(Discrete State Space)假设从实际自然界(力学、电学、生态等)或社会中,抽象出有初始状态为0的二阶微分程 ,是单位阶