Die Erfassung des Energieverbrauchs von Geräten auf Mikrocontroller-Basis ist keine triviale Aufgabe. Wie bei jedem Computer-Chip hängt der benötigte Strom stark von der aktuellen Rechenlast und vom Betriebszustand ab. Dabei ist nicht nur an Normalbetrieb und Standby oder Deep Sleep States zu denken, bei denen die Stromaufnahme gängiger Mikrocontroller zwischen weniger als 1 µA und mehreren hundert mA variieren kann. Auch eine zu gewissen Zeiten aktive und inaktive Peripherie haben wechselnde Verbräuche zur Folge. Um diesem dynamischen Geschehen Rechnung zu tragen und eine halbwegs realistische Abschätzung der Betriebsdauer mit verschiedenen Batterie- oder Akkutypen vornehmen zu können, ist ein spezialisiertes Tool wie BattLab One sehr hilfreich.

Was ist BattLab One?

Im Bereich der Stromverbrauchs-Messungen haben sich seit längerer Zeit sogenannte SMUs (Source Measuring Units) bewährt. Darunter versteht man Messsysteme, die einerseits als Netzgerät zur Versorgung des Zielsystems dienen, und andererseits mehr oder weniger aufwändige Messungen des Stromverbrauchs über bestimmte Zeitspannen durchführen. Klassiker in diesem Bereich sind die von Keithley gefertigten Batteriesimulatoren.

BattLab One zielt auf eine ähnliche Anwendung, liegt aber mit einem Preis von unter 100 € in einer anderen Liga. Elektor verkauft das Gerät [1] in der im Metallgehäuse eingebauten Variante. In Bild 1 ist links die USB-Typ-B-Buchse nebst einer BNC-Buchse als Trigger-Eingang zu sehen. Rechts sind zwei 4-mm-Buchsen platziert, an die das DUT (Device Under Test) angeschlossen werden kann. Bild 2 zeigt, dass sich deren Kunststoffisolation vorschrauben lässt, so dass man leicht Leitungen mit Krokodilklemmen anschließen kann. Ein genauer Blick bringt zum Vorschein, dass die beiden schwarzen Endkappen des Aluprofils wohl per 3D-Druck hergestellt wurden.

Bild 1. Die Elektronik des BattLab One, vor und nach dem Einbau in ein Alugehäuse.
Bild 2. Anschluss von Kabeln mit Krokodilklemmen an die Bananenbuchsen des BattLab One.

BattLab One wird via USB versorgt und ist in der Lage, Geräte mit verschiedenen typischen Spannungen von 1,2 bis 4,5 V und Strömen bis maximal 450◦mA zu versorgen. Mitgeliefert wird eine Gruppe von Entladungsprofilen häufig verwendeter Akkus mit Li-Ion-, LiFePO4-, Alkali-, NiMh- und NiCd-Technologie, die für die Berechnungen verwendet werden. Weitere Feinheiten wie Last- und alterungsabhängige Spannungsabfälle berücksichtigt BattLab One nicht. Laut Hersteller bietet das Messgerät eine grundlegende Batterie-Simulation und einen von 10 µA bis 500 mA reichenden Strommessbereich. Integriert ist ein ADC mit 16 bit Auflösung bei einer Abtastrate von 1 kHz.

BattLab One und Linux

Der Hersteller Bluebird Labs entwickelte die zum Gerät gehörende Software unter Python. Als ersten Versuch wollte ich das System daher direkt unter Ubuntu 20.04 LTS zum Laufen bringen. Der Quellcode der Software steht bei GitHub [2] bereit und kann mit den üblichen Verfahren kompiliert werden. Allerdings geht Bluebird Labs mit pipenv einen Sonderweg. Wer wie ich nur die gewöhnliche Variante venv installiert hat, muss pipenv daher nachinstallieren. Bei mir ging das wie folgt:

tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ sudo apt install pipenv

Bei der Einrichtung des Virtual Environments gab es erste Probleme, da Python in der Version◦3.7. vorausgesetzt wird. Will man wie ich eine neuere, z.B. die unter Ubuntu 20.04 LTS vorinstallierte Version 3.8 verwenden, ist noch folgendes notwendig:

tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ which python3 

/usr/bin/python3 

tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ pipenv install --dev --python /usr/bin/python3

Während der Ausführung der folgenden Kommandos wird sich die Software permanent beschweren (siehe Bild 3). Deshalb wird das Virtual Environment nach folgendem Schema aktiviert. Es bleibt wie ein normales venv-Environment aktiv, bis das Terminalfenster geschlossen wird:

tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ pipenv shell

. . .

Bild◦3. PipEnv-Fehlermeldung.

Eigentlich wäre die Ausführung der drei .py-Dateien mit der Software nun nach folgendem Schema möglich:

(BattLab-One-CK7P-15V) tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ python3 BattLab-Release_V1.2.1.py

Traceback (most recent call last):

  File "BattLab-Release_V1.2.1.py", line 59, in <module>     

import pkg_resources.py2_warn 

ModuleNotFoundError: No module named 'pkg_resources.py2_warn'

Leider hält sich Blue Bird Labs nicht an die Vorgaben der Setuptools, sondern inkludiert eine Bibliothek explizit, die nur in wenigen Versionen der Setuptools zur Verfügung steht. Daher wird die .py-Datei geöffnet und die folgende Passage entfernt:

import pkg_resources.py2_warn

Jetzt hat die Software ein Problem mit den lokalen Pfaden:

(BattLab-One-CK7P-15V) tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ python BattLab-Release_V1.2.1.py 

. . . 

_tkinter.TclError: error reading bitmap file "icons\bbirdlogo.xbm" 


Die Lösung besteht darin, das TK-Inter-GUI durch Entfernung der Zeile

root.iconbitmap(bitmap=GetIconPath())

vom Programmsymbol zu befreien. Bei dieser Gelegenheit sollte man nach folgendem Schema eine Anpassung des Datei-Pfads durchführen:

img = PhotoImage(file='/home/tamhan/BattLabonespace/BattLab-One/icons/bbirdlogo_png1.png')

Der nächste Ausführungsversuch zeigt dann, dass die TK-Inter-Umgebung im falschen Ordner nach der Datei bblogo.gif sucht:

_tkinter.TclError: couldn't open "/home/tamhan/.local/share/virtualenvs/BattLab-One-CK7P-15V/lib/python3.8/site-packages/matplotlib/mpl-data/images/bblogo.gif": no such file or directory

Man kopiere daher eine beliebige GIF-Datei in dieses Verzeichnis und gebe ihr den passenden Namen. Wenn man jetzt noch die folgende Zeile auskommentiert, kann man das Programm mit leicht eingeschränktem Funktionsumfang starten (siehe Bild 4):

#toolbar.children['!button8'].config(command=select_range)
 
Bild 4. So zeigt sich die Oberfläche der BattLab-Software.

Die Deaktivierung des Messbereichsknopfs erweist sich in der Praxis als unkritisch, weil sich das MatPlotLib-Diagramm bezüglich Usability sowieso problematisch gibt. So erscheinen viele Labels abgeschnitten und die Größe des Fensters lässt sich nicht anpassen.

Wie noch gezeigt wird, gestaltet sich die Verwendung unter Windows 10 angenehmer. Vor einem Betriebssystemwechsel kann man das angelegte Virtual Environment aber noch beseitigen, um Massenspeicherplatz zu sparen:

(BattLab-One-CK7P-15V) tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ exit 

exit 

tamhan@TAMHAN18:~/BattLabonespace/BattLab-One$ cd /home/tamhan/.local/share/virtualenvs/BattLab-One-CK7P-15V 

tamhan@TAMHAN18:~/.local/share/virtualenvs/BattLab-One-CK7P-15V$ rm * -rf 

tamhan@TAMHAN18:~/.local/share/virtualenvs/BattLab-One-CK7P-15V$ ls

BattLab One unter Windows 10

Hier ist die Situation insofern einfacher, als fertige .exe-Dateien unter [3] bereitgestellt werden. Das Zip-Archiv enthält unter anderem den Unterordner SOC_profiles, der Batterie-Profile in Tabellenform enthält. Man muss das Archiv daher entzippen.

Ein Start der Datei BattLab-Release_V1.2.3.exe führt zur schon von Bild 4 bekannten Anzeige. Die Windows-Software verhält sich weitestgehend analog zur Linux-Version, weist aber weniger Rendering-Fehler auf. Als Erstes wählt man oben links den Batterie-Typ aus. Die Daten der Profile dienen zur Anzeige des unten rechts eingeblendeten Diagramms. Rechts neben dem Feld PSU Output kann man den ins Gerät integrierten Spannungswandler aktivieren, um das an die beiden Buchsen angeschlossene DUT zu versorgen.

