OpenEdv-开源电子网

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

怎样用stm32实现14位精度的AD采样?

[复制链接]

19

主题

90

帖子

1

精华

高级会员

Rank: 4

积分
543
金钱
543
注册时间
2012-5-13
在线时间
40 小时
发表于 2012-6-3 09:25:24 | 显示全部楼层 |阅读模式
   原子哥听说用过采样法可以提高iAD采样精度...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2012-1-10
在线时间
238 小时
发表于 2012-6-4 11:17:27 | 显示全部楼层
 可采用过采样技术。
    过采样技术是一种以牺牲采样速度来提高ADC分辨率的技术。如果STM32的12位AD,每秒采集10个数据,即采样率为:10/秒。根据过采样技术,每提高1位ADC分辨率,需要增加4倍的采样率。从12位AD提高到14位AD,一共提高了2位,所以需要把采样率提高2 * 2 * 2 * 2 = 16倍。原来在100mS之内只采集一个数据,现在需要在100mS之内采集16个数据了。然后,我们把这16个数据累加,再把累加值右移2位,这样就得到STM32过采样之后的14位ADC。
    需要注意的是,过采样技术会限制输入信号的频率。根据采样定律,采样率最少是输入信号的2倍才能将信号还原。当需要提高n位的ADC分辨率时,采样率又得提高4*n倍。STM32的12位ADC的最高采样率为1MHz,如果要达到14位的ADC分辨率,那么输入信号的频率就不能超过:1M/2/15 = 31.25KHz。
    最后提醒:分辨率的提升到14位并不是精度也能提升14位。我自己试过提升到16位的分辨率,但是精度大概只有13、14位的样子。

an018 用过采样和求均值提高ADC分辨率.pdf

2.4 MB, 下载次数: 12153

Improving STM32F101xx and STM32F103xx.pdf

194.79 KB, 下载次数: 4513

回复 支持 2 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-3 09:43:39 | 显示全部楼层
听说过,但是没有试过。你可以研究下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2012-3-6
在线时间
5 小时
发表于 2012-6-3 13:27:56 | 显示全部楼层
有方法的。有种算法貌似。可以实现
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-6-4 12:37:00 | 显示全部楼层
回复【4楼】magicoctoy:
--------------------------------哥们求指点啊!!这个提高AD转换的精度。
回复 支持 反对

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2012-1-10
在线时间
238 小时
发表于 2012-6-4 14:02:33 | 显示全部楼层
回复【6楼】艾科:
---------------------------------
STM32的精度不可能提高的太多,要提高只能在分辨率上想办法,提高分辨率间接提高精度,但是这是由一个度的,跟你的要采样的外部信号的频率、CPU的处理速度等等都是有关系的。
过采样只能提高分辨率,精度不是随便可以提高的。要不然0832不就能替代所有的AD芯片了。
精度通常是指准确度。指测量值与实际值的差异性。影响精度的因素很多。如分辨力,线性度等。
分辨率可以通过分辨力来理解。8bit的分辨力为1/256,10bit时为1/1024,但实际还要通过量程转换成具体的值,不能没有量纲或单位(量纲与单位是不同的概念)。
分辨率通常用百分比来表示,而分辨力则用绝对值来表示。“5/256 =0.01953125V”指的是分辨力而不是分辨率。而这样的分辨能力仅仅是指理论能力而不是实际能力。因为实际能力还要包括非线性因素引起“干扰”。
总结:分辨率容易提升到24位,但是精度能到24位的要求就很高了。市面上的16、24位AD转换芯片一般指的是分辨率,而不是精度。
STM32的adc如果要使用在精度要求高的地方,如3级电子称、精准计量仪表的话,stm32就比较勉强了。建议换外置的ADC。 
回复 支持 反对

使用道具 举报

10

主题

64

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3105
金钱
3105
注册时间
2012-3-12
在线时间
261 小时
发表于 2012-6-6 08:27:01 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2011-10-25
在线时间
0 小时
发表于 2012-6-6 19:13:42 | 显示全部楼层
果断来顶
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-6-12 09:24:21 | 显示全部楼层
回复【7楼】magicoctoy:
---------------------------------
感谢哥们的指点!但是还是有不知道怎样能用过采样法可以提高iAD采样精度??
回复 支持 反对

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2012-1-10
在线时间
238 小时
发表于 2012-6-12 10:39:52 | 显示全部楼层
回复【10楼】艾科:
---------------------------------
楼主思路最重要,以下的思路使用于任何单片机:
比如 设个定时器每个10us触发下STM32的ADC的采用,采到256个后将256个数据累加求和,如果当12位ADC用就除以256,13位用除以128,14位用除以64,15位用除以32,16位用除以16。得到结果后存放缓冲区中,再增加一段软件滤波程序就OK了!
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-6-12 11:21:45 | 显示全部楼层
回复【11楼】magicoctoy:
---------------------------------
明白了,但是这样精度能提高吗??
回复 支持 反对

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2012-1-10
在线时间
238 小时
发表于 2012-6-12 12:54:19 | 显示全部楼层
回复【12楼】艾科:
---------------------------------
楼主还是先百度下什么叫ADC的精度吧!
回复 支持 反对

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2012-1-10
在线时间
238 小时
发表于 2012-6-12 16:05:43 | 显示全部楼层

