使用内部基准源进行ADC采样

ADC全称为Analog To Digital Converter,中文全称为模数转换器。其作用是把模拟量的电压值,转换为数字。
LM35温度传感器,为一个模拟量传感器,给传感器VCC连接ocrobot mango(Arduino兼容板)板上5V,GND连接板子上GND,在Vout引脚会输出电压,从0V开始,每升高10mv电压代表着温度上升1℃,两者成线性关系。

线路连接图的接法,LM35的VCC接5V,GND接GND,VOUT接A0.

使用内部基准源进行ADC采样 

Arduino A0-A5口为ADC引脚,其分辨率为10位,也就是1024级,输出数值为0-1023,默认以输入电压作为基准电压。

对于一些场合,比如使用电池供电,因为在电量消耗过程中电压会不停变化,如果输入电压过高或者不准,就会导致参考基准不准,从而导致数值发生偏差。这时我们就可以采用内部基准源。

以LM35温度传感器为例:
首先我们使用USB线连接Arduino板,用USB供电,下载下面代码。
void setup() {
   Serial.begin(9600); //使用9600速率进行串口通讯
}

void loop() {
  int n = analogRead(A0); //读取A0口的电压值

  double vol = n * (5 / 1024.0*100); //使用双精度浮点数存储温度数据,温度数据由电压值换算得到

  Serial.println(vol); //串口输出温度数据
  delay(2000);  //等待2秒,控制刷新速度
}

代码下载好以后,我们使用串口监视器查看返回来的温度数值,数值显示当前温度。

然后我们使用外接电源从DC口供电,这时USB供电就会被自动切断,换用外置供电稳压后的电源给系统供电。
然后我们重新打开串口监视器,返回的数值显示当前温度。

下面调用内部1.1V基准来试试看从LM35读取的温度数值。把下面代码下载,然后打开串口监视器。
void setup() {
  Serial.begin(9600); //使用9600速率进行串口通讯
  analogReference(INTERNAL); //调用板载1.1V基准源
}

void loop() {

  int n = analogRead(A0);  //读取A0口的电压值

  double vol = n * (1.1 / 1024.0*100); //使用双精度浮点数存储温度数据,温度数据由电压值换算得到

  Serial.println(vol); //串口输出温度数据
  delay(2000); //等待2秒,控制刷新速度
}
在5V量程下,Arduino ADC的采样精度是10位也就是1024级,最小分辨率为5/1024=0.0048828125 V=4.8828125 mV
在1.1V内部基准源量程下,Arduino ADC的采样精度是10位,最小分辨率为1.1/1024=0.00107421875 V=1.07421875 mV
LM35是每10mV代表1℃,在5V量程下,分辨率接近0.5度,1.1V量程下分辨率接近0.1度。

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

链接:https://www.geek-workshop.com/thread-1848-1-1.html

- 本文内容来自网络,如有侵权,请联系本站处理。

2022-05   阅读(687)   评论(0)
 标签: 创客 Arduino

涨知识
UART

UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信。

评论:
相关文章
ESP32 FreeRTOS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。


理解 MSBFIRST(最高有效位)和 LSBFIRST(最低有效位)

在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。


Arduino 和 TB6612FNG 驱动直流电机

TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。


Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。


Arduino Serial 接收数字

在Arduino中,通过串行端口接收数字通常涉及使用Serial.read()、Serial.readString()、Serial.parseInt()等方法。



Arduino 随机数

要生成随机数,可以使用Arduino随机数函数random()。


Arduino 字符串用法汇总

本文收集整理在Arduino环境下字符串的相关用法,供参考。


ESP32在Arduino中的GPIO模式

ESP32在Arduino中的GPIO模式。


ESP32EA-MOC 开发板介绍和Arduino环境配置

ESP32EA-MOC 开发板介绍和Arduino环境配置。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。