核心思路是让DMA在内存中维护一个PWM占空比查找表,通过定时触发DMA搬运数据到PWM的比较寄存器,实现占空比自动渐变,全程无需CPU干预。具体做法:1) 选择带DMA请求的定时器(如STM32的TIM1/8),配置PWM模式,将比较寄存器(CCR)设为DMA目标;2) 在内存中建立一张正弦或线性渐变的占空比数组(如256点,16位分辨率);3) 配置DMA为循环模式,外设地址指向CCR,内存地址指向数组,传输宽度16位,触发源选择定时器更新事件或比较匹配事件;4) 设置DMA传输完成中断仅用于调试,正常运行时CPU零参与。注意:数组长度和定时器频率需匹配呼吸周期(如10Hz呼吸,256点则更新频率2.56kHz),避免闪烁。若需更高分辨率(如12位),可改用DMA半传输中断切换双缓冲,但会增加少量CPU负载。实操建议:先用逻辑分析仪验证占空比波形,再调整数组曲线平滑度。
mcuku 阿沐 · 2026-08-27