quarta-feira, 28 de agosto de 2013

Microcontroladores de baixo consumo - Comparativo entre Texas Instruments Wolverine e NXP LPC800

   Este pequeno artigo tem por objetivo fazer a comparação de consumo dos microcontroladores de baixo consumo NXP LPC800 e Texas Instruments MSP430F58xx e 59xx ( Wolverine ).

Em modo ativo, a 1 MHz, o MSP430 Wolverine consome 100 micro Amperes, aproximadamente. O NXP LPC800, 450 micro Amperes.

   O microcontrolador Texas Instruments Wolverine consome 20 nano Amperes em 1,8V. no modo mais econômico de energia, o modo 4.5 de consumo de energia.

Potência = 1.8 * 0.000000020 =  36 nW.

   Para acordar desse estado, ele leva 1 milissegundo. Existe apenas uma forma de acordar deste sono profundo - através de uma interrupção de pino de I/Os - e todos os I/Os são sensíveis - e isso é ótimo!

   No NXP LPC800, o microcontrolador mais econômico com core ARM CORTEX M0+ da NXP:

Potência = 1.8 * 0.000000200 =  360 nW.

   No LPC800, o micro não volta desse estado. Ele "reseta a frio" em 0,004 milissegundos, mas é possível verificar se ele voltou de um reset ou de um cold boot. Dez vezes mais potência é dissipada por esse micro comparado com a potência dissipada pelo Wolverine!

   Esse micro tem uma vantagem, no entanto. Possui um timer de 32 bits que o permite dormir e acordar de um sono profundo de acordo com uma temporização pré-programada (pode funcionar em 10 kHz com cristal interno e permite até 119 horas de "sono") com um baixo consumo de energia. Esse cristal é bem sensível a temperatura - então é recomendável que se utilize prazos curtos de tempo pra ambientes com mudança de temperatura. No Wolverine, o modo 3.5 também permite programar um evento de RTC para o micro voltar a ativa, mas o consumo já é mais alto, se comparado com o LPC800 (500 nA. para o TI vs. 200 nA. do NXP)

   É importante salientar também que no LPC800, os estados dos pinos não são conservados no modo de consumo mais baixo. Já no MSP430 Wolverine, todos os pinos permanecem inalterados, desde o momento que ele entra em estado de baixíssimo consumo, até o momento que retorna deste estado.

   No NXP LPC800, apenas um pino permite que o microcontrolador retorne do estado mais econômico de energia através de uma interrupção de I/O externa - tem que haver um pulso em zero por no mínimo 50 ns. em um determinado pino para que isso ocorra. No Wolverine, isso já funciona de forma diferente - todos os pinos permitem que o micro volte de seu "sono profundo - modo 4.5" - todos os I/Os são interrompíveis.

Estudo de caso:

Sistema 1:

Imaginemos um sistema eletrônico de telemetria que possua um sensor de temperatura que se comunica via SPI com um microcontrolador Texas Instruments Wolverine e que, após a leitura, envia os dados via UART para um sistema de medidas.

No projeto, o microcontrolador consegue controlar a alimentação do sensor de temperatura. 

Considere os seguintes tempos:

Frequência de leitura do sensor e comunicação com a central: sempre que a central solicitar via uart.
Tempo para retornar do modo 4.5: 1 ms.
Tempo para se comunicar com o sensor: 2 ms.
Tempo para se comunicar com a central de telemetria: 3 ms.

Tensão e Consumos:
Todos os dispositivos estão alimentados a 1.8V. O controle de alimentação é feito pelo microcontrolador.
Microcontrolador: Modo Ativo a 1 MHz =>100 uA.
Microcontrolador: Modo 4.5=> 20 nA.
sensor de temperatura: 1 mA.

Sempre que é solicitado, o sistema eletrônico acorda por uma interrupção de pino - RX da UART (1), o micro, operando a 1 MHz, alimenta o sensor e faz a leitura (2), desliga o sensor e se comunica com a base (3). Depois dessas tarefas, volta para o modo 4.5.

(1) 1 ms. =>   100 uA. 
(2) 2 ms. =>   100 uA. + 20 uA ( estimado da UART e SPI ligadas ) + 1mA. = 1,12 mA.
(3) 3 ms. =>   100 uA.
Indefinidamente, até a próxima comunicação: 20 nA.

Sistema 2: Apenas o microcontrolador é trocado pelo NXP800.

