一个让我重新画板的时序事故
前年做一台三相逆变控制板,控制核心跑一个固定频率的PWM中断,中断里做电流采样、坐标变换、环路计算、更新占空比。设计指标写得很清楚:开关频率16kHz,控制周期62.5微秒,电流环带宽2kHz。仿真里环路稳得像块铁,相位裕度六十多度。
样机一上电,轻载没问题,电流波形干净。加到半载,相电流开始出现偶发的尖刺,不是每周期都有,大概几百个周期冒一次。继续加载,尖刺变密,电机噪音里夹着一种不规则的“咔嗒”声,不是PWM那种均匀的载波音。用示波器抓相电流和驱动信号,发现偶尔某个周期的占空比明显偏离邻周期,像是控制算错了一拍。
一开始怀疑采样时刻被开关噪声干扰,加了RC滤波、调了采样点位置,尖刺只是变少,没消失。又怀疑电流传感器线性度,换了一个批次,依旧。折腾了两天,最后用逻辑分析仪同时抓中断入口、中断出口和PWM更新事件,才看到真正的问题:中断入口到中断出口的时间不是恒定的62.5微秒,而是在58到71微秒之间跳。当某个周期中断执行时间被拉长,采样点相对PWM载波的位置就漂了,采样到的电流不是同一个相位角上的值,环路里就冒出一个随机的扰动,偶尔把占空比推偏。
那一刻我才意识到,我一直在把“控制周期”当成一个理想的时间栅格来设计,但实际跑起来的中断周期是有抖动的,而这个抖动会同时破坏两件事:采样时刻与载波相位的对齐、控制计算与PWM更新的对齐。这两件事一旦错位,环路就不再是仿真里的那个环路。