Strom sparen Batteriebtrieb Leonardo

Hi,

wie schon in nem anderen Thread geschrieben will ich ein Arduino (genau einen Leonardo) mit einem Handy verbinden um das ganze autark zu betreiben. In meinem jugendlichen Leichtsein habe ich das ganze einfach an ein 6*AA-Akkupack gehängt und mich dann gewundert warum das ganze nur 1-2 Tage hält. Was aber auch kein Wunder ist, wenn man mal die Stromaufnahme misst....

Also muss ich das ganze nun stromsparend bauen. Dabei ergeben sich zwei Probleme:

Ich habe mal testhalber die Library Narcoleptic (http://code.google.com/p/narcoleptic/) eingebunden. Der Stromverbrauch geht bei einem narcoleptic.delay auf ca. 10mA runter. Ich vermute der Großteil davon geht auf den Spannungsregler auf dem Board, oder? Soweit ich die Schaltung des Leonardo verstanden habe und ich das richtige Datenblatt gefunden habe, passt das mit dem Ruhestrom des Linearreglers. Mein Gedanke war nun einen Regler extern zu nehmen und die 5V auf Vin zu geben. Braucht der auf dem Board gebaute Linearregler rückwärts auch noch was an Strom? Und geht dann die Power-On-Led auch noch an? Oder muss ich die ablöten?

Ich nutze die time.h Library um zu einer bestimmten Uhrzeit einen Ruf abzusetzen. Ich vermute durch narcoleptic wird die Uhrzeit nicht mehr stimmen, oder?

Grüße Michael

P.S.: Ansonsten müsste ja das von mir eher zufällig ausgewählte Leonardo-Board doch eigentlich gut fürs Stromsparen geeignet sein, da ja kein extra USB/Seriell-Chip verbaut ist.

Grüße Michael

Wenn Du keine USB-Schnittstelle braucht ist es besser daß Du entweder den Controller alleine (Standalone) verwendest oder einen Arduino mini oder Arduino mini pro. Dort mußt Du die LED deaktivieren um Strom zu sparen. Die Spannungstabilisatoren auf diesen Arduino müßten bereits sehr wenig verbrauchen, da sparst Du mit einem externen wenig. Grüße Uwe

Wenn Du den Prozessor schlafen schickst, werden auch die Timer-Interrupts nicht mehr ausgeführt.

Am besten fährst Du mit einer RTC, ich würde einen DS3231 empfehlen, der hat programmierbare Alarm-Ausgänge, mit denen Du den Arduino zu bestimmten Zeiten aus dem Schlaf wecken kannst. Zur Stromaufnahme hat Dir Uwe schon einiges geschrieben. Verwende möglichst eine 3V3-Variante (gibt's nur bis 8MHz), die brauchen deutlich weniger Strom. Und keinen linearen Spannungsregler, sondern einen Schaltregler (switching regulator), der hat den viel besseren Wirkungsgrad.

Eins der Standardbeispiele ist das hier:
http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/

Grundsätzlich gilt:

  1. Frequenz runter auf 1 MHz, dann kannst Du mit der Betriebsspannung ziemlich weit runter, d.h. die Batterien können auch wirklich leer gelutscht werden
  2. Nur Schaltregler verwenden, auf keinen Fall Linearregler. Besser gar kein Regler als ein Linearregler
  3. Solange wie möglich sleep einsetzen und dabei auch den Oszillator stoppen
  4. Zeit besser per RTC fortschreiben und ggf. einmal pro Sekunde kurz aufwachen
  5. bessere Performance = weniger Zyklen wach = weniger Stromverbrauch → “teure Befehle” durch “billige Befehle” ersetzen, also keine float operationen, kein digitalRead/Write (sondern direkte Portmanipulation) usw.
  6. Nichts was Strom zieht lange an lassen (LEDs!!!)
  7. Keine Eingänge frei schweben lassen, insbesondere alle unbenutzten Eingägen immer schön mit Pullups terminieren.

uwefed: Wenn Du keine USB-Schnittstelle braucht ist es besser daß Du entweder den Controller alleine (Standalone) verwendest oder einen Arduino mini oder Arduino mini pro. Dort mußt Du die LED deaktivieren um Strom zu sparen. Die Spannungstabilisatoren auf diesen Arduino müßten bereits sehr wenig verbrauchen, da sparst Du mit einem externen wenig. Grüße Uwe

Habe mir die Schaltung vom Mini mal angeschaut, da scheint tatsächlich ein Regler mit wenig Eigenverbraucht verbaut zu sein. Brauche ich halt noch einen "externen" USB/Seriell zum programmieren. Muss ich mal schauen...

Allerdings habe ich noch mal mit meinem Leonardo ein bischen rumprobiert. Mit narcolpetic.delay (was wohl sleep entspricht) messe ich bei ca. 7V Vin ca. 10mA, ziehe ich noch 2 für die LED ab, bleiben noch 8mA die vermutlich der auf dem Board befindliche Linearregler verbrät. Ganz komisch ist es allerdings wenn ich direkt 5V auf den 5V-Pin lege. Ist das überhaupt vorgesehen? In der Beschreibung zum Leonardo lese ich von Spannungsversorgung Vin, per USB oder per 5V, aber ich finde nirgendwo wo die die 5V hin sollen :~. Seis drum, bei 5V auf dem 5V-Pin brauche ich im gleichen Modus 12mA. Der 3,3V-Regler sollte wenig Ruhestrom brauchen (ca. 0,1mA wenn ich das richtig gesehen habe). Kann es sein dass der 5V-Linearregler rückwärts Strom verbrät? Oder wo geht's sonst hin? Habe mal das Datenblatt des 32U4 quer gelesen, der sollte im Sleet-Modus nur ein paar mikro-A verbrauchen. Grüße Michael

pylon: Wenn Du den Prozessor schlafen schickst, werden auch die Timer-Interrupts nicht mehr ausgeführt.

Am besten fährst Du mit einer RTC, ich würde einen DS3231 empfehlen, der hat programmierbare Alarm-Ausgänge, mit denen Du den Arduino zu bestimmten Zeiten aus dem Schlaf wecken kannst. Zur Stromaufnahme hat Dir Uwe schon einiges geschrieben. Verwende möglichst eine 3V3-Variante (gibt's nur bis 8MHz), die brauchen deutlich weniger Strom. Und keinen linearen Spannungsregler, sondern einen Schaltregler (switching regulator), der hat den viel besseren Wirkungsgrad.

Danke, das habe ich fast vermutet, dass ich da auf Dauer einen RTC brauche. Werd ich mir mal anschauen. Haben die alle einen Alarm-Ausgang oder nur der von dir beschriebene? Ich finde auch diverse Varianten mit DS1307. Und noch 'ne Frage zu der Stromversorgung: Die Module haben ja oft 'ne CR2032 mit drauf, damit hält dann die Uhr "nur" 1 Jahr. Hängt man die RTC an die normale Stromversorgung und überbrückt so die eingebaute Batterie? Und wieviel verbraucht so eine RTC?

Danke!

Michael

Normalerweise ist der Stromverbrauch der RTC so niedrig daß die Batterie durch Eingenentladung leer wird (Datenblatt sagt beim DS1307 0,4 bis 0,5µA bei ausgeschaltenen Taktausgang SQW/OUT und 0,48 bis 0,8µA bei eingeschaltenen Taktausgang. http://www.maxell.co.jp/e/products/industrial/battery/cr/pdf/CR2032_DataSheet_e.pdf Entladung mit 1MOhm ca 80.000h bis die Spannung auf 2V abfällt. (das sind über 9Jahre); Eine Entladung von 0,8µA entsprich einem Widerstand von 3,75MOhm. Leider habe ich in den Datenblättern nirgens die Selbstentladung gefunden. Müßte bei 1-2% der Ladung pro Jahr sein. http://www.mikrocontroller.net/articles/Ultra_low_power

Für den Leonardo gilt: Der Operationsverstärker LMV358 verbraucht 200 bis 300µA. Der 3,3V Spannungsstabilisator bis zu 850µA Der 5V Spannungsregler (bei Versorgung über Vin oder Netzteilbuchse) bis zu 10mA. Grüne LED PWR an 1kOhm ca 3,2mA (Unter Annahme daß die Andern LED nicht leuchten.) Leckströme an Kondensatoren bzw Diode einige zehn bis 100µA Einige Pullup/Downwiderstände (Reset, USBboor EN) einige µA

Grüße Uwe

uwefed: Für den Leonardo gilt: Der Operationsverstärker LMV358 verbraucht 200 bis 300µA. Der 3,3V Spannungsstabilisator bis zu 850µA Der 5V Spannungsregler (bei Versorgung über Vin oder Netzteilbuchse) bis zu 10mA. Grüne LED PWR an 1kOhm ca 3,2mA (Unter Annahme daß die Andern LED nicht leuchten.) Leckströme an Kondensatoren bzw Diode einige zehn bis 100µA Einige Pullup/Downwiderstände (Reset, USBboor EN) einige µA

Das passt m.E. auch nachdem was ich rausgefunden habe. Die 850µA bei dem LP2895 (3,3V Linearregeler) allerdings nur bei Vollast, im Leerlauf sollte das weniger sein. Was ich allerdings nicht verstehe ist der hohe Verbrauch des Boards, wenn ich von aussen 5V an den 5V-"Eingang" lege. Ich hätte mit der Power-On-Led irgendwas von ca. 4-5mA erwartet, aber nicht ca. 12mA. (es leuchtet natürlich nur die ON-Led.

Grüße Michael

Ich kanns mir auch nicht erklären woher der Verbrauch stammt. Um aber draufzukommen gibt es nur die Möglichkeit Teile auszulöten, angefangen vom PWR LED, 5V Spannungsstabilisator, OPAMP ecc. Hab nachgeschaut, Ein Arduino Micro ist in diesem Fall keine Leonardo-Alternative da seine Schaltung genau gleich dem Leonardo ist. Ein Arduino Micro PRO https://www.sparkfun.com/products/11098 könnte besser gehen.

Grüße Uwe

Haben die alle einen Alarm-Ausgang oder nur der von dir beschriebene? Ich finde auch diverse Varianten mit DS1307.

Nein, haben nicht alle. Der DS1307 hat zumindest einen Sekundentakt, damit lässt sich notdürftig auch ein Aufwachen (jede Sekunde) durchführen, braucht natürlich mehr Strom. Es gibt noch andere mit Alarm-Ausgang, aber ich habe nur mit diesen zwei Typen Erfahrung.

Hängt man die RTC an die normale Stromversorgung und überbrückt so die eingebaute Batterie? Und wieviel verbraucht so eine RTC?

Das Wechseln der Stromversorung macht der RTC selbst, er hat einen Eingang für die Versorgungsspannung vom Board und einen Batterieeingang. Fällt die Spannung vom Board unter einen gewissen Wert, stellt der RTC erst mal die Kommunikation mit der MCU ein, fällt sie noch weiter, wird auf Batteriebetrieb geschaltet. Du kannst den Chip auch mit einem GPIO des Arduino betrieben, er verbraucht sehr wenig Strom (wieviel steht im Datenblatt, ist nicht für alle gleich).

Man kann auch seltener als 1 mal pro Sekunde aufwachen wenn man den 1Hz Tick in einen Timer schiebt und dann bei erreichen der voreingestellten Ticks einen Interrupt auslöst.

Ok, danke. Dann werde ich mich aber mal nach einem RTC mit Alarm-Ausgang umschauen, das passt besser zu meiner Anforderung.

Michael

uwefed: Ich kanns mir auch nicht erklären woher der Verbrauch stammt. Um aber draufzukommen gibt es nur die Möglichkeit Teile auszulöten, angefangen vom PWR LED, 5V Spannungsstabilisator, OPAMP ecc.

Das habe ich dann gestern Abend mal gemacht. Alle Werte im Sleep-Modus, LED an Port 13 nicht an, Spannungsversorung 5V an 5V-Pin. Strom ohne Änderung ca. 12mA

  • NCP1117 (5V Spannungsregler) raus: ca. 7mA
  • Power-Led raus: ca. 4mA
  • LP2985-33 (3,3V Spannungsregler) raus: ca. 0,25mA!!!

Ich hätte ja schon ohne den 5V-Regler und die Power-Led weniger erwartet. Aber Ich vermute irgendwas mit dem LP2985 und dem OP für die automatische Spannungsumschlatung, da die 3,3V ja auch als Eingang für den OP verwendet werden.

Allerdings geht jetzt Versorgung per USB nicht mehr, da vermutlich der MOSFET nicht mehr durchschaltet. Da hatte ich dann gestern Abend keine Lust mehr. Ich überlge den MOSFET einfach auch rauszuschmeissen. Für die Programmierung per USB müsste ich dann halt auch immer die 5V Versorgung anlegen. Das sollte doch gehen oder nicht? Ich habe zumindest im Schaltplan nichts gefunden was dagegen spricht, denn wenn der MOSFET weg ist endet VUSB im Nirwana. Wäre aber nett wenn das noch mal wer verifizieren könnte :).

uwefed: Hab nachgeschaut, Ein Arduino Micro ist in diesem Fall keine Leonardo-Alternative da seine Schaltung genau gleich dem Leonardo ist. Ein Arduino Micro PRO https://www.sparkfun.com/products/11098 könnte besser gehen.

Danke Uwe!!! Soviel Service hatte ich nicht erwartet :). Und ja, auf Dauer werde ich mich nach einem Board umsehen, welches besser zu einer Batterie- Stromversorgung passt, entweder das Micro Pro oder das von dir oben schon erwähnte Mini. Da muss ich dann nur mit Software-Serial arbeiten da ich noch eine serielle Schnittstelle brauche. Aber da sollte ja auch kein Problem sein, oder?

Grüße Michael

Allerdings geht jetzt Versorgung per USB nicht mehr, da vermutlich der MOSFET nicht mehr durchschaltet. Da hatte ich dann gestern Abend keine Lust mehr. Ich überlge den MOSFET einfach auch rauszuschmeissen. Für die Programmierung per USB müsste ich dann halt auch immer die 5V Versorgung anlegen. Das sollte doch gehen oder nicht? Ich habe zumindest im Schaltplan nichts gefunden was dagegen spricht, denn wenn der MOSFET weg ist endet VUSB im Nirwana. Wäre aber nett wenn das noch mal wer verifizieren könnte smiley.

Ja, T1 wird ohne 3,3V nicht durchgeschaltet. Lösungswege: So tun wie Du vorschlägst T1 zwischen Source und Gate kurzschließen (dann besser USB oder 5V an pin 5V) 3,3V Spannungsstabilisator wieder einlöten.

Da muss ich dann nur mit Software-Serial arbeiten da ich noch eine serielle Schnittstelle brauche. Aber da sollte ja auch kein Problem sein, oder?

Wieso soll die HW-seriele Schnittstelle nicht mehr funktionieren?

Grüße Uwe

uwefed: Wieso soll die HW-seriele Schnittstelle nicht mehr funktionieren?

Funktionieren wird sie schon. Aber ich brauche noch eine serielle Schnittstelle um ein Handy anzusteuern. Und ein Mini/Uno, bzw der 328P hat doch nur einmal Hardware-Seriell oder nicht? Und das wird für's programmieren benötigt. Und zumindest wenn ich das beim Testen für die Ausgabe benutzen will ist die Schnittstelle ja belegt und ich brauche eine zweite.

Michael

Ja hat nur eine. Für den endgültigen Gebrauch brauchst Du ja nur eine, Fürs Programmieren und Debuggen aber 2. Grüße Uwe