您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页simulink 仿真教程(从入门到入土)+报告(真)

simulink 仿真教程(从入门到入土)+报告(真)

来源:筏尚旅游网
Simulink仿真

摘要:simulink作为matlab的衍生模组,具有强大的仿真能力。原则上你可以将任意具有明确映射关系的物理量进行仿真模拟。对于相互间关系不明确的物理量,则可以通过输入输出数据的采集,然后通过模糊控制的方案替代明确的映射关系。本文主要针对的是以电焊机电路为主,其他仿真为辅的教程性质的文章。 关键词:matlab Simulink 仿真 电焊机 教程

第一章 初识软件 ................................................................................................................... 2

1.1 simulink 简介 ........................................................................................................... 2 1.2 simulink基础页面 .............................................................................................................. 2 1.3 常用库的介绍 .................................................................................................................... 3

1.3.1 simulink库 ............................................................................................................ 4

1.3.1.1 常用模块库 ................................................................................................ 4 1.3.1.2 其他常用子库模块 ...................................................................................... 6 1.3.2 电气库Simscape .................................................................................................... 7

1.3.2.1 Electrical库 ................................................................................................... 7 1.3.2.2 Specialized Technology库 ............................................................................. 8

1.4模块连接............................................................................................................................. 9 第二章 简单仿真系统的建立 ............................................................................................. 11

2.1传递函数S信号仿真 ....................................................................................................... 11

2.1.1 运放环节的等效替代 ........................................................................................... 11 2.1.2 等效变换 ............................................................................................................... 12 2.1.3 逻辑仿真 ............................................................................................................... 13 2.2电气库仿真 ....................................................................................................................... 13 2.3子系统和模块的建立 ....................................................................................................... 15

2.3.1 子系统的建立 ....................................................................................................... 15 2.3.2 模块的建立 ........................................................................................................... 16

第三章 复合仿真 ................................................................................................................. 18

3.1 m函数模块 ...................................................................................................................... 18

3.1.1 简单编程 ............................................................................................................... 18 3.1.2 部分函数介绍 ....................................................................................................... 19 3.2 整体模型.......................................................................................................................... 21 3.3 仿真注意事项 .................................................................................................................. 22

3.3.1 注意事项1 ............................................................................................................ 22 3.3.2 注意事项2 ............................................................................................................ 23 3.3.3 注意事项3 ............................................................................................................ 24 3.3.4 注意事项4 ............................................................................................................ 24

结语 ................................................................................................................................................ 25

1

第一章 初识软件

Matlab作为一块应用广泛的软件,在许多领域中具有广泛的应用,所以掌握matlab的一些基础运用是一个很有用的技能。Matlab广泛应用于数字图像处理,程序控制,仿真模拟等多个领域之中。这款软件的核心基础在于强大的矩阵计算能力,无论是程序处理还是仿真计算,其本质就是通过矩阵运算的方式得出解。本文将主要介绍的是其用于仿真的simulink模块。

1.1 simulink 简介

Simulink是matlab的仿真模组。其内部集成了具有各种映射关系的库。Simulink的仿真主要就是熟练的运用各个不同库中的模块。(因为simulink的仿真不单单是电气上的仿真,所以一般不把各个仿真用的“单元”称为器件,而是称为模块,同时将整个仿真图称为仿真模型)下面介绍simulnk的基础页面和库的介绍。

1.2 simulink基础页面

首先自然要创建simulink仿真模型的空白页面。Simulink的仿真页面无需像其他软件一样需要也先设置各种参数。在matlab主界面的主页选项,选择新建下拉菜单,然后选择

simulink,即可建立空白的simulink仿真页面。 在simulink页面则可以直接点击

完成新建或者打开的simulink的仿真页面。

图1-1 simulink仿真页面

2

各个快捷键的介绍,第一栏为菜单栏,所有的软件都具有的一栏,大部分情况下并不会用到,这里就只针对快捷键进行说明。第一栏快捷键从左往右以此为新建/打开,保存,撤销界面操作,恢复界面操作,退出当前子模型,库,仿真设置,当前模块列表及搜索,后撤仿真步数,开始仿真,逐步仿真,暂停,记录,仿真时长,模块指引,仿真模型建立。

左侧竖列分别为隐藏/显示文件名,放大指定区域,最佳视图,没什么用的,插入文字,插入图片。基本上simulink的仿真建立应用上述快捷键就足够了。Simulink的仿真界面与其他仿真软件还有点不同的是其仿真界面可以视为无穷大,不需要提前设置图纸大小,其图纸大小会随着你建立的仿真图形而改变。然后虽然因为simulink无法实现跨图纸连接仿真,但是通过子系统的封装,完全可以将两个大的模型封入子系统然后将必要的接口相互连接,所以不存在一个界面存在太多器件而导致仿真杂乱不堪。

