terça-feira, 13 de agosto de 2013

Microcontroladores de baixo consumo – NXP LPC800

Apresentação


  A empresa NXP possui em seu portfólio microcontroladores que possuem a arquitetura Cortex M0+. Os micros da linha LPC GO são ótimas alternativas para aplicações que requerem baixíssimo consumo e que demandam poucos pinos.


  Nesse artigo vou escrever um pouco sobre a tecnologia de baixo consumo da família LPC800. O diagrama de blocos está apresentado na figura abaixo:




  A documentação completa pode ser encontrada nos links A e B e foi onde encontrei todas as informações presentes nesse pequeno artigo.

Sugiro o canal LPCZone do youtube, em especial a apresentação do link. 


A linha LPC800 possui, em seu modo de Power control, os diferentes modos de operação de baixo consumo:

  a) Sleep mode 
  b) Deep-sleep mode
  c) Power-down mode
  d) Deep power-down mode.

Possui em ROM algumas APIs que certamente permitem uma configuração bem rápida dos modos de economia internos do microcontrolador.

Nessa família, o microcontrolador pode ser acordado de um estado Deep-sleep mode e Power-down mode se tiver atividades em uma de suas interfaces seriais USART, SPI e I2C, ou de uma combinação de pinos, e isso é uma inovação. 

É também possível acordar por interrupção de timer(WUT) de um estado deep power-down mode.


Active Mode

Quando ligado, o microcontrolador funciona em Active mode. O core ARM Cortex M0+, as memórias flash, SRAM, ROM e os periféricos estão sendo clockados pelo clock de sistema ou clock principal. Em active mode, é possível dimunuir o consumo desligando os periféricos não utilizados ou diminuindo o clock do sistema.

A seguir mostro uma figura do datasheet do componente que expõe o quanto pode ser economizado caso seja desligado cada periférico, em duas frequências diferentes. 


Veja que cada um dos periféricos que não estão sendo utilizados podem gastar um pouco mais de energia. 




No gráfico abaixo, observa-se que existe uma grande diferença de consumo em sistemas eletrônicos que utilizam esse microcontrolador operando a 24 MHz (necessário um cristal externo - PLL ligado) e operando com frequências do IRC (clock interno), com PLL desligado - o PLL demanda muita energia em seu funcionamento.

Para frequências menores que 6 MHz, quase não há diferença de consumo de corrente conforme diminui-se a tensão de operação. 

A fórmula Potência = Tensão*Corrente nos diz, então, que, se ao invés de operar a 3,3 V., operarmos a 1,8 V., a potência cairia quase pela metade.
Para esse teste, todos os GPIOs foram configurados como saída e com pull-up desabilitados, mantidos em zero. Trata-se de um teste em while(1){} -> como nenhuma instrução de memória é executada, apenas serve para referência...




Modos de baixo consumo


A seguir detalho um pouco mais sobre os modos de baixo consumo e como podem ser utilizados. Eles podem ser modificados em tempo de execução.

Sleep mode: O clock do core ARM é desligado neste modo. Mas também é só... Os periféricos e as memorias continuam ativos. Com isso, o estado do processador, os valores originais dos registradores, todos os valores referentes a periféricos e também o estado atual da memória SRAM, tudo é mantido. É importante lembrar que também todos os pinos ficam estáticos, mantendo seus valores originais. Como todos os periféricos permanecem ativos, existem diversas maneiras de acordar deste modo. Uma forma de acordar é pela interrupção de qualquer evento que acontecer nos periféricos (interrupção correspondente a atividade na USART, I2C, SPI, interrupção de pinos de IO ou determinados padrões presentes neste IOs, interrupção de timer ou match - contagem de determinado numero de pulsos, comparadores ou por determinadas condições de maquina de estado pré-programadas). Detecção ou reset de Brown Out, Interrupção ou reset de Watch Dog Timer, Reset externo ou Self Wake-up timer são outras formas de voltar desse modo de operação de baixo consumo. O tempo para retornar ao active mode é de 2,6 us.


No modo Deep Sleep, além do clock do core ARM não estar presente, os periféricos também não recebem clock - mas ainda estão ativos, não estão em stand-by. A memória Flash está em stand-by também e é essa característica que permite que o tempo para o microcontrolador voltar a operação normal (acordar) seja pequeno. Ainda falando sobre as características do Deep Sleep, como no modo Sleep, o estado dos registradores, do processador, a lógica dos pinos, o conteudo da SRAM, tudo isso aí fica mantido. O modo Deep Sleep pode acordar por uma interrupção de atividade nos periféricos seriais I2C, USART e SPI. Além disso, pode acordar por interrupção de pinos, Detecção ou reset de Brown Out, Interrupção ou reset de Watch Dog Timer, Reset externo ou Self Wake-up timer. O tempo que o micro leva para voltar ao active mode é 4,2 us.