继续上传资料

ADC精度的提高.doc

188 KB, 下载次数: 3714

过采样技术提升ADC采样精度.doc

31 KB, 下载次数: 2823

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-6-12 16:43:06 | 显示全部楼层
顶!
回复 支持 反对

使用道具 举报

21

主题

135

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
金钱
238
注册时间
2011-4-12
在线时间
0 小时
发表于 2012-6-12 18:27:51 | 显示全部楼层
顶。先存下了。
自信人生一百年
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2012-6-15 16:13:27 | 显示全部楼层
我用的是 64脚的STM32 没有VREF的

VDDA 和VDD 分别供电, 地层也是单独设置的 

可是 AD 效果 仍然不是很好,  单次采样 精度在 9~10 bit

实际采用的方式是 用DMA 采集50次, 去掉 最高及最低的 各5次 然后算平均值
这样才比较理想
回复 支持 反对

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2012-1-10
在线时间
238 小时
发表于 2012-6-16 10:47:18 | 显示全部楼层
回复【17楼】aleda303:
---------------------------------
采样次数不够,采集256/100mS次后,直接取平均精度还能再提高。本人测试144脚+外部MC1403基准+VDDA独立供电=精度12bit。
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-6-16 13:30:27 | 显示全部楼层
回复【18楼】magicoctoy:
---------------------------------
你调出来了?
回复 支持 反对

使用道具 举报

28

主题

306

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
1320
金钱
1320
注册时间
2012-6-3
在线时间
353 小时
发表于 2012-6-17 15:44:13 | 显示全部楼层
回复【11楼】magicoctoy:
---------------------------------
实际电压值=(采样值*3300/4095);用你所说的过采样,只是改变了采样值,而4095也会跟着改变,最初算出的实际电压值,没什么区别吧?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2012-5-24
在线时间
3 小时
发表于 2012-11-1 22:18:07 | 显示全部楼层
给VDDA独立供电的话,地怎么处理
VREF+和VREF-又怎么处理?
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2012-12-20
在线时间
0 小时
发表于 2013-9-13 15:28:52 | 显示全部楼层
DING!!
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
发表于 2014-4-21 12:57:29 | 显示全部楼层
回复【17楼】aleda303:
---------------------------------
我是采用DMA同时采集三路模拟信号,打算每路采集200个信号再滤波处理,
所以DMA配置为
DMA_InitStructure.DMA_BufferSize = 3*200;
然后设定好通道的优先级,那么DMA得到的信号到底是1、2、3;1、2、3;1、2、3.....(200组)
还是1、1、1、1、1、1.......2、2、2、2、2........3、3、3、3、3......这样的传输?
求解,谢谢!
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-4-21 13:11:49 | 显示全部楼层
回复【23楼】308709362:
---------------------------------
1、2、3;1、2、3;1、2、3.....(200组)
回复 支持 反对

使用道具 举报

14

主题

168

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
497
金钱
497
注册时间
2013-4-1
在线时间
25 小时
发表于 2014-4-21 13:43:00 | 显示全部楼层
回复【24楼】aleda303:
---------------------------------
谢谢,找了好久没有找到相关资料!

这样写程序就确定了!
回复 支持 反对

使用道具 举报

22

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2012-11-11
在线时间
24 小时
发表于 2014-4-21 15:09:36 | 显示全部楼层
我在51上早就试过了,只能提高分辨率,精度提高有限,数据的波动会增加。真正提高AD精度只能换更好的AD,提高电源稳定度,电源非常重要。既然要求这么高,器件的温漂时漂要求高,价格就飞上去了。不然就浪费了AD,或是高精度没意义了。
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-12-16
在线时间
0 小时
发表于 2015-1-26 10:40:49 | 显示全部楼层
受益匪浅 受益匪浅
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-4-19
在线时间
0 小时
发表于 2015-4-19 22:22:50 | 显示全部楼层
很好,!!!!!!学习了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-7-21
在线时间
39 小时
发表于 2017-1-6 15:53:58 | 显示全部楼层
学校里,知道了很多东西
回复 支持 反对

使用道具 举报

0

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-11-25
在线时间
28 小时
发表于 2017-1-6 21:00:28 | 显示全部楼层
学习了、、
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-1-7
在线时间
4 小时
发表于 2017-1-7 13:18:53 | 显示全部楼层
本帖最后由 落尘安思 于 2017-1-7 13:20 编辑

学习了!
回复 支持 反对

使用道具 举报

14

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2016-5-16
在线时间
67 小时
发表于 2017-1-18 13:14:58 | 显示全部楼层
mark下
回复 支持 反对

使用道具 举报

1

主题

21

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-6-29
在线时间
11 小时
发表于 2017-7-17 15:51:21 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 04:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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