Simulink 仿真终极教程:从零开始到精通
Simulink 是 MathWorks 公司推出的基于 MATLAB 的多域仿真和基于模型的设计环境,它提供了一个图形化界面,允许用户通过拖放模块、连接信号线来构建动态系统的框图模型,并进行仿真、分析和代码生成,它广泛应用于控制系统、信号处理、通信系统、电力电子、汽车电子等领域。

第一部分:基础入门
1 什么是 Simulink?
想象一下,如果你想设计一个汽车的巡航控制系统,传统方法可能需要用复杂的数学公式和代码(如 C/C++)来描述车辆的动力学、油门控制逻辑等,这个过程非常繁琐,且难以直观地看到系统的行为。
Simulink 提供了一种更直观的方式:
- 图形化建模:你不需要写代码,而是将“车辆”、“控制器”、“油门”等抽象成一个个“模块”(Block),然后用“信号线”(Line)将它们连接起来,形成一个“框图模型”(Block Diagram)。
- 动态仿真:点击“运行”按钮,Simulink 就会根据你建立的模型,模拟出汽车在不同情况下的速度变化、油门开度等,你可以通过示波器等模块实时观察结果。
- 可视化:整个系统的结构和动态行为一目了然,极大地降低了理解复杂系统的门槛。
2 Simulink 的工作环境
启动 Simulink 有两种主要方式:
- 在 MATLAB 命令窗口输入
simulink,然后选择一个模板。 - 在 MATLAB 命令窗口输入
simulinklibrary或直接点击工具栏上的 Simulink 图标,打开库浏览器。
一个典型的 Simulink 模型窗口包含以下部分:

- 库浏览器:包含所有可用的模块库,如
Commonly Used Blocks(常用模块)、Continuous(连续模块)、Discrete(离散模块)、Math Operations(数学运算)等。 - 模型编辑器:你在这里构建模型的画布。
- 工具栏:包含运行、停止、调试、模型配置参数等常用按钮。
- 状态栏:显示仿真状态、时间等信息。
第二部分:构建你的第一个模型
我们将以一个最经典的例子——一阶 RC 电路,来走完整个建模和仿真流程。
1 目标
模拟一个简单的 RC 电路,当输入一个阶跃信号(瞬间接通 5V 电源)时,观察电容两端电压的变化,理论上,它会指数上升,最终稳定在 5V。
2 步骤详解
步骤 1:创建新模型
- 在 MATLAB 命令窗口输入
new或点击File -> New -> Model,会弹出一个名为untitled的空白模型窗口。
步骤 2:查找并添加模块 我们需要以下模块:

