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 中搭建这个模型,需要从库浏览器中选取以下模块:

模块名称所在库作用
StepSources产生阶跃输入电压,模拟突然给定指令
Transfer FcnContinuous实现一阶传递函数 K/(Ts+1)
ScopeSinks显示转速随时间变化的曲线
To WorkspaceSinks将仿真数据导出到 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。

建议在建模阶段就给信号线命名。选中信号线,右键选择 Properties,在 Signal name 中填写 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) 检查稳态值。

开环直流电机 Simulink 模型与信号流 Step 阶跃输入 t=0, 0→1 V Transfer Fcn 1.5 / (0.5s + 1) 一阶惯性环节 Scope 转速曲线 ω(t) To Workspace speed_data U(s) ω(s) 理论响应:ω(t) = 1.5(1 - e^(-t/0.5)) 0 0.5 1.0 1.5 2.0 1.5 0.75 t=0.5s, ω≈0.95 t=1.5s, ω≈1.43

五、结果判读与常见问题

仿真完成后,判断模型是否正确,主要看三点:第一,稳态值是否等于 K 乘以输入幅值,本例应为 1.5 rad/s;第二,时间常数是否与 T 一致,即达到稳态值 63.2% 所需时间约为 0.5 s;第三,曲线是否单调上升、无超调,一阶系统不应出现振荡。若出现振荡,说明 Denominator 系数写成了二阶或更高阶;若稳态值不对,应检查 Numerator 或 Step 的 Final value。

常见错误:把 Transfer Fcn 的 Denominator 写成 [0.5] 而不是 [0.5 1],这会导致系统变成纯增益,输出直接跟随输入,看不到惯性延迟。另一个常见问题是 Step time 设为负值或大于仿真时间,导致输入始终为 0,Scope 上是一条直线。