Micro-SD-Kartenspeicher mit geringem Stromverbrauch

Wir bauen einen Low-Power-Datenlogger auf 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 zu erreichen AA-Batterie. Sensordaten werden für die 4 Monate mit maximal 76 Bytes/Sek. gespeichert, was etwa 750 MiB an Daten ergibt. Daher benötigen wir ein großes Speichergerät, das immer noch wenig Strom verbraucht.

Soweit ich das beurteilen kann, ist die einzige praktische Lösung, um so viele Daten zu speichern, die Verwendung einer SD-Karte. SD-Karten scheinen jedoch etwas mehr Strom 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 einige Fragen:

  • Ist ein High-Side-Schalter die einzige praktische Möglichkeit, den Stromverbrauch der SD-Karte zu steuern?
  • Gibt es irgendwelche Vorbehalte, die wir beachten sollten, wenn wir die Stromversorgung der Karte einschalten? Zum Beispiel ist Wear-Leveling ein Prozess, der nach einem Blockschreiben durchgeführt wird oder jederzeit passieren kann.
  • Gibt es noch andere Alternativen, die wir in Betracht ziehen sollten?
solarduino.net/?p=58 ist ein Artikel, der für Sie von Interesse sein könnte
Erwägen Sie das Hinzufügen von externem RAM wie 23LC1024. Dann können Sie mehr puffern und die SD-Karte heruntergefahren lassen. Microchip stellt auch eine batteriegepufferte Version her, wenn Sie die Vorstellung stört, dass Daten in einem flüchtigen Speicher herumliegen.

Antworten (4)

Wenn Sie durchschnittlich 0,3 mA budgetieren, zählt jedes µA. Kein so großes Problem für den Mikrocontroller, aber die SD-Karte verbraucht Dutzende von mAs. Sie möchten es so wenig wie möglich eingeschaltet haben. Aber der ATmega328P hat nur 2 kB RAM, was bedeutet, dass Ihr Sample-Puffer in weniger als einer halben Minute voll ist, und dann ist es Zeit, auf die SD-Karte zu schreiben. Zweimal pro Minute.

Ich würde einen TI MSP430 anstelle des AVR in Betracht ziehen. Es ist immer noch der leistungsschwächste allgemein verfügbare Controller. Es spart Ihnen die µA, die 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 einmal alle dreieinhalb Minuten einschalten müssen.

Sie können den MSP430 mit seinem niederfrequenten Oszillator betreiben und zum Schreiben auf die SD-Karte auf den hochfrequenten DCO (Digitally Controlled Oscillator) umschalten, sodass dies so wenig Zeit wie möglich in Anspruch nimmt.

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 mit Logikpegel.

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

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

(Beantwortung meines eigenen Beitrags mit nützlichen Informationen)

Ich habe einige Experimente mit einer begrenzten Anzahl von SD-Karten durchgeführt, um deren Stromverbrauch zu überprüfen. Sie scheinen zwischen den Herstellern und innerhalb der Typen stark zu variieren, einige Karten verbrauchen 10-mal mehr Energie im Ruhezustand als andere.

Darunter sind zwei Ergebnisse. Der erste ist der geschätzte Stromverbrauch im Ruhezustand, und der 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 aufgenommen, da dies mit meinem Multimeter keine zuverlässige Messung zu sein scheint. Vermutlich weil die Karte nur für wenige ms beschrieben wird. Aber ich bemerkte, dass alle Karten eine Spitzenmessung von etwa 5 - 6 mA (geglättet) lieferten, während der Lexar 2 - 3 mA (geglättet) lieferte. Beachten Sie, dass der tatsächliche maximale Strom um eine Größenordnung höher ist, aber dies zeigt an, dass die Lexar-Karte sowohl einen niedrigen Schreibstrom als auch einen Ruhezustand aufweist.

Aktueller Gewinner

Lexar 8 GB Klasse 6

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

Sie benötigen uCurrent ( eevblog.com/projects/ucurrent ) für Ihre Experimente. An ein Oszilloskop angeschlossen, kann es Ihnen einen guten Einblick in den Stromverbrauch im Laufe der Zeit während verschiedener Sequenzen in Ihrem Programm geben.
Wäre toll, wenn du aktuelle Daten hättest
@rfii Leider habe ich seit Jahren nicht mehr daran gearbeitet

Schöne Tests. Sehen Sie sich unser Low-Power-Datenlogger-Tutorial 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-Unterbrechung weckt es auf, Batterielebensdauer von fast einem Jahr usw.). wenn Sie andere Boards oder den bloßen ATmega328P-Chip selbst verwenden.

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

Die niedrigsten Schlafströme, die ich für SD-Karten gesehen habe, liegen bei etwa 0,05 mA für alte Sandisk 256 MB, und wie die OSBSS-Leute erhalte ich meine Datenlogger selten unter 0,1 mA, da typische SD-Karten etwa 0,07 mA zu ziehen scheinen. Wenn Sie dieses Gebiet erreichen, sollten Sie jedoch problemlos 3-4 Monate aus einem AA herausholen können, wenn Ihr Stiefelregler effizient genug ist.

Stellen Sie sicher, dass Sie die nicht verwendeten Verbindungen auf Ihrem SD-Kartenadapter hochziehen, da die Ruheströme sonst viel höher sein können. Erkunden Sie auch die Low-Power-Bibliothek von Rocket Screem, da Sie damit ganz einfach in verschiedene 328P-Schlafmodi wechseln können.

Was das Umschalten betrifft: Der Kollege, der die SD-Bibliotheken für das Arduino geschrieben hat, warnt davor, die SD-Karten auf dem Arduino-Spielplatz auszuschalten, also habe ich diesen Ansatz nicht verfolgt. Ich wäre neugierig zu hören, wie es für die OSBSS-Leute geklappt hat (?)