Arduino UNO R3上的AREF和IOREF管脚

简介

最近在玩耍arduino uno的时候注意到板子有一两个名字很奇怪的管脚,分别是AREFIOREF,问了几个创客群里的大佬都hin少使用,本着打破砂锅问到底的精神,search and do notes

AREF

在mega328中,有六个模拟输入引脚,这些模拟输入引脚简单的说测量的是输入的电压值然后用 0~ 1024来表示电压的大小,当然,这个值有一个范围,通常来说是0~5V,查阅UNO的规格书可以知道UNO是具有10位的ADC。

10位ADC以为着什么呢?以为着它能将0 ~ 5 V的电压分成1024份(2^10),算出来即为4.882mV的测量精度,举个例子就是0V的时候测量结果为0,5V为1024,3V约为615,但是有一种情况就是你输入的电压最大是3.3V,测量出来的最大值也就是675,这个时候你或许会想到map,确实这不失为一个好办法。

但是AREF提供了另一个更好的解决办法,即在AREF接入一个最大模拟输入量作为参考值(比如上面所说的3V3),这样不仅能直接读到1024,更为重要的是精度提高,用3V3作为AREF的时候精度是多少?? 3.3/1024 ==3.223mV,测量精度提高了有木有啊,Nibility。

ps:使用AREF的时候需要在setup里面进行对应设置,而且电压需要在0 ~ 5V 之间,在使用外部电压作为参考时,必须先设置analogReference(type)之后才能使用analogread,否则你的板子就会有一股香味

最后理解了就好办,ARFEF大概就是Analog Reference的缩写

IOREF

IOREF的我没有查到对应的资料,但是从AREF的结果来推理引申,极有可能是IO Reference
最近我遇到了一个比较棘手的问题,UNO的IO逻辑电平是5V,但是我经常使用的wifi模组8266的IO逻辑电平是3v3,两者之间电压等级不相同就会好像两个不同语言在说之间的语言然后以为对方能懂你一样。
这里通过两个例子说明:

5VIO脉冲

void setup() {
    
    
  pinMode(7, OUTPUT);
}

void loop() {
    
    
  digitalWrite(7, HIGH);   
  delay(50);                       
  digitalWrite(7, LOW);    
  delay(50);                       
}

这里板子上就接了跟示波器探头到7,可以看到数字量的电平为5V
在这里插入图片描述
在这里我把板子上的IOREF和3.3V连接在了一起,可以看到,IO逻辑电平未发生变化。
在这里插入图片描述
然后我在Bing上搜索了不少关键词,就是没有说IOREF设置的。。。arduino官网上也没有,于是我找到了Uno的原理图如下,可以看到
AREF管脚确实有做网络标签连接,但是但是这个IOREF却直接和5V连在了一起!!!!也就是说这个IOREF被整死在5V了。。。
在这里插入图片描述

References

  • https://forum.arduino.cc/index.php?topic=303541.0
  • https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/
  • https://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
  • https://www.instructables.com/id/The-Arduino-AREF-Pin/
  • https://arduino.stackexchange.com/questions/132/what-are-the-aref-ioref-and-the-unlabeled-pin-next-to-ioref-on-the-uno-r3
  • https://forum.arduino.cc/index.php?topic=472829.0
  • https://arduino.stackovernet.com/cn/q/2188
  • https://store.arduino.cc/usa/arduino-uno-rev3
  • https://content.arduino.cc/assets/UNO-TH_Rev3e_sch.pdf

猜你喜欢

转载自blog.csdn.net/weixin_43031092/article/details/108202623
UNO