首页 > 技术文章 > MATLAB Simulink Tutorial for Beginners

zach0812 2021-01-24 13:29 原文

相关资料:

Matlab Simulink 官方文档: https://www.mathworks.com/help/simulink/index.html

注: 本博客是基于 Matlab 2015a 来的,所以不支持一些高版本的语法,例如后面高版本可以用双引号表示字符串,这里的2015a 只能用单引号。

Simulink Basic:

如何进入simulink 呢?

1,命令行输入:simulink,即可

2,或者点击HOME > Simulink Library 

我们会看到很多Library,如下图:

 

 

每个library 下面有具体的block,例如Simulink(主库)下面有Sources 和 Sinks 

 

 

 

如何理解Simlink?

它是 Simulation(仿真) + Link(连接) ,它帮助我们使用图形的方式来开发仿真分析和研究任何系统,而不是从头开始编写这些系统的代码,我们在Simulink的库找到我们需要使用的block,拖动它即可。

 

Project01 Sine Waves :

如何生成正弦波(sin waves),并在Simulink中显示

点击new model 新建一个模型,如下

 

 

 

 

选择 Simulink/Sources/ 中的 Sine wave ,将它拖到Model 窗口中, 

 

 

 

 

双击Sine wave 可以编辑它的配置信息,  如下

 

 

在上图,配置好信息之后,可以点击Apply应用到当前block, 当然也可以点击OK(不过,它会关闭当前窗口)

 

 

 

 

 

 

 

 

设置三个不同的Sine wave,如下:

 

 

 

 

 

接下来再在 Simulink/Sinks 下,拖拽Scope到Model窗口,如下:

Scope block 的作用: The Scope block displays inputs signals with respect to simulation time.

 

 

 

 

默认的Scope是只有一个输入,双击更改它为3个输入,如下:

 

 

 

然后,连接起来,如下:

 

 

效果如下:

 

 

 

 

然后,Ctrl + S 保存, 有两个后缀,默认是.slx 

 

 

注: slx 比 mdl 后缀的文件小一些,

 

点击Run按钮,运行,如下:

 

 

 

 

自动缩放,显得更好看一些,

 

 

 

我们可以看到,第三个正弦波(fre 为10 )不是平滑,why?

它是因为我们实际上没有捕获到整个正弦波,我们可以通过在我们的Model窗口中的 Simulation> Model Configure Parameters 的Solver 下进行配置:如下

 

 

 

 

再次 Run, 然后AutoScale,就得到如下:

 

 

 

 

将三个正弦波(sin waves)加起来

我们在Simulink/Common Used Blocks 下可以看到 Sum Block,如下:

 

 

 

 

把它拖到我们的Model窗口中,它默认是有两个输入,我们将它改为3个输入,如下:

 

 

 

 

分别连接上:如下:

 

 

 

 

然后再加入一个Sink, 依然使用Scope,并连接上,如下:

 

 

 

然后Ctrl + S  保存,再Run,再AutoScale,得到Scope1 的情况如下:

 

 

 

将Scope1 这个信号 导出到工作区

这里需要一个新的Block,如下:

 

 

 

连接它,如下:

 

 

此时,我们保存,Run,就可以在Workspace,中看到我们的SUM_OUT(自己命名的)了,如下:

 

 

双击它可以看到我们的信号数据:

 

 

我们也就可以使用这个数据了,例如,我们可以绘制它,

在命令行输入以下命令绘制它,如下:

 

得到如下figure:

 

 

 

这就是将Simulink的信号导出到Workspace的用法,

 

 

练习

Execise1:

using the model we deveoped so far,we would like to magnify the output signal(which represents the summation of the three sine waves) by a factor of 3 and plot the answer

使用我们目前开发的模型,我们希望将输出信号(表示三个正弦波的总和)放大3倍并绘制答案

 

HINT: search for a gain multiplier in the simulink library

 

 

 

Execise2:

如何在一个Scope 中绘制两个多个信号?

HINT: search for MUX in the simulink library

 

 

 

Project02 摄氏温度转华氏温度:

Implement an equation that converts celsius temperature reading to fahrenheit  

 

 

 

 

 

 

 

 

 

 

所以,我们想要的基本上是一个脚本,它接收一个输入,并将结果展示出来

 

 

新建一个脚本,我们可以在脚本中调用 Simulink中的Model, 

 

 

 

 

 

 

再进一步,可以接受用户的输入,如下:

X = input('Please input a tempature:');
sim('project02'); %  sim Simulate a Simulink model  
% 相应的结果要在 模型 那里可以看到

 

 

Project03 条件控制:

将正弦波 转变为 矩形波

要用到的是一个 Switch,它位于: Simulink > Singnal Routing下  

 

 

 

 

 

 

更复杂的条件 

if in > 0.5 : out = 2*in 

else if in < 0 : out = 4*in 

else : out = 10  

此时需要用到 If 模块 和 If Action Subsystem,它们位于 Simulink > Ports & subsystems 下:

还需要 Merge ,它位于 Simulink > Signal Routing 

 

 

 

3 个子系统: 

 

 

 

 

 

 

 

推荐阅读