stm32教程之三重ADC交错采样

ps:本文基于stm32F407ZGT6单片机

        stm32F4单片机单通道采集的最大采样率为2.4M,所以有时会难以满足较高频率的采样,于是查阅芯片手册,发现stm32F4支持多重ADC采集,利用每个通道的转换时间,错位采样,从而提高采样率,最大把采样率开到2.4*3=7.2M.  (去年初学ADC时研究的,基于cube和HAL库的三重ADC交错采样参考资料不多,我也是研究了一段时间,写下这篇博客希望可以帮助到更多人。)

示意图如下:

stm32教程之三重ADC交错采样_第1张图片

以下是官方例子的说明,

In this example, the system clock is 144MHz, APB2 = 72MHz and ADC clock = APB2 /2. 
Since ADCCLK= 36MHz and Conversion rate = 5 cycles 
==> Conversion Time = 36M/5cyc = 7.2Msps

这是利用软件触发ADC连续采样的,我试了一下,是可行的。网上为数不多的参考资料也是按上述连续转换模式下的。

但是我是比较习惯使用定时器触发采样的,因为采样率连续可调,比连续转换灵活一些。

所以我开始尝试定时器触发三重ADC!

配置如下:打开TIM8,挂在APB2上,为144M

stm32教程之三重ADC交错采样_第2张图片

时钟频率配置多少呢?

打开芯片手册:

stm32教程之三重ADC交错采样_第3张图片

 由此可知 触发源只需要触发ADC1 ADC2和3是根据芯片设定好的三重模式固有时间后自动开启采集的

故ADC1只需配置2.4M  144M/60=2.4M

stm32教程之三重ADC交错采样_第4张图片

 ADC如何配置呢?

再看芯片手册!

stm32教程之三重ADC交错采样_第5张图片

 

 DMA mode2  !

ADC1配置如下:

(选通道12是因为它纯净 干扰少)

记得打开DMA !

配置类似单通道ADC+定时器触发!

stm32教程之三重ADC交错采样_第6张图片

ADC2/3 同上 这里就不赘述了!

完成!

生成代码!

 

代码里如何写呢?

再再再次打开芯片手册!!

stm32教程之三重ADC交错采样_第7张图片

原来如此!我感觉我可以!

开启ADC123和TIM8:(注意三重ADC交替模式下,ADC1有固有开启函数)

 stm32教程之三重ADC交错采样_第8张图片

stm32教程之三重ADC交错采样_第9张图片

 编译!烧录!

stm32教程之三重ADC交错采样_第10张图片

去年测试的,疫情在家就不给测试图了QAQ

去年测试时是用信号发生器给了100khz正弦波信号,一个周期采到了72个点左右。

ps:据学长说这种方式不稳定,单片机工作量大时可能会出bug。

 

 

 

你可能感兴趣的:(stm32)