Índice:

Reduzindo o consumo de energia da bateria para Digispark ATtiny85: 7 etapas
Reduzindo o consumo de energia da bateria para Digispark ATtiny85: 7 etapas

Vídeo: Reduzindo o consumo de energia da bateria para Digispark ATtiny85: 7 etapas

Vídeo: Reduzindo o consumo de energia da bateria para Digispark ATtiny85: 7 etapas
Vídeo: The Importance of Sleep Mode for Arduino Projects | Ultra Low Power | MCP1702 MIC5205 MIC1700 RD6018 2024, Novembro
Anonim
Reduzindo o consumo de energia da bateria para Digispark ATtiny85
Reduzindo o consumo de energia da bateria para Digispark ATtiny85
Reduzindo o consumo de energia da bateria para Digispark ATtiny85
Reduzindo o consumo de energia da bateria para Digispark ATtiny85

ou: Executando um Arduino com uma célula tipo moeda 2032 por 2 anos.

Usando sua placa Digispark Arduino pronta para uso com um programa Arduino, ele consome 20 mA a 5 volt.

Com um banco de energia de 5 volts de 2.000 mAh, ele funcionará por apenas 4 dias.

Etapa 1: Reduzindo a tensão de alimentação usando uma bateria LiPo

Reduzindo a tensão de alimentação usando uma bateria LiPo
Reduzindo a tensão de alimentação usando uma bateria LiPo

Usando uma bateria LiPo com 3,7 volts como fonte, sua placa Digispark consome apenas 13 mA.

Com uma bateria de 2.000 mAh, ele funcionará por 6 dias.

Etapa 2: Reduza o Clock da CPU

Se você não usa conexão USB, matemática pesada ou pesquisa rápida em seu programa, reduza a velocidade do clock. Por exemplo. a biblioteca IRMP de recepção de infravermelho com polling pesado funciona bem a 8 MHz.

A 1 MHz, seu Digispark consome 6 mA. Com uma bateria de 2.000 mAh, ele funcionará por 14 dias.

Etapa 3: Remova o LED de energia da placa e o regulador de energia

Desative o LED de energia quebrando o fio de cobre que conecta o LED de energia ao diodo com uma faca ou remova / desative o resistor 102.

Já que você está usando uma bateria LiPo agora, você também pode remover o IC regulador de energia on-board. Primeiro levante os pinos externos com a ajuda de um ferro de solda e um pino. Em seguida, solde o conector grande e remova o regulador. Para reguladores pequenos, use muita solda e aqueça todos os 3 pinos juntos e, em seguida, remova-os.

A 1 MHz e 3,8 volts, seu Digispark agora consome 4,3 mA. Com uma bateria de 2.000 mAh, ele funcionará por 19 dias.

Etapa 4: desconectar o resistor USB D- pullup (marcado como 152) de 5 volts (VCC) e conectá-lo ao USB V +

Desconectando o resistor USB D- pullup (marcado como 152) de 5 volts (VCC) e conecte-o ao USB V +
Desconectando o resistor USB D- pullup (marcado como 152) de 5 volts (VCC) e conecte-o ao USB V +

Esta modificação é compatível com todas as versões 1.x do bootloader micronúcleo. Se você já tem um novo bootloader 2.x em sua placa, você deve atualizar para uma das versões 2.5 com "activePullup" em seu nome. A maneira mais fácil de fazer isso é instalar o novo pacote da placa digispark e queimar o bootloader com a versão recomendada (!!! não a padrão ou agressiva !!!).

Quebre o fio de cobre na lateral do resistor que aponta para o ATtiny. Isso desabilita a interface USB e por sua vez a possibilidade de programar a placa Digispark via USB. Para habilitá-lo novamente, mas ainda economizar energia, conecte o resistor (marcado como 152) diretamente ao USB V + que está facilmente disponível no lado externo do diodo shottky. O diodo e seus lados corretos podem ser encontrados usando um testador de continuidade. Um lado deste diodo é conectado ao pino 8 do ATtiny (VCC) e Digispark 5V. O outro lado está conectado ao USB V +. Agora, o resistor pullup USB só é ativado se a placa Digispark estiver conectada ao USB, por exemplo, durante a programação.

As duas últimas etapas também estão documentadas aqui.

