STM32 Risparmio energetico: libreria LowPower, cablaggio e Idle (STM Sleep).

Spread the love

Risparmio energetico STM32: libreria LowPower, cablaggio e modalità Idle
Risparmio energetico STM32: libreria LowPower, cablaggio e modalità Idle

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.

Gestore delle librerie Arduino: STM32 Low Power
Gestore delle librerie Arduino: STM32 Low Power

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.

Gestore delle librerie Arduino: STM32 RTC
Gestore delle librerie Arduino: STM32 RTC

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

STM32: programmazione tramite ST-Link, debug seriale tramite FTDI e controllo dell'ampiezza su breadboard
STM32: programmazione tramite ST-Link, debug seriale tramite FTDI e controllo dell’ampiezza su breadboard

STM32F1 e Serial2 per il debug

STM32: programmazione tramite ST-Link, debug seriale tramite FTDI e controllo dell'ampiezza su breadboard
STM32: programmazione tramite ST-Link, debug seriale tramite FTDI e controllo dell’ampiezza su breadboard

STM32F4 e Serial per il debug

STM32F4 black pill e ST-Link: debug seriale tramite FTDI con controllo dell'ampiezza
STM32F4 black pill e ST-Link: debug seriale tramite FTDI con controllo dell’ampiezza

STM32F4 e Serial2 per il debug

STM32F4 black pill e ST-Link: debug seriale tramite FTDI con controllo dell'ampiezza
STM32F4 black pill e ST-Link: debug seriale tramite FTDI con controllo dell’ampiezza

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.

Pinout STM32F103C6 bassa risoluzione
Pinout STM32F103C6 bassa risoluzione

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

STM32F103C8 Blue-Pill: configurazione per il test di basso consumo energetico
STM32F103C8 Blue-Pill: configurazione per il test di basso consumo energetico

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

STM32 STM32F401 STM32F401CCU6 pinout bassa risoluzione
Pinout STM32F401CCU6 bassa risoluzione

Lo stesso sketch nello STM32F401CC Black-Pill da 23.50mAh ottiene un risultato inferiore per lo STM32F103, 7.55mAh.

STM32F411

STM32 STM32F411 STM32F411CEU6 pinout bassa risoluzione
Pinout STM32F411CEU6 bassa risoluzione

Lo stesso sketch nello STM32F411CE Black-Pill da 32.50mAh ottiene un risultato simile per lo STM32F103, 11.05mAh.

Grazie

  1. STM32F1 Blue Pill: piedinatura, specifiche e configurazione IDE Arduino (STM32duino e STMicroelectronics)
  2. STM32: programmazione (STM32F1) via USB con bootloader STM32duino
  3. STM32: programmazione (STM32F1 STM32F4) tramite USB con bootloader HID
  4. STM32F4 Black Pill: pinout, specifiche e configurazione IDE Arduino
  5. STM32: ethernet w5500 standard (HTTP) e SSL (HTTPS)
  6. STM32: ethernet enc28j60 standard (HTTP) e SSL (HTTPS)
  7. STM32: WiFiNINA con un ESP32 come WiFi Co-Processor
    1. STM32F1 Blue-pill: shield WiFi (WiFiNINA)
    2. STM32F4 Black-pill: shield WiFi (WiFiNINA)
  8. Come utilizzare la scheda SD con l’stm32 e la libreria SdFat
  9. STM32: memoria flash SPI FAT FS
  10. STM32: RTC interno, sistema orario e backup batteria (VBAT)
  11. STM32 LoRa
  1. STM32 Risparmio energetico
    1. STM32F1 Blue-Pill gestione clock e frequenza
    2. STM32F4 Black-Pill gestione clock e frequenza
    3. Introduzione e framework Arduino vs STM
    4. Libreria LowPower, cablaggio e Idle (STM Sleep).
    5. Sleep, deep sleep, shutdown e consumo energetico
    6. Sveglia da allarme RTC e Seriale
    7. Sveglia da sorgente esterna
    8. Introduzione al dominio di backup e conservazione delle variabili durante il RESET
    9. Registro di backup RTC e conservazione della SRAM
  1. STM32 invia email con allegati e SSL (come Gmail): w5500, enc28j60, SD e SPI Flash
  2. Server FTP su STM32 con W5500, ENC28J60, scheda SD e memoria flash SPI
  3. Collegamento dell’EByte E70 ai dispositivi STM32 (black/blue pill) e un semplice sketch di esempio

Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *