Acordando dos modos de suspensão profunda

13

A maioria dos microcontroladores (por exemplo, AVRs, MSP430s, PICs, etc) suporta vários modos de suspensão diferentes. O modo de suspensão "mais profundo" é aquele que propõe o menor consumo de energia (por exemplo, "Desligar", "Desligar"), mas todos os sistemas de relógio geralmente são interrompidos nesses modos e parece-me que a única maneira de " acordar "a partir deles é via estímulo externo (por exemplo, interrupção da troca de pinos, reinicialização do chip). Estou esquecendo de algo? Existem métodos de potência incrivelmente baixa para gerar um sinal de ativação periódica para um MCU?

Assumindo que meu objetivo é minimizar o consumo de energia (ou seja, dormir profundamente o maior tempo possível, permanecer acordado o mais breve possível), enquanto acorda periodicamente para executar uma função, qual é a maneira comum de atingir esse tipo de comportamento? Para simplificar ainda mais, vamos supor que minha função seja sem estado (não preciso me lembrar de nada do passado para executá-la).

Eu tive algum sucesso usando o WDT no MSP430 para obter esse efeito. Acabei de fazer minha rotina principal ser minha função, com a última linha permitindo que o timer do watchdog expire após um certo período e entrando no LPM4.5 ou seja lá como o modo "sono profundo" for chamado. O resultado líquido é que a função é executada, o MCU dorme, o WDT expira e o chip é redefinido ad nauseum. Parece funcionar, apenas imaginando se existe uma maneira "melhor" ou "mais elegante" ou "mais eficiente em termos de energia" de obter esse tipo de comportamento?

Ainda não tentei essa abordagem com um AVR, mas acho que o WDT tem mais "consumo de energia" nos AVRs do que no MSP430, por isso pode ser menos atraente para trabalhos com baixo consumo de energia. Talvez não exista uma abordagem "universal" para a baixa potência e você precise usar as ferramentas oferecidas por uma determinada linha de produtos? Sei que a nova linha picoPower possui muitos recursos como o Event System e Sleep Walking que, em alguns casos, dificilmente exigem que a CPU esteja ativa, se você pode fazer seu aplicativo se encaixar nessa estrutura ...

OK o suficiente da minha perambulação, vamos aqui o que você terá a dizer :)

Editar Exemplos concretos ilustrando técnicas também seriam legais!

vicatcu
fonte
2
Você já viu focus.ti.com/lit/wp/slay015/slay015.pdf ? Alguns pontos interessantes ao lado dos números absolutos de potência do sono.
XTL

Respostas:

15

A maioria dos micros suporta um oscilador de cristal de baixa potência de 32.768 kHz, com algum tipo de interrupção de pré-calibrador e temporizador. Defina o pré-calibrador para que o cronômetro conte lentamente e a interrupção ocorra no período desejado.

Alguns micros também possuem um temporizador RC de baixa potência, se o tempo exato não for crítico.

A folha de dados de qualquer micro de baixa potência listará a potência com o oscilador 32.768 (e nada mais) funcionando. É bem próximo de zero. Você pode fazer as contas para ver se isso é aceitável e compará-lo com a corrente consumida pelo cão de guarda.

OK, por exemplo, no msp430f2013, vejamos a potência na folha de dados.

0,5 μA é quase zero, embora seja cinco vezes o verdadeiro modo OFF.

Para mais detalhes, podemos olhar dentro da folha de dados.
Passar do LPM4 (tudo desligado) para o LPM3 (executando o oscilador) é a diferença entre 0,5 μA e 1 μA.

Suponha que a bateria seja CR2032 com capacidade de 225 mAh. Em seguida, a espera no LPM4 é de cerca de 50 anos e no LPM3 é de cerca de 25 anos. 25 anos é suficiente para muitas aplicações, porque a corrente ON (durante a medição em si) domina o consumo.

texto alternativo

markrages
fonte
fique à vontade para escolher um exemplo concreto ... :)
vicatcu
feito, para as células msp430f2013 e cr2032.
markrages
Usamos Cr2032 no meu trabalho com o ACLK em 32768, acordando a cada 2 segundos. Usamos um transceptor a cada 90 segundos. Fazemos uma medição de temperatura a cada 10 segundos. Podemos durar mais de 4 anos com um novo CR2032.
Kortuk
3

Algumas peças possuem osciladores de baixa potência (alguns uA) para ativação, e algumas PICs também possuem hardware para permitir que uma tensão subindo muito lentamente em um pino seja ativada - isso pode ser de um capacitor externo configurado antes de dormir para carregar período de vigília necessário.

mikeselectricstuff
fonte
3

Os PICs com RTCs podem ter o RTC definido em um estado de alarme, para que ele ative o MCU em um determinado momento, com um cristal externo de 32.768kHz. Eles desenham ~ 450nA IIRC no modo de suspensão RTC +, mas apenas 20nA com o RTC desativado.

Thomas O
fonte
3

Os temporizadores do watchrog AVR não são tão ruins quanto você pensa. De acordo com a folha de dados do ATTiny13A, o consumo de corrente no modo de desligamento a 3V é 2μA sem o WDT ativado e 4μA com. Claro, é 2x mais, mas a corrente em si é pequena o suficiente para cerca de 6,2 anos de operação, o que leva aproximadamente a mesma quantidade de tempo que a bateria leva para se degradar sozinha de qualquer maneira (fonte: data de validade).

Além disso, praticamente qualquer outra coisa que você conectar ao redor do μC atrairia muito mais. De fato, a parte mais complicada do projeto de um circuito de baixa potência é desligar toda a corrente no restante do esquema durante o período de sono.

O atraso da ativação também é bem configurável, de ~ 12ms a 8s, se a memória servir. A frequência real não faz nenhuma diferença perceptível se rotinas curtas de interrupção são usadas: eu liguei o ADC, experimentei um pote de 1K, calculei algumas coisas dos resultados e voltei a dormir sem nenhuma alteração perceptível no consumo geral ( suavizado com um capacitor grande para compensar a lentidão do meu multímetro).

Observe que o WDT não é uma ferramenta precisa de cronometragem, portanto, convém conectar um RTC externo. Eles podem consumir meros nanoamps, por isso deve ser um bom par. De fato, se o RTC em questão puder gerar pulsos regulares, você poderá usá-lo como sua fonte de ativação em vez do WDT, com o custo de usar um pino.

FlashCactus
fonte