1.3 常用库的介绍

Simulink中有数目众多的库,不同的库具有不同的仿真侧重点。所以本节会对一些常用的库进行简单的介绍。Simulink的库为层级结构。不断选中自己所需的类别,然后找到自己所需要的元件。实际上simulink的库其实也是模型文件,只不过是不能更改的模型文件,每一个层级其实就是模型的一个子系统,每一个子系统打开,如果子系统中还包含子系统就继续可以打开,其他的不可打开的就是可用的模块了,为了库分类而做的子系统一般是没有输入输出端口的。

图1-2 simulink库展示

3

1.3.1 simulink库

以simulink本身命名的库,自然是simulink中最重要的库同时也是使用频率最高的库。当然前面也提到过了,本文主要针对的是焊机电路的仿真为主的教程,所以一些相对这个主题不重要的库就不在这里介绍了。

将会介绍的库有,commonly Used Blocks(常用模块库),Continuous(连续量模块库),logic and bit operations(逻辑变换库),Math Operation(数学变换库),signal routing(信号传递库),sinks(终端库),sources(信号源库),user-defined functions(用户自定义库)。在本文中主要使用的库就是上述几个库。

1.3.1.1 常用模块库

常用模块库,顾名思义将simulink库中除自身外其当子系统库中的常用模块集中到一起的库,所以这个小库中的模块都是比较有用的模块。选取其中典型的模块进行大致功能的介绍。

常数模块,很简单双击打开后可以修改参数。这个模块的作用就是输出恒定常数

信号,当然如果采用一些手段也可以做到在仿真过程中进行参数的变化,实际上对于一些仿真比较慢的模型,你可以直接在仿真过程中进行参数的修改(仅限于部分模块,并不是所有模块都可以在仿真过程中进行参数的修改,这个在后续章节中会讲述)。可以输出所有参数类型(注意事项1)。

gain,比例环节,通过这个环节的信号将会根据设定的参数比例进行缩放。使用

方法与上相同,具有输入端的gain环节可以接受所有参数类型信号,同时可以单独设置输出信号类型,所以这个模块除了用于信号的放大缩小以外还可以用于信号类型转换,这在simulink中是一个相当有用的作用。

,out & in 主要用于子系统的输入输出端口建立,当子系统需要添加

输入输出端口时,就是采用这两个模块完成的。

,MUX & Demux混合和分离模块,混合后的信号存贮方式为,时间数组+信号1

数组+信号2数组,2个不同的信号将会存在于同一个节点当中,同时又是相互分开的存在。然后通过分离变量可以将其重新分离成两个信号。存贮方式按信号的输入位置从上往

4

下依次排序,同理分离时也按相同的情况处理。输入输出端口是双击打开后,通过参数可调的,有一种特殊情况就是分离输出端口少于混合输入端口,这时候会按照除法进行等量分配,多于部分从上往下分配。如7个输入,3个输出,则输出1号口分配到3个信号,2,3端口分配到2个信号,且各自的信号为1号后输出1,2,3信号,2号输出4,5信号,3号输出6,7信号。基本上输入输出的安排就是这个规律进行的。混合的信号来源必须为同一类型的参数变量,不同类型的参数变量无法混合,会报错(如double无法和unit8混合)。

积分模块,最常用的连续变量传递函数模块,常常用作误差积分进行反馈环节的

设计。

and模块,与与门具有相同的功能,输入信号可以是任意形式的参数变量,但输

出确定为boolean逻辑变量。所以如果后续需要参与其他类型变量的变化需要通过gain进行类型转换。同时这个模块双击打开后可以进行输入端口数量的设置,同时可以进行逻辑功能的选择,有与,或,非,与非,或非,同或,异或7个常见逻辑功能的选择。关于逻辑变量,逻辑变量分类为0和非零值,对于输入其识别为0为假,非零为真,即无论多小的数甚至负数对于模块而言都视为真。输出假为0,真为1,对于常数模块设定1以外的真变量,同时设定为逻辑变量其输出依旧为1。

乘法模块,输入端口数目可调,输出为所有的输入的乘积,输入信号可以为任意

参数类型,输出为逻辑变量以外的参数类型。

逻辑判断模块,可以有>, <, >=, <=, ==, isinf, Isnan, isfinite这几个功能可选,输入

参数类型可以为任意类型,输出参数类型恒为逻辑变量。

限幅模块,所有通过这个模块的信号都会被在指定幅值区域内,双击打开后

可以设置上限值和下限值。

示波器模块,可以设置输入端口数(同时改变内部窗口数,不会在同一窗口显示),

