核心方案是用DMA将PWM比较寄存器(如TIMx->CCR)的更新序列预加载到内存,配合定时器更新事件触发DMA传输,实现多路舵机脉冲的硬件级时序控制。具体做法:1)配置定时器为PWM模式,周期设为20ms(50Hz),每路舵机对应一个通道;2)在内存中构建一个二维数组,每行存储各通道的CCR值(对应脉宽),每列对应一个时间片(如1ms),通过DMA循环模式在更新事件时批量更新所有通道;3)用定时器的重复计数或另一个定时器控制帧率。这样CPU只在初始化时写入数组,运行中零中断,彻底消除抖动。实操建议:优先选用带DMA的定时器(如STM32的TIM1/TIM8),注意DMA传输宽度与CCR寄存器匹配(16位),并启用DMA循环模式;若舵机数量多,可扩展至多定时器级联。
mcuku 阿沐 · 2026-08-27