4. Simulink模型到MicroAutoBox的部署

把在 Simulink 中验证过的控制算法真正跑在 MicroAutoBox 上,中间要跨过四道“关口”:模型配置、I/O 映射、代码生成选项、下载与实时调试。任何一道关口设置不当,都会表现为“模型能编译但跑不起来”“信号对不上”“实时性不达标”等典型问题。本节按实际工程顺序展开,并给出可直接参考的配置示例。

一、模型配置:先让模型“可生成”

MicroAutoBox 属于 dSPACE 实时硬件,通常配合 RTI(Real-Time Interface)与 Simulink Coder 使用。模型配置的核心是让求解器、步长、硬件目标三者一致。

  • 求解器:固定步长(Fixed-step),求解器选 discrete (no continuous states) 或 ode4。实时系统不允许变步长,否则无法保证确定性执行。
  • 步长:与任务周期一致。例如 1 ms 控制周期,则 Fixed-step size = 0.001。若模型含 100 μs 电流环,需用多速率或独立任务。
  • 系统目标文件:选择 dSPACE 提供的 rti1401.tlc(对应 DS1401 板卡),而非通用 grt.tlc。
  • 硬件实现:在 Hardware Implementation 中确认设备厂商为 dSPACE,并选择正确的板卡型号与 CPU 类型。

一个常见错误是步长设为 auto 或 -1,此时 RTI 会按默认值处理,导致实际周期与设计不符。建议在模型配置中显式写出步长,并在注释中标注任务周期。

二、I/O 映射:把模型端口接到物理通道

MicroAutoBox 的物理 I/O 通过 RTI 模块库访问。以 DS1401 为例,常用模块包括 DS1401ADC(模拟输入)、DS1401DAC(模拟输出)、DS1401DIO(数字 I/O)、DS1401CAN(CAN 通信)。映射过程分三步:

  1. 在模型中放置对应的 RTI 输入/输出模块,替代原来的 Simulink 信号源或示波器。
  2. 在模块参数中指定通道号。例如 ADC 模块选择 Channel = 1,对应硬件接线端子上的 ADC1。
  3. 设置信号调理参数:电压范围(如 ±10 V 或 0–5 V)、分辨率(16 位)、采样时间与任务周期一致。

映射完成后,建议用一张“信号—通道—物理量”对照表核对,避免通道错位。例如:

模型信号RTI 模块通道物理量量程
Pedal_PosDS1401ADCADC1油门踏板位置0–5 V
Motor_CurDS1401ADCADC2电机电流±10 V
PWM_DutyDS1401DACDAC1驱动占空比指令0–10 V
CAN_CmdDS1401CANCAN1上位机指令500 kbps

注意:ADC 模块的采样时间必须与模型步长一致或为其整数倍,否则 RTI 会报“采样时间不匹配”错误。若使用 CAN 接收,需在模块中设置正确的波特率与消息 ID,并确认接收超时行为。

Simulink 模型 → MicroAutoBox 部署链路 Simulink 模型 控制算法 固定步长 1 ms 离散求解器 配置 代码生成 rti1401.tlc RTI 模块库 生成 C 代码 编译 MicroAutoBox DS1401 实时内核 任务调度 1 ms I/O 驱动 CAN 通信 下载 实时 调试 ControlDesk Trace I/O 映射关系(示例) 模型信号 RTI 模块 物理通道 传感器/执行器 Pedal_Pos DS1401ADC ADC1 (0–5V) 油门踏板 Motor_Cur DS1401ADC ADC2 (±10V) 电流传感器

三、代码生成选项:决定生成什么、怎么生成

在 Configuration Parameters → Code Generation 中,关键选项如下:

  • System target file:rti1401.tlc。这是 dSPACE 实时目标,会调用 RTI 的编译与链接脚本。
  • Language:C。MicroAutoBox 工具链通常使用 dSPACE 自带的编译器(如 dspc 或 GCC 变体)。
  • Generate code only:首次调试建议勾选,先检查生成的 .c 与 .h 是否符合预期,再执行完整编译下载。
  • Make command:make_rti,由 RTI 提供,负责调用编译器并生成 .sdf(可下载文件)。
  • Code Generation → Interface:C API 选 Default,便于 ControlDesk 通过变量名访问信号。

若模型包含 Stateflow 或 MATLAB Function,需确认它们已正确配置为“可生成代码”,避免出现 Cannot generate code for... 错误。生成后可在 ModelName_rti 文件夹中查看 ModelName.c、ModelName.h 和 ModelName.sdf。

四、下载与实时运行调试

下载通过 ControlDesk 或 dSPACE 的 ConfigurationDesk 完成。典型流程:

  1. 用网线连接主机与 MicroAutoBox,确认 IP 在同一网段(如 192.168.0.10 与 192.168.0.20)。
  2. 在 ControlDesk 中新建实验,加载生成的 .sdf 文件。
  3. 点击“Download”将代码写入目标机,随后“Start”启动实时任务。
  4. 在 ControlDesk 中拖入变量(如 Pedal_Pos、Motor_Cur、PWM_Duty),用 Plotter 或 Scope 观察实时波形。

调试时重点关注三类现象:

  • 任务超时:若 1 ms 任务实际执行超过 1 ms,ControlDesk 会报 Task overrun。此时需检查模型复杂度、I/O 阻塞或 CAN 等待。
  • 信号异常:若 ADC 读数始终为 0 或满量程,先查接线与量程配置,再查通道号是否与物理端子一致。
  • CAN 丢帧:若接收超时,检查波特率、终端电阻(120 Ω)和消息 ID 过滤设置。
建议在首次下载前,先用 Generate code only 生成代码并人工检查 I/O 模块对应的通道号与采样时间,可避免大量“下载后才发现通道错”的返工。
MicroAutoBox 的实时任务一旦启动,修改模型必须重新生成、编译、下载,不能像普通 Simulink 仿真那样在线改参数。若需在线调参,应提前在模型中把关键参数设为 Simulink.Parameter 并配置为可标定(calibratable),再通过 ControlDesk 在线修改。

完成上述四步后,模型即从“离线仿真”进入“实时运行”状态。此时可用 ControlDesk 的 Data Acquisition 记录一段 10 s 的数据,导出为 .mat 或 .csv,与离线仿真结果对比。若关键波形(如电流环阶跃响应)的上升时间、超调量与仿真偏差在 10% 以内,可认为部署基本成功;若偏差过大,应优先排查步长一致性、I/O 量化误差和任务调度抖动。