Arduino ESP32 ADC模拟量信号读取

Arduino ESP32 ADC模拟量信号读取


这篇文章展示如何使用Arduino IDE读取与ESP32模拟输入。模拟读数对于读出可变电阻(如电位器或模拟传感器)的值很有用。
在这里插入图片描述

使用ESP32读取模拟输入就像使用analogRead(GPIO)函数一样简单,它接受要读取的GPIO作为参数。

ESP32模拟输入(ADC)

用ESP32读取模拟值意味着你可以测量0 V到3.3 V之间的变化电压等级。然后将测量的电压赋给0到4095之间的一个值,其中0 V对应0,3.3 V对应4095。0 V到3.3 V之间的任何电压都将给出两者之间的相应值。

在这里插入图片描述

ADC是非线性的值

理想情况下,当使用ESP32 ADC引脚时,你会期望线性行为。然而,这并没有发生。你会得到如下图所示的行为:

在这里插入图片描述

这种行为意味着你的ESP32无法区分3.3 V和3.2 V。你会得到相同的电压值:4095。
同样的情况发生在非常低的电压值:对于0 V和0.1 V,你将得到相同的值:0。
在使用ESP32 ADC引脚时,您需要记住这一点。

analogRead()

使用Arduino IDE读取ESP32模拟输入就像使用analogRead()函数一样简单。它接受你想要读取的GPIO作为参数:

analogRead(GPIO);
  • ESP32支持18个不同通道的测量。在DEVKIT V1 DOIT板(30 gpio版本)中只有15个可用。
    在这里插入图片描述

其他相关的功能

  • analogReadResolution(resolution):设置样本位和分辨率。它可以是一个介于9(0 - 511)和12位(0 - 4095)之间的值。默认是12位分辨率。
  • analogSetWidth(width):设置样本位和分辨率。它可以是一个介于9(0 - 511)和12位(0 - 4095)之间的值。默认是12位分辨率。
  • analogSetCycles(cycles):设置每个样本的循环次数。默认是8。取值范围:1 ~ 255。
  • analogSetSamples(samples):设置范围内的样本数量。默认为1个样本。它有增加灵敏度的作用。
  • analogSetClockDiv(attenuation):设置ADC时钟的分压器。默认值为1。取值范围:1 ~ 255。
  • analogSetAttenuation(attenuation):设置所有ADC引脚的输入衰减。默认是ADC_11db。其他取值:

ADC_0db: 集没有衰减。ADC可以测量大约800mv (1V输入= ADC读数1088)。
ADC_2_5db: ADC的输入电压将被衰减,扩展测量范围至约。1100 mV。(1V输入= ADC读数3722)。
ADC_6db: ADC的输入电压将被衰减,扩展测量范围至约。1350 mV。(1V输入= ADC读数3033)。
ADC_11db: ADC的输入电压将被衰减,扩展测量范围至约。2600 mV。(1V输入= ADC读数1575)。

  • analogSetPinAttenuation(pin, attenuation):设置指定引脚的输入衰减。默认是ADC_11db。衰减值与前一个函数相同。
  • adcAttachPin(pin):附加一个引脚到ADC(也清除任何其他模拟模式可能是on)。返回TRUE或FALSE结果。
  • adcStart(pin), adcBusy(pin)resultadcEnd(pin):在附加引脚的总线上启动ADC转换。检查引脚的ADC总线上的转换是否正在运行(返回TRUEFALSE)。获取转换的结果:返回16位整数。

接线图

在这里插入图片描述

在这里插入图片描述

实例代码

// 电位器连接到GPIO 34(模拟ADC1_CH6)
const int potPin = 34;

// 用于存储电位器值的变量
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // 读取电位计值
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}
  • 串口打印读取定位器的数值(得到的最大值是4095,最小值是0。)
    在这里插入图片描述

版权声明:本文为CSDN博主「perseverance52」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42880082/article/details/121055405

perseverance52

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

74HC138译码器的原理和使用

前言 译码器就是将每个输入的二进制代码译成对应的输出高低电平信号,和编码器互为逆过程。 百度百科 74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL&#xf