Power Saving Mode: como salvar energia nos seus projetos Deixe um comentário

Muitos projetos que fazemos podem facilmente ser alimentados por uma fonte ligada à tomada, e pelo consumo baixo em relação à disponibilidade de energia, não nos preocupamos muito com o quanto de energia que o microcontrolador consome. Mas e quando montamos algo que será alimentado por baterias e queremos prolongar a duração delas? Aí entram em jogo os Power Saving Mode, ou modos de (gerenciamento ou economia de) energia, que explicaremos neste artigo.

Power Saving Mode GIF

Por que utilizar o Power Saving Mode?

Vamos supor um sensor de presença sem fio alimentado por bateria, como este da Lutron:

Power Saving Mode Lutron

O microcontrolador fica parado até receber um sinal de presença. Quando este evento ocorre, ele vai acender um LED e enviar um sinal por RF dizendo que há presença no ambiente. E quando não houver mais presença, ele vai apagar o LED e enviar outro sinal por RF dizendo que não há mais presença no ambiente. Fim. No resto – e provavelmente maior parte – do tempo, o microcontrolador está apenas aguardando um sinal para agir. Mas aqui vem a primeira informação: um processador que está esperando algo está consumindo energia! Já pensou no quanto de energia da bateria estamos desperdiçando para o microcontrolador fazer vários “nadas”, apenas checando se a saída do sensor de presença mudou de estado? E se desligássemos o processador nesse tempo, não economizaríamos energia? É aí que os Power Saving Mode atuam!

Power Saving Mode

De forma geral existem cinco modos de gerenciamento de energia, mas nem todos os microcontroladores possuem todos os cinco (não são raros os que possuem apenas dois). A nomenclatura pode mudar entre as fabricantes, e é por isso que trarei exemplos da Microchip (PIC18F2550) e na Texas Instruments (TM4C123GH6PM). Lembrando que estes microcontroladores são exemplos, mas os modos não são específicos deles, sendo que diversos outros podem utilizar os mesmos modos.

Run Mode

Este aqui é o que todo mundo conhece: processador, memórias e periféricos recebem alimentação E clock. O código está sendo executados e os periféricos podem atuar livremente, seja um ADC fazendo conversões, um Timer contando, um SPI transmitindo e recebendo dados. Obviamente, é o modo de consumo mais alto de energia e maior desempenho.

A família 18F da Microchip divide o Run mode em três modos:

      1. Primary: o clock do processador vem do oscilador principal (clock externo ou um cristal). Máximo consumo de energia mas também máximo clock e estabilidade;
      2. Secondary: o clock para o sistema vem do Timer1 (ou de outro suportado) usando um cristal de 32,768 kHz, o que nos dá um clock ainda estável, mas com velocidade e consumo menores;
      3. RC: o clock é gerado internamente com um resistor e capacitor externos. É útil quando não precisamos de precisão no tempo e queremos poupar energia.

 

Idle (Microchip) ou Sleep (TI)

Aqui já rola uma divergência de nomes, por isso identifiquei entre parênteses o nome utilizado por cada fabricante (outras podem, inclusive, utilizar outros nomes). Neste modo, o clock para o processador e memórias é suspenso, mas não a alimentação. Entretanto, só o fato de remover o clock faz com que ele pare de executar instruções e, portanto, de consumir a mesma quantia de energia. Isto implica que todos os dados armazenados na memória RAM permanecem lá, afinal, ainda há alimentação. Já os periféricos podem continuar recebendo alimentação e clock. Destaquei o “podem” pois microcontroladores, como por exemplo o TM4C123GH6PM da TI nos permite seletivamente habilitar ou não o fornecimento de clock e alimentação a cada periférico.
Este modo permite menor consumo de energia do que o anterior, enquanto permite que periféricos continuem trabalhando e, por meio de uma interrupção, façam o microcontrolador retornar ao modo Run e o programa continue a execução de onde havia parado.

A família 18F da Microchip divide o modo Idle da mesma forma que divide o modo Run (primary, secondary e RC).

Para trazer o microcontrolador de volta ao modo Run, deve haver ou uma interrupção ou um reset por qualquer uma das fontes (WatchDog Timer, Brown-out, reset no pino dedicado ou outra fonte). Vale lembrar que um reset sempre faz o programa ser executado do início, enquanto a interrupção faz o código ser executado do ponto onde parou.

Sleep (PIC18F2550)

Neste power saving mode, o clock é removido de todo o microcontrolador: processador, memórias e periféricos não recebem mais clock, porém todos permanecem alimentados assim como no modo anterior. Porém, este modo promove mais economia de energia ainda do que o anterior, já que os periféricos não estão mais ativos.

Interrupções ou reset retornam o sistema ao modo Run.

Deep-Sleep (TM4C123GH6PM)

O núcleo do processador, memórias e periféricos permanecem alimentados, porém aqui há uma redução na frequência do clock, o que reduz ainda mais o consumo de energia.

Interrupções ou reset retornam o sistema ao modo Run.

Hibernate

hibernação do microcontrolador

Considero este o modo mais interessante para aplicações que ficam muito tempo ociosas, e ele é bem parecido em vários aspectos com o “hibernar” presente em computadores e notebooks. Neste modo, o clock e a energia do processador, memórias e periféricos são removidos, ou seja, é como se o microcontrolador se desligasse do circuito. Por remover a alimentação, o conteúdo da memória RAM é perdido, embora alguns microcontroladores possuam blocos de memória RAM alimentados por baterias para que dados essenciais sejam salvos (que nem o seu computador utiliza uma bateria botão para guardar os parâmetros da BIOS).
Mínimo consumo de energia dentre todos os modos, e para despertar o microcontrolador, apenas por meio de resets, interrupções por mudança de nível em alguns pinos, algum pino dedicado para isto, como ocorre no TM4C123GH6PM, detecção de bateria de backup baixa ou ainda, nos que possuem, por meio do timeout de um Real Time Clock (RTC), que pode ser usado para periodicamente acordar o dispositivo. Isto é útil para, por exemplo, um termômetro portátil que de hora em hora envia uma leitura de temperatura para uma estação. Periféricos não podem mais despertar o dispositivo por meio de interrupções, afinal, nem os periféricos estão ligados agora.

hibernação do microcontrolador wake

Sistema retorna da hibernação por meio do pino !WAKE. A contagem de eventos é salva na memória RAM com backup de energia, evitando que se perca dados essenciais.

Como resumo e comparativo, temos as duas tabelas:

comparação Power Saving Mode 1

Power Saving Modes no PIC18F2550 (retirado do datasheet)

comparação Power Saving Mode

Power Saving Modes disponíveis na placa de desenvolvimento Tiva™ TM4C123G LaunchPad, que incorpora o microcontrolador TM4C123GH6PM da Texas Instruments (retirado do documento “Getting Started with the Tiva™ TM4C123G LaunchPad Workshop: Student Guide and Lab Manual”)

Em algumas placas é possível acionar facilmente o Power Saving Mode, como as baseadas nos chips ESP8266 e ESP32. Tanto no ESP32 quanto no ESP8266, basta definir os critérios para acordar e você já pode colocar comandos como esp_deep_sleep_start() no seu programa para economizar energia. Com isso você vai precisar carregar bem menos vezes seu ESP32 com Suporte de Bateria, podendo diminuir o consumo do processador de 260 mA para 2,5 μA, por exemplo.

ESP32 Power Saving mode

Power Saving Modes disponíveis no ESP32

Agora você já tem uma base para economizar energia, pilhas ou baterias e dinheiro nos seus projetos! Lembre-se sempre de ler o datasheet do seu componente para aprender as particularidades e extrair o máximo proveito, criando projetos cada vez melhores!

Gostou do post Power Saving Mode: como salvar energia nos seus projetos? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *