硬汉嵌入式论坛

 找回密码
 立即注册
查看: 566|回复: 6
收起左侧

[技术讨论] ADC单通道采集是否开启DMA的疑问!求解答

[复制链接]

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2023-5-24 17:47:37 | 显示全部楼层 |阅读模式
本帖最后由 Conice 于 2023-5-24 18:03 编辑

应用场景:按照传统的FFT算法,对于某一时刻,用FFT计算出其所有频谱,如果要计算下一时刻的频谱,则再进行一次FFT运算,这两次FFT运算是孤立进行的,它们之间没有任何关系。而实际上,对于连续的两个时刻,我们会发现,其窗口中的样本有着很大的相似性,后一个时刻的样本只是将前一个时刻的样本的第一个输入舍弃,而在最后添加一个新的样本。


实现上述的实时SDFT,需要ADC每次采集一个点计算一次频谱,采用定时器触发,在HAL_ADC_ConvCpltCallback中进行SDFT计算。那么我想问是否需要开启DMA?我进行了多种配置方案,定时器频率设为240kHz,以采集24kHz正弦波为例进行验证,采集的波形放入sdft_inputbuf[60]中


1.如果开启DMA,并采用normal模式,转换一次需要再开启一次DMA,设置一个转换完成标志位,sdft_inputbuf[60]中的波形是正弦波,而且每个周期就是包括10个采样点。这种配置应该不适合上述SDFT的配置方案,因为采集的波形不连续,如下图所示。这种配置感觉适合传统的FFT,比如一次性采集1024个点,计算一次FFT,再采集1024个点再计算。
1.png

2.如果开启DMA,并采用circular模式,可以连续转换,开启一次HAL_ADC_Start_DMA就可以,这种配置能连续采样,但是每个周期内采集的点数不是10个是包含11个点或12个点之类。这种配置方式下如果改成sdft_inputbuf[1],能实现上述的SDFT的方案吗?这个很有疑问。


3.如果不开启DMA,配置为:单通道+定时器触发,开启ADC1全局中断,在HAL_ADC_ConvCpltCallback实现SDFT可以吗?


实现每采集一个点计算一次频谱,实现实时的SDFT功能。上述三种ADC的配置方式,采用哪一种一直拿不准?DMA是不是不适合这种每次只采集一个点的应用场景,只适合大量数据采集的情况?请大佬指点。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106578
QQ
发表于 2023-5-25 07:30:06 | 显示全部楼层
这有个关键的点,你是否需要每采集一个点就需要立即实时输出,或者比如采集10个点计算一次,我们缓冲60个点后,一次性结算50次,满足需求不。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2023-5-25 07:43:31 | 显示全部楼层
eric2013 发表于 2023-5-25 07:30
这有个关键的点,你是否需要每采集一个点就需要立即实时输出,或者比如采集10个点计算一次,我们缓冲60个点 ...

主要应用于通信的解调,需要每采集一个点就需要立即计算频谱,比如定时器触发频率为240kHz,相当于4.2us,要在4.2us内把这个频谱计算出来,在中断回调函数中完成计算。
像您说的采集10个点计算一次,可能对于我这个场景存在较大的延时,不满足要求。所以请教一下这种场景,需要开启DMA吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106578
QQ
发表于 2023-5-26 10:17:28 | 显示全部楼层
Conice 发表于 2023-5-25 07:43
主要应用于通信的解调,需要每采集一个点就需要立即计算频谱,比如定时器触发频率为240kHz,相当于4.2us ...

这种的话,开DMA意义不大了,发挥不了DMA的优势

这个可以滞后一半的DMA缓冲实时输出不,这样的话也行。就像我们打电话一样,收听的人肯定是滞后于打电话说话的人。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2023-5-26 18:59:31 | 显示全部楼层
eric2013 发表于 2023-5-26 10:17
这种的话,开DMA意义不大了,发挥不了DMA的优势

这个可以滞后一半的DMA缓冲实时输出不,这样的话也行 ...

滞后没关系,只要能解调出信号就好。就像您说的,通信肯定有延时。滞后一半的DMA缓冲实时输出是什么意思呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106578
QQ
发表于 2023-5-27 09:12:43 | 显示全部楼层
Conice 发表于 2023-5-26 18:59
滞后没关系,只要能解调出信号就好。就像您说的,通信肯定有延时。滞后一半的DMA缓冲实时输出是什么意思 ...

做个DMA双缓冲,比如你做200个点的DMA缓,100个点为1个缓冲。其中一个缓冲连续采集的时候,另一个缓冲计数。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2023-5-27 11:27:22 | 显示全部楼层
eric2013 发表于 2023-5-27 09:12
做个DMA双缓冲,比如你做200个点的DMA缓,100个点为1个缓冲。其中一个缓冲连续采集的时候,另一个缓冲计 ...

好的,我试一试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-25 12:18 , Processed in 0.179123 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表