Diviser la consommation de vos montages Arduino par 10, 100 ou 1000 !!!

Sleep mode arduino
Sleep mode arduino
Sleep mode arduino

Un résumé d’un excellent article trouvé sur le net. Je tiens avant tout à dire que tout ce que je vais présenter ici provient du travail de Nick Gammon, sur le lien ci dessous :
Sur cette page de Nick Gammon, se trouve un post d’immense qualité sur la consommation des ATmega328P, et les moyens d’optimiser celle ci. <—- IN ENGLISH

Si vous comprenez l’anglais, allez plutôt lire l’original, et au pire gardez le lien vers ce résumé pour les tables, et formules :)

Il nous présente

Un projet complet de sonde de température à très basse consommation, Une LED pour signaler une température trop élevée, une LED pour une température trop basse, et une LED pour signaler de temps en temps (toutes les 30s) que le capteur fonctionne bien…

Il utilise 3 piles Alkalines AA, qui ont un taux d’auto-décharge de 80µA chacune, soit 0.240mA au total, pour une capacité de 2890mAh.
240µA+0.625µA=240.625µA=0.240625mA.
Le système devrait donc pouvoir durer 2890/0.0240625= 120 103h, soit 5004 jours, ce qui représente environ 13 ans, 5 mois et 2 semaines.!!!!

 

 

L’auteur y mène une investigation très très poussée sur ce que consomme un Ardruino, puis surtout un ATmega328P sur une breadboard.

Bien sur, le Arduino consomme plus que la version breadboard. On passe en effet de 55mA pour le Arduino Uno a 15mA pour le Arduino “breadboard”. ( fabriqué donc soit même)

On voit aussi l’impact des différents modes de veille de la puce, et on passe de 15mA au départ, à 0.84mA en standby, et 0.36mA en mode power_down. !!!

Ces modes ne signifient pas que la puce est éteinte, puisqu’elle peut être révéillée après un temps donné, ou par des interruptions sur des broches (par exemple un appui sur un bouton). Cela signifie qu’on peut avoir un projet capable de fonctionner des mois sur des petites batteries, ou en utilisant l’énergie d’un condensateur chargé par un petit panneau solaire!

Il présente ensuite d’autres optimisations permettant de baisser encore la consommation. La plus fulgurante, c’est la désactivation de l’ADC (qu’on peut réactiver quand on veut), qui permet de faire tomber la consommation de 335µA à 0.355µA, soit, 355 NANO-Amères. OUI! NANO!

A ce niveau l’énergie dépensée est tellement minime qu’il y a sans doute plus de perte dans la résistance des fils de votre circuit!

Et si ça ne suffit pas, il optimise encore (toujours en mode veille) jusqu’à 125 nano ampères.

Fréquence
Ici il va très loin, et on aura probablement pas besoin de telles optimisations. Par contre, il revient sur un paramètre plus accessible, et qui à un impact important. Repartons sur notre Atmega en mode normal, qui consomme 15mA.

En passant la fréquence à 8Mhz avec l’horloge interne, il passe déjà a 11mA. Soit 4mA de gagnés! A ce niveau notre puce consomme moins qu’une LED!
A 128Khz, il tombe à 6mA.
en résumé sur les fréquences :

 

16 MHz 15.15 mA 8 MHz 11.05 mA 2 MHz 7.21 mA 1 MHz 6.77 mA 128 KHz 6.00 mA

 

 

Par la suite, Nick nous explique comment réveiller le Atmega de la veille en utilisant un timer. En pratique, on peut réveiller la puce toutes les 16, 32 64, 125, 250, 500,1000, 2000, 4000 et 8000ms. Donc des intervalles de 16ms à 8s.
Fatalement, on consommera d’autant moins, et si par exemple votre puce fait des mesures sur une sonde qui a une fréquence de rafraîchissement d’une seconde, vous pouvez donc ne consommer pratiquement rien, sortir de veille, relever la valeur, et retourner en sommeil toutes les secondes!
Le montage pourra tenir des mois avec même une petite pile bouton!

On voit également comment réveiller la puce par un signal bas sur certaines broches (D2 et D3) d’un mode ou la consommation est de 350 nano ampères.

Budgetiser la puissance en fonction de la source d’alimentation

Suite à quelques autres pistes pour optimiser, l’auteur nous présente sa méthode pour budgetiser la consommation en fonction des piles/batteries, avec un tableau très utile des capacités types des batteries standard :

 

 

 

 

 

 

CR1212 18 CR1620 68 CR2032 210 NiMH AAA 900 Alkaline AAA 1250 NiMH AA 2400 Alkaline AA 2890 Li-Ion 4400

Il indique également comment réveiller des esclaves I2C de leur mode de veille, avec le code pour le maître et l’esclave.

Impact de la tension sur la consommation
Voici un poste très important d’économie d’energie. Il poursuit ses tests, avec différentes tensions , pour un AtMega à 8Mhz :

 

 

 

 

 

  • 5.0V : 11.67 mA
  • 4.5V : 7.74 mA
  • 4.0V : 5.60 mA
  • 3.5V : 4.10 mA
  • 3.3V : 3.70 mA
  • 3.0V : 3.30 mA
  • 2.8V : 3.00 mA
  • 2.5V : 2.70 mA
  • 2.4V : 2.50 mA
  • 2.3V : 2.40 mA
  • 2.2V : 2.30 mA
  • 2.1V : 2.10 mA

Pour descendre sous les 3V il faudra toutefois désactiver la détection des “brown-out”. Pour ma part, 3.3V constituent une valeur suffisante, d’autant plus que beaucoup de capteurs fonctionnent à cette tension. Du coup, on peut avoir un circuit sur batteries, avec alimentation non régulée, et consommant très peu.
En pratique, passer de 5V à 3.3V permet de diviser la consommation par 3!
C’est un gain non négligeable, et 4mA, c’est quand même très peu. Avec 3 batteries AA de 2200mAh (donc de qualité basique), ça fait tout de même 550h, soit 24 jours d’autonomie! et cela sans utiliser la veille!
Avec une petite cellule solaire, il suffirait de produire 8mA pour à la fois recharger les batteries et alimenter le circuit…

En allant plus loin, il parvient à 128Khz et 1.8V à tomber à 0.14mA. à ce stade, deux piles AA permettent de tenir 21 mois…

Combien de volts par MegaHertz sont nécéssaires?
L’auteur présente le graphique suivant provenant de la doc:
Image IPB
Il calcule qu’il faut utiliser les formules suivantes :

 

 

  • en dessous de 1.8V : la puce ne fonctionne pas
  • de 1.8V à 2.7V : Fréquence en MHz=4 + ((V – 1.8) / 0.15)
  • de 2.7 à 4.5 : Fréquence en Mhz = 10 + ((V – 2.7) / 0.18)

En pratique, il donne les tensions nécessaires pour certaines fréquences :

 

 

Mhz Volts 4 1.80 5 1.95 6 2.10 7 2.25 8 2.40 9 2.55 10 2.70 11 2.88 12 3.06 13 3.24 14 3.42 15 3.60 16 3.78 17 3.96 18 4.14 19 4.32 20 4.50

C’est une table à garder sous le coude, ça peut permettre de nombreuses optimisations!

Taux d’auto-décharge des batteries!
Voici un point TRES intéressant, et primordial pour l’optimisation.
En effet, à quoi bon optimiser à mort, si la batterie utilisée se décharge
toute seule plus vite ? à quoi bon gagner des nano ampères si la batterie gaspille des milli ampères?
Il nous présente donc la table de référence suivante :

 

 

 

Type Capacité mAH Décharge %/mois auto-décharge (uA) CR1212 18 1 0.250 CR1620 68 1 0.950 CR2032 210 1 3 NiCD AAA 350 20 98 NiMH AAA 900 30 375 NiCd AA 1000 20 270 Alkaline AAA 1250 2 35 NiMH AA 2400 30 1000 Alkaline AA 2890 2 80 Li-Ion 4400 10 600

Les batteries étant données pour un taux d’auto-décharge par mois, il nous donne la méthode pour calculer la “consommation” équivalente:
courant_équivalent_en_mA = (pourcentage_décharge_mensuelle / 100) * capacité_mAh/ (24 * 30)

Bref, en pratique, si vous avez une alimentation par batteries AA, inutile probablement d’optimiser plus qu’une milli-ampère, puisque la pile “consommera” autant en auto-décharge. Et la, passer de 300 µA à 100µA ne changera probablement pas grand chose à l’autonomie finale.

Le détail du calcul est dans l’article original.

Détection de tension basse dans un circuit sans régulateur
Si on a optimisé notre circuit, cela n’empêche pas le circuit de finir par vider sa batterie. Donc avec une alimentation non régulée, il nous présente une solution pour mesurer VCC en utilisant la tension de référence 1.1V interne de la puce.

Il donne également des idées pour utiliser une led pour signaler cela sans consommer grand chose (on parle de consommation moyenne en micro-ampères…)

Désactiver des systèmes externes (capteurs, puces, etc)
A ce niveau d’optimisation, il y a des chances que les autres systèmes de votre montage consomment chacun bien plus que le ATmega. Par exemple, le capteur IR de mon mini-robot R.Damil consomme 30mA, et les servomoteurs 10mA au repos. Soit 50mA, alors que la puce peut consommer 3mA en activité et bien moins au repos!
Il deviendra donc intéressant de désactiver ces systèmes quand il ne sont pas nécessaires. Par exemple quand mon robot n’avance pas, je peux désactiver l’alimentation des servomoteurs, et celle du capteur IR.
Nick nous présente des solutions pour le faire, en alimentant les senseurs peu consommateurs avec des broches digitales, ou en utilisant des transistors, voir des mosfets pour les composants les plus consommateurs.

Il reste encore pas mal de choses dans cet article, par exemple, il explique comment révéiller la puce par un appui sur n’importe quel bouton d’un pavé alphanumérique. ça peut être utile pour une télécomande, un digicode, ou plein de choses… Il présente ensuite un projet complet de sonde de température à très basse consommation, avec diverses optimisations, Une LED pour signaler une température trop élevée, une LED pour une température trop basse, et une LED pour signaler de temps en temps (toutes les 30s) que le capteur fonctionne bien…

En pratique, il utilise toutes les téchniques qu’il a présentées, et sa sonde a une consommation moyenne de 625 nano ampères. Il utilise 3 piles Alkalines AA, qui ont un taux d’auto-décharge de 80µA chacune, soit 0.240mA au total, pour une capacité de 2890mAh.
240µA+0.625µA=240.625µA=0.240625mA.
Le système devrait donc pouvoir durer 2890/0.0240625= 120 103h, soit 5004 jours, ce qui représente environ 13 ans, 5 mois et 2 semaines.

Je vous invite fortement à lire l’article original, qui est passionant. J’en ai résumé certains aspects, de sorte que les anglophobes en tirent quelquechose, et j’ai repris les tables importantes pour avoir certains calculs sous la main, mais je n’ai fait que traduire et décrire une partie de l’excellent travail de Nick Gannon sur ce sujet.

Rendez vous donc à cette adresse pour lire l’article original!

 

 

  1. I’ll immediately take hold of your rss feed as
    I can not to find your email subscription hyperlink or e-newsletter
    service. Do you’ve any? Kindly allow
    me realize in order that I may just subscribe.
    Thanks.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *