Sommario:

Ridurre il consumo di batteria per Digispark ATtiny85: 7 passaggi
Ridurre il consumo di batteria per Digispark ATtiny85: 7 passaggi

Video: Ridurre il consumo di batteria per Digispark ATtiny85: 7 passaggi

Video: Ridurre il consumo di batteria per Digispark ATtiny85: 7 passaggi
Video: Programmazione stand-alone di microcontrollori con strumenti economici 2024, Novembre
Anonim
Riduzione del consumo energetico della batteria per Digispark ATtiny85
Riduzione del consumo energetico della batteria per Digispark ATtiny85
Riduzione del consumo di batteria per Digispark ATtiny85
Riduzione del consumo di batteria per Digispark ATtiny85

oppure: far funzionare un Arduino con una cella a bottone 2032 per 2 anni.

Usando la tua scheda Arduino Digispark fuori dalla scatola con un programma Arduino, assorbe 20 mA a 5 volt.

Con un power bank da 5 volt di 2000 mAh funzionerà solo per 4 giorni.

Passaggio 1: riduzione della tensione di alimentazione utilizzando una batteria LiPo

Ridurre la tensione di alimentazione utilizzando una batteria LiPo
Ridurre la tensione di alimentazione utilizzando una batteria LiPo

Usando una batteria LiPo con 3,7 volt come alimentazione, la tua scheda Digispark assorbe solo 13 mA.

Con una batteria da 2000 mAh funzionerà per 6 giorni.

Passaggio 2: ridurre il clock della CPU

Se non si utilizza la connessione USB, la matematica pesante o il polling veloce nel programma, ridurre la velocità di clock. Per esempio. la libreria di ricezione a infrarossi a polling pesante IRMP funziona bene a 8 MHz.

A 1 MHz il tuo Digispark assorbe 6 mA. Con una batteria da 2000 mAh funzionerà per 14 giorni.

Passaggio 3: rimuovere il LED di alimentazione integrato e il regolatore di alimentazione

Disabilitare il LED di alimentazione rompendo con un coltello il filo di rame che collega il LED di alimentazione al diodo oppure rimuovere/disabilitare la resistenza da 102.

Poiché ora stai utilizzando una batteria LiPo, puoi anche rimuovere l'IC del regolatore di potenza di bordo. Per prima cosa sollevare i perni esterni con l'aiuto di un saldatore e un perno. Quindi saldare il connettore grande e rimuovere il regolatore. Per i regolatori piccoli, usa molta saldatura e riscalda tutti e 3 i pin insieme, quindi rimuovilo.

A 1 MHz e 3,8 volt il tuo Digispark ora assorbe 4,3 mA. Con una batteria da 2000 mAh funzionerà per 19 giorni.

Passaggio 4: scollegare la resistenza di pullup USB D- (contrassegnata con 152) da 5 Volt (VCC) e collegarla a USB V+

Scollegare il resistore di pullup USB D- (contrassegnato con 152) da 5 Volt (VCC) e collegarlo a USB V+
Scollegare il resistore di pullup USB D- (contrassegnato con 152) da 5 Volt (VCC) e collegarlo a USB V+

Questa modifica è compatibile con tutte le versioni 1.x del bootloader micronucleus. Se hai già un nuovo bootloader 2.x sulla tua scheda, devi aggiornare a una delle versioni 2.5 con "activePullup" nel nome. Il modo più semplice per farlo è installare il nuovo pacchetto della scheda digispark e masterizzare il bootloader con la versione consigliata (!!!non quella predefinita o aggressiva!!!).

Rompere il filo di rame sul lato del resistore che punta all'ATtiny. Questo disabilita l'interfaccia USB e a sua volta la possibilità di programmare la scheda Digispark tramite USB. Per abilitarlo di nuovo, ma comunque risparmiare energia, collega il resistore (contrassegnato con 152) direttamente all'USB V+ che è facilmente disponibile sul lato esterno del diodo shottky. Il diodo e i suoi lati corretti possono essere trovati utilizzando un tester di continuità. Un lato di questo diodo è collegato al pin 8 di ATtiny (VCC) e Digispark 5V. L'altro lato è collegato a USB V+. Ora la resistenza di pullup USB viene attivata solo se la scheda Digispark è collegata a USB, ad es. durante la programmazione.

