4. 控制环路时序分析与优化
在数字电源、电机驱动、光伏逆变等实时控制应用中,控制环路的性能上限往往不由算法本身决定,而是由“采样—计算—输出”这条链路的时序决定。C2000 的 ePWM、ADC、CLA/CPU 各自独立运行,如果只关注代码执行时间,很容易忽略 ADC 采样保持窗口、SOC 触发到转换完成的固定延迟、PWM 影子寄存器装载时刻等环节,最终导致环路相位裕度下降、动态响应变慢,甚至出现采样点与开关噪声重叠的误采样。本节把这条链路拆开,逐段量化延迟,并给出用 ePWM 与 ADC 联动压缩“采样到输出”延迟的具体做法。
一、把一圈控制拆成四段可测量的时间
以中心对齐 PWM 的典型数字电源为例,一个开关周期 Tsw 内,控制环路可拆为四段:
- ttrig(触发延迟):ePWM 比较事件或周期事件产生 SOC 脉冲,到 ADC 真正开始采样保持的时间。它由 SOC 触发源选择、ADC 时钟分频和 SOC 排队决定,典型值在几十纳秒量级。
- tconv(转换时间):ADC 采样保持加逐次逼近的总时间。12 位模式下,采样窗口 ACQPS 与转换位宽共同决定,例如 SYSCLK=200 MHz、ADCCLK=50 MHz、ACQPS=14 时,采样窗口约 300 ns,转换约 320 ns,合计约 620 ns。
- tcalc(算法计算时间):从 ADC 结果寄存器可读,到控制量算出并写入比较影子寄存器的时间。包含中断响应、CLA 任务或 C28x 中断服务程序、定点/浮点运算、限幅与抗饱和处理。
- tupd(更新生效延迟):写入 CMPA/CMPB 影子寄存器后,到该值真正在 PWM 输出上生效的时间。它取决于影子寄存器装载模式(立即、周期、CTR=0 或 CTR=PRD),最坏情况接近一个完整开关周期。
“采样到输出”的总延迟 tlat ≈ ttrig + tconv + tcalc + tupd。其中 ttrig 与 tconv 由 ADC 配置决定,tcalc 由算法与中断结构决定,tupd 由 ePWM 装载策略决定。优化时先测出四段,再针对最大的一段下手,而不是盲目提高主频。
二、用 ePWM 事件精确“钉住”采样时刻
采样时刻的选择直接决定反馈量的质量。对中心对齐 PWM,计数器在 CTR=0 和 CTR=PRD 处换向,这两点附近开关管动作、di/dt 最大,若在此刻采样,采样窗口会耦合进开关噪声。更合理的做法是把 SOC 触发放在计数器经过峰值附近、电流纹波中点处,例如让 ePWM 的 CMPC 事件产生 SOC,CMPC 值设为 PRD/2 附近,使采样点落在电感电流的平均值位置。
配置上,通过 EPWMxSOCA/EPWMxSOCB 选择触发源,并设置 SOC 触发预分频,避免每个周期都触发。例如:
// 以 CTR=CMPC 事件触发 ADC SOCA,采样点位于电流纹波中点
EPwm1Regs.CMPC = 2500; // TBPRD=5000,CMPC 在周期中点附近
EPwm1Regs.ETSEL.bit.SOCASEL = 3; // SOCA 由 CMPC 事件触发
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 使能 SOCA
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // 每个事件都触发
// ADC 采样窗口与转换
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; // 通道 A0
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14; // 采样窗口约 300 ns
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // 由 ePWM1 SOCA 触发
这样 ttrig 被压缩到 SOC 脉冲到采样保持开始的固定硬件延迟,且采样点与开关噪声错开,反馈量的信噪比明显改善。
三、让计算与转换重叠,而不是串行等待
很多实现把“等 ADC 转换完成 → 进中断 → 算 → 写 PWM”串成一条线,tconv 与 tcalc 完全相加。更高效的结构是让 ADC 在后台转换,CPU 或 CLA 在结果就绪中断里只做必要搬运,把重运算放到 CLA 任务或主循环中与下一次转换重叠。C2000 的 ADC 结果寄存器在转换完成后自动更新,配合 ADCINT 触发 CLA 任务,可实现“本周期采样、本周期算完、下周期初更新”的流水线。
若用 C28x 中断,应把中断服务程序压缩到只读取结果、启动 CLA 或置标志,把 Park/Clark、PI、限幅等运算放到 CLA 或主循环。CLA 与 C28x 并行运行,tcalc 可显著缩短。需要注意 CLA 访问 ADC 结果寄存器与 PWM 寄存器的映射地址,以及任务触发源选择 ADCINT 还是 ePWM 事件。
四、PWM 更新时刻决定最后一段延迟
算出控制量后写入 CMPA 影子寄存器,真正生效的时刻由装载模式决定。若选择“周期装载”,写入后要等到下一个 CTR=0 才生效,tupd 最坏接近一个开关周期;若选择“立即装载”,虽然延迟小,但在周期中间改变占空比可能产生窄脉冲或不对称波形。工程上常用折中:在 CTR=0 装载,同时把计算安排在周期前半段完成,使写入到装载之间的等待最短。
对中心对齐 PWM,还可利用 CTR=0 与 CTR=PRD 双更新,把控制周期等效提高到开关频率的两倍,但需保证两次计算都基于最新采样值。若采用“采样—计算—更新”同周期闭环,应确保 ttrig+tconv+tcalc 小于从采样点到装载点的时间窗口,否则本周期算出的值只能下周期生效,环路额外引入一个周期延迟。
五、测量与判断:用 GPIO 和 DAC 看时序
时序优化不能靠猜。常用手段是在中断入口拉高一个空闲 GPIO、在写入 CMPA 后拉低,用示波器测脉冲宽度得到 tcalc;在 SOC 触发点翻转另一 GPIO,测出 ttrig+tconv。也可把 ADC 结果和 CMPA 值送到 DAC 或 PWM 引脚,观察采样点与输出更新的相对位置。判断标准是:采样点落在电流纹波中点、tcalc 小于开关周期的 20%~30%、写入到装载的等待时间稳定且可预测。若发现采样点漂移或更新时刻抖动,应检查 SOC 触发源是否被其他事件抢占、ADC 是否发生溢出、中断是否被高优先级任务延迟。
六、一份可套用的时序核算表
下表以 SYSCLK=200 MHz、ADCCLK=50 MHz、Tsw=10 μs(100 kHz)的中心对齐 PWM 为例,给出各段典型值与优化方向。表中数值为示例性估算,实际应以器件手册和实测为准。
| 时序段 | 典型值(示例) | 主要影响因素 | 优化手段 |
|---|---|---|---|
| ttrig | 30~80 ns | SOC 触发源、ADC 预分频 | 选 CTR=CMPC 事件,避开开关沿 |
| tconv | 约 620 ns | ACQPS、ADCCLK、分辨率 | 按源阻抗取最小 ACQPS,多 SOC 并行 |
| tcalc | 0.8~2.5 μs | 中断结构、CLA/CPU、算法复杂度 | CLA 并行、定点化、中断只搬运 |
| tupd | 0~10 μs | 影子寄存器装载模式 | CTR=0 装载,计算提前完成 |
| tlat 合计 | 约 1.5~3 μs(优化后) | 四段之和 | 目标小于 Tsw 的 30% |
把这张表填上自己项目的实测值,就能清楚看到延迟主要卡在哪一段。多数情况下,tcalc 和 tupd 是压缩空间最大的两段:前者靠 CLA 与算法结构,后者靠装载策略与计算完成时刻的配合。当 tlat 被压到开关周期的 30% 以内,环路相位损失明显减小,动态响应和稳定性都会得到改善。