极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第十七课--使用内部基准源进行ADC采样

[复制链接]
发表于 2013-7-15 19:58:36 | 显示全部楼层
迷你强 发表于 2013-7-15 10:56
额......没有遇到过。。你IDE版本多少。。。

arduino 1.05 ,1.04也试过。一样的提示
回复 支持 反对

使用道具 举报

发表于 2013-7-15 20:22:01 | 显示全部楼层
swdsbt 发表于 2013-7-15 19:58
arduino 1.05 ,1.04也试过。一样的提示

测试了代码在1.0.4下可以正常编译,是不是复制的有问题,要点击代码右上角的复制按钮。
回复 支持 反对

使用道具 举报

发表于 2013-8-2 22:54:21 | 显示全部楼层
mocodo 发表于 2013-7-8 09:40
弱问,既然内部基准更精确,为啥还要默认为5V呢?

了解了,夸张点讲,用5V是就像是卷尺,用内部1.1V时,就像是卡尺. 卷尺可量0~3米,最小的格子只能识别到1CM ,而卡尺只能量0~35CM ,但最小刻度可识别到0.01CM.内部准但量程小.测量房子时用卷尺,测量电子元件时可用卡尺.
回复 支持 反对

使用道具 举报

发表于 2013-8-11 18:33:07 | 显示全部楼层
LM35是每10mV代表1℃,在5V量程下,分辨率接近0.5度,1.1V量程下分辨率接近0.1度。

通过以上分析换算,这次使用USB供电时,基准源误差相对于其他更小一些,USB供电温度更接近真实温度,但是当供电环境不稳定时,内部基准源就发挥作用了~


LZ这段话我有点晕哦。前一句说的明明是1.1V量程的分辨率更精确(0.1<0.5),后一句就说USB供电的误差更小。

我没有MangoII的外接电源,所以就测了USB和内部基准两种供电方式。测量结果如下:
USB供电: 24.41
内部基准:25.46

我检查了家里的双金属片温度计,基本是在26度,明显内部基准源更准确吧。

此外,USB供电时,用万用表测量5V-GND之间的电压,我测到的是4.88V。如果用这个数值代入算式 (4.88/1024.0*100),得到的测量结果是 24.30,比实际温度偏差更大。

我的实验有什么不当之处吗?
回复 支持 反对

使用道具 举报

