在STM32芯片的ADC应用中,我们往往会利用定时器来触发ADC的启动转换,而能够触发ADC转换的定时器事件往往有多个,有时我们可能很关注这些定时器事件在触发ADC时有哪些时序上的差别。下面以STM32G4芯片为例,来大致聊聊该话题。
这里选择TIM1来触发ADC。我们从手册或CubeMx配置界面不难看到可用来触发ADC的定时器事件可以是定时器TRGO信号和通道CC事件/信号,而TRGO可能来自定时器的使能动作、定时器的更新事件、通道输出比较事件、通道比较输出参考信号以及编码时钟。
这里先重点就Update事件、通道OCx信号和OCxREF信号作为TRGO来触发ADC,看看相应的触发时间点在哪里。
另外,作为ADC的外部触发事件还有个触发极性选择的配置。这点我们可用从CubeMx配置界面直观看到,如下图所示,可以选择上沿触发、下沿触发或双沿触发。
我这里将TIM1配置为向上计数模式,基于PWM1模式,极性选择为0的条件下,让CH1输出PWM信号,以便观察不同定时器事件及配置对ADC触发时序的影响。
1、当选择Update Event做为TIM1的TRGO,同时TRGO作为ADC的外部触发事件时,不论ADC的触发极性如何选择,都确定在定时器发生更新事件时触发ADC,即下图红色箭头所指位置。
2、当选择OC1做为TIM1的TRGO,同时TRGO作为ADC的外部触发事件时,不论ADC的触发极性如何选择,都确定在定时器发生比较事件时触发ADC,即上图绿色箭头所指位置。
3、当选择OC1REF做为TIM1的TRGO,同时TRGO作为ADC的外部触发事件时,此时ADC的触发时间点还跟ADC的触发极性选择有关,如果选择上升沿触发,ADC触发则发生在上图中的红色箭头处,反之则发生在绿色箭头处,如果选择双沿触发,则上图中红色箭头、绿色箭头处都会触发ADC转换。
上面主要介绍的是ADC触发信号源于定时器的TRGO,如果说ADC的触发信号不是来自TRGO而是来自开篇提到的通道CC事件呢。定时器CC事件包括IC事件【input Capture】和OC事件【output compare】。这里IC事件是不能作为ADC触发源的,那我们看看OC事件作为ADC的触发源的情况,即像下面的配置。
经验证测试,这里选择OC1作为ADC触发源时的情形跟前面选择OC1ref作为TRGO去触发ADC的情形是一样的,具体触发点跟ADC配置的触发极性选择有关,即上面的第三种情形。
看到这里,有人或许会问,既然这两组情形的结果是一样的,为什么配置里面不拿掉一项呢?不过,我们要知道,OCx与OCxref可能一样也可能不一样,具体取决于OC输出时的极性配置。上面我们测得两组情形是一样,刚好是因为OCx与OCxref完全同相,如果调整极性选择,触发时间点就会不一样了,结果就会刚好反过来。毕竟实际应用是千变万化的,说不定哪里就能派上用场。
诚然,STM32系列众多,相应技术手册内容丰富而庞大,细节也多,个别细节可能描述未必很详尽,此时我们实际验证下或许更清晰。OK,关于定时器触发ADC的时序话题就聊到这里。时间真快,祝福2021!一起加油!