欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

esp32 adc电压采集

程序员文章站 2024-02-25 10:45:22
...

esp32 adc电压采集

esp32adc介绍

ESP32集成了两个12位SAR(逐次逼近寄存器)ADC,总共支持18个测量通道(模拟使能引脚)。

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

Wi-Fi驱动程序使用ADC2。因此,应用程序只能在未启动Wi-Fi驱动程序时使用ADC2。
一些ADC2引脚用作捆绑引脚(GPIO 0、2、15),因此不能*使用。
具体可以查看官方文档[]

电路部分

esp32 adc电压采集
esp32 adc电压采集
可以看到其连接到esp32的io34.

代码

esp32 adc电压采集
从官方文档可以看到,io34位adc1的6通道

static const adc_unit_t unit = ADC_UNIT_1;//选择adc1
static const adc_channel_t channel = ADC_CHANNEL_6;     //GPIO34 

设置衰减值

ADC的默认满量程电压为1.1V。要读取更高的电压(最高为引脚最大电压,通常为3.3V),则需要将该ADC通道的信号衰减设置为> 0dB。
当VDD_A为3.3V时:
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的满量程电压
由于采集两个相同电阻中间电压,电压值最大为2.5左右,故选用11db衰减。

static const adc_atten_t atten = ADC_ATTEN_11db;//满量程为3.9v

然后配置采集宽度

    adc1_config_width(ADC_WIDTH_BIT_12);//采集宽度
    adc1_config_channel_atten(channel, atten);//配置通道 以及衰减度
    adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
    esp_adc_cal_value_t val_type = esp_adc_cal_characterize(unit, atten, ADC_WIDTH_BIT_12, DEFAULT_VREF, adc_chars);//在特定衰减下表征ADC的特性
    print_char_val_type(val_type);

然后在主函数循环采样

    while(1) {
        uint32_t adc_reading = 0;
        //Multisampling
        for (int i = 0; i < NO_OF_SAMPLES; i++) {
            
            adc_reading += adc1_get_raw((adc1_channel_t)channel);//从单个通道获取ADC1读数。
    
        }
        adc_reading /= NO_OF_SAMPLES;
        //Convert adc_reading to voltage in mV
        uint32_t voltage = esp_adc_cal_raw_to_voltage(adc_reading, adc_chars);//将ADC读数转换为以mV为单位的电压
        printf("Raw: %d\tVoltage: %dmV\n", adc_reading, voltage);
        vTaskDelay(pdMS_TO_TICKS(1000));

致辞采集完成。

相关标签: esp32wifi时钟