在本教程中,我们将了解ESP32中的ADC外围设备。这对数字转换器的模拟或简单的ADC OD ESP32对于测量来自不同传感器(例如LM 35温度传感器),电位仪(用于调节LED的亮度)等的模拟电压非常有用。还有几个示范电路。
ESP32 ADC外围的简短说明
ESP32 SOC由两个连续的近似寄存器(SAR)类型数字转换器(ADC)组成。ESP32中的两个SAR ADC(即ADC1和ADC2)一起由18个渠道组成。ADC1由8个通道组成,ADC2由10个渠道组成。
ESP32中的ADC具有12位ADC的最大分辨率,是的,ADC的分辨率可配置,可能的值包括9位,10位,11位和12位。通常,如果不更改,则分辨率设置为12位。
因此,默认情况下,ESP32 ADC的输出将为0和4095的值(因为默认分辨率为12位,输出数字值可以具有212= 4096值)。同样,ADC输入电压极限为3.3V,即ESP32 ADC可以测量0V至3.3V范围内的模拟电压。
ESP32的ADC引脚
与某些数字外围设备(PWM,Software SPI和I2C)不同,ADC引脚是固定的,即,您必须使用具有ADC功能的预定义的GPIO引脚,并且不能在软件中配置它。但是,您必须知道一些局限性。
即使ESP32具有18个频道ADC,所有ADC引脚均可用于用户。在8个ADC1频道中,只有6个可用(ACD1_CH0和ACD1_CH3至ACD1_CH7),而ADC1_CH1和ADC1_CH2则不可用(即使在ESP32开发板中也没有暴露PINS)。
来到ADC2,这有些复杂。当您使用ESP32的Wi-Fi时,Wi-Fi驱动程序使用ADC2外围设备。因此,仅当未启动Wi-Fi驱动程序时,您才能使用ADC2。
即使您使用ADC2(假设不使用Wi-Fi),所有引脚也不容易获得,因为与ADC2相关的某些引脚用于其他重要目的(启动绑带)。
下表显示了ADC频道,Arduino样式名称(A0,A1等),GPIO引脚以及任何要记住的重要点。
ADC频道 |
引脚名称 | GPIO PIN | 笔记 |
ACD1_CH0 |
A0 | GPIO 36 | 免费使用 / Hall Sensor PIN |
ACD1_CH1 | GPIO 37 | 无法使用 |
|
ACD1_CH2 |
GPIO 38 | 无法使用 | |
ACD1_CH3 | A3 | GPIO 39 | 免费使用 / Hall Sensor PIN |
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 | 用作引导别针 /不可用 |
ACD2_CH2 |
A12 | GPIO 2 | 用作靴子绑带销 |
ACD2_CH3 | A13 | GPIO 15 | 用作靴子绑带销 |
ACD2_CH4 |
A14 | GPIO 13 | |
ACD2_CH5 | A15 | GPIO 12 | |
ACD2_CH6 |
A16 | GPIO 14 | |
ACD2_CH7 | A17 | GPIO 27 |
|
ACD2_CH8 |
A18 | GPIO 25 | |
ACD2_CH9 | A19 | GPIO 26 |
通过考虑上述所有信息,可以肯定的是,可以在没有任何歧义的情况下使用6个可用的ADC1引脚(ACD1_CH0和ACD1_CH3到ACD1_CH7)。
ADC1_CH0和ADC1_CH3也与霍尔效应传感器相关联。
其他ESP32开发委员会可能有自己的限制。因此,一定要检查数据表和示意图,并检查特定的ADC PIN是否可以免费使用。
ADC功能
ADC驱动程序暴露了九个功能。他们是:
- Analogread(PIN):获取指定引脚的ADC值。
- Analogreadresolution(位):设置Analogread输出的分辨率。默认值为12位,但可能的值为9至12。
- 模拟宽度(位):设置样品位并读取分辨率。默认值为12位,但范围是9到12。
- AnalogSetClockDiv(ClockDiv):为ADC时钟设置分隔线。
- 模拟设定攻击(衰减):设置所有渠道的衰减。默认值为11DB,但可能的值为0dB,2_5dB,6DB和11DB。
- 类似物拟南芥(引脚,衰减):设置特定销钉的衰减。
- adcattachpin(引脚):将销钉固定在ADC上(在Analogread中自动完成)。
- AnalogSetVrefpin(PIN):如果尚未校准ESP32,则将引脚设置为用于ADC校准。可能的引脚是25、26或27。
- Analogreadmillivolts(引脚):获取PIN的毫伏值。
测量模拟电压
通过理论,PIN信息和库功能,我们现在可以开始开发电路以实际使用ESP32的ADC外围。对于第一个项目,让我们看看如何配置ESP32的ADC通道并测量应用于ADC引脚之一的模拟电压。ESP32初学者的项目这是给予的
提供可变模拟电压的最简单方法是借助电位计。将锅的末端连接到ESP32开发板的3.3V和GND,然后将雨刮器连接到任何ADC引脚。为了使事情变得简单,我使用了ADC1_CH0,即GPIO 36(A0)作为ADC PIN。
需要组件
- ESP32 Devkit开发委员会
- 10kΩ电位器
- 面包板
- 连接电线
- 5mm LED
- 220Ω电阻
电路原理图
下图显示了使用ESP32的ADC测量模拟电压的电路图。
代码
如果您曾经与Arduino或ESP8266的ADC合作,则该代码非常简单。使用“ Analogread”函数读取ADC PIN(A0)的ADC值,使用小计算将数字值转换为电压,并在串行显示器上显示结果。
串行监视器的输出看起来像这样:
使用ESP32 ADC LED PWM
我在LEDC的工作上撰写了专门的教程ESP32中的PWM。阅读该教程,以深入了解ESP32中的PWM。我们可以使用ADC设置ESP32的PWM输出的占空比。
ADC引脚与早期的A0(ADC1_CH0 - GPIO 36)相同,并且PWM引脚是GPIO16。我使用220Ω电流限制电阻连接了5mm的红色。
电路原理图
下图显示了使用ESP32的ADC手动配置PWM的占空比的电路图,从而调整了LED的亮度。
代码
结论
关于在ESP32中使用ADC模块的完整教程。您了解了ESP32 ADC外围设备,其相关引脚,ADC的安全使用,如何使用ESP32中的ADC测量模拟电压,以及如何在ESP32中使用ADC和PWM手动调整LED的亮度。
一个回应
非常好的文章,但是对我自己来说,我希望看到更多有关ESP32高速捕获能力的信息。就我而言,我要求CPU捕获4个同时的模拟脉冲,该脉冲的持续时间为10至50毫秒,在4个模拟输入中的每一个中,每毫秒均分辨率为20扫描。我已经在意式意式数据表中看到了笔记,声称模拟输入能够具有非常高的速度(即挖掘控制器的2MSP),但无处可详细解释。