Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Integrado

Quão baixo (potência) você consegue ir?


Em meu último post, “Fundamentos do modo de baixo consumo de energia do Arm Cortex-M”, exploramos os fundamentos dos modos de baixo consumo de energia que podem ser encontrados em todos os processadores Arm Cortex-M e como poderíamos aproveitar as instruções WFI e WFE para colocar um processador dormir. A questão que realmente permanece é como esses modos de baixo consumo de energia são implementados em um microcontrolador real e como esses modos afetam nosso sistema embarcado? Neste post, exploraremos com mais detalhes como podemos colocar um microcontrolador para hibernar e ver quanta energia ele nos compra.

Experimentação em modo de baixo consumo

A melhor maneira de explorar os modos de baixo consumo de energia é selecionar um microcontrolador e realmente executar o processador em vários modos de baixo consumo. Para esta postagem, decidi tirar o pó da minha placa NXP Kinetis-L Freedom testada e comprovada, que não apenas experimentei, mas também usei em muitos produtos, aplicações e cursos. Eu também decidi, certo ou errado, medir não apenas a quantidade de energia que o microcontrolador estava consumindo, mas toda a placa de desenvolvimento. O MCU é geralmente um dos dispositivos que mais consomem energia em uma placa, mas eu sempre descobri que medir toda a corrente do sistema me lembra que ele não é o único consumidor de energia na placa. Otimizar o microcontrolador pode levar muito tempo, mas nem sempre é o único dispositivo que pode exigir otimização de energia.

Comece com uma medição de linha de base

Sempre que estou trabalhando para otimizar o consumo de energia de um produto, começo primeiro fazendo uma medição de energia de linha de base. Isso normalmente é feito traçando o perfil do consumo atual do dispositivo em vários segundos ou minutos para entender de onde estamos começando. Para meu experimento de placa de desenvolvimento, deixei o Kinetis-L em modo de execução sem hibernação implementado, todos os periféricos ligados e configurei a placa para alternar um LED periodicamente. Usando o IAR Embedded Workbench com um depurador I-Jet e o I-Scope, consegui traçar o perfil de uma linha de base simples para minha placa ~ 16,9 mA quando o LED estava desligado e ~ 18,0 mA quando o LED estava ligado, o que pode ser visto abaixo em Figura 1. Como você pode ver, é importante observar de onde você faz sua medição, ou então você pode estar muito errado em sua análise.

clique para ampliar a imagem

Figura 1. Uma medição atual da placa de desenvolvimento com um LED alternando uma vez por segundo. (Fonte:Autor)

Otimização de energia com modos de espera e sono profundo

A maneira mais rápida de ver alguma economia de energia é implementar o modo de espera ou de hibernação. Um exame da folha de dados para os processadores Kinetis-L mostra que o modo de espera consome entre 3,7 e 5,0 mA a 3 volts. Nesse modo, a CPU e os relógios periféricos são desabilitados, mas o flash está em um modo de sono, o que permite que o processador ainda acorde dentro de um intervalo de tempo de interrupção (12 - 15 ciclos de clock). O modo de espera é fácil de implementar, o código para entrar no modo de espera pode ser visto abaixo:

void Sleep_Wait (void)
{
SCB_SCR &=~ SCB_SCR_SLEEPDEEP_MASK;
asm (“WFI”);
}

Role ou arraste o canto da caixa para expanda conforme necessário.

Com apenas essas duas linhas de código, o consumo atual da placa de desenvolvimento cai de 18,0 mA para 15,9 mA. Isso é uma redução de 11,6% no consumo atual! Se a placa estivesse sendo alimentada por uma bateria de 680 mA, a vida útil da bateria do dispositivo seria de 37,8 horas para 42,8 horas! Um aumento de cinco horas com apenas duas linhas de código!

O que é ótimo sobre esses modos de energia de alto nível é que podemos facilmente dar mais um passo adiante. Em vez de colocar o processador em modo de espera, podemos movê-lo para um modo de espera de hibernação usando o seguinte código:

void Sleep_Deep (void)
{
SCB_SCR | =SCB_SCR_SLEEPDEEP_MASK;
asm (“WFI”);
}

Role ou arraste o canto da caixa para expanda conforme necessário.

Tudo o que fizemos foi ajustar um único bit no registro SCB_SCR e agora passamos de um consumo de corrente original de 18 mA para 14,8 mA. Isso é uma redução de 17,8% no consumo atual! Novamente, supondo que a placa fosse alimentada por uma bateria de 680 mA, a vida útil da bateria agora teria passado de 37,8 horas para 46 horas! Isso representa uma grande economia para apenas algumas linhas de código e é apenas a ponta do iceberg!

Aproveitando os modos de parada e VLLS para consumo de corrente uA

Usar o modo de parada tem o potencial de diminuir ainda mais o consumo de corrente do MCU em até outros dois miliamperes, desativando os relógios do núcleo e do sistema. O que você descobrirá é que quanto mais baixo o modo de energia, mais código é necessário para implementá-lo e mais complexo o código se torna para reativar o sistema. O código para entrar no modo de parada no Kinetis-L pode ser visto abaixo:

void Sleep_Stop (void)
{
volatile unsigned int dummyread =0;
SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
SMC_PMCTRL | =SMC_PMCTRL_STOPM (0);
dummyread =SMC_PMCTRL;
Sleep_Deep ();
}

Role ou arraste o canto da caixa para expanda conforme necessário.

Observe que o modo de parada é controlado por meio de um registro de controle de gerenciamento de energia e, uma vez que o estado é definido, a função Sleep_Deep é chamada para terminar de configurar o modo de energia e executar WFI.

Até este ponto, estivemos falando sobre o desenho de MCU 1 - 2 mA. Um microcontrolador moderno terá modos de energia que podem desenhar microampères ou até nanoampères! O processador Kinetis-L foi lançado por volta de 2013, e seu modo Very Low Leakage Stop (VLLS) atrai apenas 135 a 496 microampères! O código para inicializar este modo de energia pode ser visto abaixo:

void Sleep_VLLS1 (void)
{
volatile unsigned int dummyread =0;
SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK;
SMC_PMCTRL | =SMC_PMCTRL_STOPM (0x4);
SMC_VLLSTRL =SMC_VLLSCTRL_LLSM (1);
dummyread =VLLS_CTRL;
Sleep_Deep ();
}

Role ou arraste o canto da caixa para expanda conforme necessário.

Neste ponto, o microcontrolador não estaria consumindo quase nenhuma energia!

O efeito dos modos de baixo consumo de energia na latência de ativação

Como vimos até agora, mover o processador para os modos de baixo e baixo consumo de energia é uma ótima maneira de economizar energia, mas essa economia tem um custo. Quanto mais baixo for o estado de energia do processador, mais tempo é necessário para o processador despertar e realizar um trabalho útil. Por exemplo, se eu fosse usar o modo de parada padrão, demoraria 2 us mais a latência de interrupção para o processador acordar e começar a executar o código novamente. Não é tão ruim. No entanto, se eu fosse usar um dos modos VLLS no Kinetis-L, teria uma latência de ativação para inicializar o processador mais outros 53 a 115 microssegundos! Isso pode não ser aceitável dependendo do aplicativo. A Figura 2 mostra as transições adicionais dos modos de baixo consumo para o estado de operação no Kinetis-L.

clique para ampliar a imagem

Figura 2. Tempos de transição dos modos de baixo consumo para vários modos no Kinetis-L. (Fonte:folha de dados Kinetis-L)

Conclusão

Todos os microcontroladores arm terão os modos de baixo consumo padrão, mas todos os fornecedores de silício personalizam os modos de baixo consumo disponíveis para os desenvolvedores. Como vimos, os fornecedores de silício costumam oferecer vários modos que agem como um fruto mais fácil, com efeito mínimo na latência de ativação. Eles também oferecem vários modos de baixo consumo de energia que quase desligam o processador e consomem apenas algumas centenas de microamperes ou menos! Os desenvolvedores geralmente precisam equilibrar a quantidade de energia que desejam consumir com a rapidez com que precisam que o sistema seja ativado e responda aos eventos. As compensações são definitivamente específicas da aplicação, então não espere ser capaz de executar o modo de energia mais baixa em cada produto e aplicação.



Jacob Beningo é um consultor, conselheiro e educador de software embarcado que atualmente trabalha com clientes em mais de uma dúzia de países para transformar dramaticamente seus softwares, sistemas e processos. Sinta-se à vontade para contatá-lo em [email protected], em seu site www.beningo.com, e inscreva-se para receber seu boletim informativo mensal de bytes embutidos.

Integrado

  1. Como você pode aproveitar o monitoramento de impressora 3D para dimensionar a fabricação de aditivos?
  2. Como você pode dimensionar para a produção aditiva em série com MES aditivo?
  3. Como os dados IIoT podem aumentar a lucratividade na manufatura enxuta
  4. Quantas realidades você pode ter na automação industrial?
  5. Como uma queda de energia pode danificar suas fontes de alimentação
  6. Causas do baixo fator de potência
  7. Saiba como soldar latão naval
  8. Como carrego um capacitor?
  9. Como ajustar o PDP pode economizar seu dinheiro
  10. Como fortalecer o sistema hidráulico?