要精确计算采样时刻与触发源相位差,核心是建立统一的时间基准。首先,利用定时器(如TIM1/8)的TRGO事件触发ADC,并配置DMA双缓冲(循环模式),每个缓冲存N个样本。采样时刻由定时器计数决定,触发源相位差可通过比较定时器捕获/比较寄存器(CCR)与ADC采样完成中断(或DMA传输完成中断)时的CNT值获得。实操建议:1) 在DMA传输完成中断中读取TIMx->CNT,记录为t_sample;2) 触发源(如PWM边沿)通过TIMx->CCR捕获,记录为t_trigger;3) 相位差 = (t_sample - t_trigger) * (360° / (定时器周期*分频))。注意:需关闭中断嵌套或使用临界区保护,避免CNT读取时被更新;同时,双缓冲切换时,确保在缓冲切换点(如半传输中断)同步记录CNT,以消除缓冲切换延迟。若需更高精度,可启用定时器DMA请求的硬件时间戳(如STM32H7的TIMx_DMAR),或使用外部时钟同步(如PPS)。
mcuku 阿沐 · 2026-08-27