Microcontrôleur – Chapitre 3 – Les périphériques

Les entrées/sorties

La plupart des broches d’un microcontrôleur (en général toutes, sauf GND, VCC et RESET) ont comme comportement par défaut la possibilité d’être utilisée comme entrée ou sortie numérique.

On parlera des I/O (ou GPIO pour General Purpose Input/Output) ou E/S en français. Ces broches sont rassemblées communément par port. Il y a souvent plusieurs ports par microcontrôleur, et leurs broches ne sont pas nécessairement côte-à-côte.

Ces I/O sont accessibles au travers de plusieurs registres ; rassemblés par port. On trouve principalement les registres suivants :

  • le registre de direction, où on indique dans quelle direction est utilisé la broche (entrée ou sortie)
  • le registre de sortie, où on peut écrire l’état souhaité d’une broche
  • le registre d’entrée, qui permettra de lire les états des broches d’un port

Il est possible de définir une interruption lors du changement d’état sur un port, ce qui permet au développeur de ne pas avoir à surveiller l’état des broches en permanence.

Il convient de réfléchir néanmoins au projet que l’on souhaite créer en utilisant les I/O, car presque toutes les broches ont des fonctions cumulées, c’est à dire qu’une broche en particulier peut servir d’I/O mais aussi faire partie d’un bus de communication, une autre peut être une entrée analogique, etc.

La réduction de la taille des microcontrôleurs poussent les constructeurs à faire des sacrifices ; et il existe des alternatives, que l’on verra surement plus tard, qui permettent d’étendre les ports.

Les compteurs

Pièce maitresse de nombreux mécanismes au sein d’un microcontrôleur, le compteur (parfois appelé timer) est un outil puissant qui se contente d’incrémenter un registre (ou plusieurs) et de déclencher une interruption à partir d’un certain seuil. Selon les microcontrôleurs, vous trouverez des compteurs de 8bit, 16bit ou autres, avec généralement les paramètres suivant :

  • le seuil ; c’est à dire le moment ou le microcontrôleur va déclencher l’interruption
  • la valeur de départ
  • le sens (descendant ou montant)
  • le diviseur ; qui permettra de définir des compteurs plus long en terme de cycle (par un exemple un incrément n’aura lieu que tous les 64 ou 1024 cycles). Ceci permet de ralentir un compteur pour permettre de passer du MHz au kHz voire en dessous pour de multiples applications (créer des sons, des effets visibles à l’œil donc inférieurs à 25Hz, …).
  • le mode (en montée, en montée puis descente, etc.)

Ainsi, avec un processeur cadencé à 1Mhz, si je configure un compteur 16bit pour déclencher une interruption dès qu’il atteint 976, lorsque son diviseur est à 1024, j’obtiendrai une interruption au bout d’une seconde.

Ces paramètres dépendent fortement du constructeur et du modèle de microcontrôleur utilisé, et comme beaucoup d’autres concepts, il est obligatoire de disposer de la documentation.

Les convertisseurs analogique vers numérique

Souvent abrégé CAN en France (à ne pas confondre avec le bus CAN), on parle d’Analog to Digital Converter en anglais (ADC). Il s’agit d’un montage dont le but est d’approximer une grandeur sur une échelle de taille déterminée.

Par exemple, un convertisseur de résolution 10bit pourra donner une valeur entre 0 et 1023. Si je cherche à mesurer une tension entre 0V et 5V, j’aurai une précision au mieux de 4,88mV. Aussi, si la valeur réelle est de 3,82V, j’obtiendrai un résultat de 782 ce qui équivaut en réalité à 3,818V.

La conversion est un processus qui demande beaucoup de cycles pour être précise. Il existe plusieurs méthodes de conversion (je ne vais pas les détailler) et chaque microcontrôleur va pouvoir réaliser un certain nombre de conversions en un temps donné, avec une résolution donnée. On parlera ici d’échantillon (sample en anglais). Par exemple, un convertisseur peut fournir 15ksps avec une résolution de 12bit, soit 15000 échantillons par seconde, chacun compris entre 0 et 4095. Mais dans le cas d’une conversion avec une résolution de 16bit, la vitesse peut être de 1ksps.

