Ausgewähltes Bild ist von Projekt_Kaffeebart von Pixabay
In diesem Beitrag wollen wir uns anschauen, ob es signifikante Unterschiede beim Stromverbrauch zwischen den verschiedenen AVR-MCUs gibt. Wir werden die Nominalwerte anschauen und den Stromverbrauch in der Realität messen.
Im vorherigen Beitrag habe ich mir angesehen, wie man mit verschiedenen Mitteln Strom für batteriebasierte Arduino-Projekte sparen kann. Was ich nicht getan habe, war, den Stromverbrauch verschiedener MCUs im aktiven Modus zu vergleichen. Die Frage ist also: Kann man durch die Wahl der richtigen MCU viel Strom sparen? Die kurze Antwort lautet: Es gibt keine dramatischen Unterschiede. Der maximale Faktor für den Stromverbrauch zwischen verschiedenen MCUs beträgt zwei, und dieser Unterschied liegt zwischen der „Monster“-MCU ATmega1284P und einem kleinen ATtiny84A. Eine interessante Beobachtung ist, dass die Unterschiede zwischen ATmega328P und den ATtinys nicht sehr groß sind.
Betrachten wir zunächst die in den verschiedenen Datenblättern angegebenen Nennwerte für drei verschiedene Werte von Versorgungsspannungen und Taktfrequenzen. Übrigens, der Grund, warum ich mich für diesen speziellen Satz von AVR-MCUs entschieden habe, ist, dass ich sie alle in meiner Grabbelkiste habe und sie von der Arduino IDE unterstützt werden (man sehe mir bitte die Benutzung des Dezimalpunktes statt des Dezimalkommas in der Tabelle nach):
MCU | 5 V 16 MHz mA | 5 V 16 MHz mA | 3.3 V 8 MHz mA | 1.8 V 1 MHz mA |
---|---|---|---|---|
ATtiny84A | 06.8 | 6.8 | 2.3 | 0.20 |
ATtiny85 | 09.3 | 9.3 | 3.0 | 0.29 |
ATtiny861A | 09.4 | 9.4 | 3.1 | 0.29 |
ATtiny2313 | 06.7 | 6.7 | 2.3 | 0.20 |
ATtiny167 | 09.3 | 9.3 | 2.9 | 0.22 |
ATtiny1634 | 0.00 | n/a | 2.5 | 0.18 |
ATmega328P | 09.6 | 9.6 | 3.1 | 0.24 |
ATmega1284P | 13.7 | 13.7 | 4.5 | 0.38 |
Wenn man nun diese MCUs zusammen mit einem Resonator auf ein Breadboard setzt und folgende Skizze hochlädt
void setup() { } void loop() { }
erhält folgende Ergebnisse:
MCU | 5 V 16 MHz mA | 5 V 16 MHz mA | 3.3 V 8 MHz mA | 1.8 V 1 MHz mA |
---|---|---|---|---|
ATtiny84A | 10.5 | 10.5 | 3.0 | 0.71 |
ATtiny85 | 11.6 | 11.6 | 4.0 | 0.84 |
ATtiny861A | 12.1 | 12.1 | 3.9 | 0.83 |
ATtiny2313 | 14.0 | 14.0 | 3.5 | 0.55 |
ATtiny167 | 14.1 | 14.1 | 4.5 | 0.85 |
ATtiny1634 | 0.00 | n/a | 3.6 | 0.54 |
ATmega328P | 14.1 | 14.1 | 3.5 | 0.66 |
ATmega1284P | 16.5 | 16.5 | 5.8 | 0.88 |
Lügen also die Datenblätter? Wenn man sie sorgfältig studiert, stellt man eine erhebliche Diskrepanz zwischen meinem Setup und dem im Datenblatt beschrieben Messaufbau fest:
All current consumption measurements are performed with all I/O pins configured as inputs and with internal pull-ups enabled. A square wave generator with rail-to-rail output is used as clock source.
All Active- and Idle current consumption measurements are done with all bits in the PRR register set and thus, the corresponding I/O modules are turned off. Also the Analog Comparator is disabled during these measurements.
ATmega48A/48PA/88A/88PA/168A/168PA/328/328PA Datenblatt
Im Datenblatt wird weiter ausgeführt, dass die Zahlen während der Herstellung nicht getestet werden und dass die Daten „als Hinweis darauf, wie sich die Teile verhalten werden“ verstanden werden sollten. Wenn man verschiedene Exemplare desselben MCU-Typs misst, erhält man teilweise sehr unterschiedliche Zahlen. Ich habe beispielsweise 14 mA bis 18 mA für verschiedene Exemplare des ATmega328P gemessen. Da zudem in batteriebetriebenen Kontexten MCUs nur für sehr kurze Zeiträume eingeschaltet werden, ist es wahrscheinlich nicht sehr wichtig, wie hoch genau der aktive Versorgungsstrom ist und der Ruhestrom im Power-Down-Modus ist viel interessanter. Und hier sehen der ATtiny 1634 und neuere ATtinys (z.B. ATtiny3227) sehr vielversprechend aus. Am Ende zählt jedoch, welche Funktionen man benötigt, welchen Preis man zu zahlen bereit ist, ob man mit SMD-Teilen arbeiten will, und ob die MCU überhaupt lieferbar ist.
Schreibe einen Kommentar