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