Tempo para retornar do modo deep power-down: 4 us

Tensão e Consumos:
Todos os dispositivos estão alimentados a 1.8V. O controle de alimentação é feito pelo microcontrolador.
Microcontrolador: Modo Ativo a 1 MHz =>450 uA.
Microcontrolador: Modo deep power-down=> 200 nA.

(1) 0,004 ms =>    450 uA.
(2) 2 ms.       =>   450 uA. + 20 uA ( estimado da UART e SPI ligadas ) + 1mA. = 1,47 mA.
(3) 3 ms.       =>   450 uA.
Indefinidamente, até a próxima comunicação: 200 nA.

Conclusão:

   Ambos são fantásticos em termos de consumo, não é mesmo?! A nova linha de Texas Instruments MSP430 Wolverine, no entanto, batem o NXP LPC800, principalmente se considerarmos que os sistemas de baixo consumo passam a maior parte do tempo em modo de economia extremo. Nesse estudo de caso, o micro é acordado por uma interrupção de I/O e podemos utilizar as duas formas de baixo consumo de ambos os microcontroladores. 

   Estamos mais perto de um mundo sem baterias? Acredito que sim.

Microcontroladores de baixo consumo – Texas Instruments Wolverine MSP430FR58XX e MSP430FR59XX

Introdução - MSP430 - de volta a 1992...

   Os MSP430s da Texas Instruments são microcontroladores bem velhinhos, que datam de 1992. Sempre se destacaram por sua arquitetura de baixo consumo RISC 16-bits, programação in-circuit e operaram sempre em frequências na ordem de MHz. Mas foi a partir de 1999 que tudo mudou - foram lançadas versões com flash interna.

   Encontrei um documento que mostra como deveríamos utilizar o Compilador C com MSP430 no IAR em 1996, vejam vocês. Acessem o link. Uma pesquisa arqueológica me levou até este outro documento, que prova o uso de um micro MSP430 em filtros digitais em 1994.

Um dos primeiros micros dessa linha Texas foi o MSP430C323.

Texas Instruments MSP430 Wolverine

   Esta família é nomeada de MSP430F58xx e MSP430F59xx.

   Possuem até 64 KB de FRAM, 2 KB de SRAM, UART I2C, SPI, ADCs e rodam até a 24 MHz de Clock.

   O primeiro vídeo da Texas foi esse abaixo:

   
   Essa linha de microcontroladores têm alguns segredinhos que permitem que eles sejam tão econômicos. Esse é o principal objetivo desse artigo - não quero entrar no mérito de explicar o dispositivo... Vamos começar pelo principal responsável pela economia de energia, a tecnologia de sua memória FRAM, que substitui SRAM, DRAM, NAND ou NOR Flash e EEPROM.


FRAM, F-RAM ou FeRam, como preferirem (Ferroelectric Random Acess Memory)

   A FRAM é uma memória não volátil ( não perde seus dados quando a alimentação é desligada, como a SRAM ). Apesar de seu nome, não tem ferro em sua composição. É contruída, na verdade, de materiais ferro-elétricos, que não são afetados por campos magnéticos, apenas por campos elétricos. 

   A velocidade de escrita da FRAM é bem rápida se comparada com uma flash tradicional ( umas 100 vezes mais rapidez de escrita ) e, quando escrevemos em uma posição dessa memória, a escrita e a leitura são feitas ao mesmo tempo. Essa é uma diferença bem interessante, não é mesmo?
