ESP32 学习笔记(四)ADC - Analog to Digital Converter

ADC - Analog to Digital Converter

概述

ESP32 集成了两个12 位 SAR(逐次逼近寄存器)ADC(模数转换器),支持18个通道(模拟使能引脚)的测量。 其中一些引脚可用于构建可编程增益放大器,用于测量小型模拟信号。

ADC 驱动程序 API 支持 ADC1(8 个通道,连接到 GPIO 32-39)和 ADC2(10 个通道,连接到 GPIO 0,2,4,12-15和 25-27)。 但是,使用 ADC2 的应用程序存在一些限制:

  1. 仅当 Wi-Fi 驱动程序未启动时,应用程序才能使用 ADC2,因为具有更高优先级的 Wi-Fi 驱动程序也使用 ADC。
  2. 某些 ADC2 引脚用作捆扎引脚(GPIO 0,2,15),因此无法自由使用。 例如,官方开发套件:

配置和读取ADC

在读取之前应配置 ADC。

  • 对于ADC1,通过调用函数adc1_config_width()adc1_config_channel_atten()来配置所需的精度和衰减。
  • 对于ADC2,通过adc2_config_channel_atten()配置衰减。 每次读取时都会配置 ADC2 的读取宽度。

每个通道完成衰减配置,请参见adc1_channel_tadc2_channel_t,设置为上述功能的参数。

然后可以使用adc1_get_raw()adc2_get_raw()读取 ADC 转换结果。 应将 ADC2 的读取宽度设置为adc2_get_raw()的参数,而不是配置函数中的参数。

由于ADC2与具有更高优先级的WIFI模块共享,因此在esp_wifi_start()esp_wifi_stop()之间,adc2_get_raw()的读取操作将失败。 使用返回代码查看读数是否成功。

也可以通过调用专用功能hall_sensor_read()通过ADC1读取内部霍尔效应传感器。 请注意,即使霍尔传感器在ESP32内部,读取它也使用ADC1的通道0和3(GPIO 36和39)。 请勿将其他任何东西连接到这些引脚,也不要更改其配置。 否则可能会影响来自sesnor的低值信号的测量。

此API提供了配置ADC1以便从ULP读取的便捷方法。 为此,请调用函数adc1_ulp_enable(),然后如上所述设置精度和衰减。

还有另一个特定功能adc2_vref_to_gpio()用于将内部参考电压路由到GPIO引脚。 它可以方便地校准ADC读数,这将在最小化噪声部分中讨论。

应用示例

读取 ADC1 通道 0(GPIO 36)上的电压:

#include <driver/adc.h>

...

    adc1_config_width(ADC_WIDTH_BIT_12);
    adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_0);
    int val = adc1_get_raw(ADC1_CHANNEL_0);

上例中的输入电压为 0 至 1.1V (衰减为 0 dB)。 可以通过设置更高的衰减来扩展输入范围,请查看adc_atten_t。 esp-idf 中提供了使用 ADC 驱动程序的示例,包括校准(如下所述):peripherals/adc

读取 ADC2 通道7 (GPIO 27)的电压:

#include <driver/adc.h>

...

    int read_raw;
    adc2_config_channel_atten( ADC2_CHANNEL_7, ADC_ATTEN_0db );

    esp_err_t r = adc2_get_raw( ADC2_CHANNEL_7, ADC_WIDTH_12Bit, &read_raw);
    if ( r == ESP_OK ) {
        printf("%d\n", read_raw );
    } else if ( r == ESP_ERR_TIMEOUT ) {
        printf("ADC2 used by Wi-Fi.\n");
    }

由于与Wi-Fi冲突,读数可能会失败,应该检查。 esp-idf中提供了使用ADC2驱动程序读取DAC输出的示例:peripherals/adc2

读取内部霍尔效应传感器:

#include <driver/adc.h>

...

    adc1_config_width(ADC_WIDTH_BIT_12);
    int val = hall_sensor_read();

在这两个示例中读取的值是12位宽(范围0-4095)。

API Reference

该参考包括三个组成部分:

Header File

猜你喜欢

转载自blog.csdn.net/qq_27114397/article/details/81591827