Raspberry Pi Pico: VSYS mit ADC messen
Beim Mikrocontroller-Board Raspberry Pi Pico ist der ADC 3 (GPIO 29) intern über einen Spannungsteiler mit VSYS (Pin 39) verbunden. Das ermöglicht das Messen der Versorgungsspannung (VSYS). Das richtige Ergebnis zu erhalten, ist aber nicht ganz so einfach, wie man sich das vielleicht denkt.
Technische Details zu VSYS und dem ADC 3
Grundsätzlich können die ADCs im Mikrocontroller RP2040 nur einen Spannungsbereich von 0 bis 3,3 Volt messen. In der Praxis kann die Spannung am VSYS-Pin aber viel höher sein. Deshalb ist VSYS über einen Spannungsteiler intern mit dem ADC 3 (GPIO 29) verbunden. Der Spannungsteiler teilt die Spannung an VSYS in 2/3 und 1/3 auf. Mit dem ADC 3 wird 1/3 der VSYS-Spannung gemessen. Beispiel: Wenn an VSYS 5,0 Volt anliegen würden, dann würde der ADC 3 ungefähr 1,67 Volt messen. Erst mit einem Faktor von 3 käme man wieder auf ungefähr 5,0 Volt.
Besonderheit beim Raspberry Pi Pico W mit WLAN-Chip
Beim Raspberry Pi Pico W teilt sich der Mikrocontroller den GPIO 29 mit dem ADC 3 und einer Leitung zum WLAN-Chip, weshalb die softwareseitige Implementierung anders aussehen muss.
Aufbau
Der Messaufbau befindet sich auf einem Steckbrett, auf dem sich ein Raspberry Pi Pico und ein Mini-Voltmeter befinden. Mit dem Mini-Voltmeter misst man die Spannung der Spannungsquelle. In diesem Fall eine Spannung an VSYS (Pin 39). Alternativ kann der Raspberry Pi Pico auch per USB gespeist werden. Trotzdem wird VSYS gemessen, und nicht die Spannung am USB!
- Steckbrett
- Raspberry Pi Pico (RP2040) / nicht Raspberry Pi Pico W
- Optional: Messgerät oder Mini-Voltmeter
Programmcode für Raspberry Pi Pico
Das Messen der Spannung an VSYS mit dem ADC 3 scheint denkbar einfach. Tatsächlich ist das mit wenigen Zeilen Programmcode erledigt. Und Fehler beim Aufbau kann man auch keine machen, weil VSYS auf dem Board bereits mit dem ADC 3 verbunden ist.
# Bibliotheken laden import machine import time # ADC 3 (GPIO 29) initialisieren adc_vsys = machine.ADC(machine.Pin(29, machine.Pin.IN, pull=None)) time.sleep(.1) # Wartezeit # Umrechnungsfaktor conversion_factor = 3.3 / 65536 * 3 # ADC messen adc_raw = adc_vsys.read_u16() # Umrechnen vsys_voltage = adc_raw * conversion_factor # Formatiert ausgeben print('Spannung an VSYS (Pico-Pin 39):', "{:.2f}".format(vsys_voltage), 'V')
Das Ergebnis stimmt jetzt so ungefähr mit dem Ergebnis vom Messgerät überein. Der Wert vom ADC wird minimal größer sein, weil der interne ADC eine kürzere Leitung zum VSYS hat und weniger Leitungsverluste hat.
Erweiterung
Der Raspberry Pi Pico ermöglicht die Überwachung des Batterie-Ladezustands über den ADC 3 (GPIO 29), der mit VSYS verbunden ist. Der Programmcode zur Messung berücksichtigt Unterschiede zwischen dem Pico und Pico W. Nutzer müssen Spannungsgrenzen für volle und leere Batterien festlegen.
Weitere verwandte Themen:
- Raspberry Pi Pico: Grundlagen zu ADC
- Raspberry Pi Pico: Experimente mit ADC
- Raspberry Pi Pico: VSYS mit ADC messen
- Raspberry Pi Pico: Grundlagen der Energieversorgung / Stromversorgung
- Raspberry Pi Pico: GPIO-Grundlagen
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.