3、触发同步机制:PWM溢出事件触发ADC采样、PWM比较匹配事件触发ADC采样、多通道PWM触发策略

好,咱们进入第三章。这一章讲的是ADC和PWM怎么“握手”。说白了,就是让PWM告诉ADC:“嘿,该干活了!”

我见过不少工程师,把ADC和PWM配置得各自为政。结果呢?采样点要么落在开关噪声最大的时刻,要么错过了电流波形的峰值。嗯,这其实是个坑。今天咱们就把这个坑填平。

3.1 PWM溢出事件触发ADC采样

先讲最简单的——PWM溢出事件。什么是溢出?就是PWM计数器从0走到ARR(自动重装载值),然后归零的那一刻。

我个人习惯把这种触发方式叫做“周期起点触发”。为什么?因为溢出事件发生在每个PWM周期的开始。

核心逻辑:PWM计数器溢出 → 产生触发信号 → ADC开始采样

这种触发方式适合什么场景?

  • 电流环采样:需要在每个PWM周期开始时刻采集相电流
  • 电压监测:母线电压的周期性监测
  • 温度检测:对实时性要求不高的慢速采样

配置代码大概长这样(以STM32为例):

// 配置PWM溢出触发ADC
TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update);
ADC_ExternalTrigConvCmd(ADC1, ENABLE);
ADC_ExternalTrigConvSelect(ADC1, ADC_ExternalTrigConv_T1_CC1);

这里要注意一个细节:触发信号有延迟。从PWM溢出到ADC真正开始采样,中间有几个时钟周期的延迟。我在项目中遇到过,如果PWM频率很高(比如100kHz以上),这个延迟会吃掉不少采样窗口。

我的经验:PWM频率超过50kHz时,建议用比较匹配事件代替溢出事件。延迟更小,采样窗口更宽。

3.2 PWM比较匹配事件触发ADC采样

这个就灵活多了。比较匹配事件发生在PWM计数器与某个比较值相等的那一刻。你可以把它放在PWM周期的任意位置。

为什么说它更灵活?你想想看:

  • 你可以把采样点放在PWM波形的上升沿
  • 也可以放在下降沿
  • 甚至可以放在死区时间的中间

我曾经调试一个电机驱动项目,发现电流波形在PWM开关时刻有严重的振铃。如果按溢出事件采样,每次都会采到振铃的峰值。后来改成比较匹配事件,把采样点往后挪了200ns,问题就解决了。

配置代码示例:

// 配置PWM比较匹配触发ADC
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_OC1Ref);
ADC_ExternalTrigConvSelect(ADC1, ADC_ExternalTrigConv_T1_CC1);

注意:比较匹配事件触发ADC时,要确保比较值不与PWM周期边界重合。否则会触发两次采样,造成数据混乱。

3.3 多通道PWM触发策略

好了,前面讲的是单通道。实际项目中,你面对的往往是三相电机、多路电源,需要多个PWM通道协同工作。

多通道PWM触发策略,说白了就是解决一个问题:多个PWM通道,谁先触发ADC?

我总结了几种常见策略:

策略名称 触发源 适用场景 注意事项
主从同步 主PWM溢出 三相电机控制 从PWM需配置为从模式
轮询触发 各通道比较匹配 多路独立电源 需错开触发时间
优先级触发 最高优先级通道 关键信号优先采样 低优先级通道可能被饿死

主从同步策略是我用得最多的。举个例子,三相电机控制中,U、V、W三相的PWM需要严格同步。我会把TIM1设为主PWM,TIM2和TIM3设为从PWM,都跟随TIM1的溢出事件。

配置代码:

// 主PWM配置
TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable);
TIM_SelectOutputTrigger(TIM1, TIM_TRGOSource_Update);

// 从PWM配置
TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0);
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Trigger);

轮询触发策略适合多路独立电源。比如你有三路Buck电路,每路都需要采样输出电压。你可以把三路的比较匹配事件错开,让ADC依次采样。

我的建议:轮询触发时,相邻通道的触发时间间隔至少留1μs。给ADC足够的转换时间,避免数据冲突。

优先级触发策略要小心。我曾经在一个项目中,把过流保护的采样优先级设得最高。结果正常工作时,低优先级的温度采样几乎没机会执行。后来加了超时机制才解决。

3.4 实战中的避坑指南

讲几个我踩过的坑:

  • 触发信号毛刺:PWM比较匹配信号在边界处可能产生毛刺。我习惯在触发路径上加一个数字滤波器,滤掉小于50ns的毛刺。
  • ADC采样时间不足:触发间隔太短,ADC来不及完成转换。我一般保证触发间隔大于ADC转换时间+采样时间。
  • 多通道触发冲突:两个PWM通道同时触发ADC,会造成采样数据覆盖。我建议用DMA来搬运数据,避免CPU干预。

重要提醒:触发同步机制调试时,先用示波器看PWM输出和ADC触发信号。别急着看数据,先确认时序对不对。

3.5 知识体系图

下面这张图展示了本章的核心逻辑:

PWM触发ADC采样机制 PWM模块 溢出事件 比较匹配事件 多通道触发策略 触发信号 触发信号 触发信号 ADC采样 触发源选择 触发源选择 触发策略配置 图:PWM触发ADC采样机制流程图

这张图把三种触发方式串起来了。从PWM模块出发,经过不同的事件源,最终到达ADC采样。你可以在实际项目中对照这张图来配置。

好了,这一章就到这里。触发同步机制是ADC和PWM联动的核心,理解了它,你就能精准控制采样时刻。下一章咱们会讲采样数据的处理,嗯,到时候再聊。


公众号:蓝海资料掘金营,微信deep3321