2. 实时控制软件需求分析与任务分解

在电机控制、数字电源、车载执行器等实时控制场景中,需求往往以“控制周期 100 μs、PWM 抖动不超过 1 μs、电流环延迟小于 5 μs、单周期内完成 ADC 采样与 FOC 计算”这类指标形式出现。这些指标描述的是系统对外呈现的时间行为,而软件实现却是任务、中断、优先级和共享资源的组合。需求分析与任务分解的核心工作,就是把“时间指标”翻译成“软件结构约束”,形成可验证的设计输入。

一、四类时间指标的含义与边界

实时控制需求通常围绕四个指标展开,它们描述的是不同维度的约束,不能互相替代。

  • 控制周期(Ts):控制算法两次执行的间隔,决定采样频率与环路带宽。例如电流环 Ts=50 μs,对应 20 kHz 采样。
  • 抖动(Jitter):实际触发时刻相对理想时刻的偏差。抖动直接影响采样相位一致性,对 PWM 同步采样尤为关键。
  • 延迟(Latency):从事件发生(如 ADC 转换完成)到控制输出生效(如 PWM 占空比更新)之间的时间,包含采样、计算、写入三个环节。
  • 吞吐量(Throughput):单位时间内可完成的有效控制迭代或数据处理量,反映 CPU 与总线的持续承载能力。

需要特别区分“最坏执行时间(WCET)”与“平均执行时间”。实时性判断依据的是 WCET,而不是平均值。若某任务平均 20 μs、WCET 却达 45 μs,在 50 μs 周期下平均看似安全,但一旦触发最坏路径就会超时。

二、从指标到软件约束的转化

把指标转化为设计输入,需要回答三个问题:谁触发、谁执行、谁保证时限。以 20 kHz 电流环为例,可建立如下转化关系:

需求指标软件约束典型实现手段
Ts=50 μs周期任务或定时器中断周期 50 μsPWM 周期中断 / PIT 定时器
抖动 < 1 μs触发源必须硬件同步,禁止软件轮询ADC 由 PWM 触发,中断优先级固定
延迟 < 5 μs采样到占空比写入路径需最短中断内直接计算,避免任务切换
吞吐量 ≥ 20 k 次/s单次迭代 WCET < 50 μs 且留 30% 余量定点运算、查表、DMA 搬运

表中“留 30% 余量”是工程经验值:若 WCET 逼近周期上限,任何一次中断嵌套或缓存缺失都会导致超时。因此通常要求 WCET ≤ 0.7×Ts。

三、任务分解与中断/调度约束

一个典型的 S32K 电机控制软件可分解为以下任务层次:

  1. 电流环中断:由 PWM 周期触发,优先级最高,执行 Clarke/Park、PI、反 Park、SVPWM,直接写占空比寄存器。
  2. 速度环任务:1 ms 周期,读取电流环输出的 Iq 反馈,执行速度 PI,输出 Iq 参考值。
  3. 状态机与保护任务:10 ms 周期,处理过流、过压、温度保护及运行状态切换。
  4. 通信与标定任务:后台低优先级,处理 CAN 报文、参数更新,不得阻塞控制环。

任务分解后必须明确调度约束:电流环中断不可被通信任务抢占;速度环与电流环之间通过共享变量传递 Iq 参考值,需保证写入原子性;保护任务检测到故障时,应在下一个 PWM 周期内封锁输出,而不是等待 10 ms 任务周期。

注意:中断优先级数值在 ARM Cortex-M 中越小优先级越高。若将 CAN 接收中断优先级设为高于电流环,通信突发会导致电流环抖动超标。控制类中断应配置为最高优先级组。

四、可验证设计输入的示例

需求分析最终要形成一份可验证的设计输入,而不是停留在描述性文字。以下是一份电流环设计输入的示例片段(参数为教学示例,非实测值):

控制对象:PMSM 电流环
采样频率:20 kHz(Ts = 50 μs)
触发方式:PWM 周期中断,ADC 由 PWM 上升沿触发
WCET 预算:35 μs(含 ADC 读取、FOC 计算、PWM 写入)
抖动预算:< 1 μs(硬件触发,无软件轮询)
延迟预算:< 5 μs(采样完成到占空比更新)
余量要求:WCET ≤ 0.7 × Ts = 35 μs
验证方法:GPIO 翻转 + 示波器测量中断入口到出口时间

这份输入中每一项都可被测量或检查:GPIO 翻转可测 WCET,示波器可测抖动,占空比更新时刻可测延迟。只有能被验证的约束,才是真正的设计输入。

实时控制需求 → 软件任务与调度约束转化图 需求指标 控制周期 Ts 50 μs / 20 kHz 抖动 Jitter < 1 μs 延迟 Latency < 5 μs 吞吐量 ≥ 20k 次/s WCET 预算 ≤ 35 μs 软件约束 PWM 周期中断 50 μs 定时器硬件触发 ADC 由 PWM 触发 禁止软件轮询 中断内直接计算 避免任务切换开销 定点运算 + DMA 降低单次迭代耗时 WCET ≤ 0.7 × Ts 保留 30% 余量 任务与调度约束 电流环中断(最高优先级) Clarke/Park → PI → SVPWM → 写占空比 速度环任务(1 ms) 读 Iq 反馈 → 速度 PI → 输出 Iq 参考 保护与状态机(10 ms) 过流/过压/温度 → 封锁 PWM 通信与标定(后台) CAN 报文、参数更新,不阻塞控制环 共享变量需原子访问 故障响应 ≤ 1 个 PWM 周期 验证手段:GPIO 翻转测 WCET | 示波器测抖动 | 占空比更新时刻测延迟 | 逻辑分析仪测任务时序

五、常见分解误区

第一,把“功能模块”直接当作“任务”。例如把“FOC 计算”拆成多个函数并分别放入不同任务,会引入不必要的任务切换和共享数据同步开销。第二,忽略中断嵌套。若高优先级中断执行时间过长,低优先级中断会被推迟,导致速度环周期抖动。第三,用平均时间代替 WCET 做预算。第四,保护逻辑放在低优先级任务中,故障响应时间被任务周期拉长。

任务分解的检验标准:每个任务都能回答“触发源是什么、WCET 是多少、被谁抢占、共享什么数据、超时后果是什么”。五个问题都能明确回答,分解才算完成。

完成上述分析后,设计输入应包含:任务清单、触发源、优先级、WCET 预算、共享资源与同步方式、验证方法。这份输入将直接指导后续的调度配置、中断优先级设置和性能测量方案,是实时控制软件从需求走向实现的关键桥梁。