Skip to content

ADC 操作及传感器驱动

ADC 操作

示例驱动器件:TEMT6000,MQ2

ADC 即,模数转换器,将模拟量用数字量的形式进行读取,有属性:参考电压,位数,参考电压即满量程数字量所代表电压值位数决定了满量程的数字量范围

实际电压值和读取电压数字量的关系如下:

Vvoltage=VrefDATA2NV_{voltage}=\frac{V_{ref}*DATA}{2^{N}}

其中,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 时,实际模拟电压和读取数据量的关系如下:

Vvoltage=1.1DATA4096V_{voltage}=\frac{1.1*DATA}{4096}

powered by 天人之际工作室