3. 实时控制外设与中断架构
在 Stellar 这类面向高性能实时控制的多核 MCU 中,实时性并不是由 CPU 主频单独决定的,而是由“外设事件产生 → 中断汇聚 → 优先级仲裁 → 内核响应 → 任务执行”这一整条链路共同决定。本节围绕 eMIOS、STM、ADC、PWM、比较器以及 NVIC/GIC 中断控制器,梳理这条链路的构成与配置要点。
一、定时器与外设:实时事件的源头
Stellar 的定时器体系主要包含两类角色。STM(System Timer Module)是系统级定时基准,通常用于操作系统节拍、周期性任务调度和时间戳;eMIOS(enhanced Modular IO System)则是面向电机与功率变换的可配置定时器阵列,每个通道可独立配置为输入捕获、输出比较、PWM 生成或单次触发模式。eMIOS 的价值在于它把“时间事件”直接转化为硬件动作,而不必经过 CPU 干预。
以三相电机 FOC 控制为例,典型配置是:eMIOS 的一个通道工作在中心对齐 PWM 模式,产生三相互补 PWM;另一个通道配置为输入捕获,用于读取霍尔或编码器信号;同时利用 eMIOS 的计数器下溢事件触发 ADC 采样,使采样点始终落在 PWM 波形的中点,避开开关噪声。这种“定时器触发 ADC”的硬件联动,是实时控制中最关键的确定性来源之一。
二、ADC 与比较器:把模拟量纳入时间轴
Stellar 的 ADC 支持硬件触发源选择,可被 eMIOS、STM 或外部信号触发。配置时需要关注三个参数:触发源、采样窗口和转换完成中断。采样窗口必须与信号源阻抗匹配,窗口过短会导致采样电容未充分充电,转换结果偏低;窗口过长则挤占控制周期。比较器(Comparator)则用于快速阈值判断,例如过流保护:当电流采样值超过设定阈值时,比较器可直接输出故障信号,经交叉开关送至 PWM 的故障输入,在数十纳秒内封锁 PWM 输出,而不等待 ADC 转换完成和软件判断。
三、中断控制器:NVIC 与 GIC 的分工
在单核视角下,Cortex-M 内核使用 NVIC 管理中断,每个中断源有独立的使能位和优先级寄存器。Stellar 的多核架构中,Cortex-M 核仍使用 NVIC,而 Cortex-A 核或实时核则通过 GIC(Generic Interrupt Controller)管理中断分发。GIC 的核心概念包括:中断分发器(Distributor)负责全局使能与优先级,CPU 接口(CPU Interface)负责向具体核提交中断,SPI/PPI/SGI 区分共享外设中断、私有外设中断和软件生成中断。
多核场景下最关键的问题是中断亲和性(Affinity):一个外设中断应该路由到哪个核?原则是让中断处理与产生该中断的外设、以及依赖该数据的任务尽量在同一核或同一簇内,减少跨核通信开销。例如 ADC 转换完成中断应路由到执行电流环的实时核,而不是通用应用核。
四、优先级分配与响应链路
优先级数值越小,优先级越高(Cortex-M 约定)。分配时应遵循“越靠近硬件、越短、越不可延迟”的中断优先级越高。一个可参考的分配示例如下:
| 中断源 | 建议优先级 | 理由 |
|---|---|---|
| PWM 故障 / 比较器过流 | 0(最高) | 硬件保护,必须立即封锁输出 |
| ADC 转换完成 | 1 | 电流环输入,决定控制周期起点 |
| eMIOS 捕获 / 位置更新 | 2 | 影响换相时刻 |
| STM 系统节拍 | 5 | 调度用,允许轻微抖动 |
| 通信(CAN/以太网) | 8 | 非硬实时,可被控制环抢占 |
需要特别注意的是优先级分组(Priority Grouping)。Cortex-M 的优先级寄存器分为抢占优先级和子优先级,只有抢占优先级不同才会发生嵌套。若把 ADC 和 PWM 故障设为同一抢占优先级,则 ADC 中断执行期间 PWM 故障无法抢占,保护延迟将增加一个中断服务程序的时间。因此保护类中断必须独占最高抢占优先级。
五、响应链路的量化观察
要验证这条链路是否满足实时性,可以在 ADC 中断入口翻转一个 GPIO,在电流环计算完成后再翻转一次,用示波器测量高电平宽度即为中断服务时间;同时用 eMIOS 的捕获功能记录 PWM 下溢到 ADC 中断入口的时间差,即为触发到响应的延迟。若该延迟抖动超过控制周期的 5%,就需要检查是否有更高优先级中断长时间占用 CPU,或 ADC 触发配置是否存在软件轮询替代硬件触发的情况。
把上述链路串起来看,实时控制的确定性来自三个层面的配合:外设硬件联动保证事件产生的时间精度,中断优先级保证关键事件能被及时响应,多核路由保证处理位置与数据依赖一致。任何一层配置不当,都会在最终的控制周期抖动上体现出来。