完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. 使用ESP32-S3 ADC2 CH7(GPIO18),读取校准后的电压偏低。实际是2V左右,log打印只有1.8V多。没有打开wifi,请问可能是什么问题?
2. 另外如果直接计算adc_raw/4095*Vref,这个Vref是多少 I (100531) bat_adc: adc_raw= 2238 cali_data= 1803mVI (102531) bat_adc: adc_raw= 2238 cali_data= 1803mVI (104531) bat_adc: adc_raw= 2236 cali_data= 1800mVI (106531) bat_adc: adc_raw= 2236 cali_data= 1800mVI (108531) bat_adc: adc_raw= 2238 cali_data= 1803mVI (110531) bat_adc: adc_raw= 2237 cali_data= 1802mVI (112531) bat_adc: adc_raw= 2237 cali_data= 1802mVI (114531) bat_adc: adc_raw= 2237 cali_data= 1802mVI (116531) bat_adc: adc_raw= 2237 cali_data= 1802mVI (118531) bat_adc: adc_raw= 2237 cali_data= 1802mVI (120531) bat_adc: adc_raw= 2235 cali_data= 1800mVI (122531) bat_adc: adc_raw= 2239 cali_data= 1803mV 附上ADC2读取函数: //ADC Channels#define ADC_EXAMPLE_CHAN0 ADC2_CHANNEL_7 // GPIO18//ADC Attenuation#define ADC_EXAMPLE_ATTEN ADC_ATTEN_DB_11//ADC Calibration#if CONFIG_IDF_TARGET_ESP32#define ADC_EXAMPLE_CALI_SCHEME ESP_ADC_CAL_VAL_EFUSE_VREF#elif CONFIG_IDF_TARGET_ESP32S2#define ADC_EXAMPLE_CALI_SCHEME ESP_ADC_CAL_VAL_EFUSE_TP#elif CONFIG_IDF_TARGET_ESP32C3#define ADC_EXAMPLE_CALI_SCHEME ESP_ADC_CAL_VAL_EFUSE_TP#elif CONFIG_IDF_TARGET_ESP32S3#define ADC_EXAMPLE_CALI_SCHEME ESP_ADC_CAL_VAL_EFUSE_TP_FIT#endifstatic esp_adc_cal_characteristics_t adc_chars;static bool adc_calibration_init(void){ esp_err_t ret; bool cali_enable = false; ret = esp_adc_cal_check_efuse(ADC_EXAMPLE_CALI_SCHEME); if (ret == ESP_ERR_NOT_SUPPORTED) { ESP_LOGW(TAG, "Calibration scheme not supported, skip software calibration"); } else if (ret == ESP_ERR_INVALID_VERSION) { ESP_LOGW(TAG, "eFuse not burnt, skip software calibration"); } else if (ret == ESP_OK) { cali_enable = true; esp_adc_cal_characterize(ADC_UNIT_2, ADC_EXAMPLE_ATTEN, ADC_WIDTH_BIT_DEFAULT, 0, &adc_chars); } else { ESP_LOGE(TAG, "Invalid arg"); } return cali_enable;}esp_err_t adc_init(void){ bool cali_enable = adc_calibration_init(); if (true != cali_enable) { ESP_LOGI(TAG, "adc init fail!!!"); return ESP_FAIL; } //ADC2 config ESP_ERROR_CHECK(adc2_config_channel_atten(ADC_EXAMPLE_CHAN0, ADC_EXAMPLE_ATTEN)); ESP_LOGI(TAG, "adc init ok"); return ESP_OK;}uint16_t adc_get_voltage(void){ uint16_t adc_raw; uint16_t voltage = 0; adc2_get_raw(ADC_EXAMPLE_CHAN0, ADC_WIDTH_BIT_DEFAULT, &adc_raw); voltage = esp_adc_cal_raw_to_voltage(adc_raw, &adc_chars); ESP_LOGI(TAG, "adc_raw= %d cali_data= %dmV", adc_raw, voltage); return voltage;} |
|
相关推荐
1个回答
|
|
根据您提供的信息,我们可以分析以下几个可能导致ESP32-S3 ADC2电压偏差的原因:
1. **校准误差**:您提到已经进行了校准,但校准过程可能存在误差。请确保校准过程正确,使用正确的参考电压进行校准。 2. **ADC分辨率**:ESP32-S3的ADC2分辨率为12位,最大值为4095。这意味着最小可检测的电压变化为Vref / 4095。如果Vref设置不正确,可能会导致测量结果不准确。 3. **参考电压Vref**:您提到的计算公式adc_raw/4095*Vref,需要确保Vref的值是正确的。通常,Vref的值可以在ESP32-S3的数据手册中找到,或者在您的开发环境中查看相关配置。 4. **GPIO配置**:确保GPIO18已正确配置为ADC2通道,并且没有其他信号干扰。 5. **电源稳定性**:检查电源是否稳定,电压波动可能会影响ADC测量结果。 6. **软件问题**:检查您的代码逻辑,确保在读取ADC值和进行计算时没有错误。 7. **硬件问题**:如果以上原因都排除了,可能存在硬件问题,如ADC模块损坏或连接问题。 为了解决这个问题,您可以尝试以下步骤: 1. 重新校准ADC,确保使用正确的参考电压。 2. 检查Vref的值是否正确,并在计算公式中使用正确的Vref值。 3. 检查GPIO配置,确保没有其他信号干扰。 4. 检查电源稳定性,确保电压波动在可接受范围内。 5. 仔细检查代码逻辑,确保在读取ADC值和进行计算时没有错误。 希望这些建议能帮助您找到问题的原因并解决电压偏差问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
310 浏览 1 评论
551浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
443浏览 5评论
445浏览 4评论
415浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 13:39 , Processed in 0.814789 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号