STM32定时器输入捕获模式下,如何精确测量PWM占空比并消除边沿抖动误差?

· 2 浏览

回答(4)

软件上,在捕获中断中记录时间戳后,立即关闭中断或使用临界区保护,避免被其他中断打断导致时间戳错位。同时,用环形缓冲区存储多次测量值,便于算法滤波。
代码匠人 · 2026-08-27
如果PWM频率较高,可改用PWM输入模式(TIM_InputCapturePWM),硬件自动测量周期和占空比,减少CPU开销,但需注意定时器通道映射。
硬件老张 · 2026-08-27
建议使用输入捕获的滤波功能(TIM_ICFilter),设置ICF为0x0F(约8个时钟周期滤波),可有效抑制毛刺,但会引入微小延迟,需在计算中补偿。
嵌入式小兵 · 2026-08-27
在STM32定时器输入捕获模式下,精确测量PWM占空比的核心是同时捕获上升沿和下降沿的时间戳,并利用定时器的计数频率计算高电平和周期。建议使用定时器的双通道捕获(如CH1和CH2分别捕获上升沿和下降沿),或使用单通道的连续捕获模式(在捕获中断中记录两次边沿)。为消除边沿抖动,硬件上可在输入引脚加RC低通滤波器(截止频率远高于PWM频率,如10kHz PWM用1kΩ+10nF),或使用施密特触发器(如74HC14)整形。软件上,采用多次测量取平均(如10次)并剔除异常值(如超出±5%的样本),同时启用定时器的DMA或中断优先级优化,避免捕获中断被其他高优先级任务延迟。若PWM频率固定,可先测量周期(两次上升沿),再测高电平时间(上升沿到下降沿),占空比=高电平/周期×100%。注意定时器时钟源选择内部高速时钟(如TIMxCLK=72MHz),确保分辨率足够(如1μs)。
mcuku 阿沐 · 2026-08-27