Raspberry Pi Pico: Grundlagen zu ADC
ADC bedeutet Analog-Digital-Converter bzw. Analog-Digital-Wandler. GPIOs, die über einen ADC verfügen, können analoge Signale in digitale Datenwörter (Bitfolgen mit definierter Länge) umzuwandeln.
Viele Sensoren arbeiten analog und geben analoge Spannungen oder Ströme aus. Um diese Größen in einem Computer oder von einem Prozessor verarbeiten zu lassen, muss die analoge Größe in einen digitalen Wert umgewandelt werden. Dazu verwendet man Analog-Digital-Wandler (Analog Digital Converter, ADC).
Manchmal spricht man auch von „digitalen Sensoren“. Gemeint ist damit aber nur, dass sich im Sensor-Baustein oder -Modul eine Schaltung oder Schaltkreis zur Analog-Digital-Wandlung befindet. Oft ist auch ein Mikrocontroller dabei, der sich um die Kommunikation über eine digitale Schnittstelle zu einem anderen System kümmert.
Wie funktionieren ADCs?
Im Prinzip wird eine Spannung am ADC-Eingang gemessen, die zwischen 0 und 3,3 Volt (bei einem Raspberry Pi Pico) liegen darf. Diese Spannung wird vom ADC in eine binäre Form gebracht. Weil ein binäres und damit digitales System nur zwischen den beiden Zuständen „0“ und „1“ unterscheiden kann, was einem Bit entspricht, muss aus dem analogen Wert ein mehrstelliges Datenwort erzeugt werden.
Um die analoge Größe in einen digitalen Wert umzuwandeln, muss geklärt werden, wie genau die analoge Größe im digitalen Universum sein muss. Dazu muss man wissen, dass analoge Größen praktisch unendlich viele Werte oder Stufen umfassen können. In der herkömmlichen Computertechnik gibt es allerdings nicht die Möglichkeit mit unendlich großen Werten umzugehen. Die digitale Welt ist in ihrer Speicherkapazität und Übertragungskapazität immer begrenzt, auch wenn es immer mehr oder schneller wird.
Das heißt in der Praxis, wir müssen bei der Analog-Digital-Wandlung die Anzahl der möglichen digitalen Werte begrenzen. Man spricht dann von einer sogenannten Auflösung die in Bit angegeben wird. Die Anzahl in Bit ist die Länge der Datenwörter.
Die meisten in Mikrocontrollern integrierten ADCs haben eine Auflösung von 8, 10 oder 12 Bit. Bei 12 Bit haben wir einen dezimalen Wertebereich von 0 bis 4.095. Das heißt, eine analoge Größe kann in 4.096 Stufen unterschieden werden.
Höherwertige ADCs gibt es auch mit 16, 24 oder sogar 32 Bit Auflösung.
Für professionelle Anwendungen spielt auch noch die Wandlungszeit eines ADCs eine Rolle. Das ist die Zeit, die ein ADC benötigt, um einen analogen Eingangswert in einen digitalen Ausgangswert umzuwandeln. Je kürzer die Wandlungszeit, desto besser.
Raspberry Pi Pico und seine integrierten ADCs
ADC | GPIO-Nummer | Board-Pin |
---|---|---|
ADC0 | GPIO26 | 31 |
ADC1 | GPIO27 | 32 |
ADC2 | GPIO28 | 34 |
ADC3 | GPIO29 / VSYS | 39 |
ADC4 | integr. Temperaturfühler | |
AGND | GND | 33 |
ADC_VREF | - | 35 |
Der Raspberry Pi Pico hat 5 ADC-Kanäle.
- An den GPIO-Pins GP26, GP27 und GP28 sind 3 ADC-Kanäle nutzbar und tragen die Nummern 0, 1 und 2.
- Der vierte Kanal (ADC3) kann zur Messung der VSYS-Spannung des Boards verwendet werden und ist fest mit VSYS verbunden.
- Der fünfte Kanal (ADC4) ist nicht herausgeführt, sondern mit dem internen Temperatursensor verbunden, mit dem man die Temperatur des Mikrocontrollers messen kann.
Analog Ground (AGND)
Beim Verwenden der ADC-Kanäle wird man in der Regel gegen Ground (GND) messen. Um die Beeinflussung von äußeren Störsignalen und digitalen Signalen zu minimieren, sollte man nicht irgendeinen GND-Pin verwenden, sondern den AGND-Pin an Pin 33, zwischen GPIO 27 (Pin 32) und GPIO 28 (Pin 34).
Der AGND-Pin (Analog Ground) beim Raspberry Pi Pico dient als eine spezielle Masseverbindung (GND) für die ADCs (Analog-Digital-Wandler). Seine Funktion besteht darin, eine saubere und stabile Referenzmasse für analoge Schaltkreise bereitzustellen, um die Präzision bei der Messung von analogen Signalen zu verbessern.
ADC-Referenzspannung (ADC_VREF)
Auf der Seite 625 des RP2040-Datenblatts steht:
ADC Input Voltage Range : 0V min, ADC_AVDD max
Das bedeutet, dass der Messbereich eines ADC-Eingangs zwischen 0 und ADC_AVDD Volt liegt. Doch wie viel beträgt ADC_AVDD? Im Datenblatt steht dazu:
ADC_AVDD : 1.62V min, 3.3V typ, 3.63V max
Was heißt das? Wenn man eine Messwertaufnahme mit einem ADC-Eingang durchführt und später erneut durchführt, dann sind die Werte nur dann vergleichbar, wenn zu beiden Zeiten die ADC_AVDD-Werte identisch waren. Doch der ADC_AVDD-Wert ist nicht immer gleich.
Damit die Werte an den ADC-Eingängen korrekt gemessen werden und auch nachträglich vergleichbar sind, muss an ADC_VREF (Pin 35) mit einer Referenz-Spannung gearbeitet werden. Die lässt sich mit einer Z-Diode für 3,3 Volt und einem Vorwiderstand realisieren.
Muss diese Referenz-Spannung in jedem Fall erzeugt werden, wenn man die ADC-Eingänge benutzt? Nein, nicht in jedem Fall. Es empfiehlt sich das zu tun, wenn man die gemessenen Werte mit Festwerten im Programmcode vergleicht und möglichst wenig Abweichung auftreten darf. Beispielsweise dann, wenn man vorher einen Sensor kalibriert hat.
ADCs mit MicroPython und CircuitPython lesen
Beim Messen an einem der ADC-Kanäle wird eine Datenwort mit 12 Bit Breite erzeugt, womit ein dezimaler Wertebereich von 0 bis 4.095 dargestellt werden kann (4.096 Werte). Wenn man dieses Datenwort mit MicroPython und CircuitPython ausliest, dann wandeln die das 12 Bit Datenwort in einen Datenwort mit 16 Bit Breite um, was einem Wertebereich von 0 bis 65.535 entspricht (65.536 Werte).
Programmcode für MicroPython
# Bibliotheken laden import machine import time # Initialisierung des ADC0 (GPIO26) adc = machine.ADC(26) time.sleep(.1) # Wartezeit # ADC0 als Dezimalzahl lesen read = adc.read_u16() # Spannung berechnen voltage = read * 3.3 / 65536 # Daten ausgeben print('ADC:', read, '/', voltage, 'V')
Programmcode für CircuitPython
# Bibliotheken laden import board, analogio import time # Initialisierung des ADC0 (GPIO26) adc = analogio.AnalogIn(board.GP26) time.sleep(.1) # Wartezeit # ADC0 als Dezimalzahl lesen read = adc.value # Spannung berechnen voltage = read * 3.3 / 65536 # Daten ausgeben print('ADC:', read, '/', voltage, 'V')
Experimente mit einem ADC
Um die Möglichkeiten der ADCs vom Raspberry Pi Pico auszuprobieren, zu testen und festzustellen wie diese verwendet werden können, empfiehlt es sich ein paar einfache Experimente durchzuführen.
Anwendungen mit einem ADC
- Raspberry Pi Pico: Temperatur mit dem integrierten Temperatursensor messen und anzeigen
- Raspberry Pi Pico: Helligkeit messen mit Fotowiderstand (Helligkeitsmessung)
- Raspberry Pi Pico: Mehrere Taster mit einem ADC-Eingang auswerten
- Raspberry Pi Pico: Berührungsschalter mit einem ADC-Eingang
- Raspberry Pi Pico: LED-Helligkeit mit einem Potentiometer einstellen
- Raspberry Pi Pico: VSYS mit ADC messen
- Raspberry Pi Pico W: VSYS mit ADC messen
Weitere verwandte Themen:
- Raspberry Pi Pico: GPIO-Grundlagen
- Raspberry Pi Pico: GPIO-Eingang beschalten
- Raspberry Pi Pico: GPIO-Eingang mit Taster beschalten und auswerten
- Raspberry Pi Pico: Grundlagen zu One-Wire (1-Wire)
- Raspberry Pi Pico: I2C verbinden und testen
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.