Inhaltsverzeichnis:

Reduzieren des Batteriestromverbrauchs für Digispark ATtiny85 - Gunook
Reduzieren des Batteriestromverbrauchs für Digispark ATtiny85 - Gunook

Video: Reduzieren des Batteriestromverbrauchs für Digispark ATtiny85 - Gunook

Video: Reduzieren des Batteriestromverbrauchs für Digispark ATtiny85 - Gunook
Video: Autobatterie plötzlich leer? Autobatterie Kriechstrom messen mit Multimeter und Zangenamperemeter ✔ 2024, November
Anonim
Reduzierung des Batteriestromverbrauchs für Digispark ATtiny85
Reduzierung des Batteriestromverbrauchs für Digispark ATtiny85
Reduzierung des Batteriestromverbrauchs für Digispark ATtiny85
Reduzierung des Batteriestromverbrauchs für Digispark ATtiny85

oder: 2 Jahre lang einen Arduino mit einer 2032-Knopfzelle betreiben.

Wenn Sie Ihr Digispark Arduino Board aus der Box mit einem Arduino-Programm verwenden, zieht es 20 mA bei 5 Volt.

Mit einer 5-Volt-Powerbank von 2000 mAh läuft es nur 4 Tage.

Schritt 1: Verringern der Versorgungsspannung durch Verwendung eines LiPo-Akkus

Reduzierung der Versorgungsspannung durch Verwendung eines LiPo-Akkus
Reduzierung der Versorgungsspannung durch Verwendung eines LiPo-Akkus

Bei Verwendung eines LiPo-Akkus mit 3,7 Volt als Versorgung verbraucht Ihr Digispark Board nur 13 mA.

Mit einem Akku von 2000 mAh läuft es 6 Tage.

Schritt 2: CPU-Takt reduzieren

Wenn Sie in Ihrem Programm keine USB-Verbindung, schwere Mathematik oder schnelle Abfragen verwenden, reduzieren Sie die Taktrate. Z. B. die stark abfragende Infrarot-Empfangsbibliothek IRMP läuft gut mit 8 MHz.

Bei 1 MHz zieht Ihr Digispark 6 mA. Mit einem Akku von 2000 mAh läuft es 14 Tage lang.

Schritt 3: Entfernen Sie die On-Board-Power-LED und den Power-Regler

Deaktivieren Sie die Power-LED, indem Sie den Kupferdraht, der die Power-LED mit der Diode verbindet, mit einem Messer durchbrechen oder den 102-Widerstand entfernen / deaktivieren.

Da Sie jetzt einen LiPo-Akku verwenden, können Sie auch den integrierten Stromregler-IC entfernen. Heben Sie zuerst die äußeren Stifte mit Hilfe eines Lötkolbens und eines Stiftes an. Dann den großen Stecker verlöten und den Regler entfernen. Bei kleinen Reglern viel Lötzinn verwenden und alle 3 Pins zusammen erhitzen, dann entfernen.

Bei 1 MHz und 3,8 Volt zieht Ihr Digispark jetzt 4,3 mA. Mit einem Akku von 2000 mAh läuft es 19 Tage.

Schritt 4: Trennen des USB D-Pullup-Widerstands (gekennzeichnet mit 152) von 5 Volt (VCC) und Anschließen an USB V+

Trennen des USB D-Pullup-Widerstands (gekennzeichnet mit 152) von 5 Volt (VCC) und Anschließen an USB V+
Trennen des USB D-Pullup-Widerstands (gekennzeichnet mit 152) von 5 Volt (VCC) und Anschließen an USB V+

Diese Modifikation ist mit allen 1.x-Versionen des Micronucleus-Bootloaders kompatibel. Wenn Sie bereits einen neuen 2.x-Bootloader auf Ihrem Board haben, müssen Sie auf eine der 2.5-Versionen mit "activePullup" im Namen aktualisieren. Am einfachsten ist es, das neue Digispark-Board-Paket zu installieren und den Bootloader mit der empfohlenen (!!!nicht der Standard- oder aggressiven!!!) Version zu brennen.

Brechen Sie den Kupferdraht an der Seite des Widerstands, die zum ATtiny zeigt. Dies deaktiviert die USB-Schnittstelle und damit die Möglichkeit, das Digispark-Board über USB zu programmieren. Um ihn wieder zu aktivieren, aber trotzdem Strom zu sparen, verbinden Sie den Widerstand (markiert mit 152) direkt mit dem USB V+, der an der Außenseite der Shottky-Diode leicht zugänglich ist. Die Diode und ihre richtigen Seiten können mit einem Durchgangsprüfer gefunden werden. Eine Seite dieser Diode ist mit Pin 8 des ATtiny (VCC) und Digispark 5V verbunden. Die andere Seite ist mit dem USB V+ verbunden. Jetzt wird der USB-Pullup-Widerstand nur aktiviert, wenn das Digispark-Board an USB angeschlossen ist, z. B. beim Programmieren.

Die letzten beiden Schritte sind hier ebenfalls dokumentiert.

