[AUDIO_VIDE] Bonjour. Allumer et éteindre une LED ou plusieurs LED dans le cadre d'enseignes ou d'afficheurs, c'est bien ; faire varier leur intensité, c'est encore mieux. C'est notre sujet. Nous allons découvrir le principe de cette modulation de largeur d'impulsion. Nous allons regarder quelle fréquence utiliser. Nous allons évidemment apprendre à la programmer. Ensuite nous regarderons comment utiliser cette modulation de largeur d'impulsion pour faire de la conversion numérique analogique, et finalement nous regarderons comment les circuits logiques peuvent nous aider à produire les signaux. Donc la question c'est : comment faire varier l'intensité d'une LED? Bien entendu, nous connaissons ce montage avec une LED et une résistance en série. Pour faire varier l'intensité lumineuse avec une résistance fixe, on peut utiliser une tension variable. On peut aussi garder la tension fixe, ce qui sera plus pratique, et alors faire varier la résistance, mais ça c'est compliqué. Il existe des techniques plus évoluées que les électroniciens connaissent. Ici on va utiliser un transistor pour faire une source de courant et cette résistance va fixer le courant dans la charge du collecteur, quelle que soit la charge en quelque sorte. Mais toutes ces solutions sont compliquées et je vois mal comment on pourrait les utiliser par exemple avec un afficheur qui a des milliers de diodes lumineuses. Il faut trouver une autre solution, et peut-être que cette solution va tout simplement venir du tout premier programme que vous avez écrit avec un microcontrôleur. Souvenez-vous, le programme qui faisait clignoter une LED. Si nous la faisons clignoter beaucoup plus rapidement, notre oeil ne verra plus le clignotement mais percevra une baisse d'intensité. Essayons d'être encore un petit peu plus astucieux. Nous allons bien avoir : allumé, éteint, allumé, éteint de manière périodique, mais nous allons faire varier le temps pendant lequel le signal est actif. Ici on est à peu près à 50 % du temps actif, 50 % du temps inactif, ici on était à 25 %, ici à 75 %. On a donc bien la période qui est ici et la largeur des impulsions qui est là . Alors on voit bien que la largeur des impulsions va varier. Donc le principe de ce système, c'est bien de la modulation de largeur d'impulsion, en anglais, Pulse Width Modulation, PWM. À quelle fréquence devons-nous pratiquer cette modulation de largeur d'impulsion? Dans les applications électroniques, les fréquences peuvent être extrêmement différentes de quelques hertz à quelques dizaines de mégahertz, voire davantage. Pour les applications visuelles, l'oeil a une fréquence limite de perception du clignotement qui est approximativement à 75 hertz. On peut se souvenir de cette valeur en pensant qu'un tube fluorescent alimenté à une tension électrique sinusoïdale de 50 hertz produit un clignotement de 100 hertz, et il n'est pas trop dérangeant. C'est d'ailleurs souvent cette fréquence de 100 hertz qu'on va utiliser dans les enseignes et afficheurs à LED. Je signale juste qu'à l'intérieur de notre oeil, les cônes et les bâtonnets n'ont pas la même fréquence limite et que si on peut monter au-delà de 100 hertz, jusqu'à 200, voire 300 hertz, on a une meilleure qualité visuelle. Alors comment fait-on pour programmer des signaux PWM avec un microcontrôleur? Eh bien fondamentalement il faut allumer, attendre, éteindre, attendre, et bien entendu répéter. Voilà comment peut se présenter un programme. On initialise la sortie, on va régler la valeur du PWM ici à 25 %. Bien sûr cette valeur dans un programme plus complexe pourra changer en cours du temps. Et dans la boucle principale, on va allumer la LED, attendre un certain délai, 100 fois PWM Led, donc ici 100 fois 25. On va éteindre la LED, et pendant le solde de la période, c'est-à -dire 100 fois 100 moins cette variable, on va donc éteindre la LED, et on répète dans la boucle loop. Il est clair qu'il n'y a pas qu'une seule LED dans une enseigne ou dans un afficheur à LED. Comment programmer plusieurs signaux PWM en même temps? Eh bien ça peut être extrêmement compliqué. Si la boucle principale dure un période complète du PWM comme nous venons de le faire, c'est quasiment impossible. Ce sera plus facile en tout cas si la boucle principale dure le temps de la plus courte impulsion possible du PWM. Regardons un peu le programme suivant. Il est assez similaire au précédent. Ici nous avons fixé des valeurs non pas en pourcents mais en 256e de la période. Ici j'ai mis 64 qui correspond bien toujours à 25 %. On a une boucle qui dure systématiquement un certain temps, ici 39 microsecondes, et on va lorsque ce compteur est à 0, allumer la LED et lorsque ce même compteur arrive à la valeur demandée, nos 25 %, on éteint la LED. Remarquez ici que notre compteur a été seulement incrémenté parce que c'est un compteur 8 bits et qu'il va automatiquement passer de 255 à 0 à la fin de son cycle. Comment utiliser ce PWM? Eh bien dans nos enseignes et afficheurs, nous allons créer des séquences. Prenons maintenant un exemple plus simple qui imite simplement le repos avec une seule diode lumineuse. Pour imiter le repos, on va prendre donc la respiration. On inspire, on expire, puis il y a une zone de repos. Remarquez ici l'échelle, 4 secondes pour la durée totale. Alors ne nous trompons pas, on va bien le faire en PWM. Par exemple ici lorsque le PWM aura environ 25 %, on aura ce type de signal. Ici on aura 75 %, ce type de signal. À 50 %, on voit que les deux parties de la période sont égales. Lorsque l'intensité est nulle, on a 0, lorsque l'intensité est maximale, on a 1. Nous allons reprendre le programme de tout à l'heure. Souvenez-vous que nous avions un délai fixe dans la boucle. Nous avons l'enclenchement, le déclenchement du PWM, et maintenant en fonction du temps, ce temps, ce sera un compteur de cycles, le cycle étant de 10 millisecondes, en fonction de ce compteur, on va calculer. Ici c'est une droite montante, ici c'est une droite descendante, et pour le reste du cycle, c'est une valeur nulle. On a donc bien comparé à la valeur 100 qui correspond à une seconde à 100 hertz, à la valeur 200, et la valeur 400 correspond à tout le cycle, et une remise à 0 à la fin des 4 secondes. Ce système nous a permis de transmettre vers l'extérieur avec une seule patte numérique d'un microcontrôleur une valeur analogique. On a en quelque sorte créé un convertisseur numérique analogique. Si nous prenons l'intégrale de ce signal PWM, on voit qu'on va monter ici, descendre, on est stable. Si le PWM a une valeur plus faible, on va descendre, si le PWM a une valeur plus élevée, on va monter. Donc je rappelle, c'est bien une intégrale ici qu'on a produite, qu'on peut réaliser très simplement avec un condensateur et avec une résistance. On peut donc sortir une tension variable de notre microcontrôleur grâce à ce PWM, et donc un filtre dit passe-bas, qu'on peut réaliser par exemple avec une résistance et un condensateur. Vous avez vu que c'est déjà un peu compliqué de gérer de la modulation de largeur d'impulsion sur une sortie d'un microcontrôleur. Comment devra-t-on le faire si on a beaucoup de sorties? Il faudrait pouvoir soulager le microcontrôleur d'une partie du travail. Eh bien on va pouvoir le faire avec des circuits logiques spécialisés. Regardons ce shéma. À son centre, nous avons un compteur, ici un compteur 8 bits. S'il est piloté par un oscillateur, il va donc prendre au cours du temps les valeurs successives 0, 1, 2, 3 jusqu'à 255. Ici nous avons un élément qui est un détecteur de zéros. On va activer la sortie lorsque le compteur sera à 0, et on va justement d'ailleurs mettre à 1 une bascule à cet instant, c'est-à -dire au début du cycle. Ici nous avons un montage un petit peu plus compliqué avec un comparateur d'égalité entre la valeur d'en haut et la valeur d'en bas. Cette valeur d'en bas étant mise dans un registre, ce sera notre valeur du PWM, par exemple les fameux 64 qui représentaient le 25 %, et quand on sera donc égal à 64, on aura un reset. Vous voyez bien qu'on a créé du PWM par ce moyen. Peut-être que ce diagramme des temps va vous aider. Notre compteur compte de 0 à 255, puis revient à 0 et continue. À 0, on met la sortie à 1. À 25 % ou plus exactement à la valeur du PWM, on remet la sortie à 0, et on voit bien qu'on a généré un signal du type PWM. Pensez-vous que je sois sérieux en vous disant qu'on va commencer à prendre un compteur, un comparateur, un oscillateur et tout ça pour réaliser ce PWM? En fait, ces circuits se trouvent à l'intérieur des microcontrôleurs. On les appelle des timers, et c'est un sujet que nous allons étudier plus tard dans ce cours. Nous avons donc vu le principe du PWM, nous avons vu que pour les applications visuelles il fallait une fréquence supérieure à 100 hertz, nous avons regardé comment programmer ce PWM, et nous avons vu que c'était un peu compliqué, nous avons vu comment appliquer ce PWM à des convertisseurs numériques analogiques et finalement nous avons vu qu'il est possible d'avoir des circuits spécialisés qui sont aujourd'hui inclus dans les microcontrôleurs pour produire du PWM.