SVEN HELLE PRÄSENTIERT: VOLTIGMA v3.0
⌂
Arduino und Microcontroller · FACHBEGRIFF

ADC

Merksatz / Hinweis:
Abkürzung für einen Analog-Digital-Wandler.

ELEKTROTECHNIK · ARDUINO · MIKROCONTROLLER

ADC – Analog-Digital-Wandler

Wie wird aus einer stufenlos veränderlichen Sensorspannung eine Zahl, mit der ein Mikrocontroller rechnen kann?

Die Grundidee

Viele Sensoren und Bedienelemente liefern eine analoge Spannung. Beim Drehen eines Potenziometers kann sie sich beispielsweise kontinuierlich verändern. Ein Mikrocontroller verarbeitet intern digitale Werte. Der Analog-Digital-Wandler (ADC) erfasst die Spannung an einem Analogeingang und gibt dafür eine Zahl aus. Ein ADC misst dabei Spannung – keine Temperatur, keinen Widerstand und keinen Strom unmittelbar. Solche Größen müssen zuerst durch Sensoren oder eine geeignete Messschaltung in eine zulässige Spannung umgesetzt werden.

Merksatz: Der ADC bildet einen analogen Eingangswert als digitale Zahl innerhalb eines festgelegten Messbereichs ab.

Der Signalweg

Potenziometer
veränderliche Spannung
→ Analogeingang A0
ADC erfasst die Spannung
→ Digitale Zahl
z. B. 0 bis 1023

Schematische Originaldarstellung für einen 10-Bit-Messwert.

Abtastung, Quantisierung und Auflösung

  1. Abtastung: Der ADC erfasst den Momentanwert der Eingangsspannung. Wiederholte Messungen ergeben eine zeitliche Folge von Werten.
  2. Quantisierung: Der kontinuierliche Spannungsbereich wird in endlich viele Bereiche eingeteilt. Spannungen innerhalb desselben Bereichs ergeben denselben digitalen Code.
  3. Codierung: Der ADC liefert einen ganzzahligen Messwert, den das Programm auswerten kann.

Bei n Bit gibt es 2n mögliche Codes, nummeriert von 0 bis 2n − 1. Ein 10-Bit-Wert hat also 1024 mögliche Codes von 0 bis 1023. Die idealisierte Schrittweite (1 LSB) beträgt bei einem unipolaren Messbereich von 0 V bis zur Referenzspannung:

Schrittweite ΔU = Uref / 2n

Für 5,00 V Referenzspannung und 10 Bit ergibt sich idealisiert 5,00 V / 1024 ≈ 4,88 mV pro Schritt. Bei etwa 2,5 V liegt der digitale Wert ungefähr in der Mitte, also um 512. Rundung, Bauteiltoleranzen und Störungen können den tatsächlich angezeigten Wert beeinflussen.

Wichtig: Mehr Bits bedeuten kleinere ideale Spannungsschritte, aber nicht automatisch eine entsprechend hohe Messgenauigkeit. Referenzspannung, ADC-Fehler, Rauschen und Beschaltung beeinflussen das Ergebnis.

Referenzspannung und zulässiger Eingang

Die Referenzspannung Uref legt fest, welcher Spannungsbereich digital abgebildet wird. Beim klassischen Arduino UNO R3 ist die voreingestellte Referenz die Versorgungsspannung AVcc, typischerweise etwa 5 V; sie ist nicht zwingend exakt 5,00 V. Die zulässige Spannung am Pin ist eine getrennte Hardwaregrenze. Eine höhere Spannung darf niemals allein deshalb angeschlossen werden, weil im Programm eine andere Referenz oder Auflösung gewählt wurde.

Beispiel Potenziometer am UNO R3: Ein äußerer Anschluss liegt an 5 V, der andere an GND, der Schleifer an A0. Damit bewegt sich die Schleiferspannung zwischen den Versorgungsschienen. GND der Signalquelle und GND des Boards müssen bei einer externen Spannungsquelle verbunden sein, sofern keine galvanische Trennung vorgesehen ist.

Arduino-Beispiel: Potenziometer auslesen

Dieses einfache Sketch verwendet die standardmäßige 10-Bit-Ausgabe des UNO R3 und des UNO R4. Es liest A0 aus und zeigt den Rohwert im seriellen Monitor. Die Beispielrechnung mit 5,00 V ist nur dann als Spannungswert brauchbar, wenn die tatsächliche Referenz entsprechend bekannt ist.

const int analogPin = A0;
const float referenzVolt = 5.00; // Beispielwert: ggf. messen/anpassen

void setup() {
  Serial.begin(115200);
}

void loop() {
  int adcWert = analogRead(analogPin); // 10 Bit: 0 ... 1023

  // Näherung zur Spannungsanzeige; keine Präzisionsmessung.
  float spannung = adcWert * (referenzVolt / 1023.0);

  Serial.print("ADC: ");
  Serial.print(adcWert);
  Serial.print("   Spannung ca.: ");
  Serial.print(spannung, 3);
  Serial.println(" V");

  delay(200);
}

Im seriellen Monitor 115200 Baud einstellen. Beim Drehen des Potenziometers verändert sich der ADC-Wert. Der Faktor 1/1023 im Sketch ist eine einfache Endpunkt-Näherung für die Anzeige (0 ↔ 0 V, 1023 ↔ Uref). Die idealisierte Quantisierungsschrittweite wird dagegen durch Uref/1024 beschrieben. Für genaue Spannungsmessungen sind Kalibrierung und die Eigenschaften des konkreten ADC zu berücksichtigen.

Board-Unterschiede beachten

BoardADC-AusgabeHinweis
UNO R310 Bit, 0 bis 1023Standardreferenz ist AVcc; bei 5-V-Versorgung ungefähr 5 V.
UNO R4 WiFi / MinimaStandardmäßig 10 Bit; 12 oder 14 Bit einstellbaranalogReadResolution(14) liefert Werte bis 16383.
Nano ESP32Boardspezifische ADC-Eigenschaften3,3-V-Logik; Messbereich und Umrechnung anhand der ESP32-Dokumentation und Konfiguration prüfen. Keinesfalls pauschal 5 V an A0 anlegen.

Das Beispiel-Sketch und seine 5-V-Umrechnung sind bewusst auf UNO R3/R4 im beschriebenen Aufbau begrenzt.

Häufige Missverständnisse

„A0 liefert eine Spannung“: analogRead(A0) liefert eine Zahl. Erst mit einer passenden Referenz und Umrechnung lässt sich eine Spannung abschätzen.

„14 Bit sind automatisch genauer als 10 Bit“: Die feinere Auflösung ersetzt keine stabile Referenz, störarme Schaltung und Kalibrierung.

„ADC und PWM sind dasselbe“: Nein. Der ADC erfasst ein analoges Eingangssignal. PWM erzeugt eine Folge digitaler Ein-/Aus-Zustände, deren Tastgrad sich einstellen lässt.

Fachquellen

← Zur Rubrik Arduino und Microcontroller