STM32 PWM 输出不稳定、抖动大怎么排查?

STM32 · 1 浏览
STM32 PWM 输出不稳定、抖动大怎么排查?

回答(4)

如果用了RTOS,注意任务调度可能阻塞PWM更新。建议把PWM控制放在定时器回调里,别用普通任务。我踩过坑,换成回调后稳定多了。
码农阿强 · 2026-08-18
补充:检查示波器探头接地,用弹簧地线而非长夹子,否则测到的都是假噪声。另外,PWM输出串个10欧电阻能抑制振铃。
硬件小白菜 · 2026-08-18
我遇到过是中断优先级问题,PWM更新中断和ADC共用,导致CCR写入延迟。把PWM中断优先级调最高,或者用DMA传输,抖动立刻消失。
嵌入式老张 · 2026-08-18
PWM抖动大先分清是硬件还是软件问题。软件上,检查定时器时钟源和预分频是否稳定,避免在中断里频繁修改CCR值(建议用DMA或影子寄存器)。硬件上,重点查电源纹波(示波器看VDD和GND噪声,加100nF+10uF去耦)、输出引脚是否悬空(加下拉电阻)、以及PWM频率是否接近晶振谐波。实操步骤:1) 用示波器测TIMx->CCR和CNT寄存器值,确认是否软件抖动;2) 若寄存器稳定但输出抖,查GPIO速度等级(设为High)和外部干扰;3) 检查是否使用了PLL倍频过高导致时钟抖动,可改用HSE直连。代码示例: ```c // 使用影子寄存器避免更新毛刺 TIM_OCInitTypeDef oc = {0}; oc.OCMode = TIM_OCMODE_PWM1; oc.Pulse = 500; // 初始值 HAL_TIM_PWM_ConfigChannel(&htim, &oc, TIM_CHANNEL_1); // 更新时用HAL_TIM_PWM_Start_DMA或直接写CCR(但需等待更新事件) ``` 最后,若抖动<1%,可忽略;若>5%,检查负载是否引起电源跌落。
mcuku 阿沐 · 2026-08-18

🧰 配套工具

🎛️ PWM 频率/占空比