打印
[STM32H7]

ADC(16bit分辨率)+DMA采样三路模拟量,硬件过采样器实现1024...

[复制链接]
718|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一、前言


以往像STM32F103(Cortex-M3)与STM32F407(Cortex-M4)的MCU都没有过采样器的硬件,MCU虽然可以不参与数据搬运(DMA搬运),但是采样滤波算法需要自己用代码实现的。算法很简单,就是积分后再求平均。

STM32H743的过采样器:



使用特权

评论回复
沙发
木木guainv|  楼主 | 2021-9-4 15:36 | 只看该作者
二、CubeMX
2.1、ADC

设置完成后,直接生成代码。



使用特权

评论回复
板凳
木木guainv|  楼主 | 2021-9-4 15:37 | 只看该作者
三、Debug
3.1、Debug(printf) Viewer


使用特权

评论回复
地板
木木guainv|  楼主 | 2021-9-4 15:38 | 只看该作者
3.2、观察全局变量


使用特权

评论回复
5
木木guainv|  楼主 | 2021-9-4 15:39 | 只看该作者
四、细节补充
4.1、采样时间的计算

首先要确认ADC的工作频率,还有ADC3的分频系数。




从上面的信息可以算出ADC3的工作频率是72M / 16 = 4.5MHz。


ADC3单个通道的转换频率 =4.5M / ( 采样时间 + 逐次逼近时间 )

=4.5M /( 810.5 cycles + 8.5 cycles )

=4.5M / 819 cycles

= 5.49kHz

ADC3单个通道的转换的周期T = 1 / 5.49kHz = 0.1821ms = 182.1us


当前一共是3个通道,所以ADC总的转换周期T = 182.1us * 3 = 546.3us,所以ADC3的转换总时间不超过1ms。这个时间指标很重要,它决定了MCU每隔多少时间来取数据才能取到不重复的(有意义的)数据。比如ADC3的转换总时间T = 10ms,如果MCU每隔5ms来获取一次数据的话,其中一半的数据都是重复的(没意义的)数据。



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

4040

帖子

5

粉丝