STM32. Gewichtsverlust Praxis oder Diät für den Controller



Was für ein Unsinn, werden einige Leser wahrscheinlich denken, wenn sie den Titel der Veröffentlichung sehen. Hat der Autor einen Fehler in der Ressource gemacht? Oder war geplant, es im Hub "Geek Health" zu platzieren? Und sie werden teilweise richtig sein, aber nur teilweise ... Unter dem Strich werden wir über eine Methode zur Reduzierung und Optimierung des Energieverbrauchs elektronischer Geräte sprechen.


Vor einiger Zeit fiel mir das X-NUCLEO-LPM01A-Board in die Hände, das vorerst im Leerlauf war, bis ich mich entschied, den Stromverbrauch eines bestimmten Geräts mit autonomer Leistung zu untersuchen.



Diese Karte wurde von STMicroelectronics entwickelt und ist als "Power Shield, Nucleo-Erweiterungskarte zur Messung des Stromverbrauchs" positioniert. Ich fand im Netzwerk keine erklärende Beschreibung in russischer Sprache für die Arbeit mit diesem Devkit und beschloss, es selbst herauszufinden und gleichzeitig Informationen mit der angesehenen Habro-Community zu teilen.


Wenn wir die wichtigste hervorheben, ist die Erweiterungskarte eine programmierbare Stromquelle von 1,8 bis 3,3 Volt mit der Fähigkeit, den Laststrom in Echtzeit (im dynamischen Modus bis zu) zu messen
50 mA) mit einer Abtastfrequenz von bis zu 100 kHz. Das Gerät kann sowohl unabhängig als auch als Teil eines Hardware-Software-Komplexes betrieben werden. Zur grafischen Anzeige der Messwerte wird das Dienstprogramm STM32Cube MonitorPower verwendet . Mit dieser Software können Sie auch alle erforderlichen Parameter einstellen und die Verarbeitung beim Auftreten eines Ereignisses durchführen (Triggerstart). X-NUCLEO-LPM01A ist für die Arbeit mit Nucleo-32 (64, 144), Arduino Nano (Uno) Boards geschärft. Zu diesem Zweck werden die entsprechenden Abschirmungen darauf platziert, es ist jedoch möglich, mit beliebigen Boards zu arbeiten. Das Foto unten zeigt den Anschluss des untersuchten Geräts an einen der Anschlüsse auf der Platine.




Zusätzlich zur Anwendungssoftware unterstützt X-NUCLEO-LPM01A den Befehlsmodus, für den jedes Terminalprogramm funktionieren sollte . (Hier scheine ich ein wenig aufgeregt zu sein, HTerm wurde mit einem halben Tritt aufgewickelt , aber ich musste ein bisschen mit meinem Lieblings-ZOC spielen). Darüber hinaus kann das Gerät gemäß der Beschreibung mithilfe des VCP-Treibers Daten mit einer Geschwindigkeit von bis zu 3686400 Baud in den COM-Port einspeisen. Eine derart hohe Geschwindigkeit wird insbesondere durch die Übertragung eines binären Datenstroms (für Abtastfrequenzen über 50 kHz) sichergestellt, bei ASCII-Zeichen ist die Geschwindigkeit etwas geringer.


Die Aufgabe, die ich mit X-NUCLEO-LPM01A zu lösen versuchen werde, ist:

  1. Um Informationen über den dynamischen Stromverbrauch der interessierenden Knoten im entworfenen Produkt zu erhalten, verwenden Sie den Trigger-Trigger X-NUCLEO-LPM01A an den untersuchten Stellen des Programmcodes.

  2. Im Prozess des kontinuierlichen Betriebs der Vorrichtung, um die Akkumulation der notwendigen Fragmente für die anschließende verallgemeinerte Analyse zu organisieren.


Der folgende Screenshot zeigt das aktuelle Protokoll der SD-Karte während der Datenaufzeichnung.




Mit STM32Cube MonitorPower kann nicht nur qualitativ, sondern auch der Energieverbrauch des untersuchten Geräts quantifiziert werden. Die minimalen, maximalen, durchschnittlichen Werte des verbrauchten Stroms und des integrierten Energiewertes werden im unteren Teil des Bildes angezeigt. Solche Daten sind sowohl für die gesamte Messung als auch für das ausgewählte Fragment verfügbar.


In der Bedienungsanleitung wird darauf hingewiesen, dass die Triggerauslösung der Messung durch einen Impuls am Bein des D7-Arduino-Schildes erfolgt. Wie sich herausstellte, funktioniert nur ein einziger Start des Prozesses mit anschließender kontinuierlicher Aufzeichnung. Ein Versuch, einen Start-Stopp-Modus für die Stromaufzeichnung (an beiden Fronten des Impulses) zu organisieren, war erfolglos. Das heißt, sobald die Aufnahme an der richtigen Stelle an der ansteigenden Front beginnt, ist es nicht möglich, den Prozess mit einer abfallenden Front des Impulses zu verlangsamen. Und das ist nicht ganz das, was ich von diesem Gerät erwartet habe.


Ein vollständig gesteuerter Start-Stopp-Modus kann über die Befehlsfolge aus dem Terminalprogramm eingestellt werden

das Team

die Beschreibung

htc

Host-Steuerungserfassung

Volt 3300-03

Versorgungsspannung am gemessenen Kanal 3300 mV

acqtime 0

kontinuierliche Messung ohne zeitliche Begrenzung

Frequenz 10000

Abtastfrequenz 10 kHz

starten

Beginn der Messung

...

Messung (Daten werden in das Terminal eingegossen)

hör auf

Ende der Messung


