Stockage sur carte micro-SD basse consommation

18

Nous construisons un enregistreur de données à faible consommation basé sur l'ATmega328P, afin d'utiliser le chargeur de démarrage Arduino et l'IDE, etc. Pile AA. Les données des capteurs seront stockées à un maximum de 76 octets / s pendant les 4 mois, ce qui donne environ 750 Mo de données. Par conséquent, nous avons besoin d'un grand dispositif de mémoire, qui est toujours de faible puissance.

D'après ce que je peux dire, la seule solution pratique pour stocker autant de données est d'utiliser une carte SD. Cependant, les cartes SD semblent utiliser un peu plus de puissance que ce que nous pouvons nous permettre, un courant inactif de 0,2 mA pour les cartes que nous avons maintenant, et plus encore lorsqu'elles écrivent.

Donc quelques questions:

  • Un commutateur côté haut est-il le seul moyen pratique de contrôler la consommation d'énergie de la carte SD?
  • Les mises en garde doivent-elles être prises en compte lors de la mise sous tension de la carte? Par exemple, le niveau d'usure est un processus qui sera effectué après une écriture de bloc, ou peut-il se produire à tout moment.
  • Y a-t-il d'autres alternatives que nous devrions envisager?
geometrikal
la source
1
solarduino.net/?p=58 est un article qui pourrait vous intéresser
vicatcu
Pensez à ajouter de la RAM externe comme 23LC1024. Ensuite, vous pouvez tamponner plus et garder la carte SD éteinte. Microchip fait également une version avec batterie, si l'idée de données qui traînent dans une mémoire volatile vous dérange.
markrages du

Réponses:

19

Si vous prévoyez une moyenne de 0,3 mA, chaque µA compte. Pas vraiment un problème pour le microcontrôleur, mais la carte SD consommera des dizaines de mAs. Vous voulez qu'il soit allumé le moins possible. Mais l'ATmega328P n'a que 2 Ko de RAM, ce qui signifie que votre tampon d'échantillonnage sera plein en moins d'une demi-minute, puis il est temps d'écrire sur la carte SD. Deux fois par minute.

Je considérerais une TI MSP430 au lieu de l'AVR. C'est toujours le contrôleur le plus bas disponible sur le marché. Cela vous fera économiser le µA dont vous aurez besoin lors de l'écriture sur la carte SD. Le MSP430F5418A dispose également de 16 Ko de RAM, de sorte que vous ne devez allumer la carte SD qu'une fois toutes les trois minutes et demie.

Vous pouvez exécuter le MSP430 sur son oscillateur basse fréquence et basculer sur le DCO haute fréquence (oscillateur à commande numérique) pour l'écriture sur la carte SD, afin que cela prenne le moins de temps possible.

Pour alimenter la carte SD, j'utiliserais en effet un interrupteur côté haut. Le BSS215P est un P-MOSFET de niveau logique approprié.

modifier
Si cela ne vous dérange pas un paquet BGA, un périphérique Flash NAND peut être une alternative à la carte SD. Celui-ci peut fonctionner en mode MMC ou SPI. Il consomme moins qu'une carte SD, mais consomme toujours 200 µA en veille, vous voudrez donc toujours l'éteindre avec le FET haut de gamme. Assurez-vous de réduire les E / S de la puce avant de couper l'alimentation. Cela vaut également pour la carte SD.

Stevenvh
la source
Merci pour l'info. Malheureusement, nous sommes actuellement limités aux microcontrôleurs avec des chargeurs de démarrage Arduino disponibles, mais nous envisageons l'Atmega644PA en raison de l'augmentation de la RAM. Le MCU sera réveillé par une interruption RTC pour effectuer les mesures et sera hors tension à d'autres moments. Existe-t-il des alternatives à la carte SD? Votre suggestion d'obtenir un MCU avec beaucoup de RAM pour un grand tampon est une bonne à laquelle je n'ai pas pensé. :)
geometrikal
@stevenvh Quelles caractéristiques du MOSFET BSS215P le rendent approprié pour cette application?
ElecEnthusiast
Un AVR peut même être en mesure d'alimenter une carte SD à partir d'une broche GPIO (20mA devrait être possible).
JimmyB
14

(Répondre à mon propre message avec des informations utiles)

J'ai effectué quelques expériences avec un ensemble limité de cartes SD pour vérifier leur consommation d'énergie. Ils semblent varier considérablement entre les fabricants et au sein des types, certaines cartes consomment 10 fois plus d'énergie de veille que d'autres.

Il y a deux résultats ci-dessous. Le premier est la consommation de courant estimée pendant le sommeil, et le second est la consommation de courant moyenne pour environ 1 secteur d'écriture toutes les 5 secondes pour ma carte .

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

Je n'ai pas inclus le courant de crête car cela ne semble pas une mesure fiable avec mon multimètre. Probablement parce que la carte n'est écrite que pendant quelques ms. Mais j'ai remarqué que toutes les cartes donnaient environ une mesure de crête de 5 à 6 mA (lissée) tandis que la Lexar donnait 2 à 3 mA (lissée). Notez que le courant max réel est d'un ordre de grandeur supérieur à cela, mais cela indique que la carte Lexar a un faible courant d'écriture ainsi qu'une veille.

Gagnant actuel

Lexar 8GB Class 6

Je mettrai à jour cette liste au fur et à mesure des tests. (Dernière mise à jour: 2014-08-14)

geometrikal
la source
Vous aurez besoin d'un uCurrent ( eevblog.com/projects/ucurrent ) pour vos expériences. Connecté à un oscilloscope, il peut vous donner un bon aperçu de la consommation d'énergie au fil du temps au cours de différentes séquences de votre programme.
RJR
2

Bons tests. Consultez notre didacticiel d'enregistreur de données basse consommation utilisant Arduino Pro Mini et des cartes SD: http://www.osbss.com/tutorials/temperature-relative-humidity/

Il contient probablement exactement ce dont vous avez besoin (une interruption RTC le réveille, une durée de vie de la batterie proche d'un an, etc.). si vous utilisez d'autres cartes ou la puce ATmega328P nue elle-même.

Tout comme @stevenvh l'a dit, vous aurez besoin d'un transistor pour contrôler l'alimentation du lecteur de carte SD lorsque le processeur est en mode veille.

OSBSS
la source
0

Les courants de sommeil les plus faibles que j'ai vus pour les cartes SD sont d'environ 0,05 mA pour les anciens sandisk 256 Mo, et comme les gens d'OSBSS, j'ai rarement mon build d' enregistreur de données en dessous de 0,1 mA car les cartes SD typiques semblent consommer environ 0,07 mA. Pourtant, lorsque vous atteignez ce territoire, vous devriez facilement pouvoir retirer 3-4 mois d'un AA si votre régulateur de démarrage est suffisamment efficace.

Assurez-vous de vérifier que vous tirez vers le haut les connexions non utilisées sur votre adaptateur de carte SD, ou les courants de veille peuvent être beaucoup plus élevés. Explorez également la bibliothèque basse consommation de Rocket Screem, car elle vous permet d'accéder facilement à différents modes de veille 328P.

En ce qui concerne le changement: le boursier qui a écrit les bibliothèques SD pour l'arduino met en garde contre la mise hors tension des cartes SD sur le terrain de jeu Arduino, donc je n'ai pas poursuivi cette approche. Je serais curieux de savoir comment cela a fonctionné pour les gars de l'OSBSS (?)

Ed Mallon
la source