Mit einem Potentiometer und einer Balkenanzeige wollen wir nachfolgend die Funktionalität des Analog-Systems des ESP32
ein wenig ausprobieren. ESP32 kann analoge Signale in beiden Richtungen verarbeiten. Die analogen Signale können gelesen und bei
Bedarf ausgegeben werden. Die dafür zuständige Gerätschaft besteht aus DACs (Digital to Analog Converter, zuständig für analoge
Signalausgabe) und ADCs (Analog to Digital Converter, zuständig für das Lesen der Signale).
Analoge Eingänge
Für das Lesen der analoger Signalen stehen 18 ADC-Kanäle zur Verfügung. Die zuständigen ADCs wandeln die gemessene Spannung
(0-3,3V) in digitale Werte um und stellen dem Programm zur weiteren Verarbeitung zur Verfügung. Die Auflösung beträgt 12 Bit.
Die möglichen Werte pendeln im Bereich von 0 bis 4096.
Das Auslesen der Werte erfolgt mit der Funktion analogRead(). Als Parameter muss die PIN-Nummer, an dem die Spannung gemessen
wird, angegeben werden. Beispiel:
analogRead(36);
Die Auflösung kann mit der Funktion analogReadResolution (resolution) zwischen 9 Bits und 12 Bits verändert werden.
Die Messgenauigkeit der ADCs lässt einiges zu wünschen übrig. Der Verlauf ist nicht immer linear und weicht von der geraden
Linie ab. Für genaue Messungen empfiehlt es sich, auf externe AD-Wandler umzusteigen.
Analoge Ausgänge
Beim ESP32 stehen zwei GPIOs, die man für analoge Ausgabe nutzen kann, zur Verfügung. Es sind die GPIO 25 und GPIO 26.
Hinter den beiden Ausgängen verbergen sich zwei 8-Bit DACs, die es ermöglichen, die Spannungswerte in Stufen von 0 bis 255
einzustellen. Damit entspricht eine Stufe einer Spannung in Höhe von 3,3V / 255 = 13 mV. Die Ausgänge müssen nicht mit pinMode
vordefiniert werden. Im Programm wird die Funktion dacWrite() benutzt. Sie erwartet zwei Parameter: GPIO-Nummer und den gewünschten
Spannungswert, angegeben in Stufen von 0 bis 255. Beispiel:
dacWrite (25, 155);
Mit dem Befehl wird am Ausgang Pin 25 eine Spannung in Höhe von 2V ausgegeben.
Spannungsanzeige
(als Anwendungsbeispiel)
In der folgenden Schaltung kommen gleichzeitig ein analoger Eingang und ein analoger Ausgang zum Einsatz. Die Aufgabe
der Schaltung ist äußerst einfach. Die Spannung, die am analogen Eingang gemessen wird, soll unverändert an einem analogen Ausgang
wieder ausgegeben werden. Das war’s eigentlich. Zusätzlich, damit wir das Geschehen am Ausgang beobachten können, wird hier zwecks
Visualisierung eine Balkenanzeige angeschlossen.
LM3914. Bei dem LM3914 handelt e sich um einen Anzeigentreiber, der bis zu 10 LEDs ansteuern kann. Er stellt zehn
interne Widerstände zur Verfügung, wodurch die Anzahl der Komponenten und Verdrahtungsaufwand reduziert
werden können.
Potentiometer. Der stufenlos einstellbare Widerstand leistet z.B. bei Spannungsteilern sehr gute Dienste. Anders als
bei den festen Widerständen, lässt sich die Teilung mit einem Potentiometer exakt einstellen.
Der Schaltplan
Schaltplan
Die Testschaltung
Testschaltung
Das Programm
// *************************************************************************************
// Analoge Signale und ESP32
// ESP32-Dev-KitC V4
// Arduino IDE 1.8.19
// *************************************************************************************
int Analog_Eingang = 34; // GPIO 34, analoger Eingang
int Analog_Ausgang = 25; // GPIO 25, analoger Ausgang
int Messung; // aktuelle Messung
int Ausgabe; // Ausgabe Wert
// ***********************************************************************************
void setup() {
}
// ***********************************************************************************
void loop() {
Messung = analogRead (Analog_Eingang); // Messung durchführen
Ausgabe = Messung / 16; // Wert für die Ausgabe umrechnen
dacWrite (Analog_Ausgang, Ausgabe); // Ausgabe am Ausgang
delay (10);
}
// ***********************************************************************************
An dem GPIO 34 des ESP32 wird die Spannung, die manuell eingestellt werden kann, gemessen. Der maximale Wert der
Spannung beträgt 3,3V. In dem Programm stehen, je nach aktuellem Wert der Spannung, Messwerte im Bereich 0 bis 4096 zur weiteren
Verarbeitung zur Verfügung. Dank Teilung durch 16 werden diese Werte auf den Bereich von 0 bis 255 skaliert. Anschließend, ohne
weitere Bearbeitung, werden diese Werte zu dem Ausgang (GPIO 25) weitergeleitet. Auf diese Weise wird die Spannung vom Eingang
unverändert zum Ausgang weitergeleitet.
Mit der Balkenanzeige wird der Wert am Ausgang zusätzlich visualisiert. Der volle Ausschlag (10 LEDs) entspricht einer
Spannung von 3,3V.
Der Anzeigentreiber LM3914 arbeitet mit einer Referenzspannung von 1,25 V. Um die Ausgangsspannung an den Treiber anzupassen,
wird ihm ein Spannungsteiler vorgeschaltet. Er wird mit dem Potentiometer P2 und dem Widerstand R1 gebildet. Um die passende Teilung
zu erhalten, soll der Potentiometer auf ca. 16,4 kOhm eingestellt werden.
Bei Berechnungen kann der E-Rechner behilflich sein: