Micro-SD-Kartenspeicher mit geringem Stromverbrauch

18

Wir bauen einen stromsparenden Datenlogger auf der Basis des ATmega328P, um den Arduino-Bootloader und die IDE usw. zu nutzen. Idealerweise sollte der Stromverbrauch weniger als 0,3 mA bei 3,3 V betragen, um eine Lebensdauer von etwa 4 Monaten für einen einzelnen zu erreichen AA Batterie. Die Sensordaten werden 4 Monate lang mit maximal 76 Bytes / Sek. Gespeichert, was etwa 750 MiB Daten ergibt. Aus diesem Grund benötigen wir ein großes Speichergerät, das immer noch wenig Strom verbraucht.

Soweit ich weiß, ist die einzige praktische Lösung, um so viele Daten zu speichern, die Verwendung einer SD-Karte. SD-Karten scheinen jedoch etwas mehr Energie zu verbrauchen, als wir uns leisten können, 0,2 mA Leerlaufstrom für die Karten, die wir jetzt haben, und mehr, wenn sie schreiben.

Also ein paar Fragen:

  • Ist ein High-Side-Schalter die einzige praktische Möglichkeit, den Stromverbrauch der SD-Karte zu steuern?
  • Welche Vorsichtsmaßnahmen sollten wir beachten, wenn wir die Karte einschalten? Zum Beispiel ist Wear-Leveling ein Prozess, der nach einem Blockschreibvorgang ausgeführt wird oder jederzeit ausgeführt werden kann.
  • Gibt es noch andere Alternativen, die wir in Betracht ziehen sollten?
geometrikal
quelle
1
solarduino.net/?p=58 ist ein Artikel, der Sie interessieren könnte
vicatcu
Erwägen Sie, externen RAM wie 23LC1024 hinzuzufügen. Dann können Sie mehr puffern und die SD-Karte herunterfahren. Microchip stellt auch eine batteriegepufferte Version her, wenn Sie die Vorstellung stören, dass Daten in flüchtigen Speichern gespeichert sind.
Markrages

Antworten:

19

Bei einem Budget von durchschnittlich 0,3 mA zählt jeder µA. Für den Mikrocontroller kein so großes Problem, aber die SD-Karte verbraucht Dutzende von mAs. Sie möchten es so wenig wie möglich einschalten. Der ATmega328P verfügt jedoch nur über 2 kB RAM. Das bedeutet, dass der Sample-Puffer in weniger als einer halben Minute voll ist und es Zeit ist, auf die SD-Karte zu schreiben. Zweimal in der Minute.

Ich würde einen TI MSP430 anstelle des AVR in Betracht ziehen. Es ist immer noch der Controller mit der niedrigsten Leistung, der allgemein verfügbar ist. Sie sparen den µA, den Sie beim Schreiben auf die SD-Karte benötigen. Der MSP430F5418A verfügt außerdem über 16 kB RAM, sodass Sie die SD-Karte nur alle dreieinhalb Minuten einschalten müssen.

Sie können den MSP430 mit seinem Niederfrequenzoszillator betreiben und zum Beschreiben der SD-Karte auf den Hochfrequenz-DCO (Digitally Controlled Oscillator) umschalten, damit dies so schnell wie möglich geschieht.

Für die Stromversorgung der SD-Karte würde ich in der Tat einen High-Side-Schalter verwenden. Der BSS215P ist ein geeigneter P-MOSFET auf Logikebene .

Bearbeiten
Wenn Ihnen ein BGA-Paket nichts ausmacht, ist ein NAND-Flash-Gerät möglicherweise eine Alternative zur SD-Karte. Dieser kann im MMC- oder SPI-Modus betrieben werden. Es verbraucht weniger als eine SD-Karte, verbraucht aber im Standby-Modus immer noch 200 µA. Sie sollten es also trotzdem mit dem High-Side-FET ausschalten. Stellen Sie sicher, dass die E / A auf dem Chip niedrig sind, bevor Sie die Stromversorgung ausschalten. Das gilt auch für die SD-Karte.

stevenvh
quelle
Danke für die Information. Derzeit sind wir leider auf MCUs mit Arduino-Bootloadern beschränkt, erwägen aber den Atmega644PA aufgrund des erhöhten RAM. Die MCU wird durch einen RTC-Interrupt aufgeweckt, um die Messungen durchzuführen und zu anderen Zeiten ausgeschaltet zu sein. Gibt es Alternativen zur SD-Karte? Ihr Vorschlag, eine MCU mit viel RAM für einen großen Puffer zu kaufen, ist ein guter, an den ich nicht gedacht habe. :)
geometrikal
@stevenvh Welche Eigenschaften des MOSFET BSS215P machen ihn für diese Anwendung geeignet?
ElecEnthusiast
Ein AVR kann möglicherweise sogar eine SD-Karte von einem GPIO-Pin versorgen (20 mA sollten möglich sein).
JimmyB
14

