Chapitre 11
MICROPROCESSEURS,MICROCONTROLEURS ET PERIPHERIQUES (partie 4/4)
Lecture : 16 minQuiz de 10 questions
## Objectifs et prérequis
À l’issue de ce cours, l’élève sera capable de :
- Identifier les différents types de périphériques d’entrée/sortie (écran LCD, console d’entrée clavier‑matrice) utilisés avec un microcontrôleur.
- Réaliser le câblage physique et logique d’un périphérique d’entrée/sortie sur une carte de développement (ex. Arduino Uno, STM32F103) en respectant les broches d’alimentation, de données et de commande.
- Écrire un programme de base en langage C/Arduino qui initialise le périphérique, lit ou écrit des données et gère les interruptions éventuelles.
- Appliquer les normes de sécurité électrique (isolement, protection contre les surtensions) et d’hygiène (manipulation sans décharge électrostatique) lors du raccordement d’équipements biomédicaux (capteurs de pression, oxymètres de pouls).
- Réaliser le câblage d’interfaces standards (UART, SPI, I²C, USB) entre un microcontrôleur et un dispositif médical, en choisissant le niveau logique adapté (3,3 V/5 V) et en insérant les résistances de tirage ou les convertisseurs de niveau nécessaires.
- Rédiger un rapport de TP comprenant le schéma de câblage, la liste des composants, les mesures de tension/courant relevées et les observations de fonctionnement.
**Prérequis** :
- Notions de base en électronique numérique (portes logiques, bascules, bus de données).
- Connaissance des architectures microcontrôleur (CPU, mémoire, périphériques internes).
- Maîtrise du langage de programmation C ou de l’environnement Arduino IDE.
- Notions de sécurité électrique (tension de service, courant de fuite, mise à la terre).
---
## Introduction
Dans les systèmes embarqués modernes, le microcontrôleur constitue le « cerveau » qui échange des informations avec le monde extérieur par l’intermédiaire de périphériques d’entrée/sortie (I/O). Au Cameroun, les techniciens supérieurs en électronique sont souvent amenés à intégrer des écrans d’affichage dans des tableaux de bord industriels, à connecter des claviers matriciels pour des systèmes de contrôle d’accès, ou encore à interfacer des capteurs biomédicaux (oxymètre, tensiomètre) avec des unités de acquisition de données destinées aux hôpitaux de référence. Ce chapitre propose deux travaux pratiques qui mettent en scène ces situations réelles : le raccordement d’un périphérique d’entrée/sortie classique (écran LCD 16×2 ou console d’entrée clavier‑matrice 4×4) et la connexion d’interfaces destinées aux équipements biomédicaux, en insistant sur le respect des normes de sécurité et d’hygiène.
---
## I. Leçon21 : TP – Raccordement d’un périphérique d’entrée/sortie (écran, console d’entrée)
### 1. Présentation du périphérique
**Écran LCD 16×2** : affiche 2 lignes de 16 caractères chacun, communique généralement en mode 4‑bits via le bus de données D4‑D7, avec les lignes de commande RS (register select), E (enable) et RW (read/write, souvent fixé à GND pour écriture seule).
**Console d’entrée clavier‑matrice 4×4** : 16 touches organisées en 4 lignes et 4 colonnes ; la lecture se fait par balayage (scan) des lignes tandis que les colonnes sont lues en entrée.
> **> À retenir** : Le LCD 16×2 utilise un contrôleur Hitachi HD44780 (ou compatible) qui exige une séquence d’initialisation précise (fonction set, display on/off, clear, entry mode).
### 2. Schéma de câblage typique (Arduino Uno)
| Fonction LCD | Broche Arduino | Commentaire |
|--------------|----------------|-------------|
| VSS | GND | Alimentation négative |
| VDD | 5 V | Alimentation positive |
| V0 | Potentiomètre 10 kΩ (wiper) | Réglage du contraste |
| RS | Pin 12 | Sélection registre |
| RW | GND | Écriture seule |
| E | Pin 11 | Signal d’envoi |
| D4 | Pin 5 | Bit de données 4 |
| D5 | Pin 4 | Bit de données 5 |
| D6 | Pin 3 | Bit de données 6 |
| D7 | Pin 2 | Bit de données 7 |
| A | 5 V (via 220 Ω) | Rétroéclairage anode |
| K | GND | Rétroéclairage cathode |
Pour le clavier‑matrice :
- Lignes L0‑L3 → pins 9‑12 (configurées en sortie, initialement HIGH).
- Colonnes C0‑C3 → pins 5‑8 (configurées en entrée avec résistance de pull‑up interne).
### 3. Procédure de mise en œuvre (pas à pas)
1. **Vérification du matériel** : contrôler l’intégrité du LCD (pas de pins tordues) et du clavier (continuité des lignes/colonnes avec un multimètre).
2. **Installation du potentiomètre** : connecter le wiper à V0, les extrémités à 5 V et GND ; ajuster pour obtenir un contraste visible sans caractères fantômes.
3. **Câblage selon le tableau** : réaliser les soudures sur une plaquette d’essai ou utiliser des câbles Dupont ; s’assurer que les masses (GND) sont communes entre l’Arduino, le LCD et le clavier.
4. **Televersement du sketch d’initialisation LCD** :
```cpp
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2); // RS, E, D4, D5, D6, D7
void setup(){
lcd.begin(16,2);
lcd.print("Bonjour Cameroun");
}
void loop(){}
```
5. **Test d’affichage** : vérifier que le texte apparaît correctement ; ajuster le potentiomètre si nécessaire.
6. **Implémentation du clavier‑matrice** : utiliser la bibliothèque Keypad ou écrire un scan manuel :
- Mettre toutes les lignes à LOW successivement, lire les colonnes ; une colonne à LOW indique une touche pressée.
- Appliquer un anti‑rebond (delay de 10 ms ou algorithme de debouncing).
7. **Affichage de la touche pressée** : mettre à jour le LCD avec le caractère correspondant.
8. **Mesures de contrôle** : avec un oscilloscope, vérifier les fronts sur les lignes E et RS (durée > 450 ns) ; mesurer le courant consommé par le LCD (environ 1,2 mA en rétroéclairage éteint, 20 mA avec rétroéclairage à 5 V).
### 4. Normes de sécurité et bonnes pratiques
- **Protection contre les décharges électrostatiques (ESD)** : porter un bracelet antistatique relié à la masse du poste de travail.
- **Limitation du courant** : ne jamais dépasser 20 mA sur une broche d’Arduino ; utiliser des résistances de limitation pour le rétroéclairage si l’alimentation dépasse 5 V.
- **Isolation galvanique** : dans un environnement industriel, placer un optocoupleur entre le microcontrôleur et le LCD si celui‑ci est alimenté séparément.
- **Vérification de la continuité de terre** : s’assurer que le châssis du boîtier métallique est relié à la terre pour éviter les potentiels flottants.
> **> À retenir** : Toute connexion d’un périphérique I/O doit respecter le schéma de broches du datasheet du microcontrôleur et du périphérique ; une inversion de RS/E entraîne un affichage muet ou des caractères aléatoires.
### 5. Exemple de dépannage
**Symptôme** : aucun caractère affiché, seulement des blocs noirs.
**Vérifications** :
1. Contrôler que VDD = 5 V et VSS = 0 V (multimètre).
2. Vérifier que le contraste (V0) n’est pas à 0 V ou à 5 V (ajuster le potentiomètre).
3. S’assurer que RW est bien à GND (écriture seule).
4. Contrôler que le signal E présente des impulsions lors de l’envoi de données (oscilloscope).
5. Si tout est correct, recharger le bootloader de l’Arduino (possible corruption du firmware).
---
## II. Leçon22 : Connexion des interfaces et câblage des équipements biomédicaux
### 1. Types d’interfaces courantes en biomédical
| Interface | Niveau logique typique | Débit maximal | Usage fréquent |
|-----------|-----------------------|---------------|----------------|
| UART (TX/RX) | 3,3 V ou 5 V (selon appareil) | 115 200 baud (standard) | Communication avec moniteurs de signes vitaux |
| I²C (SDA/SCL) | 3,3 V (souvent avec résistances de tirage 4,7 kΩ) | 400 kHz (mode rapide) | Capteurs de pression, température, oxymétrie |
| SPI (MOSI/MISO/SCK/CS) | 3,3 V/5 V | 10 Mbps | Écrans graphiques, convertisseurs ADC haute vitesse |
| USB (host/device) | 5 V (VBUS) | 12 Mbps (Full Speed) | Liaison avec PC pour enregistrement de données |
> **> À retenir** : La plupart des capteurs biomédicaux sont des dispositifs 3,3 V ; connecter directement leurs sorties à une entrée 5 V d’un microcontrôleur peut entraîner une saturation ou une dégradation du composant.
### 2. Principes d’adaptation de niveau logique
- **Diviseur de résistance** : deux résistances en série (ex. 2 kΩ + 1 kΩ) pour ramener 5 V à 3,3 V (Vout = Vin * R2/(R1+R2)).
- **Convertisseur de niveau bidirectionnel** (ex. TXB0108, PCA9306) : recommandé pour les bus I²C et SPI afin de préserver la qualité du signal.
- **Résistances de tirage (pull‑up)** : nécessaires sur les lignes SCL et SDA d’I²C ; valeur typique 4,7 kΩ à 10 kΩ selon la capacité du bus et la fréquence.
### 3. Exemple de câblage : oxymètre de pouls (MAX30102) vers STM32F103
Le MAX30102 mesure la photopléthysmographie (PPG) et communique via I²C à 3,3 V.
| Fonction MAX30102 | Broche STM32F103 | Commentaire |
|-------------------|------------------|-------------|
| VIN | 3,3 V (pin VDD) | Alimentation du capteur |
| GND | GND | Masse commune |
| SDA | PB9 (I2C1_SDA) | Avec résistance de tirage 4,7 kΩ vers 3,3 V |
| SCL | PB8 (I2C1_SCL) | Avec résistance de tirage 4,7 kΩ vers 3,3 V |
| INT | PA1 (GPIO) | Interruption de donnée prête (optionnel) |
| RDY | PA2 (GPIO) | Signal de donnée prête (optionnel) |
**Procédure** :
1. Placer les deux résistances de tirage sur SDA et SCL.
2. Vérifier la continuité entre les broches du capteur et celles du STM32 avec un multimètre (mode diode).
3. Configurer le périphérique I²C du STM32 en mode maître, vitesse 400 kHz, adresse 0x57 (MAX30102).
4. Initialiser le capteur selon son datasheet : écrire les registres de configuration (mode SpO2, fréquence d’échantillonnage 100 Hz, largeur d’impulsion 411 µs).
5. Lire les FIFO de données rouges et infrarouges, calculer le rapport R/IR et déduire la saturation en SpO₂ à l’aide de la formule d’étalonnage fournie par le fabricant.
6. Afficher le résultat sur un écran OLED SSD1306 (également I²C) connecté au même bus, en veillant à ne pas dépasser la capacité totale du bus (max 400 pF).
> **> À retenir** : Lors du câblage I²C, la longueur totale des pistes ne doit pas dépasser 20 cm pour maintenir une capacité inférieure à 400 pF à 400 kHz ; au-delà, il faut ajouter un répéteur de bus (ex. PCA9515).
### 4. Consignes de sécurité et d’hygiène spécifiques au biomédical
- **Isolation du patient** : tout dispositif en contact avec le patient doit être de type BF (body floating) ou CF (cardiac floating) selon la norme IEC 60601‑1 ; cela implique l’utilisation de transformateurs d’isolement ou de blocs d’alimentation médicaux certifiés.
- **Courant de fuite** : mesurer le courant de fuite entre les parties appliquées et la terre ; il doit être < 10 µA en condition normale et < 50 µA en cas de défaut simple.
- **Protection contre les surtensions** : placer des diodes de protection (ex. TVS) sur les lignes d’entrée/sortie afin de limiter les transients à moins de 20 V.
- **Nettoyage et désinfection** : les connecteurs et les boîtiers doivent être résistants aux agents désinfectants (alcool 70 %, solutions chlorées) ; éviter l’immersion des composants électroniques.
- **Étiquetage** : chaque câble doit porter une étiquette indiquant le type de signal, la tension maximale et la date de dernière vérification.
> **> À retenir** : En milieu hospitalier camerounais, les équipements biomédicaux doivent subir un contrôle de conformité annuel réalisé par un technicien biomédical agréé, incluant le test de courant de fuite et la vérification de l’isolement.
### 5. Tableau récapitulatif des résistances de tirage recommandées
| Bus | Fréquence | Valeur de tirage (Ω) | Commentaire |
|-----|-----------|----------------------|-------------|
| I²C | 100 kHz | 2,2 kΩ – 10 kΩ | Plus faible valeur pour bus long ou capacité élevée |
| I²C | 400 kHz | 4,7 kΩ | Valeur standard pour la plupart des capteurs biomédicaux |
| SPI | ≤ 1 Mbps | 100 kΩ (optionnel) | Souvent inutile si les broches sont en push‑pull |
| UART| quelconque| Aucun tirage nécessaire (niveaux définis par les transceivers) |
### 6. Exemple de dépannage biomédical
**Symptôme** : le moniteur de SpO₂ affiche constamment 0 % malgré la présence du doigt.
**Vérifications** :
1. Contrôler la présence de 3,3 V sur VIN du MAX30102 (multimètre).
2. Vérifier que les lignes SDA et SCL ne sont pas court‑circuitées à GND ou à VCC (mesure de résistance).
3. S’assurer que les résistances de tirage sont bien présentes et de bonne valeur (4,7 kΩ).
4. Lancer un scan I²C depuis le STM32 ; si aucune adresse n’est répondue, le capteur est probablement endommagé ou mal soudé.
5. Si l’adresse répond mais les données restent à zéro, vérifier que les LED du capteur sont bien alimentées (mesure du courant à travers les résistances de limitation de courant, typiquement 10 mA).
6. Remplacer le capteur si les tests précédents sont négatifs.
---
## Synthèse du chapitre
- **Raccordement I/O** : connaître le brochage, réaliser le câblage selon le schéma du datasheet, ajouter les résistances de tirage ou de contraste, programmer l’initialisation et la lecture/écriture.
- **Écran LCD 16×2** : séquence d’initialisation fonction set → display on/off → clear → entry mode ; utilisation du bus 4‑bits pour économiser des broches.
- **Clavier‑matrice** : balayage ligne/colonnes, anti‑rebond, mise à jour de l’affichage en temps réel.
- **Interfaces biomédicales** : préférer le 3,3 V, utiliser des convertisseurs de niveau ou des diviseurs de résistance, ajouter des résistances de tirage sur I²C, vérifier l’isolement et le courant de fuite.
- **Sécurité** : ESD, limitation du courant, protection contre les surtensions, respect des normes IEC 60601‑1, étiquetage et maintenance périodique.
- **Outils de contrôle** : multimètre, oscilloscope, analyseur logique, scan I²C, mesure de courant de fuite.
---
## Glossaire
- **Broche (pin)** : connexion physique d’un microcontrôleur permettant l’entrée ou la sortie de signaux numériques ou analogiques.
- **Bus I²C** : protocole de communication série synchrone à deux fils (SDA, SCL) permettant la liaison maître‑esclave avec adressage 7‑ ou 10‑bits.
- **Résistance de tirage (pull‑up)** : résistance connectée entre une ligne de signal et une tension positive afin d’assurer un état logique défini lorsque le dispositif actif est en haute impédance.
- **ESD (ElectroStatic Discharge)** : décharge soudaine d’électricité statique pouvant endommager les composants électroniques sensibles.
- **Courant de fuite** : courant indésirable qui circule entre une partie appliquée d’un dispositif médical et la terre ou le châssis, limité par les normes de sécurité.
- **Convertisseur de niveau** : circuit permettant d’adapter la tension logique d’un dispositif à celle d’un autre (ex. 3,3 V ↔ 5 V) sans atténuer le signal.
- **FIFO (First In, First Out)** : mémoire tampon où les données sont lues dans l’ordre d’arrivée, utilisée dans les capteurs biométriques pour stocker les échantillons avant lecture par le microcontrôleur.
- **Anti‑rebond (debouncing)** : technique matérielle ou logique visant à éliminer les multiples déclenchements dus aux vibrations mécaniques d’un contact lors de l’actionnement d’un bouton ou d’une touche.
---
## Exercices d'application corrigés
### Exercice 1 – Raccordement d’un écran LCD 16×2 sur Arduino Uno
**Consigne** : Vous devez afficher la température mesurée par un capteur LM35 (sortie analogique) sur l’écran LCD. Le LM35 fournit 10 mV/°C.
**Étapes attendues** :
1. Câbler le LM35 : VCC → 5 V, GND → GND, OUT → broche A0.
2. Câbler le LCD comme indiqué dans le tableau de la Leçon21.
3. Écrire le sketch suivant (corrigé) :
```cpp
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2); // RS, E, D4-D7
void setup(){
lcd.begin(16,2);
lcd.print("Temp: ");
}
void loop(){
int raw = analogRead(A0); // lecture 0‑1023
float voltage = raw * (5.0 / 1023.0); // conversion en volts
float temperature = voltage * 100.0; // 10 mV/°C => *100
lcd.setCursor(6,0);
lcd.print(temperature,1); // afficher avec 1 décimale
lcd.print(" C ");
delay(500);
}
```
**Corrigé** : Le code ci‑dessus lit la tension, la convertit en température et l’affiche sur la première ligne du LCD. Le curseur est positionné à la colonne 6 pour laisser la place au libellé « Temp: ». Un délai de 500 ms évite le scintillement.
### Exercice 2 – Connexion d’un capteur de pression MPX5010DP (analogique) à un STM32F103 via un convertisseur d’analogique‑numérique interne
**Consigne** : Le capteur délivre une tension différentielle proportionnelle à la pression (0‑200 kPa → 0,2‑4,7 V). Vous devez lire la pression sur le canal ADC1_IN1 (PA1) et l’afficher sur une console série UART à 115200 baud.
**Solution** :
1. Câbler le capteur : V+ → 3,3 V, V‑ → GND, OUT → PA1 (via un diviseur de résistance 2 kΩ/1 kΩ si la tension dépasse 3,3 V).
2. Configurer l’ADC : résolution 12 bits, fréquence d’échantillonnage 1 MHz, alignement à droite.
3. Code de base (HAL) :
```cpp
/* USER CODE BEGIN Includes */
#include "main.h"
/* USER CODE END Includes */
ADC_HandleTypeDef hadc1;
UART_HandleTypeDef huart2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_USART2_UART_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART2_UART_Init();
uint32_t adcVal = 0;
float voltage = 0.0;
float pressure = 0.0; // kPa
char buffer[32];
while(1){
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1,10)==HAL_OK){
adcVal = HAL_ADC_GetValue(&hadc1);
voltage = adcVal * (3.3/4095.0); // tension mesurée
// conversion linéaire : 0,2 V → 0 kPa, 4,7 V → 200 kPa
pressure = (voltage - 0.2) * (200.0/(4.7-0.2));
sprintf(buffer,"Pressure: %.1f kPa\r\n",pressure);
HAL_UART_Transmit(&huart2,(uint8_t*)buffer,strlen(buffer),HAL_MAX_DELAY);
}
HAL_ADC_Stop(&hadc1);
HAL_Delay(200);
}
}
```
**Corrigé** : Le programme lit l’ADC, convertit la valeur en tension, puis applique la formule linéaire du capteur pour obtenir la pression en kPa. Le résultat est transmis via UART toutes les 200 ms.
---
## Erreurs fréquentes et règles de sécurité
| N° | Erreur fréquente | Conséquence | Règle de prévention / action corrective |
|----|------------------|-------------|------------------------------------------|
| 1 | Inversion des broches RS et E sur le LCD | Aucun affichage ou caractères aléatoires | Vérifier le schéma de broches du LCD avant soudure ; utiliser un code couleur pour les fils d’alimentation et de commande. |
| 2 | Oubli des résistances de tirage sur le bus I²C | Signal dégradé, perte de communication, adresses non reconnues | Ajouter systématiquement des résistances 4,7 kΩ entre SDA/SCL et 3,3 V ; mesurer la capacité du bus avec un LCR‑meter si la longueur dépasse 15 cm. |
| 3 | Connexion directe d’un capteur 3,3 V à une entrée 5 V du microcontrôleur sans adaptation | Saturation de l’entrée, risque de dégradation du capteur | Utiliser un diviseur de résistance ou un convertisseur de niveau ; vérifier la tension maximale autorisée dans le datasheet du microcontrôleur. |
| 4 | Négliger la mise à la terre du châssis d’un équipement biomédical | Risque de choc électrique pour le patient ou l’opérateur | Relier le châssis à la terre de l’installation via un conducteur de protection (PE) ; mesurer la continuité de terre (< 1 Ω) avant mise sous tension. |
| 5 | Utilisation d’une alimentation non régulée pour le LCD | Variations de contraste, affichage instable | Alimenter le LCD avec une source régulée 5 V (ex. régulateur LM7805) ; ajouter un découplage de 0,1 µF proche des broches VDD et VSS. |
| 6 | Omission du délai d’anti‑rebond lors de la lecture du clavier‑matrice | Plusieurs lectures pour une même pression, comportement erratique | Insérer un délai de 10‑20 ms après détection d’une touche ou implémenter un algorithme de debouncing basé sur un compteur d’états stables. |
---
*Fin du cours.*
Quiz du chapitre
10 questions — vérifie chaque réponse pour voir l'explication.