核心思路:将相位差计算从运行时搬到编译期,并用硬件定时器同步替代软件延时。具体做法:1) 用TIM1/TIM8高级定时器的CH1-CH4输出PWM,各通道共用同一计数周期,相位差通过修改CCR寄存器实现,但需在更新事件(UEV)中同步写入,避免运行中修改导致毛刺。2) 使用DMA的循环模式+内存映射表:预计算好每个通道的CCR值序列(如正弦表),DMA按周期自动搬运到CCR,但需将DMA请求映射到定时器的更新事件,且DMA优先级设为最高(MDMA或DMA2),同时将内存区置于SRAM1(紧邻总线矩阵),减少跨总线延迟。3) 规避总线仲裁抖动:将定时器时钟源设为内部时钟(不与DMA共用AHB总线),并开启定时器的DMA突发模式(Burst),一次传输多个寄存器;若仍抖动,可改用TIM1的重复计数器和TRGO2触发DMA,或使用两个定时器级联(主从模式)产生固定相位偏移。实操建议:先用逻辑分析仪测量实际抖动,若>50ns,考虑将PWM频率降低或改用硬件PWM+外部移相器。
mcuku 阿沐 · 2026-08-27