No modo Power-Down, o core e os periféricos não recebem clock. A memória flash é desligada e este fato faz com que o tempo para o microcontrolador acordar seja muito longo. Mas como nos dois estados anteriores,os registradores, o estado do processador, os pinos, a SRAM, tudo continua na mesma, sem alteração. Apesar dos periféricos não estarem com o clock ativo, o modo power-down também pode acordar por uma interrupção de atividade nos periféricos seriais. Todas as formas apresentas para o micro voltar às suas atividades são iguais às apresentadas no modo Deep Sleep. O tempo para "acordar" é de 53 us. - bem mais alto por causa do estado da memória neste modo. 

Tanto no modo Deep Sleep quanto no modo Power-Down, o clock principal deve ser chaveado para o clock interno IRC, que é 12 MHz, ou essa frequência dividida por até 255.


O modo de economia mais profunda é o modo Deep Power-Down. Nesse estado tudo é desligado, exceto 4 registradores que são mantidos. O clock do core ARM é parado, bem como o clock dos periféricos, as memórias são desligadas e todos os valores da SRAM são perdidos, os IOS ficam em estados indeterminados, os registradores são descartados. Existem duas formas previstas para que o microcontrolador volte desse estado: esse micro possui um self wake-up timer que permite que o micro seja programado para voltar a operação depois de determinado tempo de economia de energia. Além disso, a outra forma de acordar o micro é através de um pulso (de pelo menos 50 nanossegundos e em nível baixo) no pino WAKEUP (PIO0_4), que também deve ser montado com um resistor de pull-up caso deseje-se operar neste modo. O consumo desse modo é muitíssimo baixo!


A volta ao modo de operação ativo é como se voltasse de um reset, com todos os registradores e SRAM como estivesse acabado de ligar o microcontrolador, exceto por 4 registradores de uso geral da unidade de gerenciamento de energia integrada ao microcontrolador (GPREG0 ... GPREG3) e 28 bits do registrador DPDCTRL (curioso, não?).  O tempo para retornar deste modo é bem maior, 215 us, mas a economia compensa, não?


Self wake-up timer


Trata-se de um timer de 32 bits que pode ser derivado de um clock de 750 kHz ou de um clock menor e também de menor consumo, de 10 kHz. A primeira fonte, de 750 kHz permite períodos de até 95 minutos até que o timer estoure. Se for utilizado o timer de 10 kHz, até 119 horas de "sono" podem ser conseguidas. A precisão desse cristal, no entanto, não é legal para aplicações que possuem grandes variacões de temperatura. A variação é até 90% na precisão de seu clock.


Consumo em números e gráficos

Veja abaixo o consumo desse microcontrolador em diferentes modos: 


Sleep mode

Em 24 MHz, PLL ligado, nos demais, PLL desligado. Tensão 3.3V. 
Todos os periféricos estão desligados nesse teste, BOD e pull-ups internos desabilitados e modo low current habilitado.

Deep Sleep

BOD desabilitado, todos osciladores e blocos analógicos desligados. Essas mesmas condições são repetidas no próximo modo.


Power-Down


Deep Power-Down

Nesse teste a seguir, o Wake-up timer não está ativo. A única forma de acordar o microcontrolador deste sono profundo é  com um pulso no pino WAKEUP - PIO0_4.


Conclusão

O microcontrolador da NXP é uma ótima opção para sistemas eletrônicos que demandam um consumo de energia muito baixo. Entre as principais características que proporcionam isso, destaco a versatilidade trazida pelo CORE ARM Cortex M0+ (4 modos de power down modes que podem ser acessadas em tempo de execução) e a possibilidade de acordar de um estado de "hibernação" de forma muito rápida com 4 registradores de 32 bits para valores importantes mantidos intactos. É possível até adormecer apenas consumindo uma corrente de 200 nA. em 1.8 V.!

P = 1.8 * 200E-9 = 0,36 uWatts.


Além de todas essas características, o microcontrolador também possui APIs em ROM que permitem uma fácil configuração dos modos de economia internos do dispositivo.

A função set_power(main_clock, PWR_MODE) facilita a vida do desenvolvedor!



Agradecimentos:

Yoshinori Kanno, FAE da Avnet e que trabalhou na NXP de 2000 a 2012, foi quem primeiro me apresentou essa familia de microcontroladores.


Nenhum comentário:

Postar um comentário