【问题标题】:ESP32-S3-DevKitC ADC Pins Behaving ErraticallyESP32-S3-DevKitC ADC 引脚行为异常
【发布时间】:2022-08-13 05:36:40
【问题描述】:

我正在使用一些 ESP32-S3-DevKitC-1-N8 板,并且有一个简单的程序,可以使用两个 SAR ADC(下面的程序)将模拟数据读取到串行监视器。我遇到了一个问题,即 ADC 通道在无连接时读取的值介于 50mV 和 930mV 之间。由于没有外部电路,因此引脚的读数应为 0 伏。我认为这可能是董事会的问题,所以我和其他几个人一起尝试了,得到了相同的结果。我唯一的另一个想法是我的程序有问题。我正在使用 ESP-IDF 4.4 CMD 在 VSCode 中进行编码,以使用以下命令刷新我的代码:

idf.py 设置目标 esp32s3

idf.py -p COM4 -b 480600 闪存监视器

#include <stdio.h>
#include <driver/adc.h>
#include \"sdkconfig.h\"
#include \"freertos/FreeRTOS.h\"
#include \"freertos/task.h\"
#include \"esp_system.h\"
#include \"esp_spi_flash.h\"
#include \"esp_adc_cal.h\"

void app_main(void)
{   
    printf(\"Hello world!\\n\");

  
    /* ADC Configuration and Callibration Documentation: |
    ------------------------------------------------------
        VRef of the ESP32-S3 is 1100 mV                  |
                                                         
        Right Channel: GPIO 4 ADC1 Channel 3             |
        Left Channel: GPIO 11 ADC2 Channel 0             |             

        ADC Attenuation Options:                         |
        ADC_ATTEN_DB_0   : 0 - 950 mV                    |
        ADC_ATTEN_DB_2_5 : 0 - 1250 mV                   |
        ADC_ATTEN_DB_6   : 0 - 1750 mV                   |
        ADC_ATTEN_DB_11  : 0 - 3100 mV                   |

        ADC Accuracy Options:                            |
        ADC_WIDTH_9Bit                                   |
        ADC_WIDTH_10Bit                                  |
        ADC_WIDTH_11Bit                                  |
        ADC_WIDTH_12Bit                                  |
        ADC_WIDTH_BIT_DEFAULT (Max Bit Width)            |
    -----------------------------------------------------*/

    // Configure desired precision and attenuation for ADC pins
    adc1_config_width(ADC_WIDTH_BIT_DEFAULT);
    adc1_config_channel_atten(ADC1_CHANNEL_0,ADC_ATTEN_DB_0);
    adc2_config_channel_atten(ADC2_CHANNEL_3,ADC_ATTEN_DB_0);

    // Create ADC channel characteristics structs for use in calibration functions
    
    esp_adc_cal_characteristics_t adc1_chars;
    esp_adc_cal_characteristics_t adc2_chars;
    esp_adc_cal_characterize(ADC_UNIT_1,ADC_ATTEN_DB_0,ADC_WIDTH_BIT_DEFAULT,1100,&adc1_chars);
    esp_adc_cal_characterize(ADC_UNIT_2,ADC_ATTEN_DB_0,ADC_WIDTH_BIT_DEFAULT,1100,&adc2_chars);

    int val1;
    int val2;
    int counter = 0;
    while(true){ 
        
        val1 = adc1_get_raw(ADC1_CHANNEL_0);
        adc2_get_raw(ADC2_CHANNEL_3,ADC_WIDTH_BIT_DEFAULT,&val2);

        // printf(\"%d, %d\\n\",val1,val2);
            
        int adc1_voltage = esp_adc_cal_raw_to_voltage(val1,&adc1_chars);
        int adc2_voltage = esp_adc_cal_raw_to_voltage(val2,&adc2_chars);
        printf(\"\\n%d, %d\",adc1_voltage,adc2_voltage);
        vTaskDelay(10);
        counter++;
    }
}
  • 可能是电引起的。连接您的漂浮的输入到 GND,你应该读为零。输入通常具有高阻抗,可以从任何地方捕获电压。

标签: c microcontroller esp32 adc


【解决方案1】:

目前,您的 ADC 引脚就像天线一样。这是预期的行为,因为您没有连接到引脚的强信号您收到的只是噪音。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2021-05-03
    • 2019-10-04
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多