Het is niet eenvoudig om een consistente meting van het energiegebruik van een apparaat met een microcontroller te doen. Zoals bij elke computerchip is het vermogensverbruik sterk afhankelijk van de momentaan gebruikte rekenkracht en de operationele status. We moeten niet alleen rekening houden met normaal, standby- en deep sleep-gedrag, waarbij het stroomverbruik van gebruikelijke microcontrollers kan variëren tussen minder dan 1 µA en meerdere honderden milliampères (mA). Sommige periferie in de chip kan ook alleen op bepaalde momenten actief zijn, wat ook weer het stroomverbruik beïnvloedt. Een gespecialiseerd gereedschap, zoals BattLab-One, is daarbij heel nuttig: het kan rekening houden met dit dynamische gedrag en een vrij realistische inschatting maken van de levensduur van verschillende batterijtypes.

Wat is BattLab-One?

Bij metingen van vermogensverbruik is een Source Measure Unit (SMU) een nuttig gereedschap om op de werkbank te hebben. Het is een soort voeding voor het Device Under Test (DUT) en doet ook nauwkeurige metingen van het vermogensverbruik over gedefinieerde tijdsperioden. Professionele SMU’s worden bijvoorbeeld gefabriceerd door Keithley. De BattLab-One van Bluebird Labs vervult een soortgelijke functie, maar dan voor een prijs van minder dan €100.
Het apparaat (inclusief metalen behuizing) is verkrijgbaar in de ElektorShop [1].

In figuur 1 ziet u links het USB-B-socket en een BNC-connector als input voor een triggersignaal. Rechts zitten de twee 4mm-bussen, waaruit het DUT wordt gevoed. In figuur 2 ziet u hoe de plastic kraagjes kunnen worden losgedraaid om krokodilklemmen aan te sluiten. U kunt aan het oppervlak van het kapje ook zien, dat het in een 3D-printer is gemaakt.

 

Figuur 1: De BattLab-One in zijn aluminium behuizing..
Figuur 2: Aansluiten van krokodilklemmen.

BattLab-One wordt gevoed uit de USB-poort van een computer en kan apparaten voeden met een spanning van 1,2 tot 4,5 V en een stroom tot 450 mA. De ontladingsprofielen van veel gebruikte accutypes (zoals Li-Ion-, LiFePO4-, alkaline-, NiMh- en NiCd-technologie) zitten in de software en worden gebruikt om de verwachte batterijlevensduur te berekenen. BattLab-One houdt geen rekening met subtiliteiten zoals spanningsdaling bij belasting en veroudering van de accu. Volgens de fabrikant biedt dit meetapparaat een eenvoudige batterijsimulatie en een stroommeetbereik van 10 µA tot 500 mA. De stroom naar het DUT wordt gemeten met een 16-bits ADC bij een bemonsteringsfrequentie van 1 kHz.

BattLab-One en Linux

De software voor het apparaat is door Bluebird Labs ontwikkeld in Python. Om te beginnen wilde ik het systeem laten werken onder Ubuntu 20.04 LTS. De broncode is beschikbaar op GitHub [2] en is op de gebruikelijke manieren te compileren. Maar Bluebird Labs heeft voor een eigen aanpak gekozen door te werken met pipenv. Als U, net als ik, alleen het gebruikelijke venv hebt, zult u pipenv moeten installeren. Bij mij ging dat als volgt:

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

De problemen begonnen al bij het opzetten van de virtuele omgeving, want er wordt aangenomen dat Python versie 3.7 is geïnstalleerd. Als u, net als ik, een nieuwere versie wilt gebruiken (versie 3.8 is voorgeïnstalleerd in Ubuntu 20.04 LTS), moet u de volgende commando’s geven:

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

/usr/bin/python3

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

Nu kunnen we een virtualenv gaan maken voor dit project. De software geeft warnings (figuur 3) als de commando’s worden ingevoerd. De virtuele omgeving wordt dus geactiveerd volgens het volgende schema. Hij blijft, net als een normale venv-omgeving, actief totdat het terminalvenster wordt gesloten:

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

. . .

Figuur 3: Foutmelding van PipEnv.

We kunnen nu de drie .py-files met de software uitvoeren op de volgende manier:

(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'

Helaas houdt Bluebird Labs zich niet aan de specificatie van de setup-tool maar neemt expliciet een bibliotheek mee die alleen beschikbaar is in bepaalde versies van de setup-tool. Open de .py-file en verwijder het volgende statement:

import pkg_resources.py2_warn

Nu heeft de software een probleem met de lokale paden:

(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"

De oplossing is de TK-Inter-GUI te openen door de volgende regel te verwijderen:

root.iconbitmap(bitmap=GetIconPath())

Dit verwijdert het icon van het programma. We kunnen nu het pad aanpassen met:

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

Als we het programma nu opnieuw proberen te draaien, zien we dat de TK-Inter-omgeving het bestand bblogo.gif zoekt in de verkeerde map:

_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

U kunt dus een willekeurig GIF-bestand naar die directory kopiëren en het de juiste naam geven. Als u nu de volgende regel uitcommentarieert, kunt u het programma starten met een enigszins beperkte functionaliteit (zie figuur 4):

#toolbar.children['!button8'].config(command=select_range)

Figuur 4: De BattLab Linux GUI.

Het deactiveren van de meetbereikknop blijkt niet zo’n probleem, want het MatPlotLib-diagram is sowieso niet erg bruikbaar. Veel labels worden maar gedeeltelijk weergegeven en de grootte van het venster kan niet worden aangepast.

We zullen zien dat het programma een stuk beter werkt onder Windows 10. Voordat we overgaan naar een ander besturingssysteem, kunnen we even opruimen door de aangemaakte virtuele omgeving te verwijderen:

(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 onder Windows 10

De situatie is hier een stuk gemakkelijker, omdat er kant-en-klare .exe-files beschikbaar zijn onder [3]. Het ZIP-archief omvat, onder meer, een map SOC_profiles, met de verschillende accuprofielen in een tabel. Pak de bestanden uit.

Als u BattLab-Release_V1.2.3.exe uitvoert, ziet u een gebruikersinterface die sterk lijk op de Linux-versie in figuur 4. De Windows-versie gedraagt zich grotendeels hetzelfde maar heeft minder weergavefouten. Eerst kunnen we linksboven het accutype kiezen. De accugegevens worden gebruikt om de karakteristieke ontladingscurve rechtsonder weer te geven. Rechts van het veld PSU Output vindt u On- en Off-knoppen om de geïntegreerde spanningsregelaar te schakelen. Deze voedt het DUT dat is aangesloten op de output.

Ik werk al een tijdje aan mijn eigen IoT-sensorproject HygroSage. Het heeft een kleurendisplay en een krachtige processor en leek me een ideale kandidaat om BattLab-One mee te testen. Ik sloot de sensor aan. Na een klik op Capture Active toonde de software een flikkerende groene voortgangsbalk met de titel Active Event Current. 10 seconden lang leek er niets te gebeuren. Het systeem gebruikte die tijd om te meten en kwam toen met het resultaat in figuur 5.

 

Figuur 5: BattLab-One registreert en toont het stroomverbruik van het DUT.

De waarde van elk punt op de curve is weer te geven met behulp van de cursor. Helaas werkt dat niet overtuigend omdat de weergegeven waarde niet de gemeten waarde is, maar de positie van de muiswijzer op de curve. U moet dus zelf de muiswijzer op de curve houden om de gemeten waarde af te lezen. Er is ook geen gemakkelijke manier om in te zoomen in het diagram (gegenereerd door MatPlotLib). Ondanks de full HD-resolutie van mijn scherm kon ik de gebruikersinterface niet groter maken. Ik kom wel een deel van de curve selecteren met de functie Zoom to Rectangle.

Om te testen, sloot ik een gekalibreerde, hoogwaardige multimeter aan in serie met het DUT en mat een stroom van ongeveer 32 mA. BattLab-One was het daar niet mee eens. Mogelijk veroorzaakt de schakelende regelaar MCP1640 in de BattLab-One storing in de meting. Als tweede test gebruikte ik een 1kΩ-weerstand als belasting voor BattLab-One en stelde een uitgangsspanning van 3 V in. Het resultaat was de curve met kwantisatieruis in figuur 6.< Een elco van 100 µF parallel aansluiten gaf geen noemenswaardige verbetering in de gekwantiseerde stroomverbruikscurve.
 

Figuur 6: Curve van de stroom door een 1kΩ-weerstand bij 3 V met duidelijk zichtbare storing.

Meten in slaaptoestand en optimaliseren

Als het actieve stroomverbruik is gemeten in Stap 2, kunnen we verdergaan naar Stap 3 om de stroom in slaaptoestand te meten. We moeten dus zorgen dat het DUT in slaaptoestand is wanneer we meten. We voeren weer de parameters in zoals bij Stap 2 voor de actieve modus. Tenzij u grote fouten hebt gemaakt bij uw ontwerp, zal het vermogensverbruik veel kleiner zijn in slaaptoestand. U kunt kiezen uit een stroombereik van 10 µA-800 µA of 800 µA-500 mA voor een optimale resolutie. Let op dat het apparaat niet teveel stroom mag trekken in het lage meetbereik. Volgens de documentatie kan een belastingsstroom van meer dan 250 mA de hardware beschadigen. Breng het DUT in slaaptoestand en druk op Capture om de stroom te meten.

De resultaten na een test met HygroSage zijn te zien in figuur 7. In Stap 4 laat het systeem de berekende waarden zien. Met die gegevens kunnen we gaan experimenteren met de accu-eigenschappen en -capaciteit en de actief- en slaaptijd en dan op Optimize klikken om te zien welke gebruiksduur we kunnen verwachten als het apparaat wordt ingezet in het veld.
 

Figuur 7: Optimaliseren van de gebruiksduur met behulp van de gemeten stroomwaarden slapen en de accucapaciteit.

De voorspelling zal redelijk nauwkeurig zijn voor apparaten met een vaste actieve en slaapperiode. Sommige apparaten worden gewekt door een interrupt van buiten af. In dat geval kunnen we alleen werken met een schatting van hoe vaak we die interrupts kunnen verwachten.

Conclusie

De hardware van BattLab-One is behoorlijk bruikbaar. Maar bij de software is ruimte voor verbetering. Het is een open source-ontwerp, dus we kunnen verwachten dat er verbeteringen uit de community komen. Dat geeft u de kans om de interne werking van BattLab-One te onderzoeken en zelfs om de software aan te passen en te verbeteren voor uw eigen toepassing. Als het gaat om de hardware, doet BattLab-One veel dingen goed en maar heel weinig verkeerd. De lage prijs en grote prestaties maken hem een goede toevoeging aan de werkbank voor ontwikkelaars van IoT-apparaten.

Vertaling: Evelien Snel