Designhinweise aus dem Hause Macnica Low-Power-Prozessor im ESP32 minimiert den Strombedarf

Stromreduzierung, damit selbst über eine Knopfzelle über viele Monate Applikationen betrieben werden können.
Mit Strom sparenden Mikroprozessoren laufen viele Applikationen mit einer Knopfzelle als Energiequelle über viele Monate hinweg.

Aktor-/Sensorknoten für IoT-Applikationen lassen sich mit einem stromeffizienten SoC, z.B. einem ESP32 von Espressif, so realisieren, dass sie selbst mit einer Knopfzelle über viele Monate hinweg zuverlässig betrieben werden können.

WiFi gilt als recht leistungshungrig – dies jedoch weniger wegen einer immanenten Ineffizienz des IEEE802.11-Protokolls, sondern wegen der Art und Weise, wie es für konventionelle Anwendungen entwickelt und eingesetzt wird. Andererseits können – ausgehend von einem Energiebedarf von 1 bis 17 Joule je MByte übertragener Daten – selbst sehr ineffiziente Implementierungen mit einem einzigen Satz AA-Batterien jeden Tag 1 MByte an Daten über eine Dauer von vier Jahren übertragen.

Lange Betriebszeiten mit Standardbatterien

Bei Aktor-/Sensorknoten für das loT, die relativ geringe Datenmengen in großem zeitlichen Abstand senden, ist vor allem die Zeit »zwischen den Bursts« von entscheidender Bedeutung. Während dieser Phasen so wenig Strom wie möglich zu verbrauchen, bildet den entscheidenden Schlüssel zu langen Batteriestandzeiten. Wie sich diese Erkenntnisse nun konkret auf geeignete Halbleiterbausteine übertragen lassen, haben die beiden Autoren am Beispiel eines Espressif ESP32 SoCs untersucht, der mit einem Ultra Low Power Coprozessor ausgestattet ist und mit dem sich clevere Power-Management-Lösungen umsetzen lassen.

Zur Messung des Stromverbrauchs eignet sich beispielsweise das ESP32-Wrover-Kit (Bild), weil in der 3,3-V-Spannungsschiene des Moduls ein 0-Ω-Widerstand für derartige Messungen vorgesehen wurde. Dieser lässt sich dank »0603«-Bauform auch gut wieder entfernen.

Über diesen Pfad also kann der Strombedarf des gesamten Moduls, einschließlich integriertem Flash- und Pseudo-SRAM erfasst werden, wobei die Speicher im Deep-Sleep-Modus des SoCs von der Stromversorgung abgeschaltet werden und daher nahezu keinen Strom benötigen.

Das Pseudo-SRAM hat 64 Mbit Speicherkapazität, organisiert zu 8M × 8 bit und wird über das Serial Peripheral Interface (SPI) angesprochen. Benötigt wird der zusätzliche Arbeitsspeicher von 8 MByte vor allem bei Audio-Anwendungen. So ist das Pseudo-SRAM beispielsweise bei den Alexa-Voice-Service-Applikationen zwingend notwendig. Für reine loT-Applikationen mit Sensorabfragen, Aktor-Betätigungen und einer Handvoll TCP/IP-Protokollen ist es hingegen nicht nötig, sodass in solchen Fällen das ESP32-Wroom-Modul ohne Pseudo-SRAM vorzuziehen ist.

Wenn es auch im Deep Sleep von der Spannungsversorgung getrennt ist, so braucht es doch im normalen Betriebsmodus des SoCs etwa 400 µA, auch wenn nicht gelesen oder geschrieben wird.

Low-Power-Prozessor des ESP32

Der ULP ist ein hoch effizienter Co-Prozessor, der auch während der Deep-Sleep-Betriebsart des Haupt-SoCs aktiv bleibt. Dadurch können Programme verarbeitet werden, die im RTC-Memory gespeichert sind. Der ULP kann dabei auf Peripherie-Einheiten sowie auf interne Sensoren und RTC-Register zugreifen und damit den Hauptprozessor bei bestimmten Ereignissen oder Parameterveränderungen – z.B. steigenden Temperaturen – aufwecken.

Der ULP verfügt über 8 kByte SRAM für Instruktionen und Daten und wird mit dem RTC_FAST_CLK von 8 MHz getaktet. Er ist in allen Power-Save-Betriebsarten, also »Light Sleep« und »Deep Sleep« aktiv und kann den SOC aufwecken sowie einen Interrupt an die CPU schicken. Er beinhaltet vier General-Purpose-Register (R0 bis R3) zum Handling von Daten und Speicherinhalten. Weiterhin verfügt er über ein 8-Bit-»stage_cnt«-Register für die ALU und zum Gebrauch bei Jump-Instruktionen.

Von seiner Konstruktion her ist der ULP ein programmierbarer Zustandsautomat – also eine Finite-State-Machine (FSM), die in allen Power-Modi des SoCs aktiv bleibt. Wie eine General-Purpose-CPU, verfügt er über einen Satz an Instruktionen zur Realisierung durchaus komplexer Mimiken und auch über einige Instruktionen, die speziell für den RTC-Controller und die Peripherie genutzt werden können.

Auf die 8 kByte SRAM RTC-Memory können sowohl der ULP-Co-Prozessor als auch die CPU zugreifen, daher wird er zum Speichern von Instruktionen für den ULP und zum Austausch von Daten zwischen ULP und CPU verwendet. Dabei hat der ULP auch Zugrlff auf nahezu alle Module des RTCs – entweder über entsprechende Instruktionen oder über RTC-Register.

Der ULP kann mittels Software oder periodisch durch einen Timer gestartet werden; die Programmausführung endet schließlich durch eine Halt-Instruktion.