DMA 大幅降低 SVPWM/SPWM 调制的 CPU 占用

Posted on April 14, 2025

S(V)PWM 和 DMA

在变频器里,FOC 通常使用 定时器 输出 PWM 实现。

通常来说,需要在每个 PWM 的益出中断里,重新计算三路输出的 PWM 占空比。

如果使用非常高的pwm频率,那么 pwm 的中断将非常频繁。这对于 cpu 时钟并不高的单片机来说,会极大的降低 cpu 处理其他业务逻辑的能力。

而这个问题,在使用 “同步调制” 的方式下,有一个很好解决的办法。

在同步调制下,载波频率随着输出的频率变化而变化。这意味着,pwm 的占空比实际上是周期性发生的。

比如使用 1:360 的同步调制下,每个 sin基波由 360个pwm方波构成。意味着,每隔 360 次,pwm 占空比就会重复。

因此,如果预先分配一个 360 份的 pwm占空比。然后使用 DMA 搬运 pwm占空比到 TIM 定时器。则整个 spwm 过程中, cpu 都不再需要参与。

如果需要改变输出频率,则 cpu 只须调节 pwm 的频率,甚至不需要更新 DMA 的数据。

直到 pwm 频率已经不适应输出频率,直到发生“换挡” — 切换调制比。

每次切换调制比的时候,就需要重新生成 pwm占空比序列,然后重新设置 DMA 控制器。

而且,三个 pwm 通道可以使用同一份 pwm 占空比循环数据。只要初始运行的时候,使用不同的起始地址。

Comments