想要在同一窗口显示,则需要将两个信号通过混合模块进行混合后输入到示波器当中,这样就会在同一个窗口显示波形。默认信号颜色为从1号到5号,黄粉浅蓝红深蓝,往后就是循环了。

加法(或者减法),通过双击可以选择端口数量和+-符号,可以对多个数值进行加

减运算,最后输出。输入可以为任意信号,输出可以是逻辑变量以外的任意信号。

5

常用器件库中,将会用的模块都在上面进行了介绍。下面则是simulink库中其他子库中一些比较实用的模块介绍。

1.3.1.2 其他常用子库模块

连续量模块库中的模块,零极点模块,通过设定零极点来确定传递函数的模

块。同一个库中的另一个模块,两者效果其实是一样的,只不过传递函数模块,

直接设定不同阶数的系数设定传递函数。上面讲过了积分模块,自然这里有相应的

微分模块形式上是导数。积分模块还有一个衍生模块,有限积分模块,只

能积分到上下限值,不会出现无限积分的情况。这个库中还有一个更直接的模块,PID

模块,直接就是个PID环节,直接设置比例,积分,微分参数即可。

设定一个参数值和判断条件,在输入符合条件时输出逻辑真,否则为否,即1

和0的逻辑变量。

from & go 信号传递库中的模块,其作用相当于电路仿真

电压表

的网络标号一样,通过设定想多的标签,可以使两端完成“无线”连接。或者电流表异或其他表,用于显示连接信号线数值的模块。

存储模块to file,将时

from file,

间信号和对应信号线的数值记录并存储到.mat文件当中。与之对应的是

从对应的.mat文件中读取数据,双击打开可以设置文件名,同样不允许有中文。与之类似的有

&

to workspace &from workspace,只不过存储位置变成了工作空间,

即matlab的内存空间,这里的数据可以由matlab的其他应用调取,但在内存清除后会消失,而之前的to file会确实的保存在硬盘当中。在信号源库中存在着多种信号和信号来源途径,比较常用的信号源有

依次为周期脉冲,锯齿波,阶

跃,斜坡,时钟,简弦,有限白噪声。具体参数都可以双击打开模块后进行修改。然后是用户自定义库中的两个个人使用频率较高的模块

6

&,s函数因为涉及到其他

方面的知识不在本文讨论。Fcn模块是一个比较常用的用户自定义模块,可以通过

模块进行m文

内部设置输出对输入的映射关系(1对1)想要多输入多输出则需要件的编写设计,这将在后文提到。

以上的一些模块就是simulink库常用库中的一些比较重要的模块。

1.3.2 电气库Simscape

虽然其他库也有电气相关的模块,但是相对而言这个库中的模块比较直白,就是用来做电气仿真用的模块库。虽说是这个库,但实际上也只是采用其中部分子库。

1.3.2.1 Electrical库

库目录为Simscape/Foundation Library/Electrical。这个库具有3个子库,分别为Electrical

Elements 元件库,Electrical Sensors 传感器库,Electrical Sources电源库。

图1-3 元件库

这个库中大部分都是我们所熟悉的那几个常用元器件模块,如电容,电阻,二极管,接地,理想变压器,电感,运放等。基本上simulink的电气仿真库中,只存在这些基础元器件模块,当然在一些特定的库中,也会有一些特殊的元器件模块,这就需要各位自己去寻找了。这里还要注意两个特殊点的元器件模块,switch,通过设置导通信号阈值,可以再输入的物理量信号大于某个值时导通,否则关断。最后一个为可调电阻,根据输入信号变化对应的阻值大小,这两个是在仿真中进行电路实时变化的重要元器件模块,通过预设的指定信号或者其他的采样信号,让其在特定时间发生特定的变化。

7

,传感器库主要就是电压传感器和电流传感器,用法与理想电压表和

电流表相同。两个采样端口,一个输出端口。通过将采样端口接入测量位置,然后在输出端口就会输出对应的物理量信号。

然后就是电源库,电源库中具有比较通用性的电源。常见的交流电流源,交流电压源,受控电流源,受控电压源,电流控制电流源,电压控制电流源,电压控制电压源,电流控电压源,直流电压,直流电流。

1-4 电源库

其中受控电源是比较重要的模块,因为通过受控电源和前面一些信号源的搭配我们可以组合出我们任意希望的输出电源。

1.3.2.2 Specialized Technology库

库目录为Simscape/SimPowerSystems/Specialized Technology。这个库中拥有不少的子库,但主要用到的和上述库一样,传感器,电源,元器件这三个模块库。当然模块上还是有一点不一样的地方的。

,这边的电阻电容电感模块是整合在一起的,分为并联

RLC模块和串联RLC模块。通过参数设置可以设置成任意1,2,3个组成的并联或者串联模块。

