STM32 Risparmio energetico: sleep, deep sleep, shutdown e consumo energetico – 5

Spread the love

Risparmio energetico STM32: sleep, deep sleep, shutdown e consumo energetico
Risparmio energetico STM32: sleep, deep sleep, shutdown e consumo energetico

Abbiamo già descritto la modalità Idle e il consumo energetico relativo, in questo articolo continuiamo a misurare il consumo energetico di altre modalità di sleep per avere un breve confronto.

Cablaggio per i nostri test

Utilizzeremo l’ST-Link per programmare e alimentare l’STM32, ma metteremo un multimetro tra il pin 3v3 dell’ST-Link V2 e il pin 3.3v dell’STM32 per misurare gli ampere e per analizzare il consumo energetico.

Qui STM32 e ST-Link V2 usati 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 con solo il GND e il Tx da STM32 a l’Rx dell’FTDI collegati.

STM32F1 e Serial per il debug

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

STM32F1 e Serial2 per il debug

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

STM32F4 e Serial per il debug

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

STM32F4 e Serial2 per il debug

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

Svegliarsi con interrupt interni gestiti da RTC

Sleep

STM32F1 blue pill: risparmio energetico con gestione delle frequenze
STM32F1 blue pill: risparmio energetico con gestione delle frequenze

Lo stato Sleep è l’equivalente della modalità Low-Power Sleep nel framework ST. Rispetto all’esempio precedente, il regolatore è posto in modalità a basso consumo energetico.

STM32F1

Il primo dispositivo che utilizziamo è un STM

/**
 *	STM32 Low Power Sleep wake up test from RTC
 *
 * 	This sketch demonstrates the usage of Internal Interrupts to wakeup a chip
 *	in Sleep 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 sleep in ");
	for (int i=5; i>0; i--) {Serial.print(i);Serial.print(" ");delay(500);}
	Serial.println();
	delay(100); // Needed to give the time to write on Serial
	LowPower.sleep(5000); // Entering in sleep

	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();
}

Il serial output è:

START!
Entering sleep in 5 4 3 2 1 
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1 
Entering sleep in 5 4 3 2 1 
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1 
Entering sleep in 5 4 3 2 1 

Quando si entra in modalità Sleep, il consumo energetico da 17,50mAh scende a 9,35mAh, come avviene nella modalità Sleep.

STM32F401

STM32F401CC black pill: configurazione per il test di basso consumo su Sloeber
STM32F401CC black pill: configurazione per il test di basso consumo su Sloeber

Lo stesso sketch nell’STM32F401CC Black-Pill da 23,50mAh ottiene lo stesso risultato dell’Idle, 7,55mAh.

STM32F411

Lo stesso sketch nell’STM32F411CE Black-Pill da 32,50mAh ottiene lo stesso risultato dell’Idle, 10,90mAh.

Deep Sleep

Nella modalità DeepSleep (o modalità Stop per il framework ST), alcuni clock vengono spenti e solo un set minimo di periferiche è in modalità operativa.

STM32F1

Ecco il codice per il mio STM32F103C8 Blue pill

/**
 *	STM32 Low Power Deep Sleep wake up test from RTC
 *
 * 	This sketch demonstrates the usage of Internal Interrupts to wakeup a chip
 *	in DeepSleep 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 deep sleep in ");
	for (int i=5; i>0; i--) {Serial.print(i);Serial.print(" ");delay(500);}
	Serial.println();
	delay(100); // Needed to give the time to write on Serial
	LowPower.deepSleep(5000); // Entering in deep sleep

	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 seriale risulta:

START!
Entering deep sleep in 5 4 3 2 1 
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1 
Entering deep sleep in 5 4 3 2 1 
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1 

Ora il consumo energetico ha una variazione coerente, e otteniamo 1,914mAh.

STM32F401

Lo stesso sketch nello STM32F401CC Black-Pill da 24,48mAh ottiene un risultato di 1,63mAh.

STM32F411

Lo stesso sketch nello STM32F401CC Black-Pill da 32,48mAh ottiene un risultato di 6,56mAh.

Shutdown

Come già descritto, lo shutdown (Standby) è semplice da spiegare, gli unici oscillatori disponibili sono l’LSI e l’LSE, e le uniche periferiche che possono funzionare sono RTC e IWDG.

Facciamo una piccola modifica allo sketch di esempio, e inserisco l’attesa prima dello shutdown perché dobbiamo ricordare che quando si sveglia da questo stato, il dispositivo si riavvia completamente e riparte dall’inizio (setup()).

STM32F1

Inizieremo con il Blue-Pill come al solito.

/**
 *	STM32 Low Power shutdown wake up test from RTC
 *
 * 	This sketch demonstrates the usage of Internal Interrupts to wakeup a chip
 *	in shutdown 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() {
	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();

	Serial.print("Entering shutdown in ");
	for (int i=5; i>0; i--) {Serial.print(i);Serial.print(" ");delay(500);}
	Serial.println();
	delay(100); // Needed to give the time to write on Serial
	LowPower.shutdown(5000); // Entering in shutdown

}

Anche l’output seriale ha una nuova struttura.

START!
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1 
Entering shutdown in 5 4 3 2 1 
START!
Wake for 10 seconds! 10 9 8 7 6 5 4 3 2 1 
Entering shutdown in 5 4 3 2 1 

Come puoi vedere, ad ogni risveglio viene scritta la stringa START!. E il consumo energetico scende a 1,780mAh.

STM32F401

Anche per questo, ad ogni risveglio viene scritta la stringa START!. E il consumo energetico scende a 0,31mAh.

STM32F411

Anche per questo, ad ogni risveglio viene scritta la stringa START!. E il consumo energetico scende a 4,67mAh.

Tabella di confronto

I risultati sono come previsto, ora li riassumiamo in una tabella.

STM32F1 gestione delle frequenze: diagramma del clock
STM32F1 gestione delle frequenze: diagramma del clock

Devi ricordare che stiamo analizzando la scheda prototipo non solo il chip STM32, quindi c’è un consumo energetico aggiuntivo come il LED e un clock esterno aggiuntivo.

ModalitàSTM32F1STM32F401STM32F411
Idle9,37mAh7,55mAh11,05mAh
Sleep9,35mAh7,55mAh10,90mAh
Deep Sleep1,914mAh1,63mAh6,56mAh
Shutdown1,780mAh0,31mAh4,67mAh

La prima cosa da notare è che nel risveglio RTC, il regolatore di tensione a basso consumo energetico non offre un vero vantaggio, ma ricorda che nel Low power sleep è possibile disabilitare selettivamente le periferiche e, se non è necessario guadagnare altri milliampere, il DeepSleep è preferibile allo Shutdown in modo da non perdere i dati in memoria e il dispositivo non viene riavviato.

Puoi notare anche che lo STM32F401 offre le migliori prestazioni a basso consumo energetico, per gli altri dispositivi è necessario lavorare anche sulle periferiche e sulle frequenze.

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 *