专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

基于Proteus的Arduino学习05-片内ADC与电压表

作者:我不是奔跑哥   来源:我不是奔跑哥的blog   点击数:  更新时间:2014年06月08日   【字体:

这次我们利用片内ADC测量电压,做一个串口输出的电压表。

首先了解一下Arduino UNO的ADC情况。
Arduino UNO拥有6路模拟输入:标号A0至A5,每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0到5V,可以通过AREF调整输入上限。AREF:模拟输入信号的参考电压。【文献1】
分辨率是ADC的一个重要指标,一般以位数来说明,比如为N位,就是将参考电压分成2的N次方份,每一份即为可以测量的最小变化量。Arduino UNO的ADC为10位,默认参考电压为5V,则可分辨的最小变化量为0.00488V,约为0.005V。
由上面可知,可测量的最小变量由分辨率和参考电压决定。Arduino的片内ADC均为10位,当我们需要测量更小的最小变量时,可以通过更改AREF管脚的电压来改变参考电压。
硬件方面,和第四节一样,我们在Arduino UNO实验板上添加"POT-HG"电位器,并将其中间端接至A0口,如图1所示。此处需要注意,AREF需要接至+5V。

图1 修改后的Arduino UNO实验板
软件方面,我们打开Arduino IDE自带例程"AnalogReadSerial",如图2所示。

图2 打开例程“AnalogReadSerial”的界面
需要将例程作部分修改,修改后的程序如下所示。
int sensorValue=0;//AD转换后的数字量
float float_sensorValue;//把10位数字量换算成浮点电压量
void setup() {
  Serial.begin(9600);  //定义串口波特率为9600
}
void loop() {
  sensorValue = analogRead(A0);  //读取A0口电压值
   float_sensorValue=(float)sensorValue/1023*5.00;  //换算为浮点电压值
  Serial.println(float_sensorValue,2);  //保留两位小数发送数据
  delay(1000);        // 一秒刷新一次
}
编译好了之后,下面我们进行仿真。调节电位器的阻值,观察串口输出的数据,并与虚拟电压表进行比较。不同阻值下,串口输出的电压值:当电压为0V时,如图3所示,当电压为5V时,如图4所示;当电压为1.45V时,如图5所示;当电压为2.60V时,如图6所示。图3 电压为0V时串口输出电压
图4 电压为5V时串口输出电压

图5 电压为1.45V时串口输出电压

图6 电压为2.60V时串口输出电压
最后,附上视频。
关闭窗口

相关文章