- 输入信号:
Step(阶跃信号) - 电路元件:
Resistor(电阻),Capacitor(电容) - 测量工具:
Scope(示波器) - 连接点:
Ground(接地),Power_electronics中的Voltage Source(电压源)
- 打开 库浏览器。
- 添加阶跃信号:
- 浏览到
Sources(源) 库。 - 找到
Step模块,点击并拖拽到模型窗口中。
- 浏览到
- 添加电阻和电容:
- 浏览到
Simscape/Electrical/Specialized Power Systems/Elements库。 - 拖拽
Series RLC Branch模块到窗口,双击它,在弹出的窗口中将Resistance设为100(Ω),Capacitance设为01(F),Inductance设为0(H),然后点击OK。
- 浏览到
- 添加示波器:
- 浏览到
Sinks(信宿) 库。 - 拖拽
Scope模块到窗口。
- 浏览到
- 添加电压源和接地:
- 浏览到
Simscape/Electrical/Specialized Power Systems/Sources库。 - 拖拽
AC Voltage Source模块,双击它,将Peak amplitude(幅值) 设为5*sqrt(2)≈07(V),Frequency设为0(Hz),这样就变成了一个直流 5V 电源。 - 浏览到
Simscape/Foundation Library/Electrical/Elements库。 - 拖拽
Electrical Reference(接地) 模块。
- 浏览到
步骤 3:连接模块 这是 Simulink 的核心操作。
- 将鼠标移动到
Voltage Source模块的 正极 输出端口,鼠标会变成十字形 。 - 按住鼠标左键,拖拽到
Series RLC Branch模块的一个端口,然后松开,一条信号线就连接好了。 - 用同样的方法,将
Series RLC Branch的另一端连接到Electrical Reference(接地)。 - 将
Step模块的输出连接到Voltage Source的幅值输入端口(通常是V或Amplitude端口)。 - 将
Series RLC Branch的C(电容) 端口连接到Scope的输入端口。
连接后的模型应该类似下图:
步骤 4:设置仿真参数
- 点击模型窗口工具栏上的 “Model Configuration Parameters” 按钮(通常看起来像齿轮 ⚙️)。
- 在弹出的窗口中,设置:
- Solver (求解器):选择
ode45 (Dormand-Prince),这是最常用的通用求解器。 - Stop time (停止时间):设为
1,表示仿真运行 1 秒。 - Max step size (最大步长):可以设为
01,以保证结果的平滑。
- Solver (求解器):选择
- 点击
OK保存设置。
步骤 5:运行仿真并查看结果
- 点击工具栏上的 “Run” 按钮(绿色三角形 ▶️)。
- 仿真运行结束后,双击
Scope模块。 - 在弹出的示波器窗口中,你应该能看到一条从 0 开始,指数上升,最终稳定在 5V 的曲线,这完全符合 RC 电路的物理规律!
恭喜!你已经成功完成了第一个 Simulink 仿真!
第三部分:核心概念深入
1 模块
- 属性:每个模块都有参数,可以通过双击模块来设置(如电阻值、阶跃信号的大小等)。
- 端口:模块的输入和输出接口,信号从输出端口流向输入端口。
- 类型:有连续模块(如积分器
Integrator)、离散模块(如单位延迟Unit Delay)、逻辑模块、数学模块等。
2 信号线
- 连接:不仅连接模块,也可以使用 “分支”(Branching)功能,在一个信号线上按住
Ctrl键并拖拽,可以创建分支,将同一个信号送给多个模块。 - 双击信号线可以添加标签,使模型更清晰。
- 数据类型:信号线传递的数据类型(如
double,int8,boolean)通常由源模块决定,但也可以通过 “Data Type Conversion” 模块进行转换。
3 仿真求解器
Simulink 通过数值积分来求解微分方程,求解器的选择至关重要。
- 变步长求解器:如
ode45,在仿真过程中自动调整步长,在信号变化剧烈时减小步长以保证精度,在信号平稳时增大步长以提高速度。推荐初学者使用。 - 定步长求解器:如
ode4,在整个仿真过程中使用固定的步长,适用于代码生成、实时仿真等对时间有严格要求的场景。
4 子系统
当模型变得非常复杂时,可以将相关的模块组合成一个 “子系统” (Subsystem),以简化模型。
- 创建方法:选中一组模块,右键点击,选择
Create Subsystem from Selection。 - 好处:使模型层次分明,易于阅读、管理和重用。
第四部分:高级技巧与最佳实践
1 使用 MATLAB 工作空间
- 导入数据:可以使用
From Workspace模块从 MATLAB 工作空间导入时间序列数据作为输入信号。 - 导出数据:在模型配置参数中,将
Data Import/Export下的To Workspace模块打开,可以将仿真结果(如时间、输出信号)保存到 MATLAB 工作空间,以便进行后续的绘图、分析或处理。
2 使用 M 脚本配置模型
对于需要反复修改参数的仿真,手动点击修改非常低效,你可以编写一个 MATLAB 脚本(.m 文件)来自动化这个过程。
% script_name.m
% 设置模型参数
set_param('your_model_name/Step', 'FinalValue', '10'); % 修改阶跃信号幅值为 10
set_param('your_model_name/Series_RLC_Branch', 'Resistance', '200'); % 修改电阻为 200
% 运行仿真
sim('your_model_name.slx');
% 绘制结果
plot(simout.time, simout.signals.values);'仿真结果');
xlabel('时间 (s)');
ylabel('电压 (V)');
3 封装子系统
封装是子系统的升级版,它允许你:
- 定义一个自定义的对话框来设置子系统的参数。
- 定义自定义的图标来表示子系统的功能。
- 像使用一个普通模块一样使用它。
应用场景:当你创建一个通用功能模块(如一个 PID 控制器)并希望它看起来更专业、更易于使用时,封装是最佳选择。
4 调试与可视化
- 仿真步进:使用调试工具可以单步执行仿真,查看每个时间步长后所有信号和模块的状态,这对于排查逻辑错误非常有用。
- 信号日志与探针:
- Signal Log:在信号线上右键,选择
Log Signals,可以在仿真后将信号数据导出到工作空间。 - Scope:除了
Scope,还有Floating Scope(浮动示波器,可以连接到模型外部的信号)和Display(直接在模块上显示数值)。
- Signal Log:在信号线上右键,选择
- 可视化工具:使用
Dashboard Scope等模块可以创建更酷炫的仪表盘效果。
第五部分:学习资源与进阶方向
1 官方资源
- Simulink 产品文档:最权威、最全面的资料。https://www.mathworks.com/help/simulink/
- MATLAB 官方示例:在库浏览器中,很多模块都带有官方示例,点击模块,在帮助文档中通常能找到
Open Example按钮。 - MATLAB Central:包含大量用户分享的模型、教程和问答。https://www.mathworks.com/matlabcentral/
2 进阶方向
- Stateflow:用于对事件驱动系统进行建模,非常适合复杂的逻辑控制、状态机(如交通灯、游戏逻辑)。
- Simscape:用于对多物理域系统(机械、电气、液压、热等)进行建模,并可以相互耦合。
- Simulink Coder / Embedded Coder:将 Simulink 模型自动转换为 C/C++ 代码,直接用于嵌入式系统(如单片机、ECU)的开发,实现“模型即代码”。
- Simulink Design Optimization:用于自动调整模型参数,以优化系统性能(如最快响应时间、最小超调)。
学习 Simulink 的最佳路径是:多看、多练、多想。
- 从简单模型开始,掌握基本操作。
- 模仿官方示例,理解高级模块和技巧。
- 尝试解决实际问题,哪怕是一个简单的温度控制或电机调速,通过实践来巩固知识。
- 逐步学习高级工具,如封装、Stateflow、Simscape 等,不断扩展你的能力边界。
Simulink 是一个功能极其强大的工具,掌握它将为你在工程和科研领域打开一扇新的大门,祝你学习愉快!
