Un microcontrôleur (en notation abrégée µc, ou uc ou encore MCU en anglais) est un circuit intégré qui rassemble les éléments essentiels d'un ordinateur : processeur, mémoires (mémoire morte et mémoire vive), unités périphériques et interfaces d'entrées-sorties. Les microcontrôleurs se caractérisent par un plus haut degré d'intégration, une plus faible consommation électrique, une vitesse de fonctionnement plus faible (de quelques mégahertz jusqu'à plus d'un gigahertzPar exemple, le PIC10F200 de Microchip fonctionne à , le LPC 3131 de NXP fonctionne à .) et un coût réduit par rapport aux microprocesseurs polyvalents utilisés dans les ordinateurs personnels.

Par rapport à des systèmes électroniques à base de microprocesseurs et autres composants séparés, les microcontrôleurs permettent de diminuer la taille, la consommation électrique et le coût des produits. Ils ont ainsi permis de démocratiser l'utilisation de l'informatique dans un grand nombre de produits et de procédés.

Les microcontrôleurs sont fréquemment utilisés dans les systèmes embarqués, comme les contrôleurs des moteurs automobiles, les télécommandes, les appareils de bureau, l'électroménager, les jouets, la téléphonie mobile, etc.

Introduction : le domaine visé, les systèmes embarqués

La plus grande partie des systèmes électroniques complexes utilisés de nos jours sont des systèmes embarqués : téléphones mobiles, horloges, baladeurs, récepteurs GPS, électroménager, automobile, transport aérien/maritime/fluvial. Les systèmes embarqués se démarquent des systèmes informatiques traditionnels selon plusieurs aspects : Ils sont soumis à des contraintes de taille (intégration), de consommation électrique (autonomie) et de coût importants (grande série) ; Ils sont en général affectés à une tâche bien précise. La taille des programmes et la quantité de mémoire (vive et morte), dont ils disposent, sont modestes (face à un micro-ordinateur) ; Ils doivent communiquer avec des dispositifs d'entrées-sorties (IO) : boutons, relais, résistances variables, optocoupleurs, moteurs électriques, LED, circuits intégrés logiques, etc. ; Ils n'ont parfois aucun dispositif d'interface homme-machine : ni clavier, ni écran, ni disque, ni imprimante, etc. Par exemple, le contrôleur d'injection de carburant du moteur d'une automobile est totalement invisible pour le conducteur.

Du microprocesseur au microcontrôleur

Le processeur est l'élément central d'un système informatique : il interprète les instructions et traite les données d'un programme. Il a besoin de certains éléments externes pour fonctionner : une horloge pour le cadencer (en général à quartz ou Boucle à verrouillage de phase (PLL : Phase-Locked Loop)) ; de la mémoire pour stocker les variables durant l’exécution du programme (mémoire vive RAM) et le programme d’une mise sous tension à l’autre (mémoire morte ROM). Si l'on conçoit un système affecté à une tâche bien particulière (ce qui est généralement le cas des systèmes embarqués), le programme n'est pas amené à changer. Il peut donc être stocké dans une mémoire morte (ROM) ; des périphériques (pour interagir avec le monde extérieur).

Ces éléments sont reliés par 3 bus : le bus d'adresse qui permet au microprocesseur de sélectionner la case mémoire ou le périphérique auquel il veut accéder pour lire ou écrire une information (instruction ou donnée) ; le bus de données qui permet le transfert des informations entre les différents éléments ; ces informations seront soit des instructions, soit des données en provenance ou à destination de la mémoire ou des périphériques ; le bus de contrôle qui indique si l'opération en cours est une lecture ou une écriture, si un périphérique demande une interruption pour faire remonter une information au processeur, etc.

Traditionnellement, ces composants sont intégrés dans des circuits distincts. Le développement d'un tel système à base de microprocesseur se trouve donc pénalisé par (liste non exhaustive) : la nécessité de prévoir l'interconnexion de ces composants (bus, câblage, nappes de connexion) ; la place occupée physiquement par les composants et les moyens d'interconnexion ; la consommation énergétique ; la chaleur dégagée ; le coût financier.

Les microcontrôleurs améliorent l'intégration et le coût (lié à la conception et à la réalisation) d'un système à base de microprocesseur en rassemblant ces éléments essentiels dans un seul circuit intégré. Un microcontrôleur est donc un composant autonome, capable d'exécuter le programme contenu dans sa mémoire morte dès qu'il est mis sous tension. Selon les modèles et les conditions de fonctionnement, les microcontrôleurs peuvent avoir besoin de quelques composants externes (quartz, quelques condensateurs, parfois une ROM), mais ceci reste très limité.

Lorsque toutes les fonctions du système informatique sont regroupées dans un unique circuit intégré, y compris les fonctions logiques, analogiques, radiofréquence, d'interface (USB, Ethernet, etc.), on parle alors de SoC (System on Chip ou système sur puce ou système mono-puce). Ces composants sont basés sur un ou plusieurs cœurs de microcontrôleur, microprocesseur, processeur graphique, DSP, contrôleur de périphériques, etc.

Composants intégrés