,传感器形式上与上一个库差不多,但输出信号上却是不同的,这在下面会

进行分析。同理受控电源的输入信号源也是不一样的。

常用模块的介绍就到这里,作为入门教程,以上模块一般就足够使用,随时软件使用的不断深入,自然会不断的提升对库的使用熟练度,了解更多的模块和应用方法。

8

1.4模块连接

大部分其他仿真软件,不同器件之间的连接大部分情况下都是可以直接相互连接的。但simulink的仿真不同。或许已经注意到了,上面介绍模块时,在模块的封装双它们的端口并不是完全一样的。目前来看主要有以下几种端口,

箭头输入输出端口,一个箭头输出

端口可以同时给多个箭头输入端口提供信号,但一个输入端口无法同时接受复数输入端口的信号(注意是复数输入端口信号,但是可以通过混合模块接受复数个信号)。同方向的箭头端口无法直接连接,即箭头信号端口的信号传输都是单向传输信号。

与之类似的是中多用作中间级转换。

三角信号端口。作用效果基本与上面的箭头端口完全一致,在本文双向电气端口小方框,这个是Electrical库中元器件模块的主要连

接端口。这个端口支持双向传输,可以进行任意数量的端口连接。这也是由电气仿真的特性所决定的,大部分情况下电路中的信号流向并不唯一,电路中每一个节点都同时具有电流和电势两个物理量,这也是普通单向单变量端口无法模拟的部分。与之对应的是Specialized Technology库中的电气元器件模块主要为作用是差不多的但无法进行直接的连接。

上面的不同端口之间都是无法进行直接连接的,所以一个仿真模型中大部分情况下都是集中采用具有统一端口的模块,否则有时候会出现一些意想不到的问题。下面就描述一下不同端口之间的转接方法。大部分情况下转接都是通过传感器和受控电源及特殊的PS和SP转换模块进行的。

箭头和三角互换就是通过PS和SP转换模块进行的,

,三角端口主要还

大方框端口,这两种方框端口在各自电路中的

和小方框端口进行互换,如下图所示,经过组合之后还可以完成小方框端口和三角端口的

1-5端口转换

互相切换。

9

大方框端口和箭头端口的切换相对而言更加简单,Specialized Technology库中的传感器输出端口就是箭头端口,其受控电源的输入端口也为箭头端口。

。不同的端口通

过上述方式就可以完成不同端口之间的相互连接了。值得注意的是,对于电路的仿真而言,对于同一网络的设计,采用同一种端口(大方框或者小方框)进行设计时更为恰当的选择,如果同一网络中加入了三角或者箭头端口的信号线,则如之前所说,这两者的信号是单向传输的。所以对于部分电路仿真而言这里就相当于使用了具有电气隔离特性的器件进行了连接,这会导致仿真电气特性跟实际电路的不同。且因为三角信号和箭头信号一般都只能传输一种信号,多于大部分电路无法将电压和电流信号完全迁移过去。

这就相当于我们无法用图1-6来替代电阻和电容的串联一样,因为电气特性的相互隔离,这已经与原有电路图的电阻电容串联充电的特性完全不一样了。

图1-6 错误的转换连接

10

第二章 简单仿真系统的建立

通过前面的介绍和学习,基本上我们可以建立并仿真一些简单的物理变化了(并不单纯指电气仿真)。简单仿真的过程依旧是以库作为分类依据进行的。

2.1传递函数S信号仿真

在实际生产生活中我们常常会忽略掉一些很平常的东西。就像我们生活中无处不在的控制系统。如热水器如何做到将水的温度维持在一个恒定值,如何让电机以恒定的速度转动等。特定的输入会做出特定的输出,这就是控制系统。同时这种输出对输入的映射关系就可以通过传递函数进行描述。当然作为电路仿真为主题得本文,并不会过多的讨论其他形式的控制系统和传递函数主要依旧集中在电气上的控制。

一般传递函数的描述都是以拉普拉斯变换后的s域内进行的。对于电路而言,有一套固定的转换方式。即将电阻,电容,电感这3个基础变量变换到s域的方法。R电阻维持不变,电容变成1/sc,电感为SL。变换完成后就可以直接通过纯阻性电路的计算方式算出所求输出对输入信号的映射关系。

对于电路而言这种转换主要是对特定的无缘网络,负反馈的运放进行仿真的。这两者有一个特点就是我们所关心只有输入和输出的电压关系,这就保证了一个节点这由单一变量的要求。然后这里的输出对输入在输入阻抗和输出阻抗接近理想的情况下可以看做输出负载的变化不会引起输入,输出的变化,即满足了信号传递的单向性要求。实际上满足上述两个条件的任意物理量都可以进行这样的仿真。

