ESP32 ADC & DAC

Im Gegensatz zum ESP8266 weist der ESP32 ein wesentlich besser ausgebautes System zur analogen IO auf.

Der ESP32 besitzt zwei 12-bit ADCs, die nach dem Verfahren der Successiven Approximation arbeiten und insgesamt 18 analoge Eingänge bedienen. Einige dieser Eingänge können zur Bildung eines programmierbaren Verstärkers (PGA) zur Verstärkung kleiner Analogsignale herangezogen werden.

Die ADC API unterstützt ADC1 (9 Kanäle, an GPIO 32 – 39), und ADC2 (10 Kanäle, an den GPIOs 0, 2, 4, 12 – 15 und 25 – 27). Bei der Verwendung von ADC2 gilt es aber, gerade bei der Verwendung von WiFi,  gewisse Restriktionen zu beachten. Für den Test hier spielen sie aber keine Rolle .

Außerdem hat der ESP32 zwei 8-bit DACs, die mit GPIO25 (Channel 1) und GPIO26 (Channel 2) verbunden sind.

Für einen ersten Test des DAC-ADC-Subsystems ist es am einfachsten, den DAC an GPIO25 mit ADC19 an GPIO26 zu verbinden. Hier wird also ADC2 verwendet.

ADDA

Das Arduino Testprogramm weist keine Besonderheiten auf und zeigt vor allem, wie DAC und ADC angesprochen werden können.  Auf Github steht es zum Download zur Verfügung.

/*  
ESP32 Test of DAC & ADC
(c) Claus Kuehnel 2018-03-01 info@ckuehnel.ch

ESP32 has two 8-bit DAC channels, connected to GPIO25 (Channel 1) and GPIO26 (Channel 2)
There are 16 ADC channels. ADC19 goes to GPIO26.
Connect GPIO25 & GPIO26 fpr this test.
*/

#define LED 2

uint8_t DAC_Channel_1 = 25;
uint8_t ADC19 = 26;
uint8_t dac;
uint16_t adc;

void setup()
{
Serial.begin(115200);
pinMode(LED, OUTPUT);
delay(5000);
Serial.println("\n DAC\tADC\t DIFF");
}

void loop()
{
int16_t diff;
for (dac = 0; dac < 256; dac++)
{
digitalWrite(LED, HIGH);
delay(100);
dacWrite(DAC_Channel_1, dac);
delay(100);
adc = analogRead(ADC19);
diff = 16 * dac - adc;
Serial.printf("%4d\t%6d\t%4d\n", dac, adc, diff);
digitalWrite(LED, LOW);
delay(900);
}
}

Die seriellen Ausgaben habe ich geloggt, um diese für die folgende Grafik aufzubereiten.

ESP32 DAC-ADC-Characteristics

Aus der dargestellten DAC-ADC-Charakteristik kann man deutlich erkennen, dass das analoge Subsystem durch die zu erkennende Nichtlinearität durchaus einige Probleme aufweist. Es lohnt sich deshalb, im Forum die Diskussion um die ADC Issues zu verfolgen.

7 Gedanken zu „ESP32 ADC & DAC

  1. Pingback: PyBoard ADC & DAC – MicroPython

  2. Pingback: Externer ADC am ESP32 | ck blog

  3. Pingback: Longan Nano ADC & DAC | ck blog

  4. Pingback: Arduino Portenta H7 – ckArduino

  5. Pingback: Messung von Umgebungsbedingungen für Pflanzen mit LILYGO®TTGO T-Higrow Sensor – ckArduino

  6. Pingback: Arduino UNO R4 – ckArduino

  7. Pingback: ESP32Forth – eine alternative Programmierumgebung | ck blog

Hinterlasse einen Kommentar