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 μs | PWM 周期中断 / PIT 定时器 |
| 抖动 < 1 μs | 触发源必须硬件同步,禁止软件轮询 | ADC 由 PWM 触发,中断优先级固定 |
| 延迟 < 5 μs | 采样到占空比写入路径需最短 | 中断内直接计算,避免任务切换 |
| 吞吐量 ≥ 20 k 次/s | 单次迭代 WCET < 50 μs 且留 30% 余量 | 定点运算、查表、DMA 搬运 |
表中“留 30% 余量”是工程经验值:若 WCET 逼近周期上限,任何一次中断嵌套或缓存缺失都会导致超时。因此通常要求 WCET ≤ 0.7×Ts。
三、任务分解与中断/调度约束
一个典型的 S32K 电机控制软件可分解为以下任务层次:
- 电流环中断:由 PWM 周期触发,优先级最高,执行 Clarke/Park、PI、反 Park、SVPWM,直接写占空比寄存器。
- 速度环任务:1 ms 周期,读取电流环输出的 Iq 反馈,执行速度 PI,输出 Iq 参考值。
- 状态机与保护任务:10 ms 周期,处理过流、过压、温度保护及运行状态切换。
- 通信与标定任务:后台低优先级,处理 CAN 报文、参数更新,不得阻塞控制环。
任务分解后必须明确调度约束:电流环中断不可被通信任务抢占;速度环与电流环之间通过共享变量传递 Iq 参考值,需保证写入原子性;保护任务检测到故障时,应在下一个 PWM 周期内封锁输出,而不是等待 10 ms 任务周期。
四、可验证设计输入的示例
需求分析最终要形成一份可验证的设计输入,而不是停留在描述性文字。以下是一份电流环设计输入的示例片段(参数为教学示例,非实测值):
控制对象: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,示波器可测抖动,占空比更新时刻可测延迟。只有能被验证的约束,才是真正的设计输入。
五、常见分解误区
第一,把“功能模块”直接当作“任务”。例如把“FOC 计算”拆成多个函数并分别放入不同任务,会引入不必要的任务切换和共享数据同步开销。第二,忽略中断嵌套。若高优先级中断执行时间过长,低优先级中断会被推迟,导致速度环周期抖动。第三,用平均时间代替 WCET 做预算。第四,保护逻辑放在低优先级任务中,故障响应时间被任务周期拉长。
完成上述分析后,设计输入应包含:任务清单、触发源、优先级、WCET 预算、共享资源与同步方式、验证方法。这份输入将直接指导后续的调度配置、中断优先级设置和性能测量方案,是实时控制软件从需求走向实现的关键桥梁。