收藏 分享(赏)

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

上传人:weiwoduzun 文档编号:3580319 上传时间:2018-11-13 格式:PDF 页数:25 大小:1.11MB
下载 相关 举报
simulink-仿真教程(从入门到入土)+报告(真).pdf_第1页
第1页 / 共25页
simulink-仿真教程(从入门到入土)+报告(真).pdf_第2页
第2页 / 共25页
simulink-仿真教程(从入门到入土)+报告(真).pdf_第3页
第3页 / 共25页
simulink-仿真教程(从入门到入土)+报告(真).pdf_第4页
第4页 / 共25页
simulink-仿真教程(从入门到入土)+报告(真).pdf_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、1 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

2、.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 函数模块 1

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

4、要介绍的是其用于仿真的 simulink模块。 1.1 simulink 简介 Simulink 是 matlab 的仿真模组。其内部集成了具有各种映射关系的库。 Simulink 的仿真主要就是熟练的运用各个不同库中的模块。(因为 simulink 的仿真不单 单是电气上的仿真,所以一般不把各个仿真用的“单元”称为器件,而是称为模块,同时将整个仿真图称为仿真模型)下面介绍 simulnk 的基础页面和库的介绍。 1.2 simulink 基础页面 首先自然要创建 simulink 仿真模型的空白页面。 Simulink 的仿真页面无需像其他软件一样需要也先设置各种参数。在 matlab 主界

5、面 的主页选项,选择新建下拉菜单,然后选择simulink,即可建立空白的 simulink 仿真页面。 在 simulink 页面则可以直接点击 完成新建或者打开的 simulink 的仿真页面。 图 1-1 simulink 仿真页面 3 各个快捷键的介绍,第一栏为菜单栏,所有的软件都具有的一栏,大部分情况下并不会用到,这里就只针对快捷键进行说明。第一栏快捷键从左往右以此为新建 /打开,保存,撤销界面操作,恢复界面操作,退出当前子模型,库,仿真设置, 当前 模块列表及搜索 ,后撤仿真步数,开始仿真,逐步仿真,暂停,记录,仿真时长,模块指引,仿真模型建立。 左侧竖列分别为隐藏 /显示文件名,

6、放大指定区域,最佳视图,没什么用的,插入文字,插入图片。基本上 simulink 的仿真建立应用上述快捷键就足够了。 Simulink 的仿真界面与其他仿真软件还有点不同的是其仿真界面可以视为无穷大,不需要提前设置图纸大小,其图纸大小会随着你建立的仿真图形而改变。然后虽然因为 simulink 无法实现跨图纸连接仿真,但是通过子系统的封装,完全可以将两个大的模型封入子系统然后将必要的接口相互连接,所以不存在一个界面存在太多器件而导致仿真杂乱不堪。 1.3 常用库的介绍 Simulink 中有数目众多的库,不同的库具有不同的仿真侧重点。 所以本节会对一些常用的库进行简单的介绍。 Simulink

7、 的库为层级结构。不断选中自己所需的类别,然后 找到自己所需要的元件。实际上 simulink 的库其实也是模型文件,只不过是不能更改的模型文件,每一个层级其实就是模型的一个子系统,每一个子系统打开,如果子系统中还包含子系统就继续可以打开,其他的不可打开的就是可用的模块了,为了库分类而做的子系统一般是没有输入输出端口的。 图 1-2 simulink 库展示 4 1.3.1 simulink 库 以 simulink 本身命名的库,自然是 simulink 中最重要的库同时也是使用频率最高的库。当然前面也提到过了,本文主要针对的是焊机电路的仿 真为主的教程,所以一些相对这个主题不重要的库就不在

8、这里介绍了。 将会介绍的库有, commonly Used Blocks(常用模块库), Continuous(连续量模块库),logic and bit operations(逻辑变换库), Math Operation(数学变换库) , signal routing(信号传递库), sinks(终端库), sources(信号源库), user-defined functions(用户自定义库)。在本文中主要使用的库就是上述几个库。 1.3.1.1 常用模块库 常用模 块库,顾名思义将 simulink 库中除自身外其当子系统库中的常用模块集中到一起的库,所以这个小库中的模块都是比较有用的

9、模块。 选取其中典型的模块进行大致功能的介绍。 常数模块,很简单双击打开后可以修改参数。这个模块的作用就是输出恒定常数信号,当然如果采用一些手段也可以做到在仿真过程中进行参数的变化,实际上对于一些仿真比较慢的模型,你可以直接在仿真过程中进行参数的修改(仅限于部分模块,并不是所有模块都可以在仿真过程中进行参数的修改 ,这个在后续章节中会讲述)。可以输出所有参数类型(注意事项 1)。 gain,比 例环节,通过这个环节的信号将会根据设定的参数比例进行缩放。使用方法与上相同,具有输入端的 gain 环节可以接受所有参数类型信号,同时可以单独设置输出信号类型,所以这个模块除了用于信号的放大缩小以外还可

