21ic电子技术开发论坛 单片机与嵌入式系统 ST MCU ADC+DMA配置采集波形出现问题求教
发新帖我要提问
返回列表
打印
[STM32F4]

ADC+DMA配置采集波形出现问题求教

[复制链接]
1167|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
筱七121|  楼主 | 2015-12-29 16:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ADC, DMA, AC, hz, kHz
本帖最后由 筱七121 于 2015-12-29 17:14 编辑

群里大大们,你们好:
小弟有几个问题请教大家:
1、DMA_InitStructure.DMA_BufferSize = 12700。DMA应该是一次搬移一个数据,然后BufferSize减一。这个样子来进行搬移数据,我理解的对么?
2、ADC采样率设置成200Khz,采集12700个点,是不是需要12700*5 = 63.5ms的时间。那么如果我对采集数据的处理时间少于63.5ms,为27ms。那这样是不是处理完了AD还没有采集到12700个点。那么这个数据就是一半是上一次采集的,一半是这一次采集的。如下图图1所示。

4、我的初衷是:通过ADC采集波形(主频为128,adc8分频为8Mhz,采样率为200K,采集的波形为加载了信息的40Khz正弦波),DMA搬到一个长度为12700的数组中,对数组中的数做一个频域的处理。ADC采集12700个点需要63.5ms,处理时间为27ms。通过在代码的每次处理的前部加断点,把采集到的波形存储下来,发现波形有时候采集的有问题。问题如下:
     200K采样率采集加载了信息的40Khz,长度为5080个点的正弦波形,200K采样波形点数应该为6350个点。但是两次存储的波形,有一个波形的长度达到了8000个点。我的陋见是由于处理时间为27ms。采样12700个点为63.5ms,会不会是第二次存储的错误的波形的数据,有一半是上次采集的,一半是这一次采集的。所以导致波形的长度达到了8000多个点。我对这两个存储的波形做频域频谱分析采样率设置为FS = 200000;fr = linspace(-FS/2,FS/2,length(boxing));figure,plot(fr,abs(fftshift(fft(boxing)))); 频谱对应的就是40Khz。这就侧证了FS = 200000hz的正确性。请问群里的大大们,上述几个问题,给小弟我指点迷津!!!


5、如上第四点这样的设计,大大们能否给出指点。


ADC+DMA配置代码如下图所示。




小弟在此跪谢了。
沙发
筱七121|  楼主 | 2015-12-29 17:15 | 只看该作者
上面是ADC+DMA的配置代码,大大们觉得代码有问题的话可以回复啊。。。上述的问题有指点的地方希望不吝赐教啊。。。

使用特权

评论回复
板凳
筱七121|  楼主 | 2015-12-30 08:43 | 只看该作者
求群里大大们,关注呀。

使用特权

评论回复
地板
筱七121|  楼主 | 2015-12-30 14:40 | 只看该作者
:'(有人么

使用特权

评论回复
5
beyond696| | 2015-12-30 15:58 | 只看该作者
楼主没用双缓冲?

使用特权

评论回复
6
beyond696| | 2015-12-30 15:59 | 只看该作者
http://www.usbxyz.com/archives/157
我做了套USB数据采集仪,可设置固定频率采样数据,然后传输到PC端

使用特权

评论回复
7
xmshao| | 2015-12-30 16:12 | 只看该作者
你200K采样率怎么出来的
那个ADC转换时间是 采样时间+12  ADC clock

使用特权

评论回复
8
筱七121|  楼主 | 2015-12-30 16:31 | 只看该作者
beyond696 发表于 2015-12-30 15:58
楼主没用双缓冲?

没用,大大有例子可以给个参考么?跪谢

使用特权

评论回复
9
筱七121|  楼主 | 2015-12-30 16:33 | 只看该作者
xmshao 发表于 2015-12-30 16:12
你200K采样率怎么出来的
那个ADC转换时间是 采样时间+12  ADC clock

系统主时钟设置为128Mhz。那么ADC总线时钟为64M。经过8分频为8Mhz。即ADC时钟为8Mhz。采样周期软件配置为28周期,那么采样时间T = (28+12) / 8M = 5us。即采样率为200Khz。我是这样设置的。新手,不对之处还请指出。

使用特权

评论回复
10
筱七121|  楼主 | 2015-12-30 16:35 | 只看该作者
beyond696 发表于 2015-12-30 15:59
http://www.usbxyz.com/archives/157
我做了套USB数据采集仪,可设置固定频率采样数据,然后传输到PC端 ...

看了,好像跟我的主题没啥关系

使用特权

评论回复
11
筱七121|  楼主 | 2015-12-30 16:38 | 只看该作者
还有我想使用GetFlagStatus(DMA2_Stream0,DMA_FLAG_TCIF0);这个函数判断当DMA搬运完成后,再对采集的数据做处理。但是好像也不对。群里大大们谁有关于DMA的详细例程可以发我参考下么?

使用特权

评论回复
12
xmshao| | 2015-12-31 10:56 | 只看该作者
每个系列都有关于ADC/DMA的详细例程的。官网都可以下载的。

使用特权

评论回复
13
FireRiver9| | 2015-12-31 20:52 | 只看该作者
去官网找找看吧

使用特权

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

本版积分规则

8

主题

61

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部