Bonjour.
Nous continuons le cours Comprendre les microcontrôleurs,
et nous allons parler aujourd'hui de la consommation
de ces microcontrôleurs, et en particulier du problème
de la faible consommation qui est souvent souhaitée.
On essaiera tout d'abord de comprendre de quoi dépend la consommation.
On parlera ensuite des modes Sleep. Et finalement,
on prendra quelques exemples.
Au fond, quelle est la consommation d'un microcontrôleur?
Est-ce un microampère? Un milliampère?
Un ampère?
Et bien, on peut se souvenir, ça n'est pas beaucoup plus qu'une LED.
Évidemment, les différents modèles de microcontrôleurs peuvent avoir des
consommations extrêmement différentes, on a
des microcontrôleurs dont la consommation
en mode normal est inférieure à un
milliampère, on a aussi des microcontrôleurs dont
la consommation en mode normal est supérieure
à dix ou même plusieurs dizaines de milliampères.
Malgré tout, ces consommations ne semblent pas
extrêmement élevées, et pourtant, elles ne vont
permettre que d'utiliser une petite pile pendant
au maximum quelques heures, ou éventuellement quelques jours.
Alors, la première question qu'il faut se
poser, c'est : de quoi dépend la consommation?
Regardons ce diagramme tiré d'un data sheet d'un fabricant.
Il nous indique deux choses. Il est toujours ici question de la
consommation, et on voit ici la variation de la consommation en fonction de la
tension d'alimentation, et ici on la voit en fonction de la fréquence.
Dans ce diagramme, on donne plusieurs
valeurs qui correspondent à des fréquences différentes,
et dans ce diagramme on donne deux
courbes qui correspondent à des tensions différentes.
Première chose : on constate que plus la tension augmente,
plus le courant augmente. Par exemple, ici, autour de
2,2 volts, on a un courant qui est à peine plus qu'un milliampère.
À trois volts, on est déjà à deux milliampères.
On a doublé, on a presque doublé le courant mais on a nettement plus que
doublé la puissance dont je vous rappelle que c'est le courant multiplié par
la tension.
Pourquoi est-ce que ces courbes ici ne vont pas jusqu'en bas?
Et bien c'est parce que, par exemple à 16 mégahertz, le processeur ne peut
pas fonctionner, ni à deux volts, ni à deux volts et demi, ni même à
trois volts, et c'est la raison pour
laquelle, sur le launchpad, on a une tension
d'alimentation de 3,5 volts pour être capable
de faire fonctionner le processeur à 16 mégahertz.
Regardons maintenant la deuxième courbe. C'est encore beaucoup plus spectaculaire.
On a ici un courant qui est nettement inférieur à un demi milliampère.
Ici, on a trois milliampères, mais tout ça en passant d'une fréquence
de l'ordre d'un mégahertz jusqu'à une fréquence de l'ordre de 12 mégahertz.
Au fond, si on veut
diminuer la consommation, il faut diminuer la tension, mais on
ne peut pas toujours, et il faudrait diminuer la fréquence.
Mais pourquoi pas, alors, aller jusqu'à une fréquence nulle?
On aurait à ce moment-là une consommation qui
n'est pas nulle, mais qui sera véritablement minimale.
Vous me direz que le processeur ne
fonctionne plus et ce n'est pas très intéressant,
et pourtant, c'est ce qu'on fait dans ce qu'on appelle le
mode Sleep des microcontrôleurs, et actuellement
tous les microcontrôleurs ont cette facilité.
Il s'agit effectivement d'arrêter de
faire fonctionner le microprocesseur qu'on trouve
à l'intérieur du microcontrôleur, de telle
manière qu'on ait une consommation minimale.
On peut le faire pendant
un certain temps, mais qui va réveiller ensuite le microcontrôleur?
Et bien, c'est le mécanisme des interruptions
qui va permettre de réveiller le microcontrôleur.
Prenons deux exemples.
On souhaite pouvoir allumer notre microcontrôleur lorsqu'on presse
sur un bouton. À ce moment-là, on utilisera
une Pin Change Interrupt.
Au contraire, on souhaite endormir le
processeur pendant un certain temps, et dans ce cas-là,
on pourra utiliser une interruption liée au timer.
Ça signifie qu'avant d'endormir le processeur,
on initialisera correctement les interruptions qu'on souhaite,
de telle manière qu'au moment voulu, soit après
un certain temps, soit au moment d'un
événement particulier, le processeur se remette en marche.
Il existe beaucoup de modes d'endormissement des microcontrôleurs.
Par exemple, la documentation pour le processeur ARM, un des modèles des STM32,
il y a 37 pages de documentation à lire
si on veut connaître tous les modes d'endormissement du processeur.
L'idée, c'est de désactiver différentes
parties du microcontrôleur selon les besoins.
Le processeur, oui, en général.
Les timers, on les garde ou on ne les garde pas?
Et bien, selon les besoins, on va les garder ou ne pas les garder.
Les entrées sorties, on va les garder?
On ne
va pas les garder? Ça dépendra des cas.
Pour s'en sortir, les fabricants proposent des
librairies, mais je signale que ces librairies ne
sont pas toujours faciles à utiliser, par ailleurs
elles sont pas toujours très bien écrites, malheureusement.
Et, assez souvent, il sera donc nécessaire,
quand même, de se pencher en détail dans la documentation pour tirer le meilleur
parti de ces mécanismes d'endormissement.
Je rappelle, ça peut être extrêmement intéressant puisque
ça va permettre d'allonger la durée d'utilisation des piles
pour un appareil donné, ce qui évidemment est
un argument commercial extrêmement intéressant dans beaucoup de cas.
Une autre application à laquelle on ne penserait peut-être
pas, de ce sommeil, de ce mode Sleep des microcontrôleurs,
c'est les conversions analogique numérique.
vous savez que les conversions analogique numérique sont complexes
du point de vue électronique et qu'elles sont extrêmement sensibles
au bruit, au bruit électronique, on comprend bien, au
bruit électrique sur les alimentations, sur les pads, et cetera.
Et alors le processeur, on sait qu'il est
une source de bruit électrique, par le fait qu'il
y a des oscillations et des phénomènes
plus ou moins périodiques qui se produisent.
Par conséquent, on utilise très souvent un
endormissement, spécifique parfois, pour les convertisseurs, de telle
manière que pendant la conversion, le processeur ne
fasse rien, et que le bruit soit minimum.
Voilà un petit exemple d'utilisation d'un convertisseur d'un MSP430,
c'est extrait des documents fournis par le fabricant, et on
va essayer de s'y retrouver, c'est vrai que ça fait un
tout petit peu peur parce qu'il y a beaucoup de
termes qu'on ne comprend pas, mais essayons quand même de regarder.
Je rappelle la traditionnelle ligne qui correspond
au Watchdog, la suppression de l'activation du Watchdog.
on remarque ici les initialisations, ici la boucle
qui correspond à loop, donc à la boucle principale.
Alors, on voit souvent ce mot ADC10, ça correspond au convertisseur analogique
numérique dix bits disponible dans les processeurs MSP430.
On a ici deux registres de contrôle dans
lequel on va activer un certain nombre de bits.
On voit ici le ON du convertisseur, donc on le met on marche.
On voit ici l'interrupt enable, donc on met en
marche l'interruption correspondante, et ici on a le sample
and hold, qui est une technique qui est utilisée
pour mémoriser la valeur pour s'affranchir de certaines fluctuations.
Et finalement, on aura ici le choix du canal qu'on a utilisé, ici le canal A1.
On doit également agir dans ce registre de sélection supplémentaire.
Tout ça, ça se trouve dans la documentation.
C'est toujours assez difficile d'écrire ce type de programmes, je
rappelle que la manière habituelle, c'est de chercher ce type
de programmes dans la documentation, puis d'essayer de comprendre les
instructions, et c'est beaucoup plus facile à faire à ce moment-là.
Finalement, on va lancer
la commande du début de la conversion, puis on va arrêter le processeur,
il sera en low power mode 0, c'est un de ses modes
d'endormissement, et on va utiliser le registre de statut pour arrêter le
processeur et pour activer les interruptions
general interrupt enable de telle manière que
le processeur s'endorme pendant la conversion et
que la routine d'interruption réactive le processeur.
Un autre exemple, cette fois il s'agira d'un processeur AVR, les registres
ont des noms un petit peu différents, mais les concepts sont relativement identiques.
Il s’agit donc du sommeil du dé électronique que vous
avez certainement vu sur le « teaser » de, du MOOC.
Cette procédure
« Sommeil » va donc endormir le processeur
: on commence par éteindre toutes les diodes lumineuses.
On enclenche l’interruption sur le bit du bouton poussoir.
On enclenche spécifiquement cette « Pin Change Interupt ».
On active l’ensemble des interruptions par un « set interup ».
Et finalement, on choisit le mode, un mode
parmi toute une série proposée par le fabricant.
On enclenche et finalement, on passe au mode de veille.
Et c’est seulement lorsqu’on pressera sur le
bouton poussoir que le processeur se rallumera.
Il nous reste un petit problème, c’est de mesurer cette consommation.
Alors, la consommation en mode normal, on la mesure facilement avec
un appareil de mesure simple de type des multimètres qu’on trouve facilement.
Mais lorsqu’il s’agit de mesurer des courants de l’ordre du
microampère, c’est beaucoup plus difficile de faire des mesures de courant.
Et là, je vous propose une solution
originale, que je vais essayer de vous expliquer.
En mode normal, notre montage est alimenté par
une pile, donc, cet interrupteur, en quelque
sorte, n’existe pas, il est toujours allumé.
Pour la manipulation, nous allons ajouter cet interrupteur.
Nous allons également ajouter, ici, un
condensateur, de l’ordre de 100 microfarads,
et, ici, la possibilité de mesurer la tension aux bornes de notre montage.
Alors, ce qui semblerait naturel, ce serait
d’enclencher la mesure, d’enclencher notre montage,
de brancher le condensateur, de laisser notre montage
s’endormir, par exemple après 20 secondes d’absence d’utilisation,
puis de débrancher la pile.
En débranchant la pile, le montage sera alimenté par le peu d’énergie
qui se trouve dans le condensateur et le condensateur va se décharger.
On pourra d’ailleurs observer avec le multimètre la décharge.
Est-ce que c’est une bonne
manière de faire?
Non, parce que le multimètre consomme beaucoup.
Il faut donc supprimer le multimètre, refaire
la manipulation de tout à l’heure, c’est-à-dire, brancher
le condensateur, brancher la pile, laisser l’appareil
s’endormir, puis débrancher la pile, laisser, par exemple,
pendant une minute, le montage consommer, à partir
de l’énergie qui se trouve dans le condensateur.
Puis, après une minute, faire une mesure de tension
et, à ce moment-là, on aura une variation de tension.
On sait que quand on a commencé la mesure, on avait la
tension de la pile, puisque le condensateur était connecté à la pile.
La valeur qu’on aura après une minute va
correspondre à ce delta U, cette différence de tension.
Or, on sait que la charge est égale à la capacité fois la différence de tension.
On sait aussi que le courant c’est la charge divisée par le
temps et on va pouvoir, ainsi, calculer cette consommation, calculer ce courant.
Et avec les mesures
que nous avons faites, on a pu en déduire un courant de l’ordre de 1 microampère, ce
qui est tout à fait convenable pour ne pas décharger trop rapidement la pile.
Alors on va se souvenir que la consommation dépend
de la tension et de la fréquence du processeur.
On se souvient aussi qu’il y a des modes d’endormissements,
plus ou moins partiels, du microcontrôleur pour passer en mode faible consommation Et
on a vu également quelques applications
et quelques trucs pour mesurer cette consommation.