Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Wie niedrig (Energie) können Sie gehen?

In meinem letzten Beitrag, „Grundlagen des Arm Cortex-M Low-Power-Modus“, haben wir die Grundlagen der Low-Power-Modi untersucht, die auf jedem Arm Cortex-M-Prozessor zu finden sind, und wie wir die WFI- und WFE-Anweisungen nutzen können, um einen Prozessor zu installieren schlafen. Die Frage, die wirklich bleibt, ist jedoch, wie diese Low-Power-Modi auf einem echten Mikrocontroller implementiert werden und wie sich diese Modi auf unser eingebettetes System auswirken. In diesem Beitrag werden wir genauer untersuchen, wie wir einen Mikrocontroller in den Ruhezustand versetzen können und sehen, wie viel Energie uns das kostet.

Experimentieren im Energiesparmodus

Der beste Weg, um Energiesparmodi zu erkunden, besteht darin, einen Mikrocontroller auszuwählen und den Prozessor tatsächlich in verschiedenen Energiesparmodi zu betreiben. Für diesen Beitrag habe ich beschlossen, mein bewährtes NXP Kinetis-L Freedom Board abzustauben, mit dem ich nicht nur experimentiert, sondern in vielen Produkten, Anwendungen und Kursen verwendet habe. Ich entschied mich auch, richtig oder falsch, nicht nur die Energiemenge zu messen, die der Mikrocontroller verbrauchte, sondern das gesamte Entwicklungsboard. Die MCU ist normalerweise eines der stromhungrigsten Geräte auf einem Board, aber ich habe oft festgestellt, dass die Messung des gesamten Systemstroms mich daran erinnert, dass es nicht der einzige Energieverbraucher auf dem Board ist. Die Optimierung des Mikrocontrollers kann einen langen Weg in Anspruch nehmen, aber er ist nicht immer das einzige Gerät, das möglicherweise eine Energieoptimierung erfordert.

Beginnen Sie mit einer Grundlinienmessung

Immer wenn ich daran arbeite, den Energieverbrauch eines Produkts zu optimieren, beginne ich zunächst mit einer Basisenergiemessung. Dies geschieht normalerweise durch eine Profilerstellung der Stromaufnahme des Geräts über mehrere Sekunden oder Minuten, um zu verstehen, wo wir beginnen. Für mein Entwicklungsboard-Experiment habe ich die Kinetis-L im Run-Modus ohne implementierten Schlaf gelassen, alle Peripheriegeräte eingeschaltet und das Board so eingestellt, dass es regelmäßig eine LED umschaltet. Mit der IAR Embedded Workbench mit einem I-Jet-Debugger und dem I-Scope konnte ich eine einfache Basislinie für mein Board von ~16,9 mA bei ausgeschalteter LED und ~ 18,0 mA bei eingeschalteter LED erstellen, die unten in zu sehen ist Abbildung 1. Wie Sie sehen, ist es wichtig zu wissen, woher Sie Ihre Messung nehmen, da Sie sonst bei Ihrer Analyse erheblich abweichen können.

Klicken für größeres Bild

Abbildung 1. Eine Strommessung des Entwicklungsboards mit einer LED, die einmal pro Sekunde umschaltet. (Quelle:Autor)

Energieoptimierung mit Warte- und Tiefschlafmodus

Der schnellste Weg, um einige Energieeinsparungen zu erzielen, besteht darin, den Warte- oder den Tiefschlafmodus zu implementieren. Eine Untersuchung des Datenblatts der Kinetis-L-Prozessoren zeigt, dass der Wartemodus zwischen 3,7 und 5,0 mA bei 3 Volt zieht. In diesem Modus sind die CPU- und Peripherieuhren deaktiviert, aber der Flash befindet sich in einem Doze-Modus, der es dem Prozessor ermöglicht, innerhalb eines Interrupt-Zeitrahmens (12 – 15 Taktzyklen) aufzuwachen. Der Wartemodus ist einfach zu implementieren, der Code zum Aufrufen des Wartemodus ist unten zu sehen:

void Sleep_Wait(void)
{
      SCB_SCR &=~ SCB_SCR_SLEEPDEEP_MASK;
      asm("WFI");
}

Scrollen oder ziehen Sie die Ecke der Box nach nach Bedarf erweitern.

Allein mit diesen beiden Codezeilen sinkt die Stromaufnahme des Entwicklungsboards von 18,0 mA auf 15,9 mA. Das sind 11,6% weniger Stromverbrauch! Wenn das Board mit einem 680-mA-Akku betrieben würde, wäre die Akkulaufzeit für das Gerät von 37,8 Stunden auf 42,8 Stunden gestiegen! Fünf Stunden mehr als nur zwei Codezeilen!

Das Tolle an diesen High-Level-Power-Modi ist, dass wir dies problemlos noch einen Schritt weiter gehen können. Anstatt den Prozessor in den Wartemodus zu versetzen, können wir ihn mit dem folgenden Code in einen Tiefschlaf-Wartemodus versetzen:

void Sleep_Deep(void)
{
      SCB_SCR |=SCB_SCR_SLEEPDEEP_MASK;
      asm("WFI");
}

Scrollen oder ziehen Sie die Ecke der Box nach nach Bedarf erweitern.

Wir haben lediglich ein einzelnes Bit im SCB_SCR-Register angepasst und sind jetzt von einer ursprünglichen Stromaufnahme von 18 mA auf 14,8 mA übergegangen. Das sind 17,8% weniger Stromverbrauch! Angenommen, das Board würde von einer 680-mA-Batterie gespeist, wäre die Batterielebensdauer jetzt von 37,8 Stunden auf 46 Stunden gestiegen! Dies sind einige große Einsparungen für nur ein paar Zeilen Code und es ist nur die Spitze des Eisbergs!

