STM32 Risparmio energetico: libreria LowPower, cablaggio e Idle (STM Sleep).
In un dispositivo remoto, una caratteristica importante può essere il consumo energetico, e come per altri dispositivi, l’STM32 consente una serie di stati a basso consumo energetico.
In questo articolo, esamineremo la libreria da utilizzare e le prestazioni dei nostri dispositivi.
Ecco la mia selezione di STM32 STM32F103C8T6 STM32F401 STM32F411 ST-Link v2 ST-Link v2 official
Libreria
Nell’ambito di Arduino, utilizzeremo la libreria STM32LowPower, rendendo così il processo molto semplice.
È possibile trovare questa libreria nel gestore delle librerie di Arduino.
Questa libreria ha anche alcune dipendenze, tra cui una libreria che abbiamo utilizzato nell’articolo “STM32: RTC interno, sistema orario e backup batteria (VBAT)“, che serve per interfacciarsi con l’orologio RTC interno.
Come al solito, è possibile trovarla nel gestore delle librerie.
API
void begin()
: configura la modalità Low Power;void idle(uint32_t ms)
: entra in modalità idle;- ms (opzionale): il numero di millisecondi prima di uscire dalla modalità. L’RTC viene utilizzato in modalità di allarme per svegliare il chip in ms millisecondi.
void sleep(uint32_t ms)
: entra in modalità sleep;ms (opzionale)
: il numero di millisecondi prima di uscire dalla modalità. L’RTC viene utilizzato in modalità di allarme per svegliare il chip in ms millisecondi.
void deepSleep(uint32_t ms)
: entra in modalità deepSleep;ms (opzionale)
: il numero di millisecondi prima di uscire dalla modalità. L’RTC viene utilizzato in modalità di allarme per svegliare il chip in ms millisecondi.
void shutdown(uint32_t ms)
: entra in modalità di spegnimento;ms (opzionale)
: il numero di millisecondi prima di uscire dalla modalità. L’RTC viene utilizzato in modalità di allarme per svegliare la scheda in ms millisecondi.
Nota: Con la versione STM32RTC inferiore a 1.1.0, il numero minimo di millisecondi è di 1000 ms.
void attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode, LP_Mode LowPowerMode)
: Abilita il pin GPIO in modalità di interrupt. Se il pin è un pin di sveglia, viene configurato come sorgente di sveglia (vedere la documentazione della scheda).
param- pin: numero del pin
- callback: puntatore a una callback
- mode: modalità di interrupt (HIGH, LOW, RISING, FALLING, or CHANGE)
- LowPowerMode: modalità di risparmio energetico che verrà utilizzata (IDLE_MODE, SLEEP_MODE, DEEP_SLEEP_MODE o SHUTDOWN_MODE). Nel caso di SHUTDOWN_MODE, viene attivata la capacità di pin di sveglia.
void enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid callback)
: abilita una periferica UART in modalità di basso consumo energetico. Consultare la documentazione della scheda per la compatibilità con la modalità di basso consumo energetico.- serial: puntatore a una UART
- callback: puntatore a una callback da chiamare quando la scheda si sveglia.
void enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void * data)
: collega una callback alla periferica RTC.- rtc: puntatore all’RTC. Può essere NULL in quanto l’RTC è un Singleton.
- callback: puntatore a una callback da chiamare quando la scheda si sveglia.
- data: puntatore facoltativo ai parametri dei dati della callback (default NULL).
void enableWakeupFrom(TwoWire *wire, voidFuncPtrVoid callback)
: abilita una periferica I2C in modalità di basso consumo energetico. Consultare la documentazione della scheda per la compatibilità con la modalità di basso consumo energetico. Attualmente non disponibile.- wire: puntatore a I2C
- callback: puntatore a una callback da chiamare quando la scheda si sveglia.
La funzione Begin()
deve essere chiamata almeno una volta prima delle funzioni idle()
, sleep()
, deepSleep()
o shutdown()
.
Le funzioni attachInterruptWakeup()
o enableWakeupFrom()
dovrebbero essere chiamate prima delle funzioni idle()
, sleep()
, deepSleep()
o shutdown()
.
Se HardwareSerial viene utilizzato come sorgente di sveglia, verrà configurato per utilizzare la sorgente di clock HSI anche se un’altra sorgente di clock periferico è configurata.
Se RTC viene utilizzato come sorgente di sveglia, verrà configurato per utilizzare la sorgente di clock LSE anche se un’altra sorgente di clock RTC è selezionata.
La scheda si riavvierà quando uscirà dalla modalità deepSleep o shutdown.
Collegamenti per i nostri test
Utilizzeremo l’ST-Link per programmare e alimentare l’STM32, ma inseriremo un multimetro nel mezzo tra il pin 3.3v dell’ST-Link V2 e il pin 3.3v dell’STM32 per misurare l’amperaggio e analizzare il consumo di energia.
Ecco l'STM32 e l'ST-Link V2 utilizzati in questo test STM32F103C8T6 STM32F401 STM32F411 ST-Link v2 ST-Link v2 official
Qui l'FTDI USB to TTL CH340G - USB to TTL FT232RL
Qui il mio multimetro Aneng SZ18
Per ottenere l’output seriale, utilizziamo un FTDI esterno connesso solo ai pin GND e Tx dell’STM32 a loro volta collegati al GND e pin Rx del FTDI.
STM32F1 e Serial per il debug
STM32F1 e Serial2 per il debug
STM32F4 e Serial per il debug
STM32F4 e Serial2 per il debug
Sveglia con un’interruzione interna gestita da RTC
Ora stiamo per fare alcuni test, prima di tutto, controlliamo il consumo energetico di tutti gli stati di sospensione (idle, sleep, deepSleep, shutdown), e utilizziamo un’interruzione interna gestita da RTC per svegliare il dispositivo.
In questo articolo prenderemo in considerazione solo l’Idle poi nei prossimi i restanti stati.
Per questo test, è necessaria la libreria STM32LowPower e la libreria STM32RTC.
Idle
Come descritto, lo stato Idle corrisponde allo stato Sleep nel framework ST. Questo stato ha un tempo di risveglio rapido e ferma la CPU.
STM32F1
Il primo dispositivo che utilizziamo è un blue pill STM32F103C8.
/**
* STM32 Low Power IDLE wake up test from RTC
*
* This sketch demonstrates the usage of Internal Interrupts to wakeup a chip
* in idle mode.
*
* In this sketch, the internal RTC will wake up the processor.
*
* Renzo Mischianti <www.mischianti.org>
* en: https://mischianti.org/category/tutorial/stm32-tutorial/
* it: https://mischianti.org/it/category/guide/guida-alla-linea-di-microcontrollori-stm32/
*/
#include "STM32LowPower.h"
// If you use generic STM32F103C8
// you don't need this explicit declaration
// This is needed by bluepill specified version
//HardwareSerial Serial(USART2); // PA3 (RX) PA2 (TX)
void setup() {
Serial.begin(115200);
while (!Serial){ delay(100); }
Serial.println("START!");
// Configure low power
LowPower.begin();
}
void loop() {
Serial.print("Entering idle in ");
for (int i=5; i>0; i--) {Serial.print(i);Serial.print(" ");delay(500);}
Serial.println();
delay(100); // Needed to give time to write the Serial
LowPower.idle(5000); // Entering in idle
delay(100); // Needed to restore the Serial
Serial.print("Wake for 10 seconds! ");
for (int i=10; i>0; i--) {Serial.print(i);Serial.print(" ");delay(1000);}
Serial.println();
}
L’output della Serial è:
Entering idle in 5 4 3 2 1
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1
Entering idle in 5 4 3 2 1
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1
Entering idle in 5 4 3 2 1
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1
Entering idle in 5 4 3 2 1
Wake for 10 seconds! 10 9 8 7 6 5 4
Entrando in modalità Idle, il consumo di corrente da 17.50mAh scende a 9.37mAh.
STM32F401
Lo stesso sketch nello STM32F401CC Black-Pill da 23.50mAh ottiene un risultato inferiore per lo STM32F103, 7.55mAh.
STM32F411
Lo stesso sketch nello STM32F411CE Black-Pill da 32.50mAh ottiene un risultato simile per lo STM32F103, 11.05mAh.
Grazie
- STM32F1 Blue Pill: piedinatura, specifiche e configurazione IDE Arduino (STM32duino e STMicroelectronics)
- STM32: programmazione (STM32F1) via USB con bootloader STM32duino
- STM32: programmazione (STM32F1 STM32F4) tramite USB con bootloader HID
- STM32F4 Black Pill: pinout, specifiche e configurazione IDE Arduino
- STM32: ethernet w5500 standard (HTTP) e SSL (HTTPS)
- STM32: ethernet enc28j60 standard (HTTP) e SSL (HTTPS)
- STM32: WiFiNINA con un ESP32 come WiFi Co-Processor
- Come utilizzare la scheda SD con l’stm32 e la libreria SdFat
- STM32: memoria flash SPI FAT FS
- STM32: RTC interno, sistema orario e backup batteria (VBAT)
- STM32 LoRa
- STM32 Risparmio energetico
- STM32F1 Blue-Pill gestione clock e frequenza
- STM32F4 Black-Pill gestione clock e frequenza
- Introduzione e framework Arduino vs STM
- Libreria LowPower, cablaggio e Idle (STM Sleep).
- Sleep, deep sleep, shutdown e consumo energetico
- Sveglia da allarme RTC e Seriale
- Sveglia da sorgente esterna
- Introduzione al dominio di backup e conservazione delle variabili durante il RESET
- Registro di backup RTC e conservazione della SRAM
- STM32 invia email con allegati e SSL (come Gmail): w5500, enc28j60, SD e SPI Flash
- Server FTP su STM32 con W5500, ENC28J60, scheda SD e memoria flash SPI
- Collegamento dell’EByte E70 ai dispositivi STM32 (black/blue pill) e un semplice sketch di esempio