打印
[STM32F4]

stm32f4 ADC DMA 求助

[复制链接]
3943|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
daienming|  楼主 | 2015-3-7 00:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近要用adc ,看了手册,有些地方讲的不太清楚,请教一下
1、如果我要采集22个通道,STM32 是否可行?
我看了手册,如果用满adc1,adc2,adc3应该是可以的,不知道实际情况,我看手册写只有19个,不知道怎么算的?

2、在3个adc同时使用的时候,是否需要启动3个dma流,这三个DMA流是否分别可以中断??

3、3个adc 分别使用的时候,如果速度采集一样,dma的速度也一样,会不会导致溢出??溢出时adc停止,这时是否需要重新启动ADC,这时候,转换的路数是继续的还是重置?
沙发
mark0668| | 2015-3-7 00:43 | 只看该作者
双重/三重 ADC 模式下可配置的 DMA 数据存储(3个ADC同时使用)

不幸的是F4系列的ADC很不稳定跳动非常大,F1比较稳定。

使用特权

评论回复
板凳
airwill| | 2015-3-7 08:25 | 只看该作者
1、如果我要采集22个通道,STM32 是否可行?
根据芯片手册去安排通道

2、在3个adc同时使用的时候,是否需要启动3个dma流,这三个DMA流是否分别可以中断?
由于外设地址不同,只能启动3个dma流。可以分别中断,但不需要,通常耗散最长的那个DMA设置中断就行了

3、3个adc 分别使用的时候,如果速度采集一样,dma的速度也一样,会不会导致溢出??
不清楚说的是什么溢出?DMA有传输优先控制,传输速度很快,应付 ADC 通常不会引起过冲。不过 F0 增加这个过冲错误标志, 但本人实测最快的ADC连续转换一段时间也没有遇到过过冲情况。不过设计中还得留意这个问题。

使用特权

评论回复
地板
mark0668| | 2015-3-7 18:46 | 只看该作者
3个ADC一起使用可以用多重ADC,在多重ADC下只需要一个DMA流就可以了,ADC1做为主ADC其他两个为从ADC,在多重下是有一个通用寄存器
保存ADC值的,DMA只要读这一个寄存器就可以了,(建议你看看数据手册里面的多重ADC模式)

使用特权

评论回复
5
ilikerome| | 2015-3-8 08:18 | 只看该作者
跟着学习一下。。

使用特权

评论回复
6
laosizhender| | 2015-3-8 22:43 | 只看该作者
同意4楼: 3个ADC一起使用可以用多重ADC(比如三重规则同时模式),在多重ADC下只需要一个DMA流(DMA2_Steam0)就可以了,ADC1做为主ADC其他两个为从ADC(如果是外部触发的话,只触发ADC1就行了),在多重下是有一个通用寄存器
保存ADC值的(ADC_CDR),DMA只要读这一个寄存器就可以了,(建议你看看数据手册里面的多重ADC模式)

使用特权

评论回复
7
airwill| | 2015-3-9 08:21 | 只看该作者
嗯, 同意楼上. 为了解决这个问题, 芯片支持了多 ADC 功能. 有个注意:
In regular simultaneous mode, one must convert sequences with the same length or ensure that the interval between triggers is longer than the long conversion time of the 2 sequences (Dual ADC mode) /3 sequences (Triple ADC mode). Otherwise, the ADC with the shortest sequence may restart while the ADC with the longest sequence is completing the previous conversions.

使用特权

评论回复
8
daienming|  楼主 | 2015-3-9 17:04 | 只看该作者
mark0668 发表于 2015-3-7 00:43
双重/三重 ADC 模式下可配置的 DMA 数据存储(3个ADC同时使用)

不幸的是F4系列的ADC很不稳定跳动非常大, ...

我碰到了这个问题,现在尝试卡曼滤波处理

使用特权

评论回复
9
daienming|  楼主 | 2015-3-9 17:07 | 只看该作者
airwill 发表于 2015-3-7 08:25
1、如果我要采集22个通道,STM32 是否可行?
根据芯片手册去安排通道

谢谢回复,
我现在碰到的情况就是经常引发OVR 的错误,导致DMA 停止,DMA的时钟频率是由总线频率控制的吗?是不是也有分频之类的,手册上没有看到相关的说明。

使用特权

评论回复
10
airwill| | 2015-3-9 17:36 | 只看该作者
DMA 直接挂在 AHB 主总线上, 工作在 AHB 的时钟上. 不过系统控制最大只占用一半带宽.
经常引发OVR 的错误, 你可以考虑
1. DMA 采用 32位, 一次可以传输两个转换结果, 降低数据带宽.
2. 启用 DMA 的 FIFO 功能

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