本帖最后由 筱七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配置代码如下图所示。
小弟在此跪谢了。
|