As Flashs internas de microcontroladores de mercado precisam de uma tensão alta para poder gravar um valor em sua memória. Essa tensão alta é gerada pelo próprio chip, em um LDO, e nem nos lembramos dela normalmente. Essa elevação de tensão também é responsável pelo alto consumo ( este consumo, especificamente, é 250 vezes mais econômico que o microcontrolador MSP430 anterior ) . A FRAM utiliza tensão de 1,5V. para gravar seus dados, ou seja, é bem mais econômica neste ponto.

   Escritas parciais são menos frequentes com as FRAMs, uma vez que a quantidade de energia necessária para gravar um byte nessa memória é menor que em uma NAND flash de um micro de mercado.

   Além disso, trilhões ciclos de escritas são garantidos ( sim, não precisamos mais nos preocupar com isso ). Pense em uma NVRAM – Uma RAM não volátil – praticamente uma!

   Uma característica curiosa, no entanto, é que é necessário uma escrita depois de uma leitura da FRAM (memory restore). Isso já é feito por hardware.

   A FRAM não é exclusividade da Texas. Rohm e Fujitsu também tem essa tecnologia em alguns CIs, mas não em microcontroladores. A Texas já trabalha nisso desde 2001, em parceiria com a empresa RAMTRON.

   Uma vez que a FRAM não perde seus dados quando a alimentação é desligada e, nesses micros, podemos utilizar a FRAM como uma RAM não volátil, em aplicações em que é necessário ligar, realizar um processamento e desligar, o tempo de guardar todas as informações da SRAM somado com o tempo de resgatar todas as informações para a SRAM, como em um micro standard, não existe. Não existe porque não são necessárias essas operações. A informação, quando é modificada, já está salva.

   A SRAM é mantida nesses chips para ser fácil a migração de projetos já existentes.

 Tecnologia UUL (Ultra-low-leakage) - 130 nm.

   O que a Texas fez? Ela reprojetou suas libs de "design tool kit" ( baixo nível mesmo - como os componentes são organizados para serem fabricados os periféricos ) pra otimizar e minimizar ao máximo a corrente de fuga. Ela não estava se preocupando em aumentar a performance, apenas em diminuir o consumo. E conseguiu um ganho de mais de 10 vezes em economia de consumo neste microcontrolador. Com essa nova forma de contruir micros, ela conseguiu projetar ADCs de 12-bits, por exemplo, que consomem apenas 75 micro Amperes e o periférico RTC que consome apenas 100 nano Amperes.

Power Gating Controller

   Uma nova tecnologia de power gating controller é utilizada para que os circuitos internos do microcontrolador não sejam totalmente desligados. Isso permite que o tempo de ligamento de determinado bloco não seja perdido.



LDO Interno inteligente

   Foi trabalhado tambem o LDO interno do microcontrolador, que a Texas permitiu uma operação mais inteligente, uma vez que o LDO regula automaticamente o quanto ele tem que entregar de energia ao sistema, dependendo da demanda atual do processador. Isso minimiza a potência consumida pelo sistema.


Gerenciamento de Energia e Modos de Operação

   Como alguns micros de mercado, o Wolverine também opera a 1,8V.

   Alguns modos de economia de energia são previstos nesse microcontrolador:
  • Active - Esse modo é o mais veloz, onde todos os periféricos, clocks, core, SRAM, tudo está ligado e o microcontrolador está em operação normal. O consumo deste modo é 100 micro Amperes por MHz. Esse valor é muito baixo, se comparado com um MSP430 de outra família.

  • LPM1, LPM2, LPM3, LPM4 - Veja no quadro abaixo as características desses modos.  Apenas em modo ativo o core está ativo. Os periféricos que estavam trabalhando com uma determinada frequência, quando um desses modos de economia é ativado, ficam desabilitados até que o clock volte a ficar ativo. Todos os estados de I/Os  RAM e registradores se mantem no mesmo valor de antes de entrar nesses estados. Existem diferentes formas de voltar do modo de economia de energia, dependendo do modo.

  • LPM3.5 e LPM4.5 - nesses dois modos de economia de energia, o regulador de tensão do módulo de economia de energia interno ao micro é simplesmente desligado. Todos os registradores e informações que estão na RAM são perdidos. Mas, apesar dos dados dos registradores de I/Os terem também sido perdidos, o valor dos pinos são "travados" - e são individualmente programados. No modo 3.5 é possível de retornar do estado de modo de economia de energia através de um evento de RTC - programado para acordar o micro por um alarme. Para ambos os modos, 3.5 e 4.5, é possível se recuperar por uma interrupção de pino externo ( qualquer pino do microcontrolador previamente programado para tal função ). O SVS (Supervisor de Alimentação) pode ser utilizado em qualquer modo, previamente programado para que, se aplicada uma tensão abaixo de um mínimo necessário para sua operação, o BROWN OUT RESET entre em ação. 





   Bom, a conclusão é que esse micro traz uma inovação muito interessante, a FRAM, que muda os paradigma de como pensamos o firmware de nossos sistemas embarcados. O baixíssimo consumo, principalmente no modo 4.5, faz que, se programado de forma que sempre que não tiver realizando atividades, o micro vá para esse modo de economia, o sistema possa ter um consumo ainda menor. Equipamentos que consomem menos possibilitam a criação de novos sistemas inteligentes que começam a fazer parte de nossa vida aos poucos.


