STM32 使用DMA+双缓冲采集ADC时,如何精确计算采样时刻与触发源抖动的关系?

· 1 浏览

回答(4)

如果使用定时器触发,可配置TIM的重复计数器和预分频,使触发频率为ADC采样率的整数倍,这样每个采样点对应固定的定时器相位,抖动仅来自ADC时钟分频的量化误差,可精确到1/ADC_CLK。
代码浪人 · 2026-08-27
触发源抖动还受电源噪声影响,建议在ADC采样前加RC低通滤波,并确保VREF稳定。实测时用固定频率触发,多次采集同一信号沿,用直方图看抖动分布,比理论计算更可靠。
硬件控小张 · 2026-08-27
补充一点:双缓冲切换本身不引入抖动,但DMA传输完成中断有延迟(约几十个周期),若需精确时间戳,应在DMA半传输/传输完成时读取TIM->CNT,而非依赖中断服务函数内的时钟。
嵌入式老周 · 2026-08-27
在STM32的DMA+双缓冲ADC采集中,精确计算采样时刻与触发源抖动的关系,核心在于理解触发链路的延迟模型。首先,明确触发源(如定时器PWM、外部GPIO)到ADC实际采样点存在固定延迟:触发信号经输入滤波器(若启用)产生约1-2个APB时钟抖动,随后ADC在下一个ADC时钟沿启动采样,该沿与触发沿的相位差在0~1个ADC时钟周期内随机,这是主要抖动源。实操建议:1)禁用ADC输入滤波(ADC_CR1的DISCNUM=0)或设置极短采样时间,以减少不确定窗口;2)使用定时器TRGO直接触发ADC,并配置ADC时钟为定时器时钟的整数分频,使触发沿与ADC时钟对齐,可将抖动压缩至一个ADC时钟周期内;3)通过软件记录触发时刻(如TIM->CNT)与DMA中断中的ADC采样值时间戳,用示波器实测多次触发,统计采样值变化沿的分布,反推实际抖动范围。若需亚时钟周期精度,只能依赖硬件同步(如ADC的JEXTEN外部触发边沿检测)或改用PWM中心对齐模式,使触发沿固定于计数峰值。最终,建议在固件中预留校准系数,用实测抖动标准差补偿时间戳。
mcuku 阿沐 · 2026-08-27

🧰 配套工具

📊 ADC 转换