Power-Management für den ESP32-S3 basierten Lehrroboter Dezibot⁴ (2025)
Als Teil meiner Masterarbeit habe ich den Strombedarf des Dezibot4 analysiert. Der Dezibot4 ist ein an der HTWK Leipzig entwickelter Lehrroboter auf Grundlage des ESP32-S3-Mikrocontrollers.
Ziel war es, zuvor beobachtete Instabilitäten aufgrund der begrenzten Leistungsfähigkeit der Stromversorgung zu vermeiden. Die Stromversorgung erfolgt durch eine wiederaufladbare Knopfzelle, welche in Lastspitzen nicht genügend Leistung bereitstellen kann. Da auf dem Roboter keine hardwareseitigen Vorkehrungen getroffen wurden, um dies zu verhindern und eine Hardwarerevision weder im Rahmen der Abschlussarbeit noch durch den betreuenden Professor gewünscht war, habe ich eine softwareseitige Lösung implementiert.
Was folgt, ist eine vereinfachte Erklärung.
Die Lösung besteht aus drei Teilen:
Analyse des Stromverbrauchs und Modellierung
Um einen Überblick über die Ausgangssituation zu erlangen, habe ich einen Messaufbau hergestellt, an dem ich mittels eines Messwiderstands und eines Oszilloskops den Stromfluss durch die einzelnen Komponenten mit einer hohen zeitlichen Auflösung genau messen konnte. Dies erlaubte mir, Lastspitzen und deren Ursachen zu ermitteln, sowie ein Modell des Stromverbrauchs des Roboters basierend auf seinen durch die Software gesteuerten Tätigkeiten zu erstellen.
Beispiel: Stromfluss durch eine WS2812B RGB-LED bei einer nicht weißen Farbe (1 mV = 1 mA)
Modellierung und Verwaltung des Stromverbrauchs zur Laufzeit
Um den aktuellen Status des Roboters während der Laufzeit zu verfolgen, wurde eine Klasse namens
PowerManagerentwickelt, die Werkzeuge für die allgemeine Modellierung des Energiestatus des Roboters bereitstellt, wie z. B. den Ladezustand der Batterie und den Status der Stromversorgung.Darüber hinaus umhüllt der
PowerManagereine zweite Klasse, denPowerScheduler, der die oben genannten Messungen nutzt, um alle stromverbrauchenden Komponenten des Roboters, wie Motoren, LEDs und Sensoren, sowie deren aktuellen Status zu verfolgen. Auf dieser Grundlage kann er den aktuellen Stromverbrauch des Roboters ohne tatsächliche Messvorrichtungen schätzen.Beispiel des Stromflusses, wie durch den PowerScheduler modelliert
Eingriff in das Nutzerprogramm und Informationen zur Laufzeit
Der in den ersten beiden Schritten gewonnene Überblick wird dann verwendet, um das Laufzeitverhalten zu modifizieren. Ein klassisches Energiemanagement ist in diesem Zusammenhang nicht anwendbar, da das tatsächlich auf dem Roboter ausgeführte Programm vom Benutzer über die Arduino-IDE geschrieben wird.
Um dies zu umgehen, wurde die Dezibot-Bibliothek, die vorgesehene Abstraktionsschicht für Benutzer dieses Roboters, so modifiziert, dass sie den Stromverbrauch kooperativ mit dem
PowerSchedulerkoordiniert. Falls nicht genügend Strombudget übrig ist, um die beabsichtigte Aktion sicher auszuführen, wird der Benutzer über die serielle Ausgabe (Standard-UART) des ESP32 informiert und die Aktion nicht ausgeführt. Bei typischer Verwendung bedeutet dies, dass informative Meldungen im seriellen Monitor der Arduino-IDE angezeigt werden, anstatt dass der Roboter unerwartetes und schwer nachvollziehbares Verhalten (z. B. Resets oder Abstürze) zeigt, was für den vorgesehenen Anwendungsfall nachteilig wäre.Beispiel für eine solche Ausgabe:
9:21:21.767 -> [ 15441][W][PowerScheduler.cpp:167] waitForCurrentAllowance(): [Power] Task 0x3fcec210 timed out waiting for 12.000000 mA of power;currently allocated: 155.925003 mA;total available (norm/max): 120.000000/240.000000 mA 9:21:21.798 -> [ 15460][W][MultiColorLight.cpp:41] setLed(): [MultiColorLight] Power to set LED RGB TOP RIGHT to color 0x0096002B not granted in time. Skipping.