Referências:



Agradecimentos:
  • Celso Providelo, dono da empresa Gwyddion, onde aprendi fazendo. Especialmente hardware e firmware para MSP430 em MSPGCC.
  • Raul Brum de Matos, engenheiro da Texas Instruments desde 2011 - Raul me deu uma placa de desenvolvimento Texas, que permitiu que criasse alguns posts que serão publicados aqui no futuro. Além disso tirou algumas dúvidas e me corrigiu em alguns pontos.
  • William Lyra, quem primeiro comentou desses tais Wolverines.
  • Alessandro Ferreira da Cunha - diretor da TechTraining desde 2008.

segunda-feira, 19 de agosto de 2013

Por que a arquitetura ARM Cortex M0+ consome menos energia que o Cortex M0?

   Os processadores Cortex M0 já possuem em sua arquitetura um gerenciamento de energia que preve estados de baixo consumo: sleep ( que para o clock do processador ) e deep sleep ( que interrompe o clock do sistema todo e desliga a memória flash e o PLL, que trabalha com o cristal externo ). Essas características foram pensadas para que, quando o processador não estivesse ocupado, pudesse aguardar até a próxima tarefa em um estado mais economico de energia.

   Ele também já preve um periférico opcional chamado de WIC ( Wakeup Interrupt Controller ), que permite que o processador acorde de um estado deep sleep através de uma interrupção de hardware ( por exemplo por um byte chegando pela serial USART, I2C ou SPI ou mesmo uma entrada sendo sensibilizada ou uma combinação de entradas ).

   Essas características e o número de diferentes estados de baixo consumo mudam conforme o fabricante do microcontrolador escolhido.

   Mas como a ARM pensou em diminuir o consumo de seus processadores Cortex M0+ ainda mais, em relação ao Cortex M0?

   Uma das razões pelas quais o consumo é alto em um microcontrolador é, certamente, o número de acessos a Flash, seja pra escrita ou pra leitura. Por isso, em diversas famílias de microcontroladores, observamos a utilização de tecnologia de memória diferentes da tradicional NAND FLASH. A Texas Instruments utiliza em alguns microcontroladores MSP430 a tecnologia FRAM ( Ferroelectric Random Access Memory ) que demanda baixa energia em suas operações. A Renesas, por outro lado, optou por utilizar uma tecnologia de NAND Flash batizada como MONOS ( metal oxide nitride oxide silicon ), com tecnologia 40 nm ( e, na verdade essa que é a novidade. A tecnologia MONOS já vem sendo utilizada a mais de 20 anos em seus microcontroladores ). Um CI construido com tecnologia de 40 nm. permite um consumo ainda menor devido a menor corrente de fuga ( aspectos construtivos do silício ), além de um mais alto clock - isso fica pra outro artigo.

   A ARM, sabendo disso, diminuiu o número de estágios de pipeline de 3, do Cortex M0, para 2, no Cortex M0+. E vocês vão ver como isso funcionou para que o número de acessos a memória diminuisse.

   Primeiro vou falar um pouco sobre o que é PIPELINE. 

   Talvez a melhor forma de entender um pipeline seja pensar numa lavanderia. Vejam a apresentação de um curso da UFSCAR, do slide 3 ao 6. Os três estágios de lavagem de um monte de roupas diferentes podem ser divididos em lavar, secar e passar, nessa ordem. E isso pode ser feito em paralelo, quando há muito roupa pra lavar.

   Bom, voltemos ao mundo das CPUs modernas... Elas são projetadas para executarem diversas instruções em paralelo (manter um pipeline). Esse forma de processamento em paralelo aumenta muito a eficiência da CPU, a mantendo a maior parte do tempo ocupada.