A 1 MHz e 3,8 volts, seu Digispark agora consome 3 mA. Com uma bateria de 2.000 mAh, ele funcionará por 28 dias.

Etapa 5: use o sono em vez de atraso ()

Use Sleep em vez de Delay ()
Use Sleep em vez de Delay ()

Em vez de longos atrasos, você pode usar o modo de espera da CPU para economizar energia. As dormidas podem durar de 15 milissegundos a 8 segundos em etapas de 15, 30, 60, 120, 250, 500 milissegundos e 1, 2, 4, 8 segundos.

Como o tempo de inicialização do repouso é de 65 milissegundos com as configurações de fusível digispark de fábrica, apenas atrasos maiores que 80 ms podem ser substituídos por repouso.

Durante o sono, seu Digispark consome 27 µA. Com uma célula-botão de 200 mAh 2032, ele dormirá por 10 meses.

Para ser correto, o Digispark deve acordar a cada 8 segundos, funcionando por pelo menos 65 milissegundos e consumindo cerca de 2 mA de corrente. Isso leva a uma corrente média de 42 µA e 6 meses. Nesse cenário, quase não faz diferença se o programa for executado por 10 milissegundos (a cada 8 segundos).

O código para usar o sono é:

#include #include volatile uint16_t sNumberOfSleeps = 0; extern volatile unsigned long millis_timer_millis; void setup () {sleep_enable (); set_sleep_mode (SLEEP_MODE_PWR_DOWN); // modo de suspensão mais profunda…} void loop () {… sleepWithWatchdog (WDTO_250MS, true); // dormir por 250 ms… sleepWithWatchdog (WDTO_2S, true); // dormir por 2 s…} / * * aWatchdogPrescaler pode ser de 0 (15 ms) a 3 (120 ms), 4 (250 ms) a 9 (8000 ms) * / uint16_t computeSleepMillis (uint8_t aWatchdogPrescaler) {uint16_t tResultMillis = 8000; for (uint8_t i = 0; i salva 200 uA // use wdt_enable () uma vez que trata que o bit WDP3 está no bit 5 do registro WDTCR wdt_enable (aWatchdogPrescaler); WDTCR | = _BV (WDIE) | _BV (WDIF); // Habilitar interrupção do watchdog + redefinir sinalizador de interrupção -> precisa de ISR (WDT_vect) sei (); // Habilitar interrupções sleep_cpu (); // A interrupção do watchdog nos despertará do sono wdt_disable (); // Porque a próxima interrupção irá de outra forma leva a um reset, uma vez que wdt_enable () define WDE / Watchdog System Reset Enable ADCSRA | = ADEN; / * * Como o relógio do temporizador pode ser desabilitado, ajuste os milis apenas se não dormir no modo IDLE (SM2… 0 bits são 000) * / se (aAdjustMillis && (MCUCR & ((_BV (SM1) | _BV (SM0))))! = 0) {millis_timer_millis + = computeSleepMillis (aWatchdogPrescaler);}} / * * Esta interrupção desperta a CPU do hibernação * / ISR (WDT_vect) {sNumberOfSleeps ++;}

Etapa 6: modificar os fusíveis

22 mA dos 27 mA são puxados pelo BOD (BrownOutDetection / subtensão detecção). O BOD só pode ser desabilitado reprogramando os fusíveis, o que só pode ser feito com um programador ISP. Usando este script, você pode reduzir a corrente para 5,5 µA e também reduzir o tempo de inicialização do repouso para 4 milissegundos.

5 dos 5,5 µA restantes são consumidos pelo contador de watchdog ativo. Se você puder usar redefinições externas para despertar, o consumo de corrente pode cair para 0,3 µA conforme indicado na folha de dados.

Se você não conseguir atingir esse valor, o motivo pode ser que a corrente reversa do diodo Schottky entre o VCC e o pullup é muito alta. Lembre-se de que um resistor de 12 MOhm também consome 0,3 µA a 3,7 volt.

Isso resulta em um consumo médio de corrente de 9 µA (2,5 anos com uma célula-botão de 200 mAh 2032) se você, por exemplo, processar dados a cada 8 segundos por 3 milissegundos como aqui.

Etapa 7: Mais informações

Desenho atual de uma placa Digispark.

Projete usando estas instruções.

Recomendado: