首页

ESP32 ADC教程|如何在ESP32使用ADC ?

在本教程中,我们将学习ESP32中的ADC外设。的模拟数字转换器或简单的ADC od ESP32是非常有用的测量模拟电压从不同的传感器(如lm35温度传感器),电位器(调整LED的亮度)等。通过了解ESP32 ADC外设的特性、引脚、功能和几个演示电路来学习如何使用它。

ESP32-ADC-LED-PWM-Control-Image-1

关于ESP32 ADC外围设备的简要说明

ESP32 SoC由两个逐次逼近寄存器(SAR)型模拟到数字转换器(ADC)组成。ESP32中的ADC1和ADC2两个SAR adc总共有18个信道。ADC1由8个信道组成,ADC2由10个信道组成。

ESP32中的ADC的最大ADC分辨率为12位,是的,ADC的分辨率可以配置为9位、10位、11位和12位。通常,如果不更改,分辨率设置为12位。

因此,默认情况下,ESP32 ADC的输出将是0和4095范围内的值(因为默认分辨率是12位,输出数字值可以有212= 4096个值)。此外,ADC的输入电压限制为3.3V,即ESP32 ADC可以测量0V到3.3V的模拟电压。

ESP32的ADC引脚

不像一些数字外设(PWM,软件SPI和I2C), ADC引脚是固定的,也就是说,你必须使用预定义的具有ADC功能的GPIO引脚,你不能在软件中配置它。然而,有一些限制您必须知道。

即使ESP32有18通道ADC,所有的ADC引脚都不是用户可用的。在8个ADC1通道中,只有6个是可用的(ACD1_CH0和ACD1_CH3到ACD1_CH7),而ADC1_CH1和ADC1_CH2是不可用的(即使针脚没有在ESP32开发板上暴露)。

到了ADC2,这有点复杂。当您使用ESP32的Wi-Fi时,Wi-Fi驱动程序使用ADC2外设。因此,只有在Wi-Fi驱动未启动的情况下,才能使用ADC2。

即使你正在使用ADC2(假设没有使用Wi-Fi),所有的引脚也不是很容易获得的,因为与ADC2相关的一些引脚被用于其他重要的目的(引导捆扎)。

下表显示了ADC通道,Arduino风格的名称(A0, A1等),GPIO引脚和任何重要的点要记住。

ADC通道

销的名字 GPIO管脚

笔记

ACD1_CH0

A0 GPIO 36 免费使用/霍尔传感器引脚
ACD1_CH1 GPIO 37

不可用

ACD1_CH2

GPIO 38 不可用
ACD1_CH3 A3 GPIO 39

免费使用/霍尔传感器引脚

ACD1_CH4

A4 GPIO 32 免费使用
ACD1_CH5 A5 GPIO 33

免费使用

ACD1_CH6

A6 GPIO 34 免费使用
ACD1_CH7 A7 GPIO 35

免费使用

ACD2_CH0

A10 GPIO 4
ACD2_CH1 A11 GPIO 0

用作BOOT Pin /不可用

ACD2_CH2

A12 GPIO 2 用作BOOT绑带针
ACD2_CH3 首次购物 GPIO 15

用作BOOT绑带针

ACD2_CH4

GPIO 13
ACD2_CH5 A15 GPIO 12

ACD2_CH6

GPIO 14
ACD2_CH7 第A17

GPIO 27

ACD2_CH8

那么 GPIO 25
ACD2_CH9 A19 GPIO 26

考虑到上述所有信息,可以肯定6个可用的ADC1引脚(ACD1_CH0和ACD1_CH3到ACD1_CH7)可以毫无歧义地使用。

ADC1_CH0和ADC1_CH3也与霍尔效应传感器相关联。

其他ESP32开发委员会可能有他们自己的限制。因此,一定要检查数据表和原理图,并检查特定的ADC引脚是否可以免费使用。

ADC的功能

ADC驱动程序公开了九个功能。它们是:

  • analogRead(pin):获取指定引脚的ADC值。
  • analogReadResolution(bits):设置analogRead输出分辨率。默认值为12位,可设置为9 ~ 12。
  • analogSetWidth(bits):设置示例位和读取分辨率。默认值是12位,但取值范围是9 ~ 12。
  • analogSetClockDiv(clockDiv):设置ADC时钟的分压器。
  • analogSetAttenuation(attenuation):设置所有信道的衰减。默认值为11db,但可能的值为0db、2_5db、6db和11db。
  • analogSetPinAttenuation(pin, attenuation):设置一个特定引脚的衰减。
  • adcAttachPin(引脚):将引脚附加到ADC(在analogRead中自动完成)。
  • analogSetVRefPin(引脚):设置引脚用于ADC校准,如果ESP32尚未校准。可能的引脚有25、26或27。
  • analogReadMilliVolts(引脚):获取引脚的毫伏值。

模拟电压测量

有了理论,引脚信息和库功能的布局,我们现在可以开始开发实际使用ESP32的ADC外设的电路。对于第一个项目,让我们看看如何配置ESP32的ADC通道,并测量施加到其中一个ADC引脚的模拟电压。ESP32项目初学者

提供可变模拟电压最简单的方法是利用电位器。将POT连接到ESP32开发板的3.3V和GND,将雨刷连接到ADC引脚的任意一端。为了简单起见,我使用ADC1_CH0,也就是GPIO 36 (A0)作为ADC引脚。

组件的要求

  • ESP32 DevKit开发板
  • 10 KΩ电位计
  • 电路试验板
  • 连接电线
  • 5毫米领导
  • 220Ω电阻

线路图

下图是用ESP32的ADC测量模拟电压的电路图。

ESP32-ADC-Measure-Analog-Voltage-Circuit

代码

如果你曾经使用Arduino或ESP8266的ADC,代码是非常直接的。使用' analogRead '函数读取ADC引脚的ADC值(在本例中为A0),使用一个小的计算将数字值转换为电压,并在串行监视器上显示结果。

ESP32-ADC-Measure-Analog-Voltage-Image-1

串行监视器的输出看起来像这样:

ESP32-ADC-Measure-Analog-Voltage-Serial

LED PWM采用ESP32 ADC

我做了一个关于LEDC工作的专门教程在PWM ESP32.阅读该教程以深入了解ESP32中的PWM。利用ADC可以设置ESP32的PWM输出占空比。

ADC引脚与前面的A0 (ADC1_CH0 - GPIO 36)相同,PWM引脚为GPIO 16。我连接了一个5毫米红色LED到这个引脚使用220Ω限流电阻。

线路图

下图是利用ESP32的ADC手动配置PWM占空比从而调节LED亮度的电框图。

ESP32-ADC-LED-PWM-Control-Circuit

代码

ESP32-ADC-LED-PWM-Control-Image-2

结论

关于在ESP32中使用ADC Module的完整教程。您了解了ESP32 ADC外设,它的相关引脚,什么ADC引脚使用是安全的,如何使用ESP32中的ADC测量模拟电压,以及如何使用ESP32中的ADC和PWM手动调整LED的亮度。

一个回应

  1. 非常好的文章,但是对于我自己来说,我想看到更多关于ESP32的高速捕捉能力的信息。在我的例子中,我要求CPU捕获4个同步模拟脉冲,持续时间从10毫秒到50毫秒,4个模拟输入的每一毫秒有20次扫描的分辨率。我在Espressif数据表中看到过注释,声称模拟输入能够实现真正的高速(即DIG控制器的2Msps),但没有详细解释。

留下一个回复

你的电邮地址不会被公布。

Electronicshub图标
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu