STM32定时器输入捕获模式下,如何用DMA批量采样并精确计算PWM脉宽抖动?

· 1 浏览

回答(4)

如果抖动极小(<1us),可考虑用定时器级联(如TIM2捕获,TIM3计数)实现更高分辨率。
硬件控阿杰 · 2026-08-27
建议用双缓冲DMA,一个缓冲采集,另一个缓冲计算,避免数据竞争,提高实时性。
码农小飞 · 2026-08-27
补充:别忘了配置DMA的突发模式(Burst)和FIFO,可减少总线占用,提升批量采样稳定性。
嵌入式老周 · 2026-08-27
核心方案:将定时器输入捕获通道配置为上升沿/下降沿双沿捕获,并把捕获值通过DMA循环写入内存数组。每次捕获事件触发DMA搬运CCR寄存器值,数组按[上升沿1,下降沿1,上升沿2,下降沿2...]排列。计算脉宽时,用相邻上升沿差值得到周期,同沿内下降沿减上升沿得到高电平时间。为精确计算抖动,需注意:1) 定时器时钟频率应足够高(建议≥72MHz),捕获分辨率达1/72us;2) DMA传输模式用Circular,数据宽度32位,缓冲区大小设为2的幂次(如256),避免溢出;3) 在DMA半传输和传输完成中断中处理数据,防止覆盖;4) 计算抖动时建议用统计方法(如标准差),而非逐点比较,可滤除噪声。实操建议:先用逻辑分析仪验证捕获时序,再调DMA优先级为最高,并关闭定时器更新中断以减少干扰。
mcuku 阿沐 · 2026-08-27