Aller au contenu






- - - - -

Tout ce que vous pourriez vous demander sur la consommation d'une puce ATmega328p (puce d'Arduino)

Posté par sky99, dans Optimisation, Batterie, Energie, microcontrôleur, Arduino 12 avril 2013 · 32 928 visite(s)

low power consumption autonomie tension ampere power Atmega328P Atmega Arduino battery
Consommation d'un Arduino, et optimisation d'un montage à base de ATmega328P
Je vous propose ici un résumé d'un excellent article que j'ai lu 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.
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 Image IPB

L'auteur y mène une investigation 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".

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
Je reconnais qu'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.


Budgétiser 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!




Au passage, voici un autre lien très intéréssant, sur le même sujet. Moins vaste dans les problématiques approchées, mais avec une méthodologie intéréssante, et des informations que ne sont pas nécéssairement présentes dans l'autre :
Adventure in low power land

Sur les batteries, voici également 3 liens très intéréssants, bien documentés, comparant les technologies, parlant des taux d'auto-décharge, etc..

  • Signaler
Merci pour cet article très très très intéressant.
On arrive vraiment sur des calculs de pouième d'ampère pour optimiser au maximum les temps de vie !
  • Signaler
En effet, on peut aller très loin. En pratique, on peut aller à des consos tellement faibles que la batterie elle même perd plus de courant toute seule que le circuit n'en dépense :)
  • Signaler
Bonjour,

Tout d'abord, merci et félicitations pour cette synthèse.

je suis interessé par la technique de detection "low battery". Faut-il prendre tout le code présenté au chapitre "Detecting low voltage" ?

Merci

Stephane
  • Signaler

Super intéressant !

je construit des montages miniatures qui à base de ATtiny et de CR2032 ou Li-ion 150mA ,  

je pense pouvoir adapter certains modes sur le Tiny85 ou le Tiny13

Merci :) 

  • Signaler

Mars 2024

L M M J V S D
    123
45678910
11121314151617
18192021222324
252627 28 293031

Ma photo

utilisateur(s) actif(s)

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)

Rechercher dans le blog

Derniers visiteurs

MyBlogLog

Éléments Google partagés