Nature Humaine (amocalypse)
Théorie>Electricité>Electronique>Microcontrôleurs
Première version: 03/07/2003
Dernière version: 2015-06-05
Sommaire de la page
L'électronique analogique montre vite ses limites dès lors qu'il s'agit de gérer les multiples informations issues des nombreux capteurs, ainsi que pour établir une loi de commande qui s'adapte aux multiples situations rencontrées. C'est pourquoi on utilise l'électronique numérique, indissociable d'un composant sous forme d'un CI, le micro-contrôleur (MCU). Ce microcontrôleur n'est rien d'autre que la version ultra miniaturisée que votre bon vieux PC, qui vous sert en ce moment à lire cette page (edit 2015, j'écrivais ça en 2003...) .
L'électronique analogique (traitée dans la page sur
l'électronique) travaille avec des tensions et des intensités, des
fréquences, etc... Toutes ces grandeurs peuvent prendre des valeurs qui
varient de façon continues, par exemple une tension varie de 1 à 5V, en
passant par les valeurs 2,1 V, puis 3,5 V, etc.
L'électronique numérique, lui, ne travaille qu'avec des valeurs
discrètes (par exemple, 1, 2, 3, ...). Ces valeurs sont codées sous
forme binaire, c'est à dire en utilisant uniquement les deux
chiffres 0 et 1 (par exemple, 1 est codé 0001, 2 est codé par 0010, etc.).
Physiquement, ces deux valeurs binaires se traduisent par un courant qui passe
ou qui ne passe pas, on dit encore On/Off (tension de 5V ou de 0V, en
électronique TTL).
Le microcontrôleur n'est pas un CI comme les autres, étant relativement fragile on évite de le souder, on l'insère sur un support, ce qui permet de le remplacer facilement. Ne peut être qu'alimenté par du 5V.
Il se trouve soit en boitier DIP 14 à 28, soit en boîtier PLCC (de forme carrée).
Je vous laisserais vous familiariser avec ces composants en allant voir ici.
Le MCU possède les éléments suivants, que l'on retrouve aussi dans un
ordinateur PC :
- La RAM (les données d'exécution),
- la ROM (le programme et les données de paramétrage fixées),
- l'EEPROM (données de paramètrages évolutives),
- la CPU ou microprocesseur (traitement des données à partir des instruction
du programme),
- le timer (base de temps interne, génère des signax ou compte des
évènements) et son chien de garde,
- les ports d'entrée/sortie,
- les interfaces séries synchrones (SPI) ou asynchrones (SCI ou UART),
- et enfin un convertisseur analogique/numérique.
Pour que le MCU fonctionne, il faut mettre dans sa ROM un programme (suite
d'instructions qui seront lues et exécutées par la CPU).
- On commence par taper le programme sur ordinateur (en langage évolué), puis
on le compile pour obtenir un programme en langage machine. Ce programme doit
tenir compte des performances du MCU et doit avoir une petite taille pour
rentrer dans la ROM du MCU.
- Quand le programme est écrit, on le teste à l'aide d'un simulateur
(ou émulateur), qui est un circuit électronique reproduisant en
temps réel le comportement du MCU que l'on utilisera par la suite.
L'ordinateur et son programme de débuggage permet donc de vérifier que tout
se passe correctement.
- Quand tout marche bien, on transfert alors le programme du PC au MCU. Pour
cela, on lance un programme sur PC, le caller, puis une fois que le
MCU est en mode écriture, on envoie le programme depuis le PC jusqu'à la ROM
du MCU.
La mémoire sert à enregistrer des données (programme ou cartographie) sous forme binaire (une suite de 0 et 1).
On distingue deux types de mémoires, la RAM et la ROM.
Les différentes dénominations portent sur les temps d'accès et la largeur
de bus (8 bits, 16 bits, etc.). Nécessite une mise sous tension pour conserver
des données.
* DRAM (RAM dynamique) plus rapide (temps d'accès de 60ns) mais nécessitant
un rafraîchissement régulier de l'information.
* SRAM (RAM statique)
Sert à stocker de façon indélébile les paramètres de base d'un
calculateur :
* le programme (suite d'instructions que devra effectuer le MCU)
* les calibrations (valeurs numériques des paramètres définis par les
instructions du programme).
La ROM n'est pas une mémoire volatile : son contenu n'est pas perdu en cas de
coupure de la tension d'alimentation du calculateur (débranchement
calculateur, débranchement de la batterie).
On distingue la mémoire ROM interne au microcontrôleur (elle n'est pas
indispensable) de la mémoire ROM externe.
Enfin, on distingue différentes technologies de mémoires mortes :
- la ROM,
- la PROM
- l'EPROM,
- l'EEPROM,
- la FLASH-EPROM.
Voyons en détails les caractéristiques de ces mémoires mortes.
Ce sont des circuits intégrés (à lecture seule) programmés une seule fois lors de la fabrication, sans effacement possible ultérieur. La programmation se fait au moyen d'un masque agissant sur les diodes ou des transistors, bipolaires ou MOS. Il faut de grandes quantités pour amortir le prix de revient élevé du masque. N'est pas utilisée par les électroniciens amateurs.
Ce sont des ROM programmables par l'utilisateur (à l'aide d'un programmateur). Elles sont achetées vierges : c'est l'utilisateur qui y inscrit son propre programme. Une fois programmées, elles ont le même usage que les ROM. Utilisées pour de faibles quantités. Reviennent plus cher par grosses quantités (pour un même programme) que les ROM programmées par le fabricant.
L'EPROM est une PROM qui se laisse effacer à l'aide de lumière ultraviolette (utilisation d'un brûleur, encore appelé effaceur ou prommer). S'il faut modifier le programme (pour par exemple adapter le calculateur de contrôle moteur à une nouvelle essence), on efface l'EPROM puis on le reprogramme avec les données modifiées (à l'aide d'un programmateur d'EPROM).
Utilisant la technologie des portes de silicium flottantes, ce sont des ROM dont la programmation, l'effacement partiel ou global s'effectue électriquement. De par son prix et sa faible intégration, l'EEPROM est très peu utilisée actuellement en grande série. Par contre elle est appréciée par les électroniciens amateurs.
Cette mémoire morte a pour caractéristique de pouvoir s'effacer
électriquement tout comme l'EEPROM.
Avantages de la FLASH-EPROM :
- La flash-eprom peut être effacée et reprogrammée sans la sortir du
circuit dont elle fait partie.
- Les temps de programmation et d'effacement sont très rapide (d'ou
leur préfixe : flash).
- Coût relativement bas en grande série.
Désavantages :
- la nécessité d'effacer toute la mémoire (pas d'effaçage
partiel)
Comparaison |
EPROM |
Flash-EPROM |
EEPROM |
Taille relative de la cellule |
1 |
1,2 à 1,3 |
3 environ |
Programmation |
programmateur |
à même le montage |
à même le montage |
Procédé |
Hot Electronic Injection |
Hot Electronic Injection |
principe tunnel |
Tension |
12,5 V |
12 V |
5 V (augmentation interne) |
Résolution |
Octet |
Octet |
Octet |
Durée |
<100 ms |
<10 ms |
5 ms |
Effacement |
effaceur à UV |
à même le montage |
à même le montage |
Procédé |
Lumière à U.V |
principe tunnel |
principe tunnel |
Tension |
12,5 V |
12 V |
5 V (augmentation interne) |
Résolution |
totalité de la puce |
totalité de la puce |
octet |
Durée |
15 mn |
1 s |
5 ms |
Tab. 1: tableau comparatif des caractéristiques des EPROM, FLASH-EPROM et EEPROM.
Fonctionnement de la mémoire
Physiquement, la mémoire est constituée de milliers de condensateurs ou de
bascules de type FLIP-FLOP.
Si un condensateur est chargé, le bit correspondant à ce condo à pour valeur
"1". S'il est déchargé, sa valeur est "0".
Un condensateur correspond à une case mémoire. Cette case
mémoire peut prendre seulement 2 valeurs, 0 ou 1.
Pour classer la mémoire afin de retrouver les informations, on utilise un
système d'adresse, comme pour la poste. Si on veut écrire à Mr Tartempion
dans la drôme, on indique sa ville (Valence), sa rue et son numéro
d'habitation. Pour une case mémoire c'est pareil, on donne le numéro de cette
case, c'est son adresse.
Pour le programmeur, cette adresse est en hexadécimal, et comme numéro
d'adresse on trouve des adresses comme 8000, 810C, etc... Quand on donne
l'adresse d'une case mémoire, le processeur est donc capable de s'y rendre et
de lire le contenu à cette adresse, ou encore d'écrire une nouvelle valeur à
cet emplacement mémoire.
24CXX indique des mémoires série. Le X8 trouvé dans les datasheets
indiquent uniquement que les données sont organisées en blocs de 8 bits.
Le XX indique le nombre de kbits, donc par exemple 24C64 indique une mémoire
de 64 kbit soit 8 ko. Eh oui, tout de suite ça le fait moins...
Les 24CXX sont des mémoires série.
La CPU est constituée de 3 blocs fonctionnels :
- L'accumulateur (les registres), qui est un assemblage de
bascules, et qui sont donc des mémoires pouvant contenir un nombre limité
d'informations ou de données, directement exploitables par
- l'Unité Arithmétique et Logique (UAL), c'est le bloc
fonctionnel capable d'exécuter un certain nombre d'opérations logiques (comme
le ET, le NON-OU, etc.), l'opération à réaliser étant fournie par
- le séquenceur, qui décode les instructions du programme en
opérations élémentaires compréhensibles par l'UAL.
En début d'opération, c'est l'accumulateur qui fournit l'UAL en données, et en fin d'opération (après traitement de la donnée par l'UAL suivant une opération élémentaire), c'est encore l'accumulateur qui reçoit la donnée résultante.
Encore une fois je vous renvoie à cet excellent site d'électronique,
e-lectronik, et sa page sur la CAN.
Ce qui est important c'est :
- la fréquence d'échantillonnage du signal (qui doit être
le double de la fréquence max du signal à échantillonner) qui doit permettre
de pouvoir redssiner fidèlement la courbe originelle juste avec quelques
points, et
- le nombre de bits du codage numérique, qui détermine avec
quelle précision sont placés les points.
Le MCU est une puce (circuit intégré) qui se place sur une carte électronique (le circuit imprimé), cette carte électronique permettant d'alimenter en +5V le MCU, de loger les mémoires supplémentaires (celles comprises dans le micro étant en générales insuffisantes pour contenir un programme digne de ce nom), de mettre en forme les signaux issus des capteurs pour que le signal soit compréhensible par le micro, de générer un signal d'horloge pour les MCU qui n'en possèdent pas une en interne, etc. Cette carte électronique, dans le cas de l'injection électronique, est appelée Calculateur. A noter que la tendance actuelle est de loger l'électronique de mise en forme des signaux à l'intérieur même du capteur (capteurs intelligents).
Normalement, le MCU n'est positionné sur la carte électronique qu'une fois que son programme est chargé en mémoire. C'est pour pourquoi, on utilise un circuit électronique spécial dédié à cette fonction, le programmateur (de MCU ou d'EEPROM suivant le type de MCU utilisé ou le type de mémoire contenant le programme).
Quand le programme est en mémoire, on place le circuit intégré dans le calculateur, et celui-ci est alors prêt à fonctionner. Comme les constructeurs automobiles lancent un modèle alors que celui-ci n'est pas totalement testé, ils font évoluer le programme de gestion de l'injection tout au long de la vie du véhicule. Ils s'arrangent alors pour le calculateur puisse aussi servir de programmateur, afin de modifier en douce (lors d'une vidange par exemple, sans le dire au client) le programme à l'intérieur du calculateur. Les à-coups que vous sentiez lorsque vous réaccélériez brutalement dans une côte à 30° pour une température de 34,3 °C avec la clim à fond auront alors disparus, parce que le programme prendra en compte ce point précis de fonctionnement en augmentant la richesse moteur par exemple.
Pour celui qui met au point un programme de son cru, il faut utiliser un
kit de développement pour MCU. Ce kit contient une partie
matérielle (l'émulateur), et une partie logicielle (le
compilateur et le débuggueur).
Le prix de ces kits de développement dépassant les 150 euros, ils sont
difficilement abordables pour l'électronicien amateur.
Un émulateur permet de remplacer physiquement le MCU sur
la carte dans laquelle il va fonctionner. C'est une carte électronique qui
possède une sortie (connection possédant le même nombre de pattes que le
MCU). On branche cette connection sur l'emplacement du MCU dans le calculateur.
L'émulteur possède physiquement toutes les fonctions du type de MCU que l'on
utilisera au final, mais il permet d'être contrôlé par l'ordinateur donc de
pouvoir lire à l'écran le contenu des mémoires, de placer des points
d'arrêts, etc.
Si l'émulateur est temps réel, il permet de faire
fonctionner le calculateur de la même façon que le fera plus tard le MCU
placé dans le calculateur : c'est ce qu'on appelle le mode
ISP (fonctionnement sur site).
Pour le particulier :
- Au niveau du logiciel, la solution la moins coûteuse (mais qui peut se
révéler très coûteuse en temps de développement), est de passer par les
compilateurs gratuits que l'on trouve sur internet, comme l'outils MPLAB mis à
disposition par Microchip pour développer sur les MUC PIC. Cet outil permet de
simuler sur PC le déroulement du programme sans avoir à le rentrer
préalablement dans le MUC.
- Au niveau matériel, l'acquisition d'un programmateur dédié au type de MUC
que l'on utilise reste indispensable (environ 60 €).
Pour les moins fortunés, on trouvera sur internet des circuits pour construire
son propre programmateur (voir plus bas, chapitre des PICs). Pour les MUC qui
ne s'écrivent qu'une seule fois (cas de moins en moins courant), on peut
utiliser un programmateur avec un simulateur d'EPROM, c'est à dire que l'on
écrit rapidement le programme sur une mémoire EEPROM ou Flash, et une fois
que l'on est sûr que le programme marche on l'écrit une fois pour toute dans
le MUC ou sur l'EPROM du calculateur.
Ensuite, en l'absence d'un émulateur, il faudra modifier le programme afin
qu'il permette de débugger sans utiliser d'émulateur (par exemple qu'il
envoie sur un port de sortie lu par l'ordinateur la valeur qu'il possède en
mémoire et dont on n'est pas sûr qu'elle soit bonne), ce qui va impliquer de
charger plusieurs fois la ROM contenant le programme. D'où l'intérêt d'avoir
un programme d'écriture sur MCU rapide.
Sur les MUC modernes, il est tout à fait possible de programmer la ROM du MUC situé sur la carte finale, en fonctionnement. Pour cela, soit on prévoit une broche de type RS232 à raccorder à un PC pour programmer le MUC, soit on prévoit des boutons sur l'application qui permettent de modifier l'EEPROM interne.
Aujourd'hui, il existe Arduino qui pour 25 euros vous offre la carte programmateur avec son microcontroleur, et l'EDI Arduino pour gérer ça les doigts dans le nez.
Cette carte contient le micro-controleur (mc), relié à diverses entrées et sorties (la prise USB, la prise d'alimentation externe si besoin (sinon la carte est alimentée par le port USB), les ports série et les diverses broches du mc).
Le format des sorties est fait de telle façon que d'autres cartes peuvent s'empiler sur le dessus, ces cartes additionnelles étant appelées des shields (boucliers en français). Par exemple, vous voulez un port ethernet pour faire du réseau, vous clipsez sur arduino un shield éthernet. Si vous voulez en plus échanger des données via bluetooth, vous clipsez sur le shield éthernet un shield bluetooth. On peut ainsi empiler les une sur les autres beaucoup de cartes / shields.
Un programme binaire est envoyé depuis le PC par le port USB dans la mémoire du microcontroleur, zone de mémoire appelée bootloader. Quand le mc est alimenté, il détecte d'abord s'il est en mode chargement d'un nouveau porgramme d'exécution, sinon il va lancer le programme déjà écrit dans le bootloader.
L'arduino peut communiquer avec d'autres mc via un port I2c ou un port série. Il peut communiquer avec l'ordinateur via son port USB, son port série ou le bluetooth. Avec l'utilisateur via des shields écrans (certains en couleur et tactiles comme ceux des portables) et des claviers.
Mais à mon sens, s'il faut utiliser des périphériques d'entrée ou sortie il faut utiliser les capacités des smartphones ou tablettes android, qui peuvent communiquer via USB ou bluetooth avec l'Arduino en utilisant les programmes de communication Arduino sur android. En gros, Arduino récupère les informations de divers capteurs, les mets en forme voir fait un prétraitement, puis envoit tout ça à un ordinateur/tablette/smartphone pour que ce dernier, avec ses capacités de traitement plus importantes, finalise l'exécution et présente le tout dans une interface homme-machine plus conviviale.
Aller dans la logithèque Ubuntu, taper "Arduino" et cliquer sur installer. Le programme est installé. On peut développer un nouveau programme (appelé croquis par la suite), le compiler et l'envoyer par le port USB dans le bootLoader du microcontroleur.
Cet EDI est aussi relié via l'USB au port série du micro-controleur, on peut récupérer dans le simulateur série de l'EDI (installé sur le PC) les données envoyées par le microcontroleur, afin de les afficher par exemple pour les tests.
Brancher l'Arduino sur une prise USB du PC. La led d'arduino s'allume. Ouvrir l'EDI Ardino, aller dans port, sélectionner le port proposé.
Taper le croquis. Cliquer sur la flèche verte, le croquis est compilé, et s'il n'y a pas d'erreurs, le programme est envoyé dans le bootloader Arduino, puis exécuté.
Il y a la déclaration des variables et constantes globales, la fontion setup() et la fonction loop() qui boucle sur elle-même.
La plupart des montages sur internet utilisent un PIC 16F84 de Microchips.
Ce dernier, bien que peu puissant par rapport au 68HC11 de Motorola, à
l'avantage d'être 2 fois moins cher, et de suffire dans la plupart des
applications recherchées.
Le PIC 16F628 est amené à terme à remplacer le PIC 16F84. Il faut effectuer
quelques modifications de montage et de programmation pour adapter un montage
prévu pour un 84 à un 628 (les deux ont le même brochage).
Coûtant le même prix qu'un PIC 16F84, le PIC 16F628 est bien plus
performant.
PIC 16F628-20/P
PIC c'est le nom commercial des microcontrôleurs fabriqués par l'entreprise
"Microchips".
-20 c'est à dire que le MCU peut fonctionner jusqu'à 20 MHz.
Le moyen le plus simple est d'utiliser un port facilement accessible : les
ports ISA et PCI sont donc à banir. De plus ces ports nécessite la
programmation d'un driver : compliqué. Il reste donc le port parallèle,
série et USB. Le port parallèle semble être un bon port pour faire de
l'électronique mais depuis Windows XP il n'est pas accessible directement. Un
autre inconvénient est que si l'on veut utiliser les protocoles du port
parallèle il nous faut connecter une bonne dizaine de fils ce qui augmente le
risque d'erreur et n'est pas pratique pour l'expérimentation.
Enfin, il nous reste le port USB et le port Série. Le port USB est aussi très
compliquer (les périphériques doivent s'authentifier et le protocole est
assez complexe). De plus ce port nécessite encore la creation d'un driver.
Le seul port qu'il nous reste est donc le port série. Cela tombe bien car
celui ci est parfait pour l'expérimentation. D'abord il y a l'hyperterminal
qui permet de communiquer facilement avec le port série et en plus le port est
facile à programmer (voir « liaison entre PC et PIC avec le port série » et
« brochage du port série du PC »). Sa seule limite est le nombre de port
(seulement 2) et la vitesse (max 11Ko/s) mais qui n'est pas critique vu la
vitesse des pics.
Transistor = faibles intensités (celles utilisées en électronique).
Thyristor = fortes intensités (constitué de 2 triacs tête bêche)
Relais (très fortes puissances).
1 Programmateur
1 microcontroleur
1 régulateur 5V
On peut trouver dans le commerce les livres suivants :
Les liens internet sont foison :
- Docs sur l'apprentissage des PICs : Un des meilleure formation sur le 16f84 reste encore le manuel de BIGONOFF, une page de pdf qui est bien structurée et relativement simple pour débuter .
- Brochage d'un PIC 16F84 avec un oscillateur externe XT (mode d’oscillation du PIC à partir d’un oscillateur externe) : soit dans les data books, soit dans http://www.jdm.homepage.dk/newpic1.htm
à suivre...