2. MicroAutoBox硬件与实时系统基础
MicroAutoBox 不是一台“装了实时系统的工控机”这么简单。它把处理器、FPGA、I/O 板卡、实时内核和上位机工具链整合成一个闭环:模型编译后下载到目标机,实时任务按固定周期读取传感器或总线数据,执行控制算法,再通过 D/A、PWM 或 CAN 等通道输出。理解这条链路,是后续做自动化测试、故障注入和结果判读的前提。
硬件接口与 I/O 通道:先分清“板卡—通道—信号”三层
MicroAutoBox 的硬件通常以底板加插卡的形式组织。常见配置包括 DS1401 处理器板、DS1511/DS1512 等 I/O 板卡,以及用于 FlexRay、CAN、LIN 的通信板卡。每一块板卡提供若干物理连接器,连接器上再划分出具体通道。例如一块模拟输入板可能提供 16 路 16 位 A/D 通道,量程可配置为 ±10 V、±5 V 或 0~10 V;一块模拟输出板提供 8 路 D/A,更新率与分辨率需要与任务周期匹配;数字 I/O 则常见 TTL 电平或 24 V 工业电平,前者用于板级逻辑,后者用于真实执行器或继电器回路。
这里最容易混淆的是“通道号”和“模型端口”的对应关系。在 ConfigurationDesk 中,通道按硬件资源命名,例如 AI1、AO3、DIO7;在 Simulink 模型里,端口名由建模者自定义,例如 pedal_pos、brake_cmd。两者通过 I/O 映射绑定。如果映射错位,模型逻辑完全正确,台架上的执行器也会表现异常。因此每次更换板卡或调整线束后,都应重新核对映射表,而不是只检查模型能否编译通过。
实时内核与任务调度:周期、优先级和抖动
MicroAutoBox 运行的是 dSPACE 实时内核,通常基于 RTOS 或经过实时扩展的 Linux。它的核心职责不是“跑得快”,而是“在确定的时间点完成确定的工作”。模型编译后,Simulink 中的采样时间会被映射为实时任务:例如 1 ms 的基础任务、0.1 ms 的高速任务、10 ms 的监控任务。每个任务有独立周期和优先级,调度器按优先级抢占式执行。
假设一个示例配置:基础控制任务周期 T = 1 ms,优先级 10;CAN 收发任务周期 2 ms,优先级 8;数据记录任务周期 10 ms,优先级 5。若基础任务单次执行时间为 0.35 ms,则 CPU 占用约 35%;若某次因中断嵌套或缓存未命中涨到 0.9 ms,仍能在一个周期内完成,但余量只剩 0.1 ms。一旦超过 1 ms,就会发生任务超时,ControlDesk 中通常表现为周期抖动增大、丢帧或看门狗复位。因此工程上常要求最坏执行时间不超过周期的 50%~70%,给中断和通信留出余量。
任务之间的数据交换也要注意一致性。1 ms 任务写、10 ms 任务读的变量,如果直接共享全局内存,可能读到“半更新”的值。dSPACE 工具链通常通过双缓冲、原子访问或速率转换模块处理这类跨速率传递。做自动化测试时,如果发现记录曲线在任务边界出现毛刺,应优先检查跨速率数据传递,而不是怀疑传感器。
中断处理:快进快出,把重活留给任务
中断是实时系统响应外部事件的入口。MicroAutoBox 上常见中断源包括定时器中断、CAN 接收中断、数字输入边沿中断和故障保护中断。中断服务程序(ISR)应尽量短:读取硬件寄存器、打时间戳、置标志或写入环形缓冲区,然后立即返回。耗时的计算、文件写入和复杂判断应放到任务中完成。
例如曲轴位置传感器每转产生 60 个脉冲,若在 6000 r/min 下,脉冲间隔约 0.167 ms。ISR 只做捕获计数和角度累加,主任务再根据角度计算喷油或点火时刻。如果 ISR 里直接做查表和浮点运算,高转速下就会丢脉冲。判断中断是否健康,可以观察中断计数与理论值是否一致、ISR 执行时间是否稳定,以及是否出现中断嵌套导致的优先级反转。
与 ControlDesk、ConfigurationDesk 的关系
ConfigurationDesk 负责“把硬件和模型接起来”:配置板卡、定义通道属性、完成 I/O 映射、设置任务周期和中断触发方式,并生成可下载的实时应用。ControlDesk 负责“运行时的观察与操作”:下载应用、启动/停止实时任务、在线标定参数、记录测量数据、绘制曲线和布置虚拟仪表。两者分工明确,但必须版本匹配:ConfigurationDesk 生成的描述文件要与 ControlDesk 工程中的硬件配置一致,否则会出现变量找不到或通道显示异常。
一个典型的自动化测试流程是:在 ConfigurationDesk 中固定 I/O 映射和任务配置,导出接口描述;在 ControlDesk 中建立实验工程,绑定测量变量和标定量;再用 Python 或 dSPACE Automation API 调用 ControlDesk 的 COM 接口,实现参数扫描、故障注入和报告生成。这样,硬件配置变更时只需重新生成描述文件,测试脚本仍可复用。