(Beantworte meinen eigenen Beitrag mit nützlichen Informationen)

Ich habe einige Experimente mit einem begrenzten Satz von SD-Karten durchgeführt, um deren Stromverbrauch zu überprüfen. Sie scheinen von Hersteller zu Hersteller sehr unterschiedlich zu sein, und manche Karten verbrauchen zehnmal mehr Energie als andere.

Es gibt zwei Ergebnisse unten. Das erste ist der geschätzte Stromverbrauch im Schlaf, und das zweite ist der durchschnittliche Stromverbrauch für ungefähr 1 Sektor, der alle 5 Sekunden für mein Board geschrieben wird .

Card                     Sleep (mA)         Cyclic write (mA)   Number of cards tested

Sandisk 4GB Class 4      0.34-0.95 (0.69)   0.64-1.25 (1.05)    5
Verbatim 4GB Class 4     0.06-0.12 (0.09)   0.12-0.17 (0.16)    6
Kingston 4GB Class 4     1.34-1.34 (1.34)   1.47-1.47 (1.47)    1
Lexar 4GB Class 4        0.09-0.09 (0.09)   0.11-0.12 (0.12)    2

Lexar 8GB Class 6        0.06-0.09 (0.08)   0.09-0.12 (0.10)    4 (best so far)

Toshiba 16GB Class 10    0.12-0.12 (0.12)   0.18-0.18 (0.18)    1

Ich habe den Spitzenstrom nicht berücksichtigt, da er mit meinem Multimeter nicht zuverlässig zu messen scheint. Wahrscheinlich, weil die Karte nur für einige ms beschrieben wird. Ich bemerkte jedoch, dass alle Karten einen Spitzenwert von 5 bis 6 mA (geglättet) aufwiesen, während der Lexar 2 bis 3 mA (geglättet) aufwies. Beachten Sie, dass der tatsächliche Maximalstrom eine Größenordnung größer ist als dieser Wert. Dies zeigt jedoch an, dass die Lexar-Karte sowohl einen niedrigen Schreibstrom als auch einen niedrigen Ruhezustand aufweist.

Aktueller Gewinner

Lexar 8 GB Class 6

Ich werde diese Liste aktualisieren, sobald weitere Tests durchgeführt wurden. (Letzte Aktualisierung: 14.08.2014)

geometrikal
quelle
Sie benötigen einen uCurrent ( eevblog.com/projects/ucurrent ) für Ihre Experimente. An ein Oszilloskop angeschlossen, kann es Ihnen einen guten Einblick in den Stromverbrauch über die Zeit während verschiedener Sequenzen in Ihrem Programm geben.
RJR
2

Schöne Tests. Schauen Sie sich unser Lernprogramm für Low-Power-Datenlogger mit Arduino Pro Mini und SD-Karten an: http://www.osbss.com/tutorials/temperature-relative-humidity/

Es enthält wahrscheinlich genau das, was Sie brauchen (RTC-Interrupt weckt es auf, fast ein Jahr Batterielebensdauer usw.). wenn Sie andere Karten oder den bloßen ATmega328P-Chip selbst verwenden.

Wie @stevenvh bereits sagte, benötigen Sie einen Transistor, um die Stromversorgung des SD-Kartenlesers zu steuern, wenn sich der Prozessor im Energiesparmodus befindet.

OSBSS
quelle
0

Die niedrigsten Schlafströme, die ich für SD-Karten gesehen habe, liegen bei 0,05 mA für alte Sandisk 256 MB, und wie bei den OSBSS-Leuten wird mein Datenlogger selten unter 0,1 mA aufgebaut, da typische SD-Karten ungefähr 0,07 mA zu ziehen scheinen. Wenn Sie dieses Gebiet erreichen, sollten Sie in der Lage sein, 3-4 Monate aus einem AA herauszuholen, wenn Ihr Boot-Regler effizient genug ist.

Vergewissern Sie sich, dass Sie die nicht verwendeten Verbindungen an Ihrem SD-Kartenadapter hochziehen, da sonst die Ruheströme viel höher sein können. Erkunden Sie auch die Low-Power-Bibliothek von Rocket Screem, mit der Sie problemlos in verschiedene 328P-Schlafmodi wechseln können.

Was das Umschalten betrifft: Der Kollege, der die SD-Bibliotheken für den Arduino geschrieben hat, warnt davor, die SD-Karten auf dem Arduino-Spielplatz auszuschalten, sodass ich diesen Ansatz nicht verfolgt habe. Ich wäre gespannt, wie es für die OSBSS-Jungs gelaufen ist (?)

Ed Mallon
quelle