Precauciones al usar ESP32 ADC - Makerfabs

Precauciones al usar ESP32 ADC - Makerfabs

diciembre 07, 2022

Precauciones en el uso de ESP32-ADC
La serie ESP32 ha sido popular en estos días, y he hecho muchas placas relacionadas con ESP32, pero, en realidad encontramos algunos problemas, el mayor problema es su ADC.

La serie ESP32 (ESP32/S2/S3/C3...) tiene 2 SAR(Registro de aproximación sucesiva) ADC con 12 bits, con fuente de alimentación de 3,3 V. En una aplicación, necesito A / D algunas señales pequeñas y sensibles, descubrí que su ADC no era preciso, así que verifiqué su resultado de ADC, con Arduino IDE.

Usé elanalogReadMilliVolts()proporcionado por ESP32 productor espressif, Su explicación detallada en:
//espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/api/adc.html
analogReadMilliVolts
int vol_direct = analogReadMilliVolts(ADC_PIN);
El resultado no parece bueno, con un error promedio de 45mV, y Varianza (con excel:=varp())2535.
analogReadMilliVolts-Result

ESP32-AD-Error
La mayoría de los errores A / D tienen lugar cuando el voltaje está cerca de 0 o 3.3V. Pero incluso cerca del voltaje 2V, el error máximo es de hasta 100 mV.

El mismo método paraESP32-S3yESP32-C3:
ESP32-S3-AD-Error

ESP32-C3-AD-Error

Tanto para el S3 como para el C3, la mayoría de los errores ocurren a 2.5 ~ 3V, el error de voltaje máximo es de hasta 250mV y 500 mV. Es decir, no se pueden utilizar para la mayoría de aplicaciones que necesitan un ADC de prerevisión.

Como contraste, medí el RP2040 y el Atmega328P:
RP2040, error promedio 8.4mA, con varianza 13; error máximo 15mV a aproximadamente 2.7V;
RP2040-AD-Error

Atmega328P,error promedio 16 mV, con varianza 372; error máximo 50mV;
Atmega328p-AD-Error

Entonces, conArduino IDE:
 
Error promedio (mV)
Variación de error
Error máximo (mV)
Puntos con error máximo
ESP32
45
2535
150
0V ~ 0.1V / 3.2V ~ 3.3V
ESP32-S3
37
5573
250
3V
ESP32-C3
200
24746
500
2.7V
RP2040
8
13
15
2.7V
Atmega328P
16
372
55
4.9V ~ 5V

Muestra que en comparación con RP2040 / Atmega328P, la precisión del ADC ESP32 / ESP32S3 es peor. Si tiene que usarlos, no haga que funcione cerca de cero o voltaje completo.

No confíe en el resultado de ESP32-C3.

Además, el espressif productor ESP32 proporciona un método de calibración en su desarrollo IDF predeterminado conesp_adc_cal_raw_to_voltage():
Consulta la fuente aquí.
esp_adc_cal_raw_to_voltage

Utilizo el botónadcx_get_raw()a A/D la señal y, a continuación, eladc_cal_raw_to_voltage()para calibrarlo. El código:
while (1) {
        uint32_t adc_reading = 0;
        Multimuestreo
        for (int i = 0; i 
                                
Su salida:
ESP32-AD-Error-con-calibración-en-IDF

El error promedio es 12, con varianza 2440, el error máximo es de hasta 150mV, todavía no es bueno. Pero si solo lo configuramos funcionando en 0.1 ~ 3.1V, el resultado es mucho mejor:
ESP32-AD-Error-con-calibración-en-IDF-en-0_1-3_2V

Su error promedio es de 18 mV, con varianza 53, error máximo 30 mV, incluso mejor que con Atmega328P.
 
Error promedio (mV)
Variación de error
Error máximo (mV)
Puntos con error máximo
ESP32
45
2535
150
0V ~ 0.1V / 3.2V ~ 3.3V
ESP32-S3
37
5573
250
3V
ESP32-C3
200
24746
500
2.7V
RP2040
8
13
15
2.7V
Atmega328P
16
372
55
4.9V ~ 5V
ESP32 (con calibración oficial)
12
2440
150
0V ~ 0.1V / 3.2V ~ 3.3V
ESP32 en 0.1V ~ 3.2V (con calibración oficial)
18
53
30
2.5V

Entonces, mi conclusión:
1. No confíe en ESP32 C3 ADC;
2. Si necesita usar ESP32 ADC, use el SDK oficial de espressif (usé v4.4, no probé la última versión)esp_adc_cal_raw_to_voltage()para calibración; y evite usar ESP32 ADC a 0 ~ 0.1V y 3.1 ~ 3.3V. Con estas notas, el ADC ESP32 puede ser bueno igual que el Atmega328P;
3. RP2040 ADC el mejor.

Si tiene más preguntas sobre el ADC ESP32, póngase en contacto conservice@makerfabs.com.guiño

Contáctenos