Precauciones al usar ESP32 ADC - Makerfabs
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
int vol_direct = analogReadMilliVolts(ADC_PIN);
El resultado no parece bueno, con un error promedio de 45mV, y Varianza (con excel:=varp())2535.
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:
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;
●Atmega328P,error promedio 16 mV, con varianza 372; error máximo 50mV;
Entonces, conArduino IDE:
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:
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;
●Atmega328P,error promedio 16 mV, con varianza 372; error máximo 50mV;
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í.
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; iSu salida:
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:
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.
Blogs relacionados
- [2022-09-06] ESP8266 WiFi Shield Actualización de firmware V1.0
- [2022-07-15] Errores de producción de los sensores de humedad del suelo Lora
- [2022-05-20] Cómo hacer un dispositivo de levitación ultrasónica
- [2022-01-14] Aviso de vacaciones del Festival de Primavera 2022
- [2021-10-23] Lora Soil Moisture Sensor V3 - ¿Qué se actualizó?