2.1.1 运放环节的等效替代

最符合上述要求的电路就是运放的负反馈调节的电路。实际上,电路控制系统的设计也

图2-1 积分电路

11

大多通过运放的各种环节进行实现的。如图所示上面的环节是典型的积分环节,下面的电路则是用运放实现的积分环节。为了显示方便没做反相处理,最终结果如图所示

图2-2 积分电路输出

可以看到在相同的方波输入下,两者具有恰好相反输出。即完全可以用上面的积分环节取代下面的电路进行仿真。对于控制电路而言这样的环节替代是必要的,可以大大简化仿真模型,并提高仿真效率。

2.1.2 等效变换

从上面我们可以得出:对于simulink库的基础仿真而言,最重要的就是将实际的关系映射抽象成数学关系,然后拉普拉斯变换后得到传递函数进行仿真。对于电路而言,因为我们一开始就有了元器件的转换公式,这就是可以先进行元器件的参数变换,然后再s域内进行电路的计算,最后得到传递函数。当然也可以通过时域内的先行计算,最后进行拉式变化,最后的结果是一致的。

对于常用的运放负反馈电路的传递函数计算可以通过将元器件进行拉式变换后,将整个电路视为反相放大器就可以快速求出改环节的传递函数了。以上面的积分环节为例,其负反馈通路上的参数应为1/sc,输入端参数为R。则可以直接得到这个传递环节的传递函数为-1/RCS。在已知电阻为1M电容为1u时,G(S)即为-1/s。所以可以看到两者的输出等大反相。

12

2.1.3 逻辑仿真

上述内容主要是针对连续量的仿真,在连续量的整体控制上一般都采用这种方式进行控制。不过为了实现一些功能性电路时在,则需要进行逻辑功能的判断处理。如当符合特定条件时需要切断输出,这时候采用的一般都是开关型元器件,反映到仿真里则为逻辑模块。

图2-3 逻辑判断电路

如图当三角波得幅值大于1v时,则会关闭正弦信号的传输通道。(具体波形和颜色在第一章已经讲述,读者可以在自行分析一下每一个输入波形的颜色)。这种模拟电路,就实现了由信号A控制信号B的传输这一控制理念。

结合上述两种仿真方式,基本上可以进行绝大部分的纯电压控制的控制电路仿真。

2.2电气库仿真

电气仿真主要就是使用Electrical库和Specialized Technology库中的元器件模块进行电气仿真。上一节的仿真是在符合条件下才能进行的仿真,然而对于大部分模拟电路我们不可能只关心一个物理量进行仿真,且对于复杂电路而言,将各部分抽象成s域的映射关系,本身就是相当麻烦的事情,这也是我们使用仿真,而不是理论计算得出输入输出关系的原因,所以某种程度上而言,对于一些电路的初步设计而言,这样的分析反而本末倒置了。当然在建

13

立完模型后,进行参数的调整上依旧具有优势,无需重复计算。针对以上情况,simulink也是可以进行纯器件的仿真模拟的。当然由于simulink并没有特意对电气库进行收录过器件参数。所以除了基础元器件外,基本没有其他元件。当然,因为simulink就是通过各种映射关系搭建模型的,所以只要了解到所需器件的输入与输出的关系,可以自行构建模块。

下面就简单的电路进行电路搭建过程的介绍。

图2-4 电容充电A

这是一个典型的通过电阻给电容充电的RC电路。作为一个基础电路也有值得注意的地方。首先在使用Electrical库进行模型的仿真设计时需要注意,必须在网络的电路中各自连接上解析函数模块solver。在具有电容或者电感的电路也需要注意到,仿真电路的初始状态并不是将所有待测量置零开始的。而是先进行直流分析,即让电源以0时刻状态下的输出为恒定输出让电路达到稳态时的参数作为初始量,然后进入正式的仿真。这就会导致,电容和电感的初始状态都是饱和状态下开始的。这对于部分需要观察电容电压或者电流变化的仿真显然是不行的。解决方案就是尽量利用阶跃信号当作恒压或者恒流源输出,这样其初始态为0,不会让电容电感的初始态为饱和状态。

Specialized Technology库的仿真也大同小异。模型见下图

图2-5 电容充电B

这里需要注意的是,含有Specialized Technology库的仿真模型,必须在模型中添加

14

powergui模块,跟Electrical库的solver模块起到相同的作用。

2.3子系统和模块的建立

在之前的简单仿真模型图中可以看到一些没有在第一章中被介绍到的模块。这些模块是通过建立子系统后,然后进行模块话封装建立的。

2.3.1 子系统的建立