Stopp- und VLLS-Modi für uA-Stromaufnahme nutzen

Die Verwendung des Stoppmodus hat das Potenzial, die Stromaufnahme der MCU um bis zu weitere zwei Milliampere zu senken, indem die Kern- und Systemtakte deaktiviert werden. Sie werden feststellen, dass je niedriger der Energiemodus ist, desto mehr Code wird benötigt, um ihn zu implementieren, und desto komplexer wird der Code, um das System wieder aufzuwecken. Der Code zum Aufrufen des Stoppmodus des Kinetis-L ist unten zu sehen:

void Sleep_Stop(void)
{
      volatile unsigned int dummyread =0;
      SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
      SMC_PMCTRL |_=SMC_(0);
      dummyread =SMC_PMCTRL;
      Sleep_Deep();
}

Scrollen oder ziehen Sie die Ecke der Box nach nach Bedarf erweitern.

Beachten Sie, dass der Stoppmodus über ein Energieverwaltungssteuerregister gesteuert wird und sobald der Zustand gesetzt ist, wird die Funktion Sleep_Deep aufgerufen, um die Einstellung des Energiemodus und die Ausführung von WFI abzuschließen.

Bisher haben wir über die MCU gesprochen, die 1 – 2 mA zieht. Ein moderner Mikrocontroller verfügt über Leistungsmodi, die Mikroampere oder sogar Nanoampere ziehen können! Der Kinetis-L-Prozessor debütierte etwa 2013 und sein Very Low Leakage Stop (VLLS)-Modus zieht nur 135 bis 496 Mikroampere! Der Code zum Initialisieren dieses Energiemodus ist unten zu sehen:

void Sleep_VLLS1(void)
{
      volatile unsigned int dummyread =0;
      SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
      SMC_PMCTRL |_;
      SMC_VLLSTRL =SMC_VLLSCTRL_LLSM(1);
      dummyread =VLLS_CTRL;
      Sleep_Deep();
}

Scrollen oder ziehen Sie die Ecke der Box nach nach Bedarf erweitern.

An diesem Punkt würde der Mikrocontroller fast keine Energie mehr verbrauchen!

Die Wirkung von Energiesparmodi auf die Aufwachlatenz

Wie wir bisher gesehen haben, ist das Versetzen des Prozessors in immer niedrigere Leistungsmodi eine großartige Möglichkeit, Energie zu sparen, aber diese Einsparungen haben ihren Preis. Je niedriger der Energiezustand des Prozessors ist, desto mehr Zeit benötigt der Prozessor, um aufzuwachen und nützliche Arbeit zu leisten. Wenn ich beispielsweise den Standard-Stopp-Modus verwenden würde, würde es 2 us plus Interrupt-Latenz dauern, bis der Prozessor aufwacht und erneut mit der Ausführung von Code beginnt. Nicht so schlecht. Wenn ich jedoch einen der VLLS-Modi auf dem Kinetis-L verwenden würde, hätte ich eine Aufwachlatenz beim Booten des Prozessors plus weitere 53 bis 115 Mikrosekunden! Dies kann je nach Anwendung nicht akzeptabel sein. Abbildung 2 zeigt zusätzliche Übergänge vom Energiesparmodus in den Betriebszustand des Kinetis-L.

Klicken für größeres Bild

Abbildung 2. Übergangszeiten vom Energiesparmodus in die verschiedenen Modi des Kinetis-L. (Quelle:Kinetis-L Datenblatt)

Schlussfolgerung

Arm-Mikrocontroller werden alle über die Standard-Low-Power-Modi verfügen, aber jeder Siliziumhersteller passt die Low-Power-Modi an, die Entwicklern zur Verfügung stehen. Wie wir gesehen haben, bieten Siliziumanbieter oft mehrere Modi an, die als niedrig hängende Früchte fungieren, die sich nur minimal auf die Aufwachlatenz auswirken. Sie bieten auch mehrere sehr stromsparende Modi, die den Prozessor fast ausschalten und nur ein paar hundert Mikroampere oder weniger ziehen! Entwickler müssen oft die Menge an Energie, die sie verbrauchen möchten, mit der Zeit abwägen, wie schnell ihr System aufwachen und auf Ereignisse reagieren muss. Die Kompromisse sind definitiv anwendungsspezifisch, also erwarten Sie nicht, dass Sie bei jedem Produkt und jeder Anwendung den niedrigsten Leistungsmodus ausführen können.


Jacob Beningo ist ein Embedded-Software-Berater, -Berater und -Lehrer, der derzeit mit Kunden in mehr als einem Dutzend Ländern zusammenarbeitet, um deren Software, Systeme und Prozesse grundlegend zu transformieren. Zögern Sie nicht, ihn unter [email protected], auf seiner Website www.beningo.com zu kontaktieren und sich für seinen monatlichen Embedded Bytes Newsletter anzumelden.


Eingebettet

  1. Wie können Sie die 3D-Druckerüberwachung nutzen, um die additive Fertigung zu skalieren?
  2. Wie können Sie mit additivem MES auf die additive Serienproduktion skalieren?
  3. Wie IIoT-Daten die Rentabilität in der schlanken Fertigung steigern können
  4. Wie viele Realitäten können Sie in der industriellen Automatisierung haben?
  5. Wie ein Stromausfall Ihre Netzteile beschädigen kann
  6. Ursachen für niedrigen Leistungsfaktor
  7. Erfahren Sie, wie Sie Schiffsmessing schweißen können
  8. Wie lade ich einen Kondensator auf?
  9. Wie Sie durch die Anpassung der PDP Geld sparen können
  10. Wie können Sie die Hydraulik stärker machen?