OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 20926|回复: 18

如何设置stm32片内adc实现接近1M的采样率?

[复制链接]

3

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2012-2-2
在线时间
0 小时
发表于 2012-5-16 13:29:58 | 显示全部楼层 |阅读模式
我使用库,单通道采样,输入200khz的方波,用软件监控,看到高电平的点有三个,低电平的点有三个。频率升高,采样到的高低电平的点的个数就越来越少,到400khz的时候,采样到的全部是高电平的点。看到有大牛也是使用库,他说能做到1M,不知道他是否测过这么高的频率。系统主频是56M,adc采样频率是14M,采样时间是1.5个周期,按手册上的说法,14M/(12.5+1.5)=1M,如何接近这个数量级?{:cry:}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-16 13:41:44 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2012-2-2
在线时间
0 小时
 楼主| 发表于 2012-5-16 23:15:33 | 显示全部楼层
我用的就是adc+DMA方式,AN2834上面说要考虑输入电阻,搞不了。
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2012-5-17 00:05:38 | 显示全部楼层
你的软件监控是怎么样呢,有没有考虑卷积失真呢.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

3

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2012-2-2
在线时间
0 小时
 楼主| 发表于 2012-5-17 19:12:05 | 显示全部楼层
我用的是MDK的软件的寄存器窗口查看的,stm32片内的adc有卷积失真吗。我现在用adc转换完成的中断信号,让某一个io口翻转,这样可以计算adc的采样频率吗?2 × 12-bit, 1 μs A/D converters,输入信号能到1M吗
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2012-5-18 07:49:02 | 显示全部楼层
debug是看不到1M的速度的...
用引脚翻转可以测试AD速率,但要没有其他同级或者高优先级的中断影响.
输入信号1MHz,只能在双ADC交替触发采样才能达到理论采样率2MSps.至于采回来的信号怎么处理就根据实际需要了.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
发表于 2013-1-23 21:49:13 | 显示全部楼层
回复【楼主位】lkl10800139:
---------------------------------
哥们  同求啊  你现在知道怎么解决问题了嘛  还望告知啊
回复 支持 反对

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
发表于 2013-1-23 21:53:29 | 显示全部楼层
回复【6楼】shihantu:
---------------------------------
高手 请教一下,采样点数是怎么样的呢?
我的实际问题是  我的信号周期是10ms左右,而且必须至少采样4000个点,这个怎样设置采样点和ADC的采样周期怎么选择?当然,我想让AD的速度越快越好。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-24 00:08:26 | 显示全部楼层
也就是400K的采样咯.
通过控制采样周期,和ADC频率,可以实现采样时间的控制.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
发表于 2014-11-12 16:22:18 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
请问原子大哥,在所有情况都相同的情况下,两通道ADC采集(扫描+连续模式),和单通道ADC采集(无扫描+连续模式),它两相比是不是两通道的采样率不够单通道的采样率?理论上是不是两倍的差距。
若是如此,是不是要使用双重ADC模式才能在避免采样率下降的情况下,实现多通道采集?
感谢原子哥的指点,叩谢了!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-12 22:25:34 | 显示全部楼层
回复【10楼】Mars_man:
---------------------------------
是的,一个ADC一个时刻只能采集一个通道的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
发表于 2014-11-12 22:41:03 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
感谢原子哥的指点,现在我知道下一步应该怎么设计程序了。
还有一个问题是,DMA使用双缓存时,如何判断一个缓存已经存满?小弟是新手,这几天一直在看相关的文件,在此感谢原子哥!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-12 23:21:36 | 显示全部楼层
回复【12楼】Mars_man:
---------------------------------
有标志位,去看DMA寄存器介绍吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
发表于 2014-11-13 14:35:44 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
我在这个网站里找到了一些相关资料,想请教原子哥的是:
我使用了DMA双缓存,使用了DMA中断,当DMA完成一个缓存的数据转移时,产生中断,此时我在中断服务函数里用DMA_GetCurrentMemoryTarget(DMA2_Stream0)来判断当前正在进行存储的是哪一个缓存,如果是第二个缓存正在缓存,那就打印了第一个缓存中的数据,
反之打印第二个缓存的数据。但是打印出来的数组并不是打印了第一个缓存再打印第二个缓存,再打印第一个缓存,依次下去。而是杂乱的打印,比如:1>2>2>2
>2>1>1>2>1>1>1.......
我的问题是:1.DMA在完成一个缓存进入中断服务函数时,DMA还在为另一个缓存存入数据吗?还就执行中断服务程序里的内容?
                  2.如果DMA还在为另一个缓存存数据的话,那么是不是因为DMA存入数据的数据比打印数据的要快,所以才会这样没有1>2>1>2>1>2的打印
请问原子哥是如何操作,双缓存数据的?是用中断吗?还是有其他的好办法。我的问题可能比较杂,感谢原子哥!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-13 18:34:33 | 显示全部楼层
回复【14楼】Mars_man:
---------------------------------
 着看你自己设置了。
我们的F4开发板有双缓冲例子,学习下吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
发表于 2014-11-13 22:08:04 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
对不起原子哥,我还是想确认一下,到底.DMA双缓存时,DMA在完成一个缓存进入中断服务函数后,DMA还在此时为另一个缓存存入数据吗?还就只执行中断服务程序里的内容? 
麻烦原子哥了,万分感谢!!
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
发表于 2014-11-13 22:36:07 | 显示全部楼层
回复【16楼】Mars_man:
---------------------------------
补充一点,DMA是在循环模式下工作
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-13 23:10:29 | 显示全部楼层
回复【16楼】Mars_man:
---------------------------------
当然是同时的了,要不然要双缓冲干嘛?
DMA处理和CPU处理无关。
DMA和CPU可以并行处理,这就是DMA的好处。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2014-11-3
在线时间
0 小时
发表于 2014-11-13 23:12:36 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
感谢原子哥!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 04:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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