通过将一些基础模块互相连接,使其具有特定的输入输出关系,然后将这部分电路封装起来,就成为了一个子系统。子系统的建立既可以是通过直接选取完成模型的一部分,然后进行创建,也可以单独构建具有特定功能的模型后进行封装。前者多为将具有特定功能的部分电路封装起来,是为了让模型整体更具备可读性。后者大多是为了创建具有特定功能的模块而准备的。

子系统的创建除了为了让系统具有更好的可读性外,常常也用作重复应用次数较多的部分。将其创建成子系统后,可以快速复制,并让模型不显得杂乱。

图2-6 转接口子系统

如图所示的是将小方框模型出电势转换成s信号进行输出的子系统。这个子系统因为具

有泛用性,所以将其制作成了子系统。内部结构为右侧所示。通过这个接口,可以方便的将Electrical库组建的模型的各个节点的电势转换成s信号好,送到示波器上进行显示。具体创建方法为选中如图右侧部分(一开时不包含in和out两个输入输出端口),点击右键选择create Subsystem from Selection。就可以完成子系统的创建了,创建的同时会将连接到外部的连线或者裸露的未连线端口自动创建相应的外部端口。子系统完成创建后可以双击进入内部,可以进行修改,如果需要添加另外的外部端口,则需要根据对应的端口进行端口的添加模块。

具体对应模块为

15

对应箭头端口的输入输出,其他端口则统一为

,且不分输入和输出(三角端口也采用这个接口,输出端口会根据内部所连

接的具体端口体现在外部端口上)。通过修改这些引脚名,也会改变外部端口的名称。双击改变参数序号,则会改变其相应的封装位置。

2.3.2 模块的建立

模块的建立,是建立在子系统基础上的。子系统封装后可以直接将其转化成模块。模块与子系统最大的区别在于模块具有外部参数设置功能。建立模块后可以在外部设置参数,从

而改变内部模块的参数,从而让映射关系产生变化。件模块直接相连的脉冲模块。

这是一个可以与Electrical库元器

图2-7 脉冲模块参数设置图

从上图可以看到,这个模块双击打开的是参数设置页面,这就是模块与子系统的区别。然后根据对应的参数设置,可以确实的改变其输出。如果需要进入模块内部(对于simulink自带的模块无法进入),则需要点击模块封装左下角的箭头符号即可进入。脉冲模块展开图如下所示

图2-8 脉冲模块展开图 内部结构相对的并不复杂,这里主要是要通过一定的参数设定完成内外参数的联动,当

16

外部参数修改时,可以准确的修改内部参数。在其还是子系统阶段,双击脉冲信号源。

图2-9 内部脉冲信号源参数设置图

按图上所示,将几个需要联动的参数设置成字母格式(支持简单的逻辑运算如v+t,t/2等代数变换)。然后进行模块话,选中对应的子系统,右键然后先选择mask,选中creat mask… 就会打开以下界面。

图2-10 模块编辑界面

第一栏Icon&Ports为外观设计栏,不影响使用,不做介绍了。主要是第二栏参数栏Parameters&Dialog栏。选中中间的参数(蓝色),然后单击左侧的EDIT,就会添加一个可编辑参数栏,需要几个添加几个,然后每一栏有两个参数,一个是显示参数名,一个是实际参数名。实际参数名必须与内部模块的参数名相对应才能使它们相互联动。完成上述设置后点击ok就算完成设置了。

17

第三章 复合仿真

前面的仿真介绍基本上都是单一库的仿真,实际上很多时候我们需要多个库之间的联动仿真。通过不同库的结合,简化仿真设计,提高仿真效率。这里我们主要运用的内容就是1.4节所介绍的部分内容。

3.1 m函数模块

matlab function,位于simulink/user-defined function库中。通过.m函数文件控

制仿真运行的模块,其通过内部程序编程,可以改变输入输出变量的数目。

3.1.1 简单编程

对于一些简单的数学映射或者逻辑判断上一般是不推荐使用这个函数模块的,相对而言采用程序模块的仿真速度会大大降低。不过对于仿真速度绰绰有余的模型来说,通过函数模块替换掉一些相对复杂模块组合来说也是不错的。

图3-1 比较器内部图

图3-1 为自行制作的比较器模块的内部展开图,可以看到除了几个转换接口,其主要功能都是由m-F模块实现的。当然只是一个内部比较环节,其程序也是相当简单的。

function y = fcn(u,u1,u2) %#codegen if u1>=u2 y=u; else

18

y=0; end

function y = fcn(u,u1,u2)设置输入输出变量。=号左侧为输出变量,会直接反应到模块的输出端口上。右侧为输入变量设置。实际上这是一个典型的子函数的数据传输语句。一般fcn即当期函数函数名,因为此处是模块代表的子函数,一般不用修改。实际效果,通过语句分析也很明确,输入u1>u2时输出u,否则输出0。