Das Problem ist, dass dies eine manuelle Steuerung ist, die nicht mit den Ereignissen in der Zielsteuerung synchronisiert ist. Natürlich können Sie versuchen, die angegebene Befehlsfolge auf der Seite des zu untersuchenden Geräts zu bilden, nicht auf dem Host, aber dann wird auch der Datenausgabestream von X-NUCLEO-LPM01A in den Controller gestreut, und es ist nicht klar, was mit ihnen zu tun ist, und die Umleitung der Ausgabe "irgendwo_ an einen anderen Ort" ist ebenfalls nicht verfügbar ( Obwohl sich UART Tx- und Rx-Pins auf der Platine befinden, werden diese im Handbuch als "reserviert" angezeigt und sind wahrscheinlich nicht an der aktuellen Firmware-Version beteiligt. Ich bin wie folgt aus dieser Situation herausgekommen:


Die folgende Befehlsfolge wird auf der Hostseite (Computer) gebildet

das Team

die Beschreibung

htc

Host-Steuerungserfassung

Volt 3300-03

Versorgungsspannung am gemessenen Kanal 3300 mV

acqtime 1

Messdauer
(Ein Bereich von 10 μs bis 10 Sekunden kann verwendet werden.)

trigsrc d7

Synchronisation des Messbeginns mit steigender Flanke
Impuls an Pin D7

Frequenz 10000

Abtastfrequenz 10 kHz

starten

Beginn der Messung

...

Messung (Daten beginnen am Rand des Impulses und hören auf
nach der in acqtime angegebenen Zeit einfüllen)


Jetzt werden die Daten stapelweise und nicht mehr kontinuierlich erfasst. Mit diesem Ansatz können Sie den Verbrauch der Schaltung an verschiedenen Stellen des Programms und in verschiedenen Zeitintervallen untersuchen, die ziemlich weit voneinander entfernt sind. Das heißt, wenn Informationen über den Energieverbrauch eines Geräts gesammelt werden müssen, das eine Stunde (Tag, Woche) arbeitet, müssen Sie keinen kontinuierlichen Stream und sogar mit einer maximalen Abtastrate schreiben und dann dieses Durcheinander verstehen, sondern nur den oben genannten Betriebsalgorithmus bereitstellen. Und wenn das Terminalprogramm Zeitmarkierungen in sein Protokoll schreibt, wie in der folgenden Abbildung gezeigt, ist es recht einfach, den Ereignisverlauf aus einer solchen Datei zu analysieren.




Es ist wie ein Videorecorder mit Bewegungserkennung und Zeitstempeln.


Lassen Sie mich ein paar Screenshots geben, die mit X-NUCLEO-LPM01A aufgenommen wurden . Der erste ist der Stromverbrauch des Controllers beim Lesen von Daten vom eingebauten ADC. 32 Werte werden per Timer-Interrupt mit einer Frequenz von 4 kHz gelesen und gespeichert.




Beim zweiten - ähnliches Lesen und Speichern von Daten, aber nur die Steuerung "lässt sich nach jeder Messung" schlafen ", bis der nächste Timer-Interrupt auftritt, wobei einer der verfügbaren Energiesparmodi verwendet wird.




Ein signifikantes Delta der Stromaufnahme während der Messung, ~ 6 mA, ist sofort erkennbar. Diese beiden Beispiele erheben keinen Anspruch auf Optimierung des Stromverbrauchs von Geräten mit geringem Stromverbrauch, sondern demonstrieren nur die Leistungsfähigkeit des X-NUCLEO-LPM01A , der Ströme ab 1 nA messen kann.


Abschließend möchte ich sagen, dass dieses Devkit meiner bescheidenen Meinung nach ein perfekt geeignetes Werkzeug zu sein scheint, das seinen rechtmäßigen Platz neben dem Oszilloskop und dem Logiksignalanalysator auf dem Einbettungstisch einnehmen kann. Die Verwendung des beschriebenen Ansatzes ermöglicht es nicht nur, den Appetit des Controllers bei der Entwicklung leistungskritischer Geräte zu „mildern“, sondern auch die Dynamik von Prozessen in den verschiedenen Energiesparmodi, die von Entwicklern moderner elektronischer Geräte aktiv genutzt werden, besser zu verstehen.


Die Kosten für das Board - mehr als 7000 Rubel - überschatten den Regenbogen des Bildes, aber kann eine so unbedeutende Menge in der heutigen Zeit einen echten Geek davon abhalten, dieses wunderbare Devkit zu besitzen?


PS Trotz des Hinweises in UM, dass UART für zukünftige Anwendungen reserviert ist, habe ich mich immer noch daran gehalten und festgestellt, dass es als zweite Schnittstelle (E / A wird von VCP dupliziert) mit einer Geschwindigkeit von 921600 8N1 ausgeführt wird und als Befehl verwendet werden kann Start und Stopp für den Anfang - das Ende der Messung. Der Nachteil dieses Ansatzes ist die obligatorische Verfügbarkeit von freiem UART auf der Seite des untersuchten Controllers, ganz zu schweigen von der Tatsache, dass 921600 Bauds bei niedrigen Taktfrequenzen häufig unmöglich sind.


PPS Bereits nach dem Schreiben des Artikels bemerkte ich einen Unterschied in den letzten Bildern von ~ 2 mA am Eingang zur Messung und am Ende. Ich habe die ADC-Taktung wahrscheinlich nicht ausgeschaltet oder den Timer zum Arbeiten gelassen, aber das ist, wie Leonid Kanevsky gerne sagt: "Eine ganz andere Geschichte" ...


Source: https://habr.com/ru/post/de441668/


All Articles