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 通信)。映射过程分三步:
- 在模型中放置对应的 RTI 输入/输出模块,替代原来的 Simulink 信号源或示波器。
- 在模块参数中指定通道号。例如 ADC 模块选择
Channel = 1,对应硬件接线端子上的 ADC1。 - 设置信号调理参数:电压范围(如 ±10 V 或 0–5 V)、分辨率(16 位)、采样时间与任务周期一致。
映射完成后,建议用一张“信号—通道—物理量”对照表核对,避免通道错位。例如:
| 模型信号 | RTI 模块 | 通道 | 物理量 | 量程 |
|---|---|---|---|---|
| Pedal_Pos | DS1401ADC | ADC1 | 油门踏板位置 | 0–5 V |
| Motor_Cur | DS1401ADC | ADC2 | 电机电流 | ±10 V |
| PWM_Duty | DS1401DAC | DAC1 | 驱动占空比指令 | 0–10 V |
| CAN_Cmd | DS1401CAN | CAN1 | 上位机指令 | 500 kbps |
注意:ADC 模块的采样时间必须与模型步长一致或为其整数倍,否则 RTI 会报“采样时间不匹配”错误。若使用 CAN 接收,需在模块中设置正确的波特率与消息 ID,并确认接收超时行为。
三、代码生成选项:决定生成什么、怎么生成
在 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 完成。典型流程:
- 用网线连接主机与 MicroAutoBox,确认 IP 在同一网段(如
192.168.0.10与192.168.0.20)。 - 在 ControlDesk 中新建实验,加载生成的
.sdf文件。 - 点击“Download”将代码写入目标机,随后“Start”启动实时任务。
- 在 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 模块对应的通道号与采样时间,可避免大量“下载后才发现通道错”的返工。
Simulink.Parameter 并配置为可标定(calibratable),再通过 ControlDesk 在线修改。
完成上述四步后,模型即从“离线仿真”进入“实时运行”状态。此时可用 ControlDesk 的 Data Acquisition 记录一段 10 s 的数据,导出为 .mat 或 .csv,与离线仿真结果对比。若关键波形(如电流环阶跃响应)的上升时间、超调量与仿真偏差在 10% 以内,可认为部署基本成功;若偏差过大,应优先排查步长一致性、I/O 量化误差和任务调度抖动。