Algumas sequências de instruções podem interromper o fluxo de informações do pipeline e, pelo menos por um curto período de tempo, diminuir a ocupação da CPU.

   Os microcontroladores ARM Cortex M0, M3 e ARM7 são compostos por três estágios de pipeline: 

  • FETCH ( Acesso a memória )
  • DECODE ( Decodificação ) 
  • EXECUTE ( Execução ). 

   A explicação de cada um dos estágios pode ser visto na figura. Nela está apresentada as posições das instruções por ciclo de clock. O progresso pode ser observado se seguirmos a linha horizontal do tempo.



   Cada uma das operações apresentadas na figura requer um ciclo de clock para instruções de processamento de dados. Então, uma instrução desse tipo leva 3 ciclos para terminar a execução. Esse tempo é conhecido como a latência de execução de uma instrução. Com o pipeline cheio, cada instrução é completada a cada ciclo de clock. As máquinas RISC já são projetadas para manter o pipeline cheio ( ou ocupado, como preferirem ). Ou seja, podemos dizer que o pipeline tem um rendimento de uma instrução por ciclo, se considerarmos instruções de processamento de dados.

   Como dito anteriormente, no Cortex M0+ há apenas 2 estágios de pipeline:


  • FETCH+PRE-DECODE ( Acesso a memória + começo da decodificação )
  • DECODE+EXECUTION ( fim da decodificação + Execução )





   O exemplo anterior funciona para instruções de Processamento de Dados.

   As instruções desse tipo para o ARM CORTEX M0+ estão a seguir e podem ser encontradas no site da ARM.





   Diminuindo o número de estágios de pipeline, o número de acessos a flash e a ROM é diminuido. Além disso a sombra de buscas ( branch shadows ) é reduzida de 2 para 1 ciclo de clock. No primeiro slide abaixo mostro os 2 ciclos de clock que são perdidos quando uma instrução branch é executada.




   Neste próximo slide mostro que apenas 1 ciclo de clock é perdido quando uma instrução branch é executada.



   Mostro abaixo, de outra forma, o "branch shadow" para as arquiteturas ARM CORTEX M0, M3 e M0+.


As instruções de branch da arquitetura Cortex M0+ estão apresentadas abaixo:



   Outra característica modificada nesta arquitetura, que possibilitava um consumo menor de energia, foi o controle de consumo dos componentes do sistema. Isso foi otimizado.

   O Processador Cortex M0+ também implementa uma caracteristica que possibilita aumentar a velocidade de acesso aos i/os, em um único ciclo e em alta velocidade. Essa caracteristica é mapeada em memória e suporta todas as instruções de acesso a memória. No entanto, essa característica não suporta execução de código (apenas operações de load e store).

   Execuções mais rápidas do código permitem que o processador rode a uma frequência mais baixa ou que o tempo que o processador passe em sleep mode aumente. Essas duas ações fazem com que o consumo seja minimizado.

Referências:


  1. www.arm.com
  2. The Definitive Guide to the ARM Cortex-M3, Joseph Yiu Second Edition  185617963X  978-1856179638 Segunda Edição
  3. Applications Development on the ARM® Cortex™-M0+, Rafael Charro - ARROWAR
  4. Texas Instruments Benchmarking MCU power consumption for ultra-low-power applications
  5. www.ti.com - MSP430 com FeRAM
  6. www.renesas.com - Implementing Ultra-Low-Power Design Techniques in RX100 MCU-based applications
  7. Livro Computers as Components, Third Edition: Principles of Embedded Computing System Design (The Morgan Kaufmann Series in Computer Architecture and Design)  0123884365  978-0123884367 Terceira Edição
  8. www.freescale.com - Kinetis L Series 
  9. www.nxp.com - LPC800
  10. http://www2.dc.ufscar.br/~saito/download/arquitetura-pos/aula03-pipeline.ppt
  11. The Anatomy of the ARM Cortex-M0+ Processor - Joseph Yiu
Agradecimentos



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.


domingo, 11 de agosto de 2013

Qual melhor microcontrolador para seu projeto?


   Os principais critérios de decisão sobre a escolha do uso do microcontrolador certo em um projeto de sistemas embarcados deve levar em conta vários diferentes fatores. Entre eles destaco:


Preço

É necessário que se pense comercialmente quando é feita uma escolha de microcontrolador. O preço de um produto nao indicado para novos desenvolvimentos pode ser muito caro. Uma característica que contribui com o aumento do preço é a tecnologia em que a FLASH é construída. Em determinados microcontroladores é utilizada tecnologia de 90 nm, enquanto em outros, 63 nm. Essa diminuição permite que um maior número de componentes seja contruido em uma mesma área de silício. Para um mesmo tamanho de flash, a área ocupada é menor – menos material é utilizado e o preço cai.


Tempo de fornecimento deste produto e disponibilidade

O histórico de fornecimento de determinadas empresas, através muitas vezes de seus distribuidores e o bom relacionamento comercial, podem e devem influenciar na escolha do melhor microcontrolador. O bom relacionamento também propicia ótimo suporte dos fabricantes. 


