第十九课--Microduino 内部基准源ADC采样/zh
目的前面讲过LM35采集时每升高10mv电压代表着温度上升1℃,两者成线性关系。因此对电压稳定性要求很高。本实验将通过调用Microduino 内部基准源(3.3V或1.1V电压)结合LM35采集温度。
原理图原理图接法与以往一样LM35的VCC接5V,GND接GND,VOUT接A0. 实验一
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秒,控制刷新速度
}
串口监视温度数据: 实验二
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秒,控制刷新速度
}
串口监视温度数据: 实验三
注意:使用aref引脚电压作为基准源,需要将3.3V基准源接入Microduino的 aref接口。 基准源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秒,控制刷新速度
}
串口监视温度数据: 分析本次使用三种不同方法,同一温度传感器得到不同数值。
结果通过以上分析换算,这次使用USB供电时,基准源误差相对于其他更小一些,USB供电温度更接近真实温度,但是当供电环境不稳定时,内部基准源就发挥作用了。如果进一步要求更高级精度,那么就需要使用精密外部基准源。基准误差越小,ADC的精度也就越高,根据需求环境选用合适的基准源在各种制作中也是很重要的一个环节。 视频 |