2. Simulink工程化建模基础

在电机控制项目中,Simulink 模型往往从几行框图快速膨胀到数百个模块。若一开始不按工程化方式组织,后期会出现信号线交叉难查、采样时间冲突、仿真速度骤降、代码生成失败等问题。本节围绕五个基础能力展开:常用模块库、信号与总线、子系统与模型引用、采样时间与求解器、模型配置参数,并说明它们对电机控制仿真的具体影响。

一、常用模块库:按“控制链”选模块

电机控制建模常用的库集中在 Simulink / Continuous、Discrete、Math Operations、Sources & Sinks、Signal Routing,以及 Simscape Electrical 中的电机与逆变器模型。按控制链理解更高效:给定转速 n_ref 与反馈 n_fb 相减得到误差,经 PI 控制器输出 i_q_ref,再经电流环、坐标变换、SVPWM 驱动逆变器,最终作用到 PMSM。对应模块选择如下:

  • 误差与限幅:Sum、Saturation、Rate Limiter;
  • 调节器:PID Controller(离散化后用于代码生成);
  • 坐标变换:Park/Clarke 可用 MATLAB Function 或 Fcn 实现;
  • 调制:PWM Generator 或自建比较逻辑;
  • 观测:Scope、To Workspace、Display。

需要强调的是,Continuous 库中的 Integrator 适合连续域验证,而工程实现通常使用 Discrete-Time Integrator,以便与 MCU 中断周期一致。若混用,仿真结果与实机偏差会明显增大。

二、信号与总线:让接口可维护

电机控制中信号数量多,若全部用独立信号线连接,模型很快难以阅读。推荐把同一层级、同一采样率的信号打包为 Bus。例如定义 CtrlBus 包含 n_ref、n_fb、i_dq、u_dq、theta_e、enable 等元素,通过 Bus Creator 与 Bus Selector 在子系统间传递。总线的好处是接口稳定:内部算法改动时,只要总线元素不变,上层连线无需重画。

工程上建议为每个总线建立 Simulink.Bus 对象并保存到 .mat 或数据字典中,配合 Bus Assignment 修改个别元素。这样在生成 C 代码时,总线会映射为结构体,接口清晰。注意:总线元素必须指定数据类型与维度,否则代码生成会报“未定义总线”错误。

三、子系统与模型引用:分层与复用

把电流环、速度环、SVPWM、位置估算分别封装为 Subsystem,是基本分层手段。若同一算法要在多个项目复用,应使用 Model Reference(模型引用),把算法做成独立 .slx,主模型通过 Model 模块调用。模型引用的优势是:可单独编译、可增量加载、支持多实例并行仿真,适合“一套 FOC 算法 + 多种电机参数”的场景。

选择原则:仅在本模型内复用、需要频繁查看内部结构时用 Subsystem;跨项目复用、需要独立测试或代码生成时用 Model Reference。若用 Library 链接,则适合只读的通用模块,但修改库会影响所有引用者,需谨慎。

四、采样时间与求解器:决定仿真是否可信

电机控制是典型的多速率系统:电流环通常 10 kHz~20 kHz,速度环 1 kHz,位置/温度监控 100 Hz。在 Simulink 中,每个离散模块都要设置 Sample time。若把电流环设为 1e-4 s(10 kHz),速度环设为 1e-3 s(1 kHz),则模型存在两个采样率,求解器需能处理多速率。此时推荐使用定步长 Fixed-step 求解器,步长取所有采样周期的最大公约数,例如 1e-5 s,保证每个采样点都被命中。

求解器选择建议:

  • ode45(变步长):适合连续域快速验证,但不适合代码生成;
  • ode4(定步长 Runge-Kutta):精度较高,适合电力电子开关仿真;
  • ode1(Euler):速度快,适合实时仿真或 HIL,但步长需足够小;
  • Fixed-step discrete:纯离散控制器首选,与 MCU 执行方式最接近。

若仿真中出现“采样时间冲突”或结果振荡,优先检查各离散模块的采样时间是否与求解器步长成整数倍关系。

五、模型配置参数对电机仿真的影响

Model Configuration Parameters 中几个关键项直接影响电机仿真:

配置项推荐设置影响
SolverFixed-step / ode4 或 discrete决定仿真精度与速度
Fixed-step size1e-5 s(示例)过大会丢失 PWM 细节,过小则仿真慢
Stop time按工况设定,如 2 s影响数据量与观察窗口
Data typesingle 或 doublesingle 更接近 MCU,double 精度高但慢
Code generation目标为 ert.tlc决定能否生成嵌入式代码

例如,某 PMSM 电流环仿真中,若把定步长从 1e-5 s 改为 1e-4 s,PWM 载波周期为 1e-4 s 时,一个载波周期内仅有一个计算点,电流纹波会被严重低估,导致 PI 参数看起来“过于理想”。因此,定步长应至少比 PWM 周期小一个数量级,才能观察到真实的电流纹波与采样效应。

工程建议:先建立“控制器 + 被控对象”最小闭环,确认采样时间与求解器匹配后,再逐步加入逆变器、观测器和保护逻辑。每次只改一个配置项,并保存仿真数据用于对比。
电机控制 Simulink 工程化建模:多速率信号链与配置关系 速度给定 n_ref (1 kHz) 速度环 PI i_q_ref (1 kHz) 电流环 PI u_dq (10 kHz) Park / SVPWM 占空比 (10 kHz) 逆变器 + PMSM 连续域对象 电流采样 i_abc (10 kHz) Clarke / Park i_dq (10 kHz) 速度计算 n_fb (1 kHz) CtrlBus(总线) n_ref | n_fb | i_dq | u_dq | theta_e | enable Bus Creator / Bus Selector / Bus Assignment 子系统 / 模型引用 Subsystem:本模型内分层封装 Model Reference:跨项目复用、独立编译 采样时间与求解器 电流环 1e-4 s | 速度环 1e-3 s 定步长 1e-5 s | ode4 / discrete 模型配置参数影响:定步长过大 → PWM 纹波丢失 → PI 参数偏理想;数据类型 single → 更接近 MCU 建议:定步长 ≤ PWM 周期 / 10;先闭环验证采样时间,再逐级加入逆变器与观测器

六、一个可执行的配置检查清单

在开始电机控制仿真前,可按以下清单逐项确认,避免常见返工:

  1. 所有离散模块的 Sample time 是否与设计一致,且为求解器步长的整数倍;
  2. 总线是否已定义为 Simulink.Bus 对象,元素类型与维度是否完整;
  3. 需要复用的算法是否已封装为 Model Reference,接口是否为总线;
  4. 求解器是否为定步长,步长是否满足 ≤ PWM 周期 / 10;
  5. 数据类型是否统一为 single 或 double,是否存在隐式转换;
  6. 是否已设置 Stop time 与 To Workspace 记录关键信号,便于对比不同配置。