Was sind (oder wie verwende ich) die Energiesparoptionen des Arduino, um die Batterielebensdauer zu verlängern?


40

Bei solarbetriebenen und batteriebetriebenen Projekten ist die Reduzierung des Stromverbrauchs eine Notwendigkeit.

Ich weiß ein wenig über die Verwendung eines Timers und einer Unterbrechung, um den Mikrocontroller in den Ruhezustand zu versetzen, wenn er nichts tut.

Ich habe auch gelesen, dass Sie einige Peripheriegeräte deaktivieren können, um Energie zu sparen.

Hier ist eine Seite, die diese erklärt: Energiespartechniken

Meine Frage:

  • Welche anderen Techniken gibt es, um Energie zu sparen?
  • Gibt es Bibliotheken, die die Verwendung dieser AVR-Funktionen erleichtern?

Antworten:


33

Hinweis: Ich wollte darauf hinweisen, dass, obwohl meine Antwort akzeptiert wurde, der Leser (Sie) wirklich zuerst Anindos Antwort lesen sollte, wenn Sie mit einem Arduino-Board wirklich Energie sparen möchten. Sobald Sie diese Punkte in Ihrem Design angesprochen haben, sollten Sie meine Antwort lesen und sich Gedanken darüber machen, wie Sie die MCU in den Energiesparmodus versetzen.

Allerdings gibt es mehrere Techniken, mit denen ein Arduino Strom spart. Ich werde ein paar auflisten und Sie dann auf eine Seite verweisen, die sie alle ausführlicher erklärt.

  1. Während der Controller nichts Wichtiges tut (z. B. zwischen zwei Lesevorgängen eines Sensors), können Sie den Controller mit dem Befehl in einen der folgenden Ruhemodi versetzen set_sleep_mode (SLEEP_MODE_PWR_DOWN). Neben jedem Modus ist der ungefähre Stromverbrauch jedes Modus angegeben.

    • SLEEP_MODE_IDLE: 15 mA
    • SLEEP_MODE_ADC: 6,5 mA
    • SLEEP_MODE_PWR_SAVE: 1,62 mA
    • SLEEP_MODE_EXT_STANDBY: 1,62 mA
    • SLEEP_MODE_STANDBY: 0,84 mA
    • SLEEP_MODE_PWR_DOWN: 0,36 mA
  2. Deaktivieren Sie die Brownout -Erkennung (die Schaltung, die den Controller ausschaltet, wenn eine niedrige Spannung erkannt wird).

  3. ADC ausschalten (Analog zu Digita Konvertierung)

  4. Verwenden Sie die interne Uhr

Wenn Sie den Controller in den Energiesparmodus versetzen, müssen Sie einen oder mehrere der folgenden Mechanismen verwenden, um den Controller aufzuwecken und etwas damit zu tun:

  • Mit einem Signal aufwachen

  • Wachen Sie mit einem Timer auf

Dies ist eine Zusammenfassung, die ich gemacht habe aus -

Dieser Artikel bezieht sich hauptsächlich auf ATmega328P, aber die Technik gilt auch für andere Arduino-kompatible Controller. Wie TheDoctor bereits sagte, müssen Sie den Datenbestand überprüfen, um sicherzustellen, dass Ihr Controller diese Techniken unterstützt und wie Sie dies genauer ausführen können.


2
Vielen Dank, dass Sie auf meine Seite www.gammon.com.au/power verwiesen haben . Wenn Sie alle hier genannten Techniken anwenden, sollten Sie ungefähr 100 nA (0,1 µA) verbrauchen können. Andere Techniken, die einen großen Einfluss haben können, sind, mit einer niedrigeren Frequenz und einer niedrigeren Spannung zu arbeiten. Plus, was Anindo Ghosh über den Verzicht auf Spannungsregler sagte. Ich habe einen Temperatur- und Feuchtigkeitssensor hergestellt - batteriebetrieben, bei dem viele dieser Techniken zum Einsatz kommen, die auch nach ein paar Jahren mit Batterien noch immer funktionieren.
Nick Gammon

