本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!
↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录 _ O x
是否进入ESP32教学导航(基于ESP-IDF)?
确定
文章目录
一、简介
ESP32集成了两个 12
位SAR(逐次逼近寄存器)
adc ,共支持18个测量通道。
1、两个 ADC 通道简介:
ADC1:
- 支持 8 个通道,包括:GPIO32 - GPIO39(并非按顺序)
ADC2:
- 支持 10 个通道,包括:GPIO0, GPIO2, GPIO4, GPIO12 - GPIO15, GOIO25 - GPIO27(并非按顺序)
ESP32 内置霍尔传感器,采用 ADC1 的通道0和3(GPIO36 和 GPIO39)。如果想要使用ESP32内置的霍尔传感器,请不要对这两个GPIO做任何配置!
两个 ADC 的 API 包含在driver/adc.h
#include "driver/adc.h"
注意
部分开发板上的某些引脚会有特殊作用,可能部分ADC2的引脚被占用。
例如,在官方的开发板中:
- ESP32 DevKitC 开发板:GPIO 0 被占用,由于板上的自动下载电路。
- ESP-WROVER-KIT 开发板:GPIO 0, 2, 4, 15 被占用,由于多种不同的作用。
另外,ADC2
模块也被Wi-Fi
使用,当它们一起使用时,只有一个会被抢占,这意味着adc2_get_raw()
可能会被阻塞,直到Wi-Fi
停止,反之亦然。换言之,ADC2 不能与 WIFI 共用!
注意:
从一个没有连接到任何信号的引脚读取到的 ADC 值是 随机 的。
ADC 通道表
ADC1_Channel | GPIO(ESP32 与 ESP32-S2一致) |
---|---|
ADC1_CHANNEL_0 | GPIO 36 |
ADC1_CHANNEL_1 | GPIO 37 |
ADC1_CHANNEL_2 | GPIO 38 |
ADC1_CHANNEL_3 | GPIO 39 |
ADC1_CHANNEL_4 | GPIO 32 |
ADC1_CHANNEL_5 | GPIO 33 |
ADC1_CHANNEL_6 | GPIO 34 |
ADC1_CHANNEL_7 | GPIO 35 |
ADC2_Channel | GPIO(ESP32) | GPIO(ESP32-S2) |
---|---|---|
ADC2_CHANNEL_0 | ESP32:GPIO 4 | ESP32-S2:GPIO 11 |
ADC2_CHANNEL_1 | ESP32:GPIO 0 | ESP32-S2:GPIO 12 |
ADC2_CHANNEL_2 | ESP32:GPIO 2 | ESP32-S2:GPIO 13 |
ADC2_CHANNEL_3 | ESP32:GPIO 15 | ESP32-S2:GPIO 14 |
ADC2_CHANNEL_4 | ESP32:GPIO 13 | ESP32-S2:GPIO 15 |
ADC2_CHANNEL_5 | ESP32:GPIO 12 | ESP32-S2:GPIO 16 |
ADC2_CHANNEL_6 | ESP32:GPIO 14 | ESP32-S2:GPIO 17 |
ADC2_CHANNEL_7 | ESP32:GPIO 27 | ESP32-S2:GPIO 18 |
ADC2_CHANNEL_8 | ESP32:GPIO 25 | ESP32-S2:GPIO 19 |
ADC2_CHANNEL_9 | ESP32:GPIO 26 | ESP32-S2:GPIO 20 |
2、ADC 衰减 —— 改变 ADC 的量程和精度
ADC模块 能读取电压的范围(量程)有限,因此我们一般给某个 ADC 通道配置一定的衰减,使其读取更大的电压。但是,更大的量程会导致更小的精度。因此根据 ADC 的应用场景,选择适当的衰减级别十分必要。
ESP32 的每一个通道都有提供了4个级别的衰减等级,不同的衰减等级对于的量程在下表列出:注意,下表中的 “推荐范围” 并不是量程 ,而是在某衰减等级下测量最精确的推荐测量范围
SoC | 衰减级别 (db) |
推荐范围 (mV) |
---|---|---|
ESP32 | 0 0 0 | 100 ∼ 950 100 \sim 950 100∼950 |
ESP32 | 2.5 2.5 2.5 | 100 ∼ 1250 100 \sim 1250 100∼1250 |
ESP32 | 6 6 6 | 150 ∼ 1750 150 \sim 1750 150∼1750 |
ESP32 | 11 11 11 | 150 ∼ 2450 150 \sim 2450 150∼2450 |
3、减小测量误差 & ADC校准:
① 最小化噪声干扰
ESP32 ADC 对噪声很敏感,导致 ADC 读数有很大差异。为了减少噪声,用户可以参考以下两种方法:
- 物理层面 —— 在使用时可以在 ADC 输入口上连接一个0.1µF的电容。
- 在单独测量模式下,多次测量取平均值可以减少部分干扰。
- 多重采样模式也可以用来进一步减轻噪声的影响。
下图是 ADC 直接读取 和 采用以上减小误差方法进行读取的ADC值分布散点图
其中纵轴(ADC Reading)代表不同方式读取到的ADC值,横轴(Sample Number)是采样次数。
图例:
- 白色点(黑圈)—— 直接测量