mit Energiesparfunktionen für Low-Power Applikationen 2012 by roger.weber@bfh.ch
Low-Power Applikationen Portable und Batteriebetriebene Geräte Quelle: Bayer Vital GmbH Quelle: BFH-TI Quelle: www.garmin.com Quelle: handy-tests.net Quelle: www.neukomm.com Ziel: Hohe Batterielebensdauer Auswirkungen auf und Software Slide 2
Inhalt Mikroprozessor Peripherie Speisung Pull-up und Pull-down Widerstände Ansätze mit zyklischen Software-Systemen Interrupts CPU ausschalten Zeitgesteuert Einführung Energy Management Framework (EMF) Zusammenfassung Slide 3
/ Mikroprozessor Wahl des Mikroprozessors Wichtige Kriterien für die Wahl des Mikroprozessors: Tiefer Energiebedarf Verschiedene Energy-Modes (run, standby, sleep...) Gutes Verhältnis Rechenleistung / mw Kurze Wake-up Zeiten Oszillator: on/off, verschiedene Clock-Frequenzen On-Chip Peripherie ausschaltbar Durch das Design und die Software zu realisieren: Minimale Zeit im Run-Mode, maximale Zeit im besten Low-Power Mode. Slide 4
/ Mikroprozessor Wahl des Mikroprozessors Slide 5
/ Mikroprozessor Wahl des Mikroprozessors Beispiel: Energy Micro EFM32 5 verschiedene Energy-Modes: EM0 bis EM4. Peripherie läuft unabhängig von der CPU. Daten werden durch die DMA von der Peripherie ins RAM kopiert. Quelle: EFM32 Introduction White Paper Slide 6
/ Peripherie Externe Peripherie Wichtige Kriterien für die Wahl der Peripherie: Low-Power Schnelle Kommunikation (Reduktion run-time) Externe Peripherie bei Nichtgebrauch ausschalten: Slide 7
/ Speisung Speisung Bei Knopfzellen-Batterien (Lithium, Silberoxid): Problem Innenwiderstand beachten. Spannung kann kurzzeitig einbrechen. Grosser Stützkondensator parallel zur Batterie. Low-Power Speicher. Bauelemente mit möglichst tiefer Versorgungsspannung. Akku (z.b. LiFePo4), mit oder ohne PV Eigenentladung Akku beachten! grössere Ströme möglich. Slide 8
/ Pull-up und Pull-down Pull-up und Pull-down Widerstände Widerstände hochohmig wählen (wenn möglich hochohmiger als Application Notes). Output bei Nichtgebrauch im Tristate. Slide 9
/ Interrupts Zyklische Software-Systeme, ohne Interrupts Endlosschleife im Hauptprogramm. Die einzelnen Funktionen werden zyklisch aufgerufen. Eingänge werden gepollt. CPU wartet darauf, dass etwas passiert. Vorteile: Einfache Implementation. Einfache Kommunikation über shared data. Nachteile: Langsame Reaktionszeit (= Zykluszeit). Zykluszeit ( Real-time ) ist abhängig von der Applikation. Slide 10
/ Interrupts Zyklische Software-Systeme, mit Interrupts Foreground / Background Systeme. Daten werden interruptgesteuert eingelesen. Vorteile: Schnelle Reaktionszeit in der ISR. Nachteile: Interrupt-Latenzzeit steigt. shared Data ist problematisch (inkonsistente Daten). Slide 11
/ Interrupts Energiebilanz zyklische SW, Version 1 (Mit oder ohne Interrupts) Endlosschleife, CPU ist zu 100% ausgelastet. Kein geeigneter Ort, um den Mikroprozessor in einen Low-Power-Mode zu schalten. Slide 12
/ CPU ausschalten CPU punktuell ausschalten Beispiel: Optimierung bei der A/D-Wandlung. A/D-Wandler und Timer aktiv, CPU off. Steuerung über Interrupts. Probleme: Ist mühsam zu programmieren. Welche Peripherie ist aktuell aktiv (im Beispiel ev. auch die UART)? Welches ist der korrekte Energy-Mode? Die Übersicht zu behalten ist schwierig. Ist fehleranfällig. Slide 13
/ CPU ausschalten Energiebilanz zyklische SW, Version 2 CPU während der A/D-Wandlung ausgeschaltet. Bestimmung des geeigneten Energy-Modes ist schwierig. Slide 14
/ zeitgesteuert Zeitgesteuerte -Systeme Jeder Zyklus wird durch einen Timer-Interrupt gestartet. Eingänge gepollt oder interruptgesteuert. Vorteile: Zykluszeit ist definierbar. Low-Power-Mode kann nach Abschluss eines Zyklus aktiviert werden. Nachteile: Interrupt-Latenzzeit, Shared Data. Slide 15
/ zeitgesteuert Energiebilanz zyklische SW, Version 3 CPU während der A/D-Wandlung ausgeschaltet. CPU am Schluss eines Zyklus ausgeschaltet. Slide 16
/ zeitgesteuert Beispiel Geodatenlogger GDL2 Silberoxid-Batterie: 8mAh, 1.5V Betriebsdauer 10 Monate Gewicht Elektronik und Batterie: 320 mg Slide 17
/ Einführung Einführung in Aufteilung der Applikation in Tasks: Tasks führen Code aus, laufen quasi parallel. Preemptive Scheduling: Der Task mit der höchsten Priorität wird ausgewählt. Slide 18
/ Einführung Einführung in Intertask-Kommunikation: Datenaustausch über Messages Synchronisation mit Semaphoren, Events... Slide 19
/ Einführung Einführung in Taskzustände Slide 20
/ Einführung Einführung in Der Idle-Task: Wird ausgeführt, wenn keine anderen Tasks laufen. Ideal für die Implementation des Power-Managements. while(1) {... Select best possible energy mode; Start energy mode;... } Problem: Wie wird der korrekte Energy-Mode bestimmt? Unterstützung durch die Applikation erforderlich. Energy Management Framework ist hilfreich. Slide 21
/ Einführung Die Vorteile eines Solides Fundament für die Software-Architektur, erleichtert das Design. Schnellstmögliche Reaktion auf Ereignisse: Der Task mit der höchsten Priorität wird ausgeführt. Toolbox mit Messages-Queues, Timeouts usw. Implementation des Power-Managements im Idle-Task gut möglich. Slide 22
/ Einführung Anforderungen an das für Low-Power Kleine Speicherbelegung. Geringer Overhead: Schnelles Task-Switching. Schnelle Intertask-Kommunikation. Portierung für Low-Power Prozessoren. Support für Power-Management. Slide 23
/ Einführung Beispiel A/D-Wandler Task AD Task void vadtask(void *pvdata){... while(1){ /* Wait for trigger to start A/D-Conversion */... AD_StartConversion(); /* block task until conversion is done */ OS_QueueReceive(ad_queue, &buffer, timeout); } } AD ISR void AD_ISR(void) {... OS_QueueSendFromISR(ad_queue, &data);... } Slide 24
/ EMF Energy Management Framework, EMF Support für die Programmierung der Energy-Modes mit Hilfe eines High-Level Frameworks. Minimaler Aufwand für Applikations-Entwickler. Festlegen der erforderlichen Energy-Modes in den Tasks und ISRs mit Hilfe von API-Funktionen. Weniger fehleranfällig. es mit EMF-Unterstützung: AVIX-RT, IAR-System, Add-on für free. Slide 25
/ EMF Implementation eines EMFs, interne Tabellen Die erforderlichen Energy-Modes für Tasks und ISR werden im EMF in Tabellen verwaltet. Slide 26
/ EMF Implementation eines EMFs, Idle-Task void OS_IdleTask(void) {... #if ( configuse_powermanager == 1 ) vpmidlesleepmode(); #endif } void vpmidlesleepmode(void) { unsigned portchar sleep;... /* Select best possible energy mode */ sleep = ucpmgetsleepmode(); /* Start energy mode */ xpmgotosleepmode(sleep); /* WFE() */... } Slide 27
/ EMF Beispiel API-Funktionen EMF Quelle: Energy Aware for EFM32, Angelo Spalluto Slide 28
/ EMF Beispiel Applikation mit EMF void vadtask(void *pvdata){... while(1){ /* Wait for trigger to start A/D-Conversion */... xpmsetsleepmode(em1); AD_StartConversion(); /* block task until conversion is done */ OS_QueueReceive(ad_queue, &buffer, timeout); xpmsetsleepmode(em3); } } void AD_ISR(void){... OS_QueueSendFromISR(ad_queue, &data);... } Slide 29
/ EMF Beispiel Applikation mit EMF Slide 30
für die Entwicklung Effizient optimierender Compiler, verkürzt die run-time. mit Support für das Energy-Management, Verknüpfung der Strommessung mit dem Code. Beispiele: PowerScale von Hitex EnergyAware Profiler von Energy Micro DC Power Analyzer von Agilent Technologies Slide 31
Beispiel energyaware Profiler (Energy Micro) Bemerkung: for-schleife im vledtask nur für Demo-Zwecke, müsste durch ein vtaskdelay() ersetzt werden. Slide 32
Zusammenfassung Was braucht es für die Entwicklung von Low-Power Applikationen? Kow-How der Entwickler. Low-Power Mikroprozessor mit verschiedenen EnergyModes. Einen effizient optimierenden Compiler und mit Support für das Energy-Management. Effizientes, geringe Speicherbelegung und schnelles Task-Switching. mit Energy Management Framework. Slide 33