@NickGammon - Um fair zu sein, ich denke, Ihr ausgezeichneter Artikel hat eine bessere Referenz verdient, deshalb habe ich meine Antwort in diesem Umfang überarbeitet. Vielen Dank für den tollen Artikel - sehr übersichtlich und vollständig! Und willkommen bei Arduino.SE. Schön, dass Sie hier sind.
Ricardo

24

Realistisch gesehen ist der lineare Spannungsregler auf einer Arduino-Platine die größte Energieverschwendung.

  1. Solange der Mikrocontroller auf der Platine, die LEDs oder andere Peripheriegeräte Strom ziehen, verschwendet der Linearregler eine Leistung von difference between supply and board voltagex current drawn.

    Eine erste Lösung besteht darin, die Stromanzeige-LED auf der Platine zu trennen und keine der anderen LEDs so weit wie möglich zu verwenden. Zweitens, versorgen Sie die Platine mit einer so niedrigen Spannung wie möglich, die gerade ausreicht, um den integrierten Regler mit Strom zu versorgen.

  2. Bei den Originalausführungen weisen die verwendeten Spannungsregler keinen geringen Ruhestrom auf. Dies bedeutet, dass der Regler selbst dann, wenn nichts auf der Platine Strom verbraucht, während der gesamten Einschaltdauer einiges an Strom verschwendet.

    Eine einfache Lösung besteht darin, den On-Board-Regler durch einen LDO-Regler (Low Drop-Out-Linearregler) zu ersetzen, der für einen extrem niedrigen Ruhestrom ausgelegt ist. Parametrische Suchen auf verschiedenen Anbieterseiten ergeben wahrscheinlich Ersatz.

  3. Selbst mit den obigen Schritten bietet die Arduino-Karte keinen Mechanismus, um das LDO in den Energiesparmodus zu versetzen, wenn das ausgewählte LDO dies unterstützt. Energieeffiziente Designs verwenden normalerweise einen "Schlafmodus" -Stift an Spannungsreglern, um ein gutes Stück Energie zu sparen - hier keine Option.

Selbst mit allen möglichen Energiesparmodi und Tricks, die auf Mikrocontrollerebene angewendet werden, ist der Arduino einfach nicht so konzipiert, dass er sofort ein Gerät mit extrem geringem Stromverbrauch ist. Nachdem ich mit mehreren nicht trivialen Anwendungen experimentiert habe, habe ich festgestellt, dass das Beste, was realistisch erreichbar ist, eine Energieeinsparung von 10% bis 30% je nach Anwendung ist, da der Spannungsregler und die LEDs den Rest sowieso verbrauchen werden.


2
Versorgen Sie die Platine mit einer Spannung, die gerade ausreicht, um den integrierten Regler mit Strom zu versorgen. Oder versorgen Sie die Platine mit 5 V über ein gehacktes USB-Kabel.
Anonymous Penguin

13

Sie könnten das 200-seitige Datenblatt lesen und sich dann mit verwirrenden Bitverschiebungen und Registern herumschlagen, aber ich empfehle diese Bibliothek: http://playground.arduino.cc/Code/Enerlib

Wenn Sie einen Uno oder einen anderen mit einem USB-zu-Seriell-Chip verwenden, können Sie diesen deaktivieren oder entfernen.


3
Sie sollten das Datenblatt lesen, egal was Sie tun.
Connor Wolf

9

Sobald Ihr Projekt funktioniert und Sie es in einer "Produktions" -Umgebung bereitstellen müssen, können Sie das Arduino durch ein Meta-ATMega328 oder einen beliebigen Chip der ATTiny-Familie ersetzen. Dadurch werden alle Stromfresser auf dem Arduino-Board entfernt, die Sie nicht benötigen. Ich fand:

  • Arduino-Platine der 9V-Blockbatterie - 56 mA
  • ATTiny85 ohne 8 MHz ohne Schlafmodus usw. - 10 mA
  • ATTiny85 blank auf 8 MHz im Schlafmodus - 0,03 mA

Noch ein paar Informationen

Programmieren Sie einen ATtiny mit Arduino

ATTiny-Dateien für Arduino IDE

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.