Ich arbeite seit längerer Zeit am Projekt HygroSage – ein IoT-Sensor, der ob seines Farbdisplays und seines leistungsstarken Prozessors eigentlich ein gutes Messobjekt für BattLab One sein sollte. Also habe ich den Sensor angeschlossen. Dann kam ein Klick auf die Option Capture Active, woraufhin die Software einen flackernden Fortschrittsbalken einblendete und 10 s lang nichts Sichtbares tat. Während dieser Zeit erfasst das System Informationen und zeigt sie anschließend wie in Bild 5 zu sehen an.

 

Bild 5. BattLab One erfasst und zeigt den Stromverbrauch eines DUT an.

Die Messwerte kann man sich in den Diagrammen via Cursor anzeigen lassen. In der Praxis funktioniert dies aber nicht ganz so überzeugend, weil die in der Textbox unten eingeblendeten Werte nicht dem Messwert, sondern dem Mauszeiger folgen. Man muss also den Mauszeiger daher auf den Mittelpunkt der Kurve legen. Außerdem gibt es keinen wirklich bequemen Weg, um in das (per MatPlotLib erzeugte) Diagramm zu zoomen. Trotz einer Full-HD-Auflösung meines Bildschirms ließ sich das Programm nicht maximieren, was der Usability abträglich ist.

Außerdem schaltete ich testweise ein kalibriertes und hochwertiges Multimeter in Reihe zum DUT. Dabei ergab sich ein Strom um die 32 mA. BattLab One stimmte damit nicht wirklich überein – offensichtlich produzierte der Schaltreglers des Typs MCP1640 im DUT Störungen, die BattLab One auch tatsächlich stören. Als zweiter Test wurde BattLab One bei einer Ausgangsspannung von 3 V mit einem 1-kΩ-Widerstand belastet. Es ergab sich die leicht verrauschte Kurve von Bild 6. Das Parallelschalten eines 100–µF-Elkos führte nicht zu einer wesentlichen Glättung.

 

Bild 6. Die Kurve mit dem Strom eines 1-kΩ-Widerstands an 3◦V stimmt zwar, ist aber leicht verrauscht.

Optimierung des Stand-by-Stromverbrauchs

Systeme mit relativ konstanten Versorgungsströmen sollten sich auch mit preiswerten Multimetern problemlos erfassen lassen. Spannender wird es daher, wenn es um die Analyse des Stand-by-Modus geht. Die zugehörige Option der Software ist Step3. Man erfasst das Verhalten im Sleep Mode manuell durch Anklicken von Capture Sleep. Außerdem kann man hier den Strombereich zwischen 10uA◦-◦800uA oder 800uA - 500mA umschalten. Im niedrigen Messbereich darf man aber nicht zu viel Strom ziehen. Laut Dokumentation führen Lastströme über 250 mA zur Beschädigung der Hardware.

Ein Test mit Hygrosage zeigt die Resultate von Bild 7. In Step4 zeigt das System dann errechnete Werte an. Dem Hygrosage wurde vom BattLab One eine Batterielebensdauer von nur drei Tagen bescheinigt. Praktische Versuche kamen auf andere Laufzeiten. Ursache ist, dass der im Feld Active Event Duration eingestellte Wert quasi in die Ewigkeit interpoliert. Bei vernünftigen Werten fallen die Ergebnisse sofort vernünftiger aus. Dabei muss man dann permanent auf Optimise klicken, um die Software zur Aktualisierung der Vorhersage-Werte zu animieren.

 

Bild 7. Die Erfassung des Energieverbrauchs im Schlafzustand des DUT ist befriedigender.

BattLab One ist aufgrund der vergleichsweise langen möglichen Registrierungsdauer in der Lage, Probleme durch spontanes Aufwachen eines DUTs zu erfassen. Problematisch ist dabei allerdings, dass BattLab One nur einen kleinen Teil der Messzeit tatsächlich registriert. Fällt das Ereignis nicht in eine Registrierungsperiode, so wird es nicht erfasst. Und genau das ist nicht unwahrscheinlich.

Fazit

Die Hardware des BattLab One ist durchaus brauchbar. Leider gilt dies nicht in gleichem Maße für die Software. Ich selbst musste dabei öfter umdenken, da ich professionellere Lösungen gewohnt bin. Andererseits ist es ob des quelloffenen Designs (mit etwas Aufwand) möglich, eine eigene, bessere Software zu kreieren. Bezüglich Hardware macht BattLab One vieles richtig und nur wenig falsch – der Preis ist zudem gemessen an der Leistung wirklich gering