STM32用定时器控制ADC采集做FFT请教
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32用定时器控制ADC采集做FFT请教相关的知识,希望对你有一定的参考价值。
最近在整FFT,现在想用库做256点的FFT,
可ADC采集这块有点迷茫。。
就是怎么让ADC在一个周期内采集256个点
用定时器定时的这个时间怎么算?
比如我要采集一个最大频率22KHz的信号。。
根据采样定理,ADC的采样频率至少要两倍的信号最大频率,也就是22K*2=44KHz
然后还有个AD的总转换时间=采样时间+12.5个周期。。
然后我就不晓得这些东西怎么联系到一起了。。。
望各位能指点下迷津。。。
我知道啊那个采样周期怎么选啊
追答采样周期对应的就是速度了,
Tcovn=采样时间+12.5个周期
其中:Tcovn为总转换时间,采样时间是根据每个通道的SMP位的设置来决定的。例如,当ADCCLK=14Mhz的时候,并设置1.5个周期的采样时间,则得到:Tcovn=1.5+12.5=14个周期=1us。也就是1MHZ的采样速率
STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx
ADC+TIM+DMA采集交流(二)
前言
本文是《STM32HAL ADC+TIM+DMA采集交流信号》的续篇,这一篇我们将让ADC以1M的速度去采集。过程中会学习到ADC时钟,采样率控制的概念。
所需工具:
- 开发板:STM32F103C8T6
- STM32CubeMX
- IDE: Keil-MDK
相关文章:
- STM32HAL ADC+TIM+DMA采集交流信号
- STM32HAL ADC+TIM+DMA采集交流信号(三)
模式简介
前文介绍了ADC+TIM+DMA采集交流,以100k去采集交流信号,可是这样的配置是没法让ADC工作在1M采样率的。这里面需要更改时钟树,来开发ADC的采样上限。
ADC的时钟与采样率上限
ADC的时钟
这就是ADC的时钟,12M。我们可以更改前面的分频器ADC Prescaler来增大或者减小时钟大小。
STM32F1的ADC时钟上限是14M,如果超过了,就会报错。
转换时间
每一次采样都需要一定的时间。他们符合这个公式:
转
换
时
间
=
采
样
时
间
+
12.5
(
周
期
)
转换时间=采样时间+12.5\\ \\ (周期)
转换时间=采样时间+12.5 (周期)
周期
:
ADC时钟的倒数,比如12M的ADC时钟,那么一个周期为 1 12 M ≈ 0.0833 u s \\frac112M\\approx0.0833us 12M1≈0.0833us
采样时间
:
图上所示就是采样时间,这里选择的是1.5个周期,此时的转换时间是 1.5 + 12.5 = 14 ( 周 期 ) 1.5+12.5=14(周期) 1.5+12.5=14(周期)对应 14 ∗ 1 12 M ≈ 1.166 u s 14*\\frac112M\\approx1.166us 14∗12M1≈1.166us
采样率上限
采 样 率 上 限 = A D C 时 钟 采 样 时 间 + 12.5 采样率上限=\\fracADC时钟采样时间+12.5 采样率上限=采样时间+12.5ADC时钟
比如前一个文章的12MADC时钟,采样时间1.5hz,那么采样率上限为:
12
M
1.5
+
12.5
≈
857
k
\\frac12M1.5+12.5\\approx857k
1.5+12.512M≈857k
如果我们如图把采样时间设置成7.5个周期呢?
那么采样率上限:
12
M
7.5
+
12.5
=
600
k
\\frac12M7.5+12.5=600k
7.5+12.512M=600k
提高采样率上限
相信大家已经注意到了,采样率上限没能达到1M的原因是ADC的时钟只有12M,没有达到上限14M。我们可以通过更改时钟树来让ADC的时钟达到上限14M。
我在后面的处理中,发现F1的ADC的TIM形式触发,正常操作没法开到1M。这一点我在开发F4,H7的过程中没有碰到,可能是我的能力不够理解,也可能是一个BUG。
更改时钟树
更改定时器
触发信号TRGO频率为: 56 M 64 = 875 k \\frac56M64=875k 6456M=875k
特别注意,TIM的时钟在上一步更改系统时钟树的时候,改成了56M。
实际测量发现,900k一下都没有问题。但是900k-1M会碰到触发异常的情况。
采样结果查看
让ADC去采集信号发生器产生的87.5k正弦信号,可以看到一个周期采集到了10个点,到推出采样率就是 87.5 k ∗ 10 = 875 k 87.5k*10=875k 87.5k∗10=875k。和我们设置的采样率相符。
如何开到1M采样率
不建议这样设置,因为900k和1M的采样效果相差不大。ADC连续模式下,采样率不可控,为了开到1M而牺牲采样率的可控不值得。
我将会在《STM32HAL ADC+TIM+DMA采集交流信号(三)》讲另外一种可行的方案。
更改时钟树
ADC配置
其他配置和ADC配置更改为连续采样,触发方式选择软件触发。
采样结果查看
让ADC去采集信号发生器产生的100k正弦信号,可以看到一个周期采集到了10个点,到推出采样率就是 100 k ∗ 10 = 1 M 100k*10=1M 100k∗10=1M。和我们预算一样。
后记
本文章收录于:
本文为系列文章中的冰山一角,欢迎进入小站查看。
配套程序:
STM32的ADC+DMA+TIM采集交流信号.zip-嵌入式文档类资源-CSDN文库
迎进入小站查看。
配套程序:
以上是关于STM32用定时器控制ADC采集做FFT请教的主要内容,如果未能解决你的问题,请参考以下文章
STM32H7教程第45章 STM32H7的ADC应用之定时器触发配合DMA双缓冲