极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19795|回复: 10

OCROBOT入门教程013--使用外部基准源

[复制链接]
发表于 2014-4-25 16:10:13 | 显示全部楼层 |阅读模式
本帖最后由 董董soul 于 2016-10-27 11:03 编辑

前面我们学过怎样使用ADC,默认情况下我们会把MANGO的基准电压当成5V,也就是USB供电电压。但实际情况USB供电的电压不会是刚好5V的,不同的电脑,USB线长短不一都会使得实际输入控制板上的电压产生上下浮动。如果在一些精度要求高的场合这种误差就会变得不可接受,在这种情况下我们就可以使用外部基准。因专业级外部基准源都很贵,我们就用板载的3.3V输出来给大家介绍一下外部基准的使用方法。板载的3.3V输出是通过一颗LDO,MANGO的3.3V LDO输出误差为1%之内,用他来作为要求不高场合的基准源绰绰有余。

我们把下面的代码编译下载,然后把控制板上的3.3V接入AREF,然后再用两颗10K电阻做一个2.5V的分压电路来看看与不是用外部基准的差异。

我们把3.3V接入AREF,然后把分压后的2.5V接入A0。




  1. void setup() {
  2.   Serial.begin(9600);
  3.   analogReference(EXTERNAL);
  4. }


  5. void loop() {

  6.   int sensorValue = analogRead(A0);

  7.   Serial.println(sensorValue);
  8.   delay(1);
  9. }
复制代码

打开串口监视器,我们获得ADC数值为779左右。



我们使用的外部基准源为3.3V,那么根据ADC数值,我们算出3.3/1024*780=2.51V,与5V分压电路设计输出的2.5V基本是一致的。

因为MANGO控制板上的3.3V LDO精度为1%,比USB供电精度要高不少,所以需求不高的场合如果需要相对精准的外部基准,可以直接只用MANGO上的3.3V。



analogReference(type)
描述
配置用于模拟输入的基准电压(即输入范围的最大值)。选项有:
DEFAULT:默认5V(Ocrobot控制板为5V)或3.3伏特(Ocrobot控制板为3.3V)为基准电压。
INTERNAL:在ATmega168和ATmega328上以1.1V为基准电压,以及在ATmega8上以2.56V为基准电压(Ocrobot Mega无此选项)
INTERNAL1V1:以1.1V为基准电压(此选项仅针对Ocrobot Mega)
INTERNAL2V56:以2.56V为基准电压(此选项仅针对Ocrobot Mega)
EXTERNAL:以AREF引脚(0至5V)的电压作为基准电压。
参数
type:使用哪种参考类型(DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, 或者 EXTERNAL)。
返回

注意事项
改变基准电压后,之前从analogRead()读取的数据可能不准确。
警告
不要在AREF引脚上使用使用任何小于0V或超过5V的外部电压。如果你使用AREF引脚上的电压作为基准电压,你在调用analogRead()前必须设置参考类型为EXTERNAL。否则,你将会削短有效的基准电压(内部产生)和AREF引脚,这可能会损坏您Ocrobot控制板上的单片机。
另外,您可以在外部基准电压和AREF引脚之间连接一个5K电阻,使你可以在外部和内部基准电压之间切换。请注意,总阻值将会发生改变,因为AREF引脚内部有一个32K电阻。这两个电阻都有分压作用。所以,例如,如果输入2.5V的电压,最终在在AREF引脚上的电压将为2.5 * 32 /(32 + 5)= 2.2V。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-10-10 22:32:47 | 显示全部楼层
一个1K和10K 分压后,1K的电压应该是 0.4545左右 但为什么 ADC输出是428左右呢?? 我搞不明白了。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 21:02:01 | 显示全部楼层
dtiger2014 发表于 2014-10-10 22:32
一个1K和10K 分压后,1K的电压应该是 0.4545左右 但为什么 ADC输出是428左右呢?? 我搞不明白了。。。。。 ...

先用万用表量一下
回复 支持 反对

使用道具 举报

发表于 2014-10-11 23:05:52 | 显示全部楼层
弘毅 发表于 2014-10-11 21:02
先用万用表量一下

设备不全 还没有 但我算了半天 还是没有 算出来 因为 3.3/1024*428=1.379.。。。。。。 这是 为什么呢?
回复 支持 反对

使用道具 举报

发表于 2014-10-11 23:07:00 | 显示全部楼层
dtiger2014 发表于 2014-10-11 23:05
设备不全 还没有  但我算了半天 还是没有 算出来 因为 3.3/1024*428=1.379.。。。。。。 这是 为什 ...

哦 对了 这个测试 内部基准源的时候算出来的 外部基准源是正确地
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-13 21:11:05 | 显示全部楼层
dtiger2014 发表于 2014-10-11 23:07
哦 对了 这个测试 内部基准源的时候算出来的 外部基准源是正确地

内部基准是1.1V~
回复 支持 反对

使用道具 举报

发表于 2014-10-13 23:07:20 | 显示全部楼层
弘毅 发表于 2014-10-13 21:11
内部基准是1.1V~

啊  那样就对了 那就完全对了 哈哈 谢谢 小白 受教了~~
回复 支持 反对

使用道具 举报

发表于 2015-11-18 23:46:28 | 显示全部楼层
我把你的电路图中的两个电阻分别换成10K和1K的 但是A0口读数一直是1023 这是为什么呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-19 12:00:51 | 显示全部楼层
С罗 发表于 2015-11-18 23:46
我把你的电路图中的两个电阻分别换成10K和1K的 但是A0口读数一直是1023 这是为什么呢?

10K和1K在一起,分压后如果你刚好是5/11*10=4.5V,超过了3V3外部基准,那么肯定就是ADC最大数值不动了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-19 12:00:52 | 显示全部楼层
С罗 发表于 2015-11-18 23:46
我把你的电路图中的两个电阻分别换成10K和1K的 但是A0口读数一直是1023 这是为什么呢?

10K和1K在一起,分压后如果你刚好是5/11*10=4.5V,超过了3V3外部基准,那么肯定就是ADC最大数值不动了。
回复 支持 反对

使用道具 举报

发表于 2015-11-19 16:45:03 | 显示全部楼层
弘毅 发表于 2015-11-19 12:00
10K和1K在一起,分压后如果你刚好是5/11*10=4.5V,超过了3V3外部基准,那么肯定就是ADC最大数值不动了。

新手刚起步 受教了
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 11:52 , Processed in 0.040111 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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