发表于 2013-8-11 19:49:03 | 显示全部楼层
chaoser 发表于 2013-8-11 18:33
LZ这段话我有点晕哦。前一句说的明明是1.1V量程的分辨率更精确(0.1

如果usb电压是4.88,那么肯定是内部基准源更准确,帖子里的usb电压是5.0X~~~所以当时情况下。。。USB更准一些。。。。其实嘛。。。后来才发现。。把3.3V接进去作为基准源。。其实是所有条件里最准的。。
回复 支持 反对

使用道具 举报

发表于 2014-7-21 04:14:56 | 显示全部楼层
本帖最后由 amatisig 于 2014-7-21 05:16 编辑
后来才发现。。把3.3V接进去作为基准源。。其实是所有条件里最准的。。

USB 5V之所以无法当作参考电压是因为,普遍使用USB供电的Arduino板电源来自电脑的交换式电源本身设计目的并非提供准确电压,所以很少刚好5.0V, 好的±0.2差的±0.7都有。

基於上述理由USB 5V无法作为参考源,所以需要内部参考电压,由於半导体特性的缘故,通常要给稳压管高於工作电压1-2V左右才能提供稳定的输出,设计在IC内部的参考源通常都会设定电压在比TTL 5V±0.25低2V 以上,使稳压管的安全工作范围内,且由於Die封装外壳也具有抗杂讯功能,所以内部参考源会比较准是这原因,楼上各楼层提到的1.1V与2.56V都是典型的例子。

By the way 2.56V是兼顾方便AD计算,1.1V应该是电源在3.3V时也能提供准确的内部稳压源吧。

对了!忘了提醒,在量程很小的电压采样情况下(通常在13bit以上的高解析度AD才需要注意),建议多次取样(3~7次)平均以降低杂讯造成的干扰,且取得的电压也较具有代表性。小弟从事科研相关工作比较注重这个。
回复 支持 反对

使用道具 举报

发表于 2014-7-21 09:24:42 | 显示全部楼层
amatisig 发表于 2014-7-21 04:14
USB 5V之所以无法当作参考电压是因为,普遍使用USB供电的Arduino板电源来自电脑的交换式电源本身设计目的 ...

学习了。。。。
回复 支持 反对

使用道具 举报

发表于 2014-7-22 04:54:25 | 显示全部楼层
弘毅 发表于 2014-7-21 09:24
学习了。。。。



有用過LM317組過電源,稍微知道點而已。
我才真是學習了,才剛接觸MCU與arduino不到一個月,以前只學過點半生不熟的VB,目前都是看您整理的文章在一步一步學。
回复 支持 反对

使用道具 举报

发表于 2014-10-11 09:59:34 | 显示全部楼层
这一节好像看得有点晕啊!!!
回复 支持 反对

使用道具 举报

发表于 2014-11-28 16:53:33 | 显示全部楼层
这里有个疑问,模拟口调用基准电压1.1V,是把电源的实际值改变了么?
这个传感器写的驱动电压是3~5V啊,如果是实际改了的话,那不是驱动不了传感器么?
回复 支持 反对

使用道具 举报

发表于 2014-11-28 17:37:26 | 显示全部楼层
看了这个和前面一个传感器的,好好思考了下,下面是我的理解,各位可以看下我理解的对不对。

1、无论加载多少电压给传感器,温度与传感器输出电压的变化关系都是不变的。以这里的LM35D为例,传感器输出电压一直是10mV/℃。

2、外界电压只是给传感器供电,与传感器输出的电压没有必然联系。如果接的是板子上的5V,那传感器的输入电压就是5V。这个值不会因为函数里的基准电压变化而变化。

3、传感器输出电压是0~1000mV之间。所以如果定义了模拟输入端的基准电压是Vmax的话,那么传感器输出模拟值n的最大值就是nmax=1V/Vmax*1023
由这个公式可以看出,Vmax越小,nmax越大,n随着温度变化的范围越大,传感器越精准。

那么传感器输出V1电压时,对应的模拟值n1=V1/1V*nmax=V1/1V*1V/Vmax*1023=V1/Vmax*1023  
即V1=n1*Vmax/1023    (1)
又温度与电压的关系为10mV/℃,所以此时温度T1=V1/10mV=V1/0.01V  (2)
把(1)代入(2),可以得出T1=n1*Vmax/1023 /0.01V=n1*Vmax/1023*100
即T1=n1*Vmax/1023*100
这个公式就只与Vmax以及n1有关了。
Vmax是Arduino定义的,使用USB供电也好,外接电源也好,基准电源也好,这个值只改变模拟输入端的电压范围。
n1是传感器传给Arduino模拟端接口的值。
回复 支持 反对

使用道具 举报

发表于 2014-12-5 17:33:50 | 显示全部楼层
error: 'A0' was not declared in this scope怎么解决?
回复 支持 反对

使用道具 举报

发表于 2014-12-14 17:37:45 | 显示全部楼层
使用双通道来采集数据有什么讲究的吗,直接写两条语句去读就ok了吗
回复 支持 反对

使用道具 举报

发表于 2015-1-12 20:07:37 | 显示全部楼层
zcbzjx 发表于 2012-9-17 20:07
电压基准实际就是aref端电压,调用analogReference(INTERNAL); 后可以测量下aref电压变为1.1V左右,如果不调 ...

这个回答解决了我纠结很久的疑问,原来AREF口除了软件调节基准电压,还可以外接基准电压!又学到东西了。
回复 支持 反对

使用道具 举报

发表于 2015-1-12 20:10:25 | 显示全部楼层
Empty_bottle 发表于 2014-11-28 16:53
这里有个疑问,模拟口调用基准电压1.1V,是把电源的实际值改变了么?
这个传感器写的驱动电压是3~5V啊,如 ...

我之前也有这个疑问,后来拿万用表量了,不会实际改变5V电压。
倒是AREF口会被变成1.1V
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 05:57 , Processed in 0.052477 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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