“第十九课--Microduino 内部基准源ADC采样/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
目的
 
第4行: 第4行:
 
==目的==
 
==目的==
 
前面讲过LM35采集时每升高10mv电压代表着温度上升1℃,两者成线性关系。因此对电压稳定性要求很高。本实验将通过调用Microduino 内部基准源(3.3V或1.1V电压)结合LM35采集温度。
 
前面讲过LM35采集时每升高10mv电压代表着温度上升1℃,两者成线性关系。因此对电压稳定性要求很高。本实验将通过调用Microduino 内部基准源(3.3V或1.1V电压)结合LM35采集温度。
*'''[[Microduino-Core]]'''
+
*'''[[Microduino-Core/zh]]'''
*'''[[Microduino-FT232R]]'''
+
*'''[[Microduino-USBTTL/zh]]'''
 
*其他硬件设备
 
*其他硬件设备
 
**面包板跳线    一盒   
 
**面包板跳线    一盒   
第12行: 第12行:
 
**LM35D温度传感器  一个
 
**LM35D温度传感器  一个
 
**数字万用表 一个
 
**数字万用表 一个
 +
 
==原理图==
 
==原理图==
 
原理图接法与以往一样LM35的VCC接5V,GND接GND,VOUT接A0.
 
原理图接法与以往一样LM35的VCC接5V,GND接GND,VOUT接A0.

2014年10月29日 (三) 03:33的最新版本

目的

前面讲过LM35采集时每升高10mv电压代表着温度上升1℃,两者成线性关系。因此对电压稳定性要求很高。本实验将通过调用Microduino 内部基准源(3.3V或1.1V电压)结合LM35采集温度。

原理图

原理图接法与以往一样LM35的VCC接5V,GND接GND,VOUT接A0.

第十八课-原理图.jpg

实验一

  • 用Microduino-Ft232RL供电
    • 程序
void setup() {
   Serial.begin(115200);         //使用115200速率进行串口通讯
   pinMode(A0, INPUT); 
}
void loop() {
  int n = analogRead(A0);    //读取A0口的电压值
  double vol = n * (5.0 / 1024.0*100);   //使用双精度浮点数存储温度数据,温度数据由电压值换算得到
  Serial.println(vol);                   //串口输出温度数据
  delay(1000);                       //等待1秒,控制刷新速度
}

串口监视温度数据:

第十八课-USB供电.jpg

实验二

  • 用Microduino 内部基准源1.1V计算温度值
    • 程序
void setup() {
  Serial.begin(115200);         //使用115200速率进行串口通讯
  analogReference(INTERNAL);  //调用板载1.1V基准源
}
void loop() {
  int n = analogRead(A0);    //读取A0口的电压值
  double vol = n * (1.1 / 1024.0*100);    //使用双精度浮点数存储温度数据,温度数据由电压值换算得到
  Serial.println(vol);                   //串口输出温度数据
  delay(1000);                        //等待1秒,控制刷新速度
}

串口监视温度数据:

第十八课-1.1V基准电源.jpg

实验三

  • 用Microduino 内部基准源3.3V计算温度值

注意:使用aref引脚电压作为基准源,需要将3.3V基准源接入Microduino的 aref接口。

第十八课-3.3基准原理图.jpg

基准源3.3V作为外部基准源使用详细参考:http://www.geek-workshop.com/thread-5717-1-1.html

  • 程序
void setup() {
  Serial.begin(115200);         //使用115200速率进行串口通讯 
 analogReference(EXTERNAL);  //使用aref引脚电压作为基准源,需要将3.3V基准源接入Microduino的 aref接口
}
void loop() {
  int n = analogRead(A0);    //读取A0口的电压值
  double vol = n * (3.3 / 1024.0*100);   //使用双精度浮点数存储温度数据,温度数据由电压值换算得到
  Serial.println(vol);                   //串口输出温度数据
  delay(1000);                           //等待1秒,控制刷新速度
}

串口监视温度数据:

第十八课-3.3V基准电源.jpg

分析

本次使用三种不同方法,同一温度传感器得到不同数值。

  • 使用USB供电稍微好一点,供电电压为4.99V,偏离5V电压0.2%。
  • 调用内部1.1V和3.3V基准源,经过批量采样,1.1V内部基准源的平均误差范围在1.22%左右,最高达到2.2%。
  • 在5V量程下,Arduino ADC的采样精度是10位也就是1024级,最小分辨率为5/1024=0.0048828125 V=4.8828125 mV
  • 在3.3V内部基准源量程下,Arduino ADC的采样精度是10位,最小分辨率为3.3/1024=0.00322265625 V=3.22265625 mV
  • 在1.1V内部基准源量程下,Arduino ADC的采样精度是10位,最小分辨率为1.1/1024=0.00107421875 V=1.07421875 mV
  • LM35是每10mV代表1℃,在5V量程下,分辨率接近0.5度;3.3V量程下分辨率接近0.3度;1.1V量程下分辨率接近0.1度。

结果

通过以上分析换算,这次使用USB供电时,基准源误差相对于其他更小一些,USB供电温度更接近真实温度,但是当供电环境不稳定时,内部基准源就发挥作用了。如果进一步要求更高级精度,那么就需要使用精密外部基准源。基准误差越小,ADC的精度也就越高,根据需求环境选用合适的基准源在各种制作中也是很重要的一个环节。

视频