第一章:Simulink 基础认知
1.1 什么是 Simulink
1.1.1 Simulink 的定位与作用
Simulink 是 MathWorks 公司开发的图形化仿真与模型设计环境,运行于 MATLAB 之上。它允许工程师通过拖拽模块、连接信号线的方式构建动态系统模型,无需手动编写大量数学公式代码。
核心作用:
-
系统建模:用图形化方式描述动态系统的数学行为
-
仿真验证:在真实硬件部署前验证算法和控制逻辑
-
代码生成:自动将模型转换为 C/C++ 代码,部署到嵌入式硬件
-
快速原型:缩短从算法设计到硬件验证的周期
一句话理解:
Simulink 就是一个"可视化的数学仿真画板",把复杂的微分方程、控制算法用图形模块表达出来,然后让计算机帮你"跑"这个系统。
1.1.2 Simulink 与 MATLAB 的关系
┌─────────────────────────────────────────┐
│ MATLAB │
│ 数值计算 / 数据分析 / 脚本编程 │
│ │
│ ┌───────────────────────────────────┐ │
│ │ Simulink │ │
│ │ 图形化建模 / 动态仿真 / 代码生成 │ │
│ └───────────────────────────────────┘ │
└─────────────────────────────────────────┘
| 对比项 | MATLAB | Simulink |
|---|---|---|
| 编程方式 | 脚本/函数代码 | 图形化模块连接 |
| 擅长领域 | 数值计算、数据处理 | 动态系统仿真 |
| 时间概念 | 无(静态计算) | 有(随时间演化) |
| 典型用途 | 矩阵运算、绘图 | 控制系统、信号处理 |
两者关系:
- Simulink 必须依赖 MATLAB 运行
- MATLAB 可以调用 Simulink 模型(
sim()函数) - Simulink 模块内部可以嵌入 MATLAB 代码
- 仿真结果可以导出到 MATLAB 工作区进行后处理
1.1.3 典型应用领域
① 控制系统设计
传感器信号 → 控制器算法 → 执行器输出
(PID控制、LQR、MPC、自适应控制)
② 信号处理
原始信号 → 滤波/FFT/调制解调 → 处理结果
(数字滤波器、通信系统仿真)
③ 汽车电子(Automotive)
发动机控制 / 自动驾驶算法 / 电池管理系统
(AUTOSAR 标准开发)
④ 嵌入式系统开发
算法建模 → 代码生成 → 烧录到 MCU/DSP/FPGA
(基于模型的设计 MBD)
⑤ 航空航天
飞行控制律设计 / 导航算法 / 故障仿真
⑥ 电力电子
变频器控制 / 电网仿真 / 新能源系统
1.2 Simulink 的核心概念
1.2.1 模型(Model)
Simulink 模型是以 .slx(新版)或 .mdl(旧版)为扩展名的文件,描述了一个动态系统的完整结构。
模型文件(.slx)包含:
├── 模块(Blocks):系统的功能单元
├── 信号线(Lines):模块间的数据连接
├── 注释(Annotations):说明文字
└── 配置参数(Configuration):仿真设置
模型的层次结构:
顶层模型
├── 子系统 A
│ ├── 模块 1
│ └── 模块 2
├── 子系统 B
│ ├── 子子系统 B1
│ └── 模块 3
└── 模块 4
1.2.2 模块(Block)
模块是 Simulink 的基本功能单元,每个模块完成特定的数学运算或功能。
模块的组成:
┌─────────────────────────┐
│ │
●──→│ 模块名称 │──→●
●──→│ (数学运算/功能) │
│ │
└─────────────────────────┘
输入端口 输出端口
模块的基本属性:
| 属性 | 说明 |
|---|---|
| 名称(Name) | 模块的标识符,同一层级唯一 |
| 参数(Parameters) | 控制模块行为的配置值 |
| 输入端口(Inport) | 接收信号的端口 |
| 输出端口(Outport) | 输出信号的端口 |
| 采样时间(Sample Time) | 模块的执行频率 |
常见模块举例:
Constant → 输出固定常数值
Gain → 信号乘以增益系数
Sum → 多路信号求和
Integrator → 对信号进行积分
Scope → 显示信号波形
1.2.3 信号线(Signal Line)
信号线连接模块的输出端口和输入端口,传递数据。
信号线的特性:
信号线携带的信息:
├── 数值(Value):实际传递的数据
├── 维度(Dimension):标量/向量/矩阵
├── 数据类型(Data Type):double/int/bool等
└── 采样时间(Sample Time):连续/离散
信号线的颜色含义(默认设置):
| 颜色 | 含义 |
|---|---|
| 黑色 | 标量信号(double) |
| 绿色 | 向量/矩阵信号 |
| 橙色 | 非 double 数据类型 |
| 红色 | 信号有错误或警告 |
信号线操作:
连接:从输出端口拖拽到输入端口
分支:按住 Ctrl 从信号线拖出分支
标注:双击信号线添加标签
删除:选中后按 Delete 键
1.2.4 仿真时间与步长
Simulink 仿真的时间轴概念:
仿真时间轴:
0 ─────────────────────────────→ Stop Time
↑ ↑
Start Time 仿真结束
每隔一个步长(Step Size)计算一次
|←── Step ──→|←── Step ──→|←── Step ──→|
t=0 t=0.01 t=0.02 t=0.03
关键参数:
| 参数 | 说明 | 典型值 |
|---|---|---|
| Start Time | 仿真开始时间 | 0 |
| Stop Time | 仿真结束时间 | 10(秒) |
| Step Size | 计算步长 | auto 或 0.001 |
| Solver | 求解算法 | ode45(连续)/ Fixed-step(离散) |
连续系统 vs 离散系统:
连续系统:
时间连续变化,使用微分方程
求解器自动调整步长(变步长)
适合:模拟电路、机械系统
离散系统:
时间按固定间隔更新
步长固定(Fixed-step)
适合:数字控制器、嵌入式代码生成
1.3 Simulink 版本与工具箱
1.3.1 常用工具箱介绍
Simulink 本身是基础平台,各专业领域通过**工具箱(Toolbox)**扩展功能:
| 工具箱名称 | 功能 | 典型应用 |
|---|---|---|
| Control System Toolbox | PID设计、根轨迹、频域分析 | 控制系统设计 |
| Signal Processing Toolbox | 滤波器设计、FFT | 信号处理 |
| Stateflow | 状态机、流程图 | 逻辑控制 |
| Simulink Coder | 生成通用C代码 | 代码生成 |
| Embedded Coder | 生成嵌入式优化C代码 | 嵌入式开发 |
| Simscape | 物理系统建模 | 机电液仿真 |
| Aerospace Blockset | 飞行动力学模块 | 航空航天 |
| Powertrain Blockset | 动力总成模块 | 汽车工程 |
| Deep Learning Toolbox | 神经网络 | AI/ML |
1.3.2 版本差异说明
MathWorks 每年发布两个版本:
版本命名规则:R + 年份 + a/b
R2023a → 2023年上半年版本
R2023b → 2023年下半年版本
各版本主要变化趋势:
| 版本区间 | 主要变化 |
|---|---|
| R2012b 以前 | 模型文件为 .mdl 格式 |
| R2012b 及以后 | 模型文件改为 .slx 格式(推荐) |
| R2019b 及以后 | 新增 Simulink Online(网页版) |
| R2021a 及以后 | 改进 Data Dictionary、Test Manager |
| R2023a 及以后 | AI/ML 集成增强 |
建议:
学习时使用 R2020a 及以后版本,界面和功能较为稳定完善。本教程以 R2022b 为基准。
本章小结
本章核心要点:
✅ Simulink 是图形化动态系统仿真环境,运行于 MATLAB 之上
✅ 核心元素:模型(.slx) / 模块(Block) / 信号线(Line)
✅ 仿真时间:Start Time → Stop Time,按步长逐步计算
✅ 连续系统用变步长求解器,离散系统用固定步长
✅ 工具箱扩展 Simulink 的专业功能
✅ 推荐使用 R2020a 及以后版本
课后练习
- 安装 MATLAB/Simulink,启动 Simulink 并熟悉界面布局
- 打开 Library Browser,浏览各模块库的分类
- 思考:你所在的领域(控制/信号/嵌入式)最常用哪些模块?
- 查看 MathWorks 官网,了解你使用的 MATLAB 版本包含哪些工具箱