Un microcontrôleur intègre sur un unique die : un processeur (CPU), avec une largeur du chemin de données allant de pour les modèles les plus basiques à 32 ou pour les modèles les plus évolués ; de la mémoire vive (RAM) pour stocker les données et variables ; de la mémoire morte (ROM) pour stocker le programme. Différentes techniques peuvent être employées : EPROM, EEPROM, mémoire flash (la plus récente) ; souvent un oscillateur pour le cadencement. Il peut être réalisé avec un quartz, un circuit LC ou encore une PLL ; des périphériques, capables d'effectuer des tâches spécifiques. On peut mentionner entre autres : les convertisseurs analogiques-numériques (CAN) (donnent un nombre binaire à partir d'une tension électrique), les convertisseurs numériques-analogiques (CNA) (effectuent l'opération inverse), les générateurs de signaux à modulation de largeur d'impulsion (MLI, ou en anglais, PWM pour Pulse Width Modulation), les timers/compteurs (compteurs d'impulsions d'horloge interne ou d'événements externes), les chiens de garde (watchdog), les comparateurs (comparent deux tensions électriques), les contrôleurs de bus de communication (UART, IC, SSP, CAN, FlexRay, USB, etc.).

Le fonctionnement des périphériques peut être paramétré et commandé par le programme et/ou les entrées-sorties. Les périphériques peuvent générer une interruption qui contraint le processeur à quitter le programme en cours pour effectuer une routine de traitement de l’interruption, lorsque l’événement qui la déclenche survient.

Les microcontrôleurs peuvent généralement se placer dans un état de sommeil, dans lequel ils présentent une très faible consommation électrique. Un signal envoyé par l'un de leurs périphériques (timer, broche d'entrée-sortie, watchdog, etc.) permet de les faire sortir de cet état de sommeil.

Certains microcontrôleurs ont un nombre très restreint de broches, si bien qu'une broche donnée peut correspondre à plusieurs périphériques internes. La fonction choisie doit alors être sélectionnée par logiciel.

Le choix des périphériques à intégrer dans un microcontrôleur est délicat. Les fabricants doivent réaliser un compromis entre des besoins contradictoires : utiliser des fréquences élevées, réduire la taille du circuit, apporter des fonctionnalités nombreuses, élaborer une architecture flexible, assurer des coûts modérés, etc.

Architecture

Un microcontrôleur peut effectuer la plupart des instructions machine habituelles, avec certaines restrictions liées à son caractère embarqué (taille restreinte des mots machine, petite taille disponible, etc.). On note cependant quelques particularités.

Les capacités mathématiques sont en général particulièrement limitées, réduites à des additions, soustractions et décalages sur des octets pour les plus simples d'entre eux. Les calculs mathématiques évolués doivent donc être ramenés à une succession d'opérations simples portant seulement sur des octets. Des routines mathématiques (petits programmes permettant de réaliser les calculs complexes) ont été développées pour la plupart des microcontrôleurs populaires.

Les instructions d'entrée-sortie sont bien développées, de façon à pouvoir : lire l'état d'un port d'entrée ; écrire une information dans le registre d'un port de sortie, qui maintient l'information à la disposition des circuits extérieurs.

Les microcontrôleurs disposent généralement de nombreuses instructions destinées aux opérations sur les bits, de façon à rendre les programmes plus compacts, notamment lorsqu'ils agissent sur une entrée-sortie donnée. Ainsi, un processeur généraliste peut avoir besoin de plusieurs instructions pour tester la valeur d'un bit d'un registre et effectuer un saut si le bit vaut vrai. Cette fonction courante est assurée par une seule instruction dans certains microcontrôleursPar exemple, l'instruction BTFSS (« bit test file, skip if set ») sur PIC permet d'ignorer l'instruction suivante si un certain bit d'un registre est à 1.

Les modes d'adressage utilisables sont en général semblables à ceux des autres processeurs.

De façon générale, les instructions et modes d'adressage disponibles varient fort selon les familles de microcontrôleurs.

Certains microcontrôleurs suivent une architecture HarvardPar exemple les PIC et les AVR. : ils possèdent des bus séparés pour la mémoire de programme et la mémoire de données, ce qui permet aux accès d'avoir lieu en même temps (on parle d'accès concurrent). Lorsqu'on utilise une architecture Harvard, les mots de programme peuvent avoir une largeur (nombre de bits) différente de celle des mots de la mémoire de données et des registres. Par exemple, il peut y avoir des instructions de et des registres de données de .

Utilisations et volume du marché

Les microcontrôleurs sont très utilisés dans tous les systèmes embarqués évoqués en introduction. Ils sont également très prisés en robotique amateur (robots autonomes) et en modélisme (automatismes des maquettes de réseaux ferroviaires par exemple).

Les microcontrôleurs représentent la plus grosse partie des ventes dans le marché des microprocesseurs. En effet, un foyer moyen d'un pays développé est susceptible d'être équipé de seulement un ou deux microprocesseurs généralistes (ordinateurs), mais d'une ou deux douzaines de microcontrôleurs (appareils électroménagers). Une automobile de milieu de gamme est équipée d'au moins 50 microcontrôleurs.

Les fabricants proposent souvent des versions spéciales de leurs microcontrôleurs pour faciliter le développement matériel et logiciel des applications. Par exemple, lorsque les mémoires mortes utilisées étaient des EPROM, il existait des variantes des microcontrôleurs équipées de fenêtres sur le dessus, qui permettaient d'effacer le programme grâce à de la lumière ultraviolette. Ceci permettait de recommencer une programmation après un cycle programmation-test.

Pour de petites séries (quelques milliers d'unités ou moins), les microcontrôleurs programmables une seule fois (OTP, one-time programmable) sont économiques. Ils sont basés sur la même puce que la version UV-EPROM, se programment avec le même matériel, mais le boîtier n'est pas équipé de la fenêtre qui permet l'effacement (et qui est onéreuse).