10、以用于信号类型转换,这在simulink 中是一个相当有用的作用。 , out else 19 y=0; end function y = fcn(u,u1,u2)设置输入输出变量。 =号左侧为输出变量,会直接反应到模块的输出端口上。右侧为输入变量设置。实际上这是 一个典型的子函数的数据传输语句。一般 fcn即当期函数函数名,因为此处是模块代表的子函数,一般不用修改。实际效果,通过语句分析也很明确,输入 u1u2 时输出 u,否则输出 0。 这个模块与 fcn 模块不同的地方在于输入输出端口不受限,所以可以同时完成 1 对多,多对 1,多对多的输入与输出关系映射,且可以进行逻辑判断。 3.1.

11、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) 12 j1=1; 13 jm1=num2str(j1); 14 set_param(nibian/jm1,Value,jm1); 15 if u(I+1) 18 end 19 max1=num2s

12、tr(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); 20 27 pu=pu-1; 28 if pu7 34 min=min+2; 35 end 36 min1=num2str(min); 37 set_param(nibian/min,Value,min1); 38 j1=0; 39 jm1=num2str

13、(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 pumax 49 pu=max; 50 end 51 end 52 end 53 P=num2str(pu); 54 set_param(nibian/Pulse,PulseWidth,P); 55 set_param(nibi

14、an/Pulse1,PulseWidth,P); 与之前的简单函数相比,多运用了一些特殊的语句,且因为在这个模块中并不是直接采用输出的方式进行参数值的传递的,所以第一行没有输出函数的定义,只有几个输入函数的定义。 25 行则是声明特殊函数,在模块 m 函数 的编写中只支持简单的基础语句,如 if, for,switch 等和数学运算。一些特殊函数的需要使用时,需要提前声明。 set_param, get_param, str2num,num2str这个函数中声明了这四个变量,分别是参数设置,参数读取,字符串( char)转数字 (double),数字 (double)转字符串 (char)。

15、对于每个函数的用法可以通过 matlab 自带的说明进行研究,在命令行输入 help 函数名就可以找到指定函数的具体用法。 下面的主要部分编程跟 c语言大同小异,基本上可以完全采用 c语言的格式,也不 会出现报错,当然也不完全想多,对于不符符号语句还是有所不同的。一些数学运算上,可以直接使用对应的符号进行标示,如指数为 .,非为 而不是!等细节的差别,一些 if, while21 的条件语句上,也可以不用添加小括号。 如之前所说,这个模块函数没有输出函数,而是通过其他方式来进行输出的, 这里 通过set_param(nibian/Pulse,PulseWidth,P);实现参数的输出,具体效果

16、就是对 nibian模型, Pulse模块的 PulseWidth参数设置为 P(char变量 )。这里三个参数都是 char型字符串变量,如需要赋值 50,则 p= 50 ,而不是 p=50。 第二个变量参数名需要注意,这里的参数名不是设置参数时所看到的显示参数名,而是实际参数名(区别见模块建立章节)。对已一些实际参数名跟显示参数名(往往是不同的)不同的情况 。需要通过一些其他方式先得到参数名。 get_param(nibian/max,DialogParameters),在命令行输入上述代码,表示读取 nibian 模型 max 模块的所有参数名。输出如下: ans = Value: 1x

17、1 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 逆变输出模型 22 图 3-

18、3 逆变全桥展开图 上述模型包含了,子函数,自制模块, 3 个库的混合连接,函数模块等主要仿真技能。注意部分需要程序实时修改参数的模块必须保证模块的命名和程序中的名字相同,否无法找到。修改模块名,通过单击模块名就可以进行修改。 3.3 仿真注意事项 仿真过程中我们经常会出现各种问题和报错 。下面就这些问题进行一些简单的归类处理。 3.3.1 注意事项 1 传递信号参数类型不匹配,这是仿真编译过程中使用一些特殊模块后经常遇到的问题。 图 3-4 参数类型不匹配 可以看到,当前后两个模块的输入输出参数不匹配时,会出现报错(显示上都是显示当前信号类型), jk 触发器 j, k 端要求逻辑变量,这边

19、的输出 却是 double 型变量。 大部分情况下我们需要的都是 double 转 boolean 和 boolean 转 double 两种即可。 Double 转 boolean 利用 and23 模块即可,无需多余的设置,只需记住对于输入的 真假而言,非 0 即 1。 图 3-5 double 转 boolean 对于逻辑变量 boolean 转 double 则需要使用 gain 模块 ,且需要一定的 设置 。双击打开 gain 模块。在参数设置中切换到第二栏, signal attributes,将 output data type 栏下拉设置成 double 图 3-6 gain

20、输出数据类型设置 这样输出数据类型即为 double 类型,当输出有具体值时,可以通过将倍数改变即可,逻辑真恒为 1,即输入为 1,所以改变倍率调节就可以输出指定大小的 double 变量。 3.3.2 注意事项 2 set_param,关于这个函数的使用,就如之前所说,可以在仿真运行过程中实时改变一些模块的参数。但通过这个函数改变的参数需要注意的是必须是在仿真中可以改变的参数。具体识别方法是在仿真过程中双击打开模块,显示灰色的参数为不可修改参数,其他的则是可以修改参数。一般来说信号源参数都是可以修改的。 但是通过特殊的方法,也可以将这些本不可以在仿真中修改的参数让其在仿真中修改,那就是通过将

21、不可修改的模块在模块化,将其不可修改的参数定义成变量形式,这样就可以通过在外层模块修改,导致内部原本不可变参数的变化,使之在仿真 过程中的修改变成可能。 24 3.3.3 注意事项 3 仿真设置。打开仿真设置界面后,我们可以看到如下界面。 图 3-7 仿真设置 实际上仿真设计页面还要大一些,但大部分时候我们只需设置这里的参数即可。开始时间,大部分时候还是默认 0s 开始,停止时间,则根据实际情况而定。然后就是仿真补偿的使之,最常用的设置为最大步长的设置,让步长在一定长度以下,保证采样进度,一般设置在仿真最高频率信号周期的 1/10 到 1/100。且有时候出现无法仿真无法收敛的报错,也可以通过

22、修改步长,进行尝试。右侧有解析函数的选择, 默认情况下为 ode45。在一般仿真时没有问题,但涉及到三极管,电容等 元器件时并使用高频信号时,可能会出现报错或者仿真极慢的现象,这里可以通过将解析函数选择成 ode23t 来提高仿真效率。 3.3.4 注意事项 4 代数环,这是在拥有反馈回路中常出现的报错。在反馈环节当中,输入决定着输出,同时输出也影响着输入。这就会引起一个问题,即在开始阶段,因为没有输出信号,所以输入信号没有不是一个明确的确定值,这会导致无法进行计算而报错。所以对于反馈回路,需要设定一个延时函数,并赋予初值,存在这样一个模块 memory,通 过在反馈环节上添加这一个模块可以有

23、效的解决这一个问题。 对于一些在仿真一定时间后出现报错的模型,添 图 3-8 除法模块 25 加 memory 模块也有一定的效果。同样是初值问题,在除法模块中出现除数的初值为 0 的状况时,有时候会导致后续环节出现报错。对于这种情况,一般采用对除数添加一个合适大小的常数值,或者用限幅输出的方式进行限幅。 结语 总体而言, simulink 仿真是一个适用性相当广泛的仿真软件,其自由程度相当之高,只要你能想得到的仿真基本上都可以用 simulink 进行仿真,且仿真形式不唯一。对于同一个实体(电路或者其他物理模型)可以根据不同的理解和需要建立不同的仿真。 当同样 的 自由程度 太高 , 导致

24、大部分 情况下 , 对于 同一个 电路 因为 不同的 理解 甚至 可以 建立 完全 不同的 仿真 ,对于 仿真 结果 而言 也会 产生 巨大 的 影响 。 且 simulink 的 仿真 几乎 完全 建立 在 模型 设计者 对 被仿真 对象 的 理解 上 , 这就可能 导致 一个 问题 , 其他 的 仿真 最多 仿真 失败 , 但是 simulink 的 仿真 是 可能 出现 错误 的 。 相比较 而言 , simulink 的 仿真 与 实际 情况 差距 相对 较大 一些 。 但是simulink 的 模型 制作 修改 上 要比其他 软件 简单 明了 的 多 , 只要 通过 提前 建立 能够

25、 保证 正确 的模块 , 则可以 有效 的 降低 其仿真 出错 的 可能 性 , 且 模块 可以 实时 改变 , 意味 着 遇到 相似 的 效果 的 模块 或者 升级 版 完全 可以 通过内部 的 简单 修改 完成 模块 的 升级 。 对于 一些 组合 电路 , 如整体 电路 由 ABC 三者 组成 , 我们 可以通过 建立 不同 A1,A2,B1,B2,C1,C2 然后 自由 组合 验证 ,怎么 样 的 搭配 最为 合理 。 简单 一句 , simulink 的 仿真 不适合 作为 初学者 的 仿真 , 但对于 电路原理 基本 已经 掌握 的 情况 下 , simulink 的 仿真 相比其他 的 仿真 就具有 更好的 效果 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报