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.