Bei 1 MHz und 3,8 Volt zieht Ihr Digispark jetzt 3 mA. Mit einem Akku von 2000 mAh wird es 28 Tage lang laufen.

Schritt 5: Verwenden Sie Schlaf statt Verzögerung ()

Verwenden Sie Schlaf statt Verzögerung ()
Verwenden Sie Schlaf statt Verzögerung ()

Anstelle langer Verzögerungen können Sie den stromsparenden CPU-Sleep verwenden. Der Schlaf kann zwischen 15 Millisekunden und 8 Sekunden in Schritten von 15, 30, 60, 120, 250, 500 Millisekunden und 1, 2, 4, 8 Sekunden dauern.

Da die Startzeit aus dem Ruhezustand mit den werkseitigen Digispark-Sicherungseinstellungen 65 Millisekunden beträgt, können nur Verzögerungen von mehr als 80 ms durch den Ruhezustand ersetzt werden.

Im Schlaf verbraucht Ihr Digispark 27 µA. Mit einer 200 mAh Knopfzelle 2032 schläft es 10 Monate.

Um richtig zu sein, muss der Digispark mindestens alle 8 Sekunden aufwachen, mindestens 65 Millisekunden laufen und etwa 2 mA Strom aufnehmen. Dies führt zu einem durchschnittlichen Strom von 42 µA und 6 Monaten. In diesem Szenario macht es fast keinen Unterschied, ob Ihr Programm 10 Millisekunden lang (alle 8 Sekunden) läuft.

Der Code für die Verwendung von Sleep lautet:

#include #include flüchtig uint16_t sNumberOfSleeps = 0; extern volatile unsigned long millis_timer_millis; Void setup () { sleep_enable (); set_sleep_mode (SLEEP_MODE_PWR_DOWN); // tiefster Schlafmodus … } void loop(){ … sleepWithWatchdog(WDTO_250MS, true); // 250 ms schlafen … sleepWithWatchdog(WDTO_2S, true); // sleep für 2 s … } /* * aWatchdogPrescaler kann 0 (15 ms) bis 3 (120 ms), 4 (250 ms) bis 9 (8000 ms) sein */ uint16_t computeSleepMillis(uint8_t aWatchdogPrescaler) { uint16_t tResultMillis = 8000; for (uint8_t i = 0; i spart 200 uA // wdt_enable() verwenden, da es behandelt, dass sich das WDP3-Bit in Bit 5 des WDTCR-Registers befindet wdt_enable(aWatchdogPrescaler); WDTCR |= _BV(WDIE) | _BV(WDIF); // Watchdog-Interrupt aktivieren + Interrupt-Flag zurücksetzen -> benötigt ISR(WDT_vect) sei(); // Interrupts aktivieren sleep_cpu(); // Der Watchdog-Interrupt weckt uns aus dem Schlaf wdt_disable(); // Weil der nächste Interrupt es sonst tut zu einem Reset führen, da wdt_enable() WDE setzt / Watchdog System Reset Enable ADCSRA |= ADEN; /* * Da der Timer-Takt deaktiviert werden kann Millis nur anpassen, wenn nicht im IDLE-Modus geschlafen (SM2…0 Bits sind 000) */ if (aAdjustMillis && (MCUCR & ((_BV(SM1) | _BV(SM0)))) != 0) { millis_timer_millis += computeSleepMillis(aWatchdogPrescaler); } } /* * Dieser Interrupt weckt die CPU aus dem Ruhezustand */ ISR(WDT_vect) { sNumberOfSleeps++; }

Schritt 6: Ändern Sie die Sicherungen

Von den 27 mA werden 22 mA vom BSB (BrownOutDetection/Unterspannungserkennung) gezogen. Der BSB kann nur durch Umprogrammieren der Sicherungen deaktiviert werden, was nur mit einem ISP-Programmierer möglich ist. Mit diesem Skript können Sie den Strom auf 5,5 µA reduzieren und auch die Startzeit aus dem Ruhezustand auf 4 Millisekunden reduzieren.

5 der verbleibenden 5,5 µA werden vom aktiven Watchdog-Zähler gezogen. Wenn Sie externe Resets zum Aufwecken verwenden können, kann die Stromaufnahme auf 0,3 µA sinken, wie im Datenblatt angegeben.

Wenn Sie diesen Wert nicht erreichen, kann dies daran liegen, dass der Sperrstrom der Schottky-Diode zwischen VCC und Pullup zu hoch ist. Beachten Sie, dass ein 12 MOhm-Widerstand bei 3,7 Volt auch 0,3 µA zieht.

Daraus ergibt sich eine durchschnittliche Stromaufnahme von 9 µA (2,5 Jahre bei einer 200 mAh Knopfzelle 2032), wenn Sie z. B. verarbeiten Daten alle 8 Sekunden für 3 Millisekunden wie hier.

Schritt 7: Weitere Informationen

Aktuelle Zeichnung einer Digispark-Platine.

Projektieren Sie mit dieser Anleitung.

Empfohlen: