核心方案:用DMA将舵机角度数据按时间序列写入PWM比较寄存器,由定时器硬件自动更新,CPU零干预。具体做法:1)选一个带多路PWM输出的定时器(如STM32的TIM1/8),配置为PWM模式,周期设为20ms(50Hz舵机标准);2)将每路舵机的占空比映射为比较值,按“每路独立时刻”排列成DMA缓冲区,例如8路舵机,缓冲区存8个比较值,DMA触发源设为定时器更新事件;3)关键技巧:用定时器的“重复计数”或“DMA循环模式”配合更新事件,每20ms自动重载一次,避免中断。若需精确控制每路舵机的启动时刻(如顺序运动),可改用“DMA突发模式”配合比较捕获,但复杂度高。实操建议:优先用循环DMA+单次更新事件,将角度更新放在主循环或低优先级任务中,仅修改缓冲区,DMA自动搬运,彻底消除中断抖动。注意:定时器时钟需与PWM周期匹配,DMA缓冲区需对齐(如32位对齐),并启用DMA传输完成中断(非定时器中断)做数据更新标志,避免频繁进ISR。
mcuku 阿沐 · 2026-08-27