Suporte, de acordo com o país que esta sendo desenvolvido o projeto

Diversas empresas, além de disponibilizar tempo de engenharia, criam projetos personalizados experimentais para que os desenvolvedores possam acelerar o desenvolvimento de novos projetos. Em diversas oportunidades um engenheiro da própria empresa fabricante de um circuito integrado senta ao lado da equipe responsável por determinado projeto e auxilia no start-up e vão direto para o hands-on, propriamante dito.


Experiência

A experiência da equipe de desenvolvimento de uma determinada empresa conta muito para a escolha do melhor microcontrolador a ser utilizado no projeto de sistemas embarcados. Ter que aprender do zero sobre uma arquitetura nova ou sobre novas características pode consumir tempo precioso que poderia estar sendo aplicado ao projeto. Se a equipe já possui um bom domínio sobre a arquitetura, ferramentas de desenvolvimento, cross-compiladores e, em muitos casos, o RTOS utilizado, farão os projetos funcionarem muito mais rapidadente com microcontroladores similares aos atualmente utilizados do que escolher uma família nova de microcontroladores que deveria ser aprendida do zero. A ponderacao que deveria ser feita é quando a familia de microcontroladores não atende tecnicamente os projetos propostos, suas ferramentas não são mais adequadas ou ultrapassadas para o desenvolvimento, os chips se tornaram muito caros e/ou não existe mais viabilidade econômica.


Características técnicas:- Arquitetura- Consumo- Periféricos- Velocidade e capacidade de processamento- Tamanho

Claro que toda essa discussão não teria sentido se o microcontrolador escolhido não satisfizesse as características técnicas do projeto, em especial periféricos, velocidade, capacidade de escalabilidade, consumo, tamanho. Existe hoje uma grande briga pelo mercado de baixo consumo de microcontroladores. Várias aplicações estão exigindo menores consumos e os fabricantes estão apresentando sempre novidades que chegam a marcas de nanoAmperes para microcontroladores operando em frequências de 10 MHz.
Há também uma briga muito acirrada com os microcontroladores de capacidade media de processamento, com unidades de ponto flutuante e com mais de 1MB de Memória Flash. 


Documentação

A documentação de uma família de microcontroladores e sua coleção de application notes disponíveis, códigos prontos para integração no projeto ou em ROM, auxiliam muito a equipe de desenvolvimento que ganha um tempo precioso em testes de hardware e em seu primeiro firmware, que pode ser aplicado ao desenvolvimento do projeto.


Time to market – ferramentas que proporcionam velocidade no desenvolvimento do projeto

A decisão de uso de um sistema operacional de tempo real proprietário para determinada linha de microcontroladores de uma marca pode prejudicar uma eventual mudança de tecnologia e de fornecedor. No entanto, essa escolha pode ser benéfica se acelerar muito o desenvolvimento do projeto, através da utilizacão de bibliotecas prontas, reaproveitamento de código e muitas funções prontas pra uso e integração. 


Ferramentas de debug

A utilização de ferramentas de debug que permitem um completo monitoramento das variáveis internas de um microcontrolador em tempo de execução, aliado a ferramentas de software proprietárias ou free, além da possibilidade de monitoramento em tempo de execução de várias características do sistemas utilizando um RTOS, auxiliam no tempo de desenvolvimento de sistemas embarcados, uma vez que se adiantam à correção de bugs e a previnem de antemão eventuais erros. Existem disponiveis no mercado ferramentas de debug rápidas, que consomem poucos recursos do microcontrolador e via USB, utilizando placas de 10 a 20 dolares. Sim, hoje em dia debug com equipamentos sofisticados, utilizando osciloscópio para contar bit de comunicação serial ou via UART é coisa de museu. Todas essas ferramentas apresentadas propiciam um melhor time to market e mais segurança ao desenvolvedor. É possível também com JTAG fazer um teste de boundary scan, que permite verificar a integridade da montagem do hardware.


Conclusão:


   O melhor microcontrolador é aquele que permite um desenvolvimento rápido de uma solução eletrônica segura a requisitos de projeto bem definidos e que seja fácil de encontrar para venda a um preço baixo no mercado internacional.



Agradecimentos e créditos:

Alessandro Cunha pelas dicas apresentadas na lista, muitas delas apresentadas acima.
Felipe Lavrati pelas discussoes da lista de sistemas embarcados.
Henrique Rossi e William Lyra, por todos os bate papos sobre o assunto.