2. Simulink环境与第一个控制系统模型
Simulink 是 MathWorks 公司提供的图形化建模与仿真环境,它把控制系统中的信号、传递函数、增益、反馈路径等抽象概念,直接映射为可拖拽、可连线的模块与信号线。对于控制系统开发而言,Simulink 的价值在于:你可以在不写一行 C 代码的情况下,先验证控制结构是否正确、参数是否合理,再决定是否进入代码生成与硬件部署。本节以“开环直流电机模型”为载体,完成从界面导航、模块库浏览、模型搭建、仿真运行到信号查看的完整闭环。
一、界面导航:先认清四个关键区域
启动 MATLAB 后,在命令行输入 simulink 或点击工具栏的 Simulink 按钮,即可打开 Simulink Start Page。新建一个 Blank Model 后,会进入模型编辑窗口。这个窗口可以划分为四个关键区域,理解它们的分工,是后续高效建模的前提。
- 菜单栏与工具栏:包含 File、Edit、View、Simulation、Block Diagram 等菜单,以及 Save、Run、Library Browser、Step Forward 等快捷按钮。仿真启停、求解器设置、信号记录开关都在这里。
- 模型画布(Canvas):中央的白色区域,是放置模块、绘制信号线的工作区。画布支持缩放、框选、对齐参考线,模块之间的连线方向即信号流向。
- Library Browser(库浏览器):左侧或独立窗口,按类别组织所有可用模块。常用类别包括 Continuous、Discrete、Math Operations、Sinks、Sources、Signal Routing 等。
- Model Explorer / Property Inspector:用于查看和修改模块参数、信号属性、求解器配置。选中任意模块后,右侧或下方会显示其参数对话框。
需要特别注意的是,Simulink 的“信号”是有方向、有数据类型、有维度的。信号线默认从左向右流动,箭头方向表示信号传递方向。建模时若把信号线接反,仿真会直接报错或得到完全错误的结果。因此,在画布上操作时,应养成“先确认端口方向,再连线”的习惯。
二、模块库浏览:找到开环电机模型需要的模块
开环直流电机模型的核心数学关系是:输入电压 U(s) 经过一个一阶惯性环节,得到转速 ω(s)。其传递函数可写为:
G(s) = K / (T*s + 1)
其中:
K = 1.5 (增益,单位:rad/s per V)
T = 0.5 (时间常数,单位:s)
为了在 Simulink 中搭建这个模型,需要从库浏览器中选取以下模块:
| 模块名称 | 所在库 | 作用 |
|---|---|---|
| Step | Sources | 产生阶跃输入电压,模拟突然给定指令 |
| Transfer Fcn | Continuous | 实现一阶传递函数 K/(Ts+1) |
| Scope | Sinks | 显示转速随时间变化的曲线 |
| To Workspace | Sinks | 将仿真数据导出到 MATLAB 工作区,便于后续分析 |
在 Library Browser 中,可以直接在搜索框输入模块名,也可以逐级展开类别查找。找到模块后,用鼠标拖拽到画布,或右键选择“Add to model”。对于 Transfer Fcn 模块,双击后需要设置 Numerator coefficients 和 Denominator coefficients。本例中,Numerator 填 [1.5],Denominator 填 [0.5 1],这对应 1.5/(0.5s+1)。
三、搭建开环电机模型:连线与参数设置
把 Step、Transfer Fcn、Scope 三个模块拖到画布后,按信号流向连线:Step 输出端口 → Transfer Fcn 输入端口;Transfer Fcn 输出端口 → Scope 输入端口。连线时,鼠标移到输出端口,光标变成十字,按住左键拖到目标输入端口即可。若连线出现红色虚线,说明端口类型不匹配或连接不合法,需要检查。
接下来设置 Step 模块参数。双击 Step,将 Step time 设为 0,Initial value 设为 0,Final value 设为 1。这表示在 t=0 时刻,输入电压从 0 跳变到 1 V。Transfer Fcn 已按上述系数设置。Scope 模块默认只有一个输入端口,若需要同时观察输入和输出,可以双击 Scope,在设置中增加输入端口数,或使用 Mux 模块把两路信号合并后送入 Scope。
Voltage 或 Speed。命名后的信号在 Scope 和 To Workspace 中会直接显示名称,便于后期排查。
四、仿真运行与信号查看
模型搭建完成后,点击工具栏的 Run 按钮,或按 Ctrl+T 启动仿真。Simulink 会调用求解器,按设定的步长逐步计算。默认求解器为变步长 ode45,仿真时间通常为 0 到 10 秒。仿真结束后,Scope 窗口会自动弹出,显示转速响应曲线。
对于本例的一阶系统,理论响应为:
ω(t) = K * (1 - exp(-t/T)) = 1.5 * (1 - exp(-t/0.5))
t = 0.5 s 时,ω ≈ 1.5 * (1 - 0.368) = 0.948 rad/s
t = 1.5 s 时,ω ≈ 1.5 * (1 - 0.050) = 1.425 rad/s
t → ∞ 时,ω → 1.5 rad/s
在 Scope 中,可以观察到曲线从 0 开始,按指数规律上升,约 2.5 秒后基本稳定在 1.5 rad/s。若曲线上升过快或过慢,应检查 T 是否设置正确;若稳态值不是 1.5,应检查 K 或 Step 的 Final value。Scope 工具栏支持缩放、平移、测量光标,可以读取任意时刻的数值。
若需要把数据导出到 MATLAB 工作区做定量分析,可在 Transfer Fcn 输出端再连接一个 To Workspace 模块,设置 Variable name 为 speed_data,Save format 选择 Array 或 Structure with time。仿真后,在 MATLAB 命令行输入 plot(speed_data) 即可复现曲线,或用 max(speed_data)、speed_data(end) 检查稳态值。
五、结果判读与常见问题
仿真完成后,判断模型是否正确,主要看三点:第一,稳态值是否等于 K 乘以输入幅值,本例应为 1.5 rad/s;第二,时间常数是否与 T 一致,即达到稳态值 63.2% 所需时间约为 0.5 s;第三,曲线是否单调上升、无超调,一阶系统不应出现振荡。若出现振荡,说明 Denominator 系数写成了二阶或更高阶;若稳态值不对,应检查 Numerator 或 Step 的 Final value。
[0.5] 而不是 [0.5 1],这会导致系统变成纯增益,输出直接跟随输入,看不到惯性延迟。另一个常见问题是 Step time 设为负值或大于仿真时间,导致输入始终为 0,Scope 上是一条直线。