这个模块与fcn模块不同的地方在于输入输出端口不受限,所以可以同时完成1对多,多对1,多对多的输入与输出关系映射,且可以进行逻辑判断。

3.1.2 部分函数介绍

结合一个实例程序进行函数的介绍。

1 function fcn(u,I,max,min,j,j1) 2 coder.extrinsic('set_param') 3 coder.extrinsic('get_param') 4 coder.extrinsic('str2num') 5 coder.extrinsic('num2str') 6 pu=50; 7 %#codegen 8 if u<(I-2) 9 pu=50; 10 else 11 if u>(I) 12 j1=1;

13 jm1=num2str(j1);

14 set_param('nibian/jm1','Value',jm1); 15 if u>(I+1)&&j==1 16 if max-min>7 17 max=max-2; 18 end

19 max1=num2str(max);

20 set_param('nibian/max','Value',max1); 21 j=0;

22 jm=num2str(j);

23 set_param('nibian/jm','Value',jm); 24 end

25 P=get_param('nibian/Pulse','PulseWidth'); 26 pu=str2num(P); 19

27 pu=pu-1; 28 if pu32 if u<(I-1)&&j1==1 33 if max-min>7 34 min=min+2; 35 end

36 min1=num2str(min);

37 set_param('nibian/min','Value',min1); 38 j1=0;

39 jm1=num2str(j1);

40 set_param('nibian/jm1','Value',jm1); 41 end 42 j=1;

43 jm=num2str(j);

44 set_param('nibian/jm','Value',jm); 45 P=get_param('nibian/Pulse','PulseWidth'); 46 pu=str2num(P); 47 pu=pu+1; 48 if pu>max 49 pu=max; 50 end 51 end 52 end

53 P=num2str(pu);

set_param('nibian/Pulse','PulseWidth',P); 55 set_param('nibian/Pulse1','PulseWidth',P);

与之前的简单函数相比,多运用了一些特殊的语句,且因为在这个模块中并不是直接采用输出的方式进行参数值的传递的,所以第一行没有输出函数的定义,只有几个输入函数的定义。2~5行则是声明特殊函数,在模块m函数的编写中只支持简单的基础语句,如if,for,switch等和数算。一些特殊函数的需要使用时,需要提前声明。set_param,get_param, str2num,num2str这个函数中声明了这四个变量,分别是参数设置,参数读取,字符串(char)转数字(double),数字(double)转字符串(char)。对于每个函数的用法可以通过matlab自带的说明进行研究,在命令行输入help 函数名就可以找到指定函数的具体用法。

下面的主要部分编程跟c语言大同小异,基本上可以完全采用c语言的格式,也不会出现报错,当然也不完全想多,对于不符符号语句还是有所不同的。一些数算上,可以直接使用对应的符号进行标示,如指数为.^,非为~而不是!等细节的差别,一些if,while

20

的条件语句上,也可以不用添加小括号。

如之前所说,这个模块函数没有输出函数,而是通过其他方式来进行输出的,这里通过set_param('nibian/Pulse','PulseWidth',P);实现参数的输出,具体效果就是对nibian模型,Pulse模块的PulseWidth参数设置为P(char变量)。这里三个参数都是char型字符串变量,如需要赋值50,则p=’50’,而不是p=50。第二个变量参数名需要注意,这里的参数名不是设置参数时所看到的显示参数名,而是实际参数名(区别见模块建立章节)。对已一些实际参数名跟显示参数名(往往是不同的)不同的情况。需要通过一些其他方式先得到参数名。

get_param('nibian/max','DialogParameters'),在命令行输入上述代码,表示读取nibian模型max模块的所有参数名。输出如下: ans =

Value: [1x1 struct] VectorParams1D: [1x1 struct] SamplingMode: [1x1 struct] OutMin: [1x1 struct] OutMax: [1x1 struct] OutDataTypeStr: [1x1 struct] LockScale: [1x1 struct] SampleTime: [1x1 struct] FramePeriod: [1x1 struct] 大部分情况下,通过观察既可以知道我们所需要的参数的正式参数名,但如果无法得知,只能将上述参数进行更改,观察具体是哪一个参数对应我们所需要更改的参数。

3.2 整体模型

图3-2 逆变输出模型

21

图3-3逆变全桥展开图

上述模型包含了,子函数,自制模块,3个库的混合连接,函数模块等主要仿真技能。注意部分需要程序实时修改参数的模块必须保证模块的命名和程序中的名字相同,否无法找到。修改模块名,通过单击模块名就可以进行修改。

3.3 仿真注意事项

仿真过程中我们经常会出现各种问题和报错。下面就这些问题进行一些简单的归类处理。

3.3.1 注意事项1