Anche gli ultimi 2 passaggi sono documentati qui.

A 1 MHz e 3,8 volt il tuo Digispark ora assorbe 3 mA. Con una batteria da 2000 mAh funzionerà per 28 giorni.

Passaggio 5: usa Sleep invece di Delay()

Usa Sleep invece di Delay()
Usa Sleep invece di Delay()

Invece di lunghi ritardi è possibile utilizzare la sospensione della CPU a risparmio energetico. Le pause possono durare da 15 millisecondi a 8 secondi con incrementi di 15, 30, 60, 120, 250, 500 millisecondi e 1, 2, 4, 8 secondi.

Poiché il tempo di avvio dalla sospensione è di 65 millisecondi con le impostazioni di fabbrica del fusibile digispark, solo i ritardi superiori a 80 ms possono essere sostituiti dalla sospensione.

Durante il sonno il tuo Digispark assorbe 27 µA. Con una cella a bottone da 200 mAh 2032 dormirà per 10 mesi.

Per essere corretti, il Digispark deve svegliarsi almeno ogni 8 secondi, funzionando per almeno 65 millisecondi e assorbendo circa 2 mA di corrente. Questo porta a una corrente media di 42 µA e 6 mesi. In questo scenario non fa quasi alcuna differenza se il programma viene eseguito per 10 millisecondi (ogni 8 secondi).

Il codice per usare il sonno è:

#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); // modalità di sospensione più profonda … } void loop(){ … sleepWithWatchdog(WDTO_250MS, true); // dormi per 250 ms … sleepWithWatchdog(WDTO_2S, true); // sleep per 2 s … } /* * aWatchdogPrescaler può essere compreso tra 0 (15 ms) e 3 (120 ms), 4 (250 ms) fino a 9 (8000 ms) */ uint16_t computeSleepMillis(uint8_t aWatchdogPrescaler) { uint16_t tResultMillis = 8000; for (uint8_t i = 0; i salva 200 uA // usa wdt_enable() poiché gestisce che il bit WDP3 è nel bit 5 del registro WDTCR wdt_enable(aWatchdogPrescaler); WDTCR |= _BV(WDIE) | _BV(WDIF); // Abilita interrupt watchdog + reset flag interrupt -> necessita ISR(WDT_vect) sei(); // Abilita gli interrupt sleep_cpu(); // L'interrupt watchdog ci sveglierà dallo sleep wdt_disable(); // Perché il prossimo interrupt sarà altrimenti portare a un reset, dal momento che wdt_enable() imposta WDE / Watchdog System Reset Enable ADCSRA |= ADEN; /* * Poiché l'orologio del timer può essere disabilitato, regolare millis solo se non dormito in modalità IDLE (SM2…0 bit sono 000) */ if (aAdjustMillis && (MCUCR & ((_BV(SM1) | _BV(SM0)))) != 0) { millis_timer_millis += computeSleepMillis(aWatchdogPrescaler); } } /* * Questo interrupt riattiva la cpu dallo stato di sospensione */ ISR(WDT_vect) { sNumberOfSleeps++; }

Passaggio 6: modificare i fusibili

22 mA dei 27 mA vengono prelevati dal BOD (BrownOutDetection/rilevamento sottotensione). Il BOD può essere disabilitato solo riprogrammando i fusibili, operazione possibile solo con un programmatore ISP. Usando questo script puoi ridurre la corrente fino a 5,5 µA e anche ridurre il tempo di avvio dalla sospensione a 4 millisecondi.

5 dei restanti 5,5 µA vengono prelevati dal contatore di watchdog attivo. Se è possibile utilizzare reset esterni per il risveglio, il consumo di corrente può scendere a 0,3 µA come indicato nella scheda tecnica.

Se non riesci a raggiungere questo valore, il motivo può essere che la corrente inversa del diodo Schottky tra VCC e il pullup è troppo alta. Tieni presente che un resistore da 12 MOhm assorbe anche 0,3 µA a 3,7 volt.

Ciò si traduce in un consumo medio di corrente di 9 µA (2,5 anni con una pila a bottone da 200 mAh 2032) se ad es. elabora i dati ogni 8 secondi per 3 millisecondi come qui.

Passaggio 7: ulteriori informazioni

Disegno attuale di una tavola Digispark.

Progetto utilizzando queste istruzioni.

Consigliato: