3. Simulink基础与建模:从界面到电机模型
好,咱们开始聊Simulink。说实话,很多做运动控制的工程师,一开始都觉得Simulink就是个“画框框”的工具。嗯,我当年也这么想。直到有一次,我在调试一个伺服系统的电流环时,发现实际波形和理论计算差了十万八千里。那时候我才意识到——Simulink不是画图工具,它是你验证算法、发现问题的“数字试验台”。
3.1 Simulink界面:别被它吓到
第一次打开Simulink,你可能会觉得眼花缭乱。别慌,我带你捋一遍核心区域:
- 模块库浏览器:左边这一栏,所有官方模块都在这里。我习惯把它固定住,省得每次拖来拖去。
- 模型画布:中间这块白板,就是你搭模型的地方。右键可以调出搜索框,直接搜模块名,比翻目录快得多。
- 仿真工具栏:上面那一排,最常用的是“运行”、“停止”和“步进”。步进功能我特别喜欢,可以一帧一帧看信号变化。
- 状态栏:底部显示仿真进度和当前时间。如果模型跑得慢,这里会告诉你瓶颈在哪。
Ctrl+E 打开配置参数,把“求解器”改成“固定步长”。为什么?因为后面做硬件部署时,固定步长才是真实世界的节奏。
3.2 常用模块库:你真正需要记住的
Simulink的模块库有上百个,但做运动控制,你真正需要记住的其实就这几类:
| 模块类别 | 常用模块 | 我的使用场景 |
|---|---|---|
| 连续系统 | Transfer Fcn, Integrator, Derivative | 电机传递函数、PID控制器连续部分 |
| 离散系统 | Unit Delay, Discrete Transfer Fcn | 数字控制器实现、采样保持 |
| 数学运算 | Gain, Sum, Product, Saturation | 增益调整、限幅、信号合成 |
| 信号路由 | Mux, Demux, Bus Creator, Goto/From | 信号合并、总线传输 |
| 信源与信宿 | Step, Sine Wave, Scope, To Workspace | 输入激励、波形观察、数据导出 |
你可能会问:“为什么没有PID Controller模块?” 嗯,我个人建议,刚开始学的时候,自己用Gain、Integrator、Sum搭一个PID。为什么?因为这样你才能真正理解每个环节在干什么。我曾经带过一个实习生,直接用封装好的PID模块,结果参数调了半天都不知道积分饱和是怎么回事。
3.3 构建简单的电机模型:传递函数法
好,咱们动手。直流电机的传递函数,说白了就是电压到转速的关系。我常用的简化模型是这样的:
G(s) = K / (J*s + B) * (1 / (L*s + R))
其中:
- K:电机转矩常数
- J:转动惯量
- B:粘性阻尼系数
- L:电枢电感
- R:电枢电阻
在Simulink里搭这个模型,我一般分两步走:
- 拖一个Transfer Fcn模块,双击把分子分母系数填进去。比如
[K]和[J, B]对应机械部分。 - 再拖一个Transfer Fcn,填
[1]和[L, R]对应电气部分。然后用一个Product模块把它们串起来。
如果你觉得两个传递函数串起来麻烦,也可以直接用一个传递函数表示整个电机:
G(s) = K / ( (J*s + B) * (L*s + R) + K^2 )
这个公式考虑了反电动势的影响,更精确一些。我一般在做电流环设计时用这个。
3.4 信号与总线:别让线乱成一团
模型一复杂,连线就会像蜘蛛网一样。这时候,总线(Bus)就是你的救星。
我举个例子。假设你要把电机的转速、电流、位置三个信号同时送到示波器和控制器。如果不用总线,你得拉三根线,每根线还得标标签。用总线的话:
- 用 Bus Creator 把三个信号打包成一根总线
- 用 Bus Selector 在需要的地方解包
- 用 Goto/From 实现跨模块的信号传递,避免长线交叉
motor_speed、motor_current。别用 signal1、signal2。为什么?因为三个月后你自己回来看模型,绝对想不起来 signal1 是什么。
另外,Scope模块的用法也有讲究。我习惯在Scope里添加多个坐标轴,把不同量纲的信号分开显示。比如转速用rpm,电流用A,位置用rad。混在一起看,容易误判。
3.5 知识体系总览
为了让你对本章内容有个整体把握,我画了一张图:
这张图把本章的核心内容串起来了。你从界面入手,熟悉模块库,然后动手搭电机模型,最后用总线把信号管好。每一步都是为后面的联合仿真和硬件部署打基础。
好了,这一章的内容就到这。记住,Simulink是个工具,不是目的。你的目的是理解电机怎么动、控制器怎么调。工具只是帮你更快地验证想法。