STM32 CubeMX配置ADC+DMA,计算采样率和ADC电压
原创:睿智嵌入式
最近,因为项目需要处理音频信号,对AD采集的音频信号进行FFT运算,记录一下学习过程。
主要内容:
1.ADC和DMA各配置有什么实际意义
2.配置好的ADC如何计算采样率和电压值
cubeMX配置ADC+DMA
这里我用的是STM32F407处理器,与其他的处理器思路大体一致
ADC配置
Mode是ADC工作模式 我们设置为independent mode(独立模式)因为只需要单独ADC使用,如果是多个ADC联合使用才需要更改。
Clock Prescaler是ADC工作频率,这里PCLK2在F407上为84MHZ,再4分频为21MHZ,所以ADC工作频率为21MHZ,一秒有21M个ADC周期,一个ADC周期为1/(21M)=47.619ns。
Resolution 是选择ADC分辨率以及得到一个ADC值的时间=采样时间+转换时间,转换时间一般是固定的例如:F407为12个ADC周期、F103为12.5个ADC周期,采样时间在Rank->Sampling Time里配置,这里我采样时间选择3个ADC周期。
Data Alignment是数据对齐方式,一般配置为右对齐,如果是12位分辨率会存储在uint16_t的[11:0]位,其他位为干扰。
Scan Conversion Mode是多通道模式,顾名思义,这里不需要,为Disabled。
Continuous Conversion Mode是连续捕获模式,一般为Enabled,实际上开不开都可以正常使用,但是开了数据更新速度明显加快。
Discontinuous Conversion Mode是不连续捕获,Disabled。
DMA Continuous Requests是DMA连续请求模式,这个十分主要,例如HAL_ADC_START_DMA(&hadc1,(uint32_t *)buf,200) 这个语句,使用ADC1和DMA,数据放入buf数组内,放200个数据。如果DMA连续请求去能的话,这个语句传完200个数据后自动关闭ADC1和DMA。反之,使能后,语句执行完后会又会连续从头开始传输数据,实际为buf数组中的值一直在更新。
Number Of Conversion是规则组通道数量这里我只要一个通道,如果是多个通道前面的多通道模式要使能。
External Trigger Conversion Source规则组通道采样的触发源,这里我们软件触发,也可以配置为定时器触发。
External Trigger Conversion Edge规则组通道采样的触发源的触发方式,一般有上升沿触发,或下降沿触发,这里我们不需要。
Rank配置规则组通道的采样顺序和各通道的采样时间,这里我们只有一个通道,所以只需要配置采样时间3ADC周期
之后是注入组,实际为我们特定时候需要采样用的,感觉像在中断里面的ADC。到此ADC基本配置完毕。
DMA配置
Add->Select->ADC1配置ADC与DMA建立联系。
Priority->High优先级高。
Mode->Circular DMA工作模式,一般为循环模式,没想到什么情况只需要传一个数据还要DMA的。
increment Address为地址自增,一般外设地址是固定的,但是我们数据存储是在数组内,所以需要存储完后自动移到下一个位子再存
数据。
Use Fifo使用FIFO一个缓冲空间,一般用于匹配速度的。
Data Width数据长度Word为字有4字节32位长度、Half Word为半字有2字节16位、Byte字节8位。注意ADC分辨率我们是12位。
到此ADC和DMA配置完毕。
计算ADC采样率
由于有DMA所以单片机在ADC采样的时候不需要去代码获取,可以尽量保证ADC采样点之间间隔的ADC周期数一样。同时我们代码也要
尽量避免ADC采样时不要有其他工作,数据处理放在采完一轮之后处理。
按上面的配置ADC工作频率21MHZ,一个ADC周期47.619ns
一个AD值时间=采样时间+转换时间=3+12=15ADC周期=0.71us=1.4MHZ
所以一秒钟可以采1.4M个AD值,ADC的采样率为1.4M,对应FFT中的Fs
计算ADC电压值
由于我用的开发板,内部供电3.3V,按上面配置的ADC分辨率为12位,2^12=4096
所以ADC采集的电压值=(ADC的采集值*3.3)/(2^12) V
例如:ADC采集值为2000,则对应电压值为1.611328V
结尾
附上一张按上述配置的ADC采样的图,用excel表拟合的,信号为1Vpp正弦波1V偏置电压
PS:如果有所帮助可以点个赞✧( ु•⌄• )◞
下篇记录FFT运算,如果使用cubeMX推荐大家去看看cubeMX自带的库,一般在
C:\Users\Administrator\STM32Cube\Repository\STM32Cube_FW_F4_V1.24.2\Drivers\CMSIS\docs
然后去看对应需要的库,搜索index.html索引文件,用chrome打开非常流畅。
如果时.chm文件可以转html文件打开,参考chm转换为html超简单的方法
版权声明:本文为CSDN博主「赣医电工人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ANNOLRA/article/details/119206287
暂无评论