Dans la pratique, il s’agira de configurer la conversion, de la lancer, puis d’attendre une interruption (ou une valeur particulière dans un registre) pour ensuite lire la valeur obtenue.

Les convertisseurs numérique vers analogique

On parlera plus communément de PWM (Pulse Width Modulation, soit Modulation de largeur d’impulsion). Ce mécanisme va permettre d’obtenir une pseudo-valeur de tension analogique depuis une valeur numérique.

Pourquoi pseudo ? Parce qu’en réalité le microcontrôleur ne peut fournir que la masse GND (0V communément), ou la tension d’alimentation VCC (par exemple 5V). Donc quand on utilisera un PWM, pour obtenir 1V, on devra faire en sorte qu’une impulsion sur cinq soit à VCC tandis que les autres seront à GND.

Pour faciliter la configuration, les sorties PWM sont liées à des compteurs (parfois plusieurs sorties sur un même compteur), les paramètres sont donc similaires, mais on peut en ajouter quelques uns :

  • seuil de bascule ; le moment ou la sortie PWM passera de GND à VCC ou vice versa
  • le mode (à compteur triangulaire ou en dent de scie, …)

Il est important de garder en tête que le signal PWM tel qu’obtenu reste un signal numérique, et qu’il peut atteindre une tension égale à celle qui alimente le microcontrôleur. Afin d’éviter d’endommager des composants sensibles (par exemple un composant qui ne supporterait une tension que d’1.5V alors que le microcontrôleur est alimenté en 5V), il peut être nécessaire de filtrer la sortie (avec un montage R/C) pour passer d’une tension en créneaux à une courbe plus juste.

On peut également isoler galvaniquement les circuits (c’est à dire qu’il n’y a aucun contact électrique entre alimentation et pilotage) ; il faudra cependant ajouter une alimentation indépendante du microcontrôleur, mais ceci permettra d’obtenir des tensions bien différentes (piloter du 12V depuis un circuit 5V).

Les comparateurs

Il n’y a pas de démystification à faire ici, puisqu’un comparateur se contente de comparer deux entrées analogiques, sans nécessairement les mesurer.

Il suffit de lier un circuit analogique avec une masse commune à chaque du comparateur (variateur, photorésistance, capteur analogique, …), il sera alors possible de lire directement dans un registre quel circuit délivre la plus grande tension.

Il est également possible de déclencher une interruption sur un changement d’état.

L’interruption RESET

La plupart des microcontrôleurs (et beaucoup de circuits intégrés) dispose d’une broche RESET. Celle-ci, comme son nom l’indique, permet de réinitialiser l’appareil.

Si on applique la masse à cette broche, alors on déclenche la réinitialisation ou un état particulier (écoute de la programmation en SPI par exemple).

Le chien de garde

Ce mécanisme, appelé Watchdog en anglais, permet de s’assurer qu’un microcontrôleur n’est pas figé. Le concept est simple ; lorsque le chien de garde « surveille » l’exécution, un registre doit être mis à jour avant un certain délai continuellement. Si une période trop longue s’écoule sans mise à jour, le watchdog va lever une interruption.

La plupart du temps, il va s’agir de redémarrer le microcontrôleur comme un RESET. Il est possible de changer ce comportement (par exemple forcer l’arrêt d’un moteur en cas de défaut du programme avant le redémarrage, ou allumer une diode d’erreur), et de faire varier le délai d’alerte (par exemple 60ms, 250ms ou 8s).

Les autres périphériques

Si on monte en gamme, on peut trouver au sein du microcontrôleur des fonctionnalités plus pointues comme :

  • un superviseur d’alimentation
  • un thermomètre
  • une horloge temps-réel (RTC)
  • un générateur de fréquences
  • une unité de chiffrement
  • une unité de signature

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*