Raspberry Pi Pico: Überwachen der Versorgungsspannung an VSYS
Beim Mikrocontroller-Board Raspberry Pi Pico ist der ADC 3 (GPIO 29) intern über einen Spannungsteiler mit VSYS (Pin 39) verbunden. Da bietet es sich regelrecht an, die Versorgungsspannung an VSYS zu überwachen. Aber, ein korrektes Ergebnis zu bekommen ist nicht so ganz einfach, wie man sich das vielleicht denkt.
Bei der Messung von VSYS sind unterschiedliche Vorgehensweise beim Raspberry Pi Pico und Pico W notwendig, weil der GPIO 29 (ADC 3) beim Pico W (mit WLAN-Chip) eine doppelte Funktion hat.
- Grundlagen zu ADC (Analog-Digital-Converter)
- Experimente mit ADC
- VSYS mit ADC messen (Raspberry Pi Pico)
- VSYS mit ADC messen (Raspberry Pi Pico W)
Was können wir damit alles machen?
- Überwachen der Versorgungsspannung: VSYS ist der Pin (39), an dem immer eine Versorgungsspannung anliegt. Egal, ob über den USB oder eine andere Spannungsquelle direkt per VSYS. Indem man die dort anliegende Spannung über ADC3 misst, kann man ermitteln, wie stabil die Stromversorgung ist.
- Batteriebetrieb erkennen: Wird der Raspberry Pi Pico über den USB gespeist, kann man an VSYS 4,7 bis 4,9 Volt messen. Erst im Batteriebetrieb ist es weniger. Denkbar wäre es, dass man den Ladezustand, auch über die Laufzeit, ermittelt und vorab erkennt, dass der Ladezustand der Batterie zu gering wird, um einen stabilen Betrieb zu gewährleisten. Alternativ kann der Programmcode im Batterie-Betrieb sich anders verhalten und zum Beispiel versuchen in einen energiesparenden Modus zu wechseln.
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.
- Steckbrett
- Raspberry Pi Pico oder Pico W (RP2040) / Raspberry Pi Pico 2 W (RP2350)
- Optional: Messgerät oder Mini-Voltmeter
Dieser Aufbau dient zur Messung von VSYS:
- per ADC
- mit Multimeter
Aber, schauen wir lieber ganz genau hin und messen mit einem Messgerät direkt an VSYS nach und vergleichen das Ergebnis vom Messgerät und des folgenden Programmcodes.
Programmcode
Das Messen der Spannung an VSYS mit dem ADC 3 ist denkbar einfach. Tatsächlich ist das mit wenigen Zeilen Programmcode erledigt. Und Fehler beim Aufbau kann man keine machen, weil VSYS auf dem Board bereits mit dem ADC 3 verbunden ist.
Zu beachten ist, dass intern nicht direkt an VSYS gemessen wird, sondern an einem Widerstand von einem Spannungsteiler. Erschwerend kommt hinzu, dass der GPIO 29 einen internen Pulldown-Widerstand hat, der abgeschaltet werden muss, sonst verfälscht er das Messergebnis. Beide Probleme werden im Programmcode berücksichtigt.
Außerdem wird berücksichtigt, wenn der Programmcode auf einem Pico mit WLAN-Chip läuft.
# Bibliotheken laden import machine import time # WLAN-Konfiguration WLAN_SSID = 'wlan_name' WLAN_PW = 'wlan_passwort' WLAN_CC = 'DE' # Funktion: WLAN-Verbindung def wlanConnect(): # Status-LED led_onboard = machine.Pin('LED', machine.Pin.OUT, value=0) # WLAN-Verbindung herstellen network.country(WLAN_CC) wlan = network.WLAN(network.STA_IF) if not wlan.isconnected(): print('WLAN-Verbindung wird hergestellt:', WLAN_SSID) wlan.active(True) wlan.connect(WLAN_SSID, WLAN_PW) for i in range(10): if wlan.status() < 0 or wlan.status() >= 3: break led_onboard.toggle() print('.', end="\r") time.sleep(1) if wlan.isconnected(): print() print('WLAN-Verbindung hergestellt') led_onboard.on() time.sleep(3) netConfig = wlan.ifconfig() print('WLAN-Status:', wlan.status(), 'IPv4-Adresse:', netConfig[0], '/', netConfig[1], 'Standard-Gateway:', netConfig[2], 'DNS-Server:', netConfig[3]) else: print("\n", 'Keine WLAN-Verbindung') led_onboard.off() print('WLAN-Status:', wlan.status()) print() return wlan # Funktion: VSYS messen (mit und ohne WLAN-Chip) def get_vsys_voltage(): try: import network except ImportError: machine.Pin(29, machine.Pin.IN, pull=None) # Pulldown-Widerstand abschalten! time.sleep(.1) # kurze Wartezeit adc_raw = machine.ADC(3).read_u16() else: # Konfiguration: GPIO 25 und 29 machine.Pin(25, machine.Pin.OUT, pull=machine.Pin.PULL_DOWN, value=1) machine.Pin(29, machine.Pin.IN, pull=None) time.sleep(.1) # kurze Wartezeit # Messung: VSYS adc_raw = machine.ADC(3).read_u16() # Konfiguration: GPIO 25 und GPIO 29 machine.Pin(25, machine.Pin.OUT, pull=machine.Pin.PULL_DOWN, value=0) # GPIO wiederherstellen und WLAN aktivieren machine.Pin(29, machine.Pin.ALT, pull=machine.Pin.PULL_DOWN, alt=7) # Spannung in Volt umrechnen return adc_raw * 3.3 / 65536 * 3 # WLAN-Verbindung herstellen, wenn verfügbar try: import network except ImportError: pass else: wlan = wlanConnect() # VSYS messen vsys_voltage = get_vsys_voltage() # Ausgeben print('Spannung an VSYS (Pico-Pin 39):', "{:.2f}".format(vsys_voltage), 'V')
Hinweis: Die vom Programmcode ermittelte VSYS-Spannung sollte ungefähr der Spannung am Messgerät entsprechen.
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.
Alternative
Wenn die Überwachung der Stromversorgung besonders kritisch ist, dann sollte man ein externes Modul mit einem INA226 verwenden. Der Chip ist sehr präzise und unterstützt über I2C auch die Kommunikation mit einem Raspberry Pi Pico und MicroPython.
Weitere verwandte Themen:
- Raspberry Pi Pico: Stromversorgung prüfen
- Raspberry Pi Pico: Grundlagen zu ADC
- Raspberry Pi Pico: Experimente mit ADC
- Raspberry Pi Pico: Grundlagen der Energieversorgung / Stromversorgung
- Raspberry Pi Pico im Stand-alone-Betrieb
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.