ADC 操作及传感器驱动
ADC 操作
示例驱动器件:TEMT6000,MQ2
ADC 即,模数转换器,将模拟量用数字量的形式进行读取,有属性:参考电压,位数,参考电压即满量程数字量所代表电压值,位数决定了满量程的数字量范围。
实际电压值和读取电压数字量的关系如下:
其中,VREF 代表参考电压,DATA 代表读取的数字量,N 代表 ADC 的位数。
ESP32 集成了2 个 12 位逐次逼近模数转换器 (SARADC),支持 18 个测量通道(模拟使能引脚)。
支持以下通道:
- ADC1: 8 通道:GPIO32 - GPIO39
- ADC2: 10 个通道:GPIO0、GPIO2、GPIO4、GPIO12-GPIO15、GOIO25-GPIO27
注意 ADC 使用有限制。• Wi-Fi 驱动程序使用了 ADC2
。因此,应用程序只能在未启动 Wi-Fi 驱动程序时使用 ADC2
。
在开发板上将 ADC1 可用的通道都进行了引出:
在 ARDUINO 中使用ESP32 的 ADC 功能十分方便。
ADC 采样模式
每个 ADC 单元支持两种工作模式,ADC 单次采样模式和 ADC 连续采样(DMA)模式。
- ADC 单次采样模式适用于低频采样操作。
- ADC 连续采样(DMA)模式适用于高频连续采样动作。
衰减倍数
不同的衰减倍数对应不同的检测电压范围。
c
//设定ADC的模拟衰减倍数
analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation);
其中 pin 是所用的 adc 引脚号,attenuation 指所设定的衰减倍数,可参考如下:
c
/*
衰减倍数
0dB衰减(ADC_ATTEN_0db)表示参考电压为1.1V
2.5dB衰减(ADC_ATTEN_2_5db)表示参考电压为1.5V
6dB衰减(ADC_ATTEN_6db)表示参考电压为2.2V
11dB衰减(ADC_ATTEN_11db)表示参考电压为3.9V(默认)
*/
typedef enum {
ADC_0db,
ADC_2_5db,
ADC_6db,
ADC_11db
} adc_attenuation_t;
ADC 的分辨位数
它可以是介于 9(0–511)和 12 位(0–4095)之间的值。默认值为 12 位分辨率,即上式中的 N=12。
c
//设定ADC的分辨位数:12
analogReadResolution(12);
读取 ADC 的数值
c
int analogValue = analogRead(pin);
当设定衰减倍数为 0dB,选取分辨位数为 12 时,实际模拟电压和读取数据量的关系如下: