第6章 示波器设计—双通道ADC驱动
本章节为大家讲解示波器的ADC驱动,采用STM32自带ADC实现。关于STM32F429的ADC,可以说处处有地雷,不小心就踩上了,如果简单的使用,不会发现,复杂使用就很容易踩到了。
6.1 3个ADC的快速交替采样
6.2 双通道ADC采样
6.3 拓展阅读
6.4 总结
6.1 3个ADC的快速交替采样
起初二代示波器是打算像一代示波器那样,准备做成3ADC(ADC1,ADC2和ADC3)快速交替采样,后期才改成双通道。这里将3ADC的各种奇葩问题也给大家做个说明,防止大家踩坑。
3个ADC快速交替采样的两个可选的方案及其存在的问题。
6.1.1 方案一
依然采用一代示波器那种方式,3个ADC都独立配置自己的DMA通道和相应的定时器进行触发。经过详细的测试发现,在最高采样率2.8Msps * 3 = 8.4Msps的情况下,F429的总线矩阵已经处理不过来了,导致的现象就是3个ADC中有两个已经停止工作。
下面的测试都是在我们STM32-V6开发板上面进行的,主频168MHz。
测试方法
直接调试状态看ADC1,2,3的三个大缓冲即可,看数据缓冲的数据是否在变化。
ADC1:
ADC2:
ADC3:
(1)测试一
条件:
开启ADC1,ADC2和ADC3及其配套的DMA,采用定时器触发,未开启emWin(要用到LTDC,DMA2D和FMC外接的SDRAM)。
现象:
这种情况下,3个ADC可以正常工作。
(2)测试二
条件:
开启ADC1,ADC2和ADC3及其配套的DMA,采用定时器触发。仅使用ADC1,开启emWin(要用到LTDC,DMA2D和FMC外接的SDRAM)。
现象:
ADC1在最高采样率2.8Msps的情况下,工作几秒钟,停止工作。
(3)测试三
条件:
开启ADC1,ADC2和ADC3及其配套的DMA,采用定时器触发。仅使用ADC2,开启emWin(要用到LTDC,DMA2D和FMC外接的SDRAM)。
现象:
ADC2在最高采样率2.8Msps的情况下,停止工作。
(4)测试四
条件:
开启ADC1,ADC2和ADC3及其配套的DMA,采用定时器触发。仅使用ADC3,开启emWin(要用到LTDC,DMA2D和FMC外接的SDRAM)。
现象:
ADC3在最高采样率2.8Msps的情况下,正常工作。
(5)测试五
条件:
开启ADC1,ADC2和ADC3及其配套的DMA,采用定时器触发。同时使用ADC3,ADC2和ADC1,开启emWin(要用到LTDC,DMA2D和FMC外接的SDRAM)。
现象:
每个ADC都是在最高采样率2.8Msps,刚开始ADC1还工作,过会ADC1停止工作,ADC2一直没有工作,ADC3一直在工作。
测试现象
