lundi 28 janvier 2013

Introduction aux MCU atTiny, partie 7

gestion de la consommation

Comme les micro-controlleurs sont souvent utilisés dans des gadgets fonctionnnant sur piles, les fabriquants tentent de réduire la consommation électrique au minimum. Les petits micro-controlleurs comme l'atTiny13a lorsqu'ils sont en mode power down consomment tellement peut qu'il n'est pas nécessaire de débrancher les piles. Dans cette chronique on va examiner les différentes méthodes pour réduire la consommation électrique.

Comme démo j'ai repris le jeux pong 1-D que j'ai réalisé sur un atTiny13a. voici le schéma:


Les LEDs sont montées en Charlieplexing sur PB0-PB3 et les boutons sont lus en ADC sur PB4. PB5 garde sa fonction de RESET.

Il s'agit d'une rangée de 8 LEDs et d'un bouton à chaque extrémitée. Une LED allumée qui circule d'une extrémitée à l'autre tiens lieu de balle que les joueurs se renvoient en pressant leur bouton respectif. Plus un joueur attend que la balle soit prêt de lui pour la renvoyer plus elle retourne rapidement réduisant d'autant les chances de l'adversaire de la frapper. La partie se termine lorsqu'on joueur a accumulé 15 points. Le pointage est affiché en binaire sur la rangée de LED. Les 4 LEDs de gauche indiquent le pointage du joueur de ce joueur et les autres celui de droite.

Économie d'énergie

code source tennis.c

Je ne sais pas si vous avez remarqué mais les fabriquants donnent toujours la consommation d'énergie de leur MCU, en début de datasheet, au plus bas voltage de fonctionnement et à la fréquence de 1Mhz. Si on veut connaître la consommation à fréquence et voltage plus élevé il faut fouiller les données electrical characteristics à la fin du datasheet. Le fait est que la technologie CMOS a remplacé la technonologie NMOS du début 70's car elle consomme moins d'énergie. Sauf que la consommation augmente exponnentiellement avec la fréquence et le voltage.

Donc une des méthodes pour réduire la consommation d'un MCU est de le faire fonctionner à la plus basse fréquence que permet l'utilisation qu'on veut en faire. J'ai donc vérifier la consommation électrique du circuit à différentes fréquences et voltages. Voici le tableau des mesures obtenues:

Fosc courant (Vdd=3.3V) courant (Vdd=5V) commentaire
9.6Mhz 7,00mA 14,68mA sans désactivation périphériques
9.6Mhz 6,92mA 14,41mA avec désactivation périphériques
4.8Mhz 6,11mA 13.21mA
2.4Mhz 5,37mA 11,9mA
1.4Mhz 5,03mA 11,3mA

Au lignes 345 et 346 je désactive les comparateurs analogiques et les entrées numériques qui ne sont pas utilisées dans cette application, ce qui permet de réduire à consommation d'à peine 270uA. Le fait est que dans cette application c'est le courant fourni à la LED allumée (il n'y en a jamais plus d'une à la fois) qui domine la consommation électrique. Ce n'est donc pas de cette façon qu'on peut réduire la consommation de façon significative. Par contre on constate que la réduction de la fréquence de l'oscillateur Fosc a plus d'effet ainsi que la réduction du voltage.

Dans ce cas particulié l'intérêt principal du power management est d'éviter que les piles se retrouvent à plat si on oubli d'éteindre le gadget. C'est là qu'entre en jeux les différents modes de mise en sommeil du MCU. Le WDT de l'atTiny13A possède un mode de fonctionnement appellé interrupt mode dans le datasheet. Dans ce mode lorsque la minuterie du watchdog timer expire une routine d'interruption est appellée plutôt que de produise un RESET du MCU. Je me sert donc de cette fonctionnalité. Le diviseur du WDT est programmé à 1024 ce qui donne un délais d'environ 8 secondes. De plus la variable count_down est utilisée pour prolonger ce délais en multiples de 8 secondes. l'ISR décrémente le compteur count_down et lorsque ce compteur arrive à zéro le MCU est mis en mode power down. Dans ce mode il ne consomme pratiquement plus de courant car tous les oscillateurs sont mis à l'arrêt. Mon multimètre indique que la consommation électrique passe de 14ma à 0,01ma (10uA). Je ne me fis pas trop à cette dernière lecture car elle est à la limite de résolution de mon multimètre. La consommation en mode power down avec une alimentation de 5 volts est probablement inférieur à 10uA et si le circuit était alimenté en 3 volt serait moindre.

Dans la procédure main il y a 2 boucles while (1) imbriquées. Dans le cycle de la boucle intérieure le WDT est réinitialisé ainsi que la variable count_down. Si les joueurs sont inactifs plus de 16 secondes la variable count_down tombe à zéro et le MCU est mis en mode power down. Le bouton RESET joue le rôle de power on et redémarre le MCU en mode normal.

Aucun commentaire:

Publier un commentaire