传递信号参数类型不匹配,这是仿真编译过程中使用一些特殊模块后经常遇到的问题。

图3-4参数类型不匹配

可以看到,当前后两个模块的输入输出参数不匹配时,会出现报错(显示上都是显示当前信号类型),jk触发器j,k端要求逻辑变量,这边的输出却是double型变量。大部分情况下我们需要的都是double转boolean和boolean转double两种即可。Double转boolean利用and

22

模块即可,无需多余的设置,只需记住对于输入的真假而言,非0即1。

图3-5 double转boolean

对于逻辑变量boolean转double则需要使用gain模块,且需要一定的设置。双击

打开gain模块。在参数设置中切换到第二栏,signal attributes,将output data type栏下拉设置成double

图3-6 gain输出数据类型设置

这样输出数据类型即为double类型,当输出有具体值时,可以通过将倍数改变即可,逻辑真恒为1,即输入为1,所以改变倍率调节就可以输出指定大小的double变量。

3.3.2 注意事项2

set_param,关于这个函数的使用,就如之前所说,可以在仿真运行过程中实时改变一些模块的参数。但通过这个函数改变的参数需要注意的是必须是在仿真中可以改变的参数。具体识别方法是在仿真过程中双击打开模块,显示灰色的参数为不可修改参数,其他的则是可以修改参数。一般来说信号源参数都是可以修改的。但是通过特殊的方法,也可以将这些本不可以在仿真中修改的参数让其在仿真中修改,那就是通过将不可修改的模块在模块化,将其不可修改的参数定义成变量形式,这样就可以通过在外层模块修改,导致内部原本不可变参数的变化,使之在仿真过程中的修改变成可能。

23

3.3.3 注意事项3

仿真设置。打开仿真设置界面后,我们可以看到如下界面。

图3-7 仿真设置

实际上仿真设计页面还要大一些,但大部分时候我们只需设置这里的参数即可。开始时间,大部分时候还是默认0s开始,停止时间,则根据实际情况而定。然后就是仿真补偿的使之,最常用的设置为最大步长的设置,让步长在一定长度以下,保证采样进度,一般设置在仿真最高频率信号周期的1/10到1/100。且有时候出现无法仿真无法收敛的报错,也可以通过修改步长,进行尝试。右侧有解析函数的选择,默认情况下为ode45。在一般仿真时没有问题,但涉及到三极管,电容等元器件时并使用高频信号时,可能会出现报错或者仿真极慢的现象,这里可以通过将解析函数选择成ode23t来提高仿真效率。

3.3.4 注意事项4

代数环,这是在拥有反馈回路中常出现的报错。在反馈环节当中,输入决定着输出,同时输出也影响着输入。这就会引起一个问题,即在开始阶段,因为没有输出信号,所以输入信号没有不是一个明确的确定值,这会导致无法进行计算而报错。所以对于反馈回路,需要设定一个延时函数,并赋予初值,存在这样一个模块

memory,通过在反馈环节上添

加这一个模块可以有效的解决这一个问题。对于一些在仿真一定时间后出现报错的模型,添

图3-8 除法模块

24

加memory模块也有一定的效果。同样是初值问题,在除法模块中出现除数的初值为0的状况时,有时候会导致后续环节出现报错。对于这种情况,一般采用对除数添加一个合适大小的常数值,或者用限幅输出的方式进行限幅。

结语

总体而言,simulink仿真是一个适用性相当广泛的仿真软件,其自由程度相当之高,只要你能想得到的仿真基本上都可以用simulink进行仿真,且仿真形式不唯一。对于同一个实体(电路或者其他物理模型)可以根据不同的理解和需要建立不同的仿真。当同样的自由程度太高,导致大部分情况下,对于同一个电路因为不同的理解甚至可以建立完全不同的仿真,对于仿真结果而言也会产生巨大的影响。且simulink的仿真几乎完全建立在模型设计者对被仿真对象的理解上,这就可能导致一个问题,其他的仿真最多仿真失败,但是simulink的仿真是可能出现错误的。相比较而言,simulink的仿真与实际情况差距相对较大一些。但是simulink的模型制作修改上要比其他软件简单明了的多,只要通过提前建立能够保证正确的模块,则可以有效的降低其仿真出错的可能性,且模块可以实时改变,意味着遇到相似的效果的模块或者升级版完全可以通过内部的简单修改完成模块的升级。对于一些组合电路,如整体电路由ABC三者组成,我们可以通过建立不同A1,A2,B1,B2,C1,C2然后自由组合验证,怎么样的搭配最为合理。简单一句,simulink的仿真不适合作为初学者的仿真,但对于电路原理基本已经掌握的情况下,simulink的仿比其他的仿真就具有更好的效果。

25

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务