Vous êtes sur la page 1sur 135

Interfaçage avec les périphériques

CHIRAZ TRABELSI

trabelsi@esiea.fr

SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2


Les périphériques

• Deux types
• Capteurs Microprocesseur/
• Leurs sorties sont des entrées Microcontrôleur
pour le microprocesseur/
microcontrôleur

• Actionneurs
• Ils prennent en entrée les
commandes en sortie du
microprocesseur/
Microprocesseur/
microcontrôleur
Microcontrôleur

2
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les capteurs

• Trois types
• Tout ou rien
• Deux valeurs possibles de sortie: 0 ou 1
• Exemple: capteur de présence/proximité
• La sortie est à 1 si un objet est détecté sinon elle Bouton poussoir Détecteur de présence/proximité
est à 0 (sans contact)

• Numérique
• La sortie est une combinaison de valeurs binaires Sources Capteur
extérieures numérique

• Analogique
• La sortie est une tension qui peut avoir n’importe Sources Capteur
quelle valeur sur un intervalle de tension données extérieures analogique

3
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les capteurs

• Exemples de capteurs analogiques et numériques

• Capteurs de distance infrarouge

Version numérique Version analogique

• Capteur de distance ultrason

Version numérique Version analogique


4
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs

• Exemple de capteurs tout ou rien


• Le bouton poussoir
• Connexion
• Il faut choisir n’importe quelles deux pins parmi les 4

• Problèmes à gérer pour s’interfacer avec un microprocesseur/microcontrôleur


• Flottement du signal  solution: La résistance de tirage
• Rebonds  solution: Un système anti-rebond logiciel ou matériel

5
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs

• Problème des rebonds


• Etant des composants mécaniques, les boutons ne génèrent pas souvent des impulsions propres et on a
affaire à des rebonds lorsqu’on appuie sur le bouton et lorsqu’on le relâche

On relâche le bouton
On appuie sur le bouton

Le cas idéal Ce qui se passe souvent

Si on lit le bouton avec une fréquence d’horloge


assez rapide, on peut penser que le bouton a été
appuyé 6 fois
 Si le traitement lié au bouton dépend du nombre
d’appuis, cela donne un résultat erroné

6
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs

• Solutions au problème de rebonds: Debouncing


1) solution logicielle:
• Ajouter des temps d’attente pour
supprimer les rebonds

Exemple: Ce programme inverse l’état de la led branchée sur la broche 5 du port A (led LD2 sur la carte ) à chaque fois qu’un
bouton externe connecté sur la pin PC8 en pull-down est appuyé.
……

while(1)
{//si le bouton sur PC8 vient d’être appuyé inverser l’état de la led sur PA5
etat_courant_bouton= (GPIOC->IDR & (1<<8))? 1:0; Pour cet exemple particulier,
if ((etat_precedent_bouton==0) && (etat_courant_bouton!=0)){ sans la solution anti-rebonds,
GPIOA->ODR^=(1<<5); si la fréquence de lecture est
LL_mDelay(20); //attendre 20ms
}
assez grande, les six
impulsions seront lues et la
//si le bouton vient d’être relâché faire une attente led ne va pas changer d’état
if ((etat_precedent_bouton!=0) && (etat_courant_bouton==0)){
LL_mDelay(20); //attendre 20ms le comportement de la led
} serait aléatoire
etat_precedent_bouton= etat_courant_bouton;
}
7
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs

• Solutions au problème de rebonds: Debouncing


2) Solution matérielle:
• Ajouter un circuit RC
• La carte Nucleo L053R8 utilise ce type de filtre
pour son bouton USER connecté sur PC13

• Quand on appuie sur le bouton, le


condensateur se décharge lentement  les
rebonds sont lissés

• Quand on relâche le bouton, le condensateur se


charge lentement  les rebonds sont lissés

8
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs

• Solutions au problème de rebonds: Debouncing


2) Solution matérielle:
• Ajouter un circuit RC
• Cas d’un bouton configuré en pull-down

9
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel

• Exemple de capteurs tout ou rien


• Les boutons d’un clavier matriciel
• Le clavier d’un ordinateur contient souvent un microcontrôleur qui traduit les appuis sur les
boutons/touches en des caractères qu’il envoie à l’ordinateur par une communication série.

• Ce microcontrôleur aurait besoin d’une centaine d’entrées pour gérer toutes les touches

• L’organisation matricielle du clavier permet au microcontrôleur d’avoir un nombre raisonnable


d’entrées (le nombre de lignes et de colonnes de la matrice)

Exemple: Pour un clavier 4x4, le microcontrôleur


n’aura besoin que de 8 broches pour le gérer
10
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel

• Exemple de capteurs tout ou rien


• Les boutons d’un clavier matriciel
• Exemple du clavier 4x4 EAO ECO (parmi les composants proposés pour les projets)

X1 X2 X3 X4 X1 X2 X3 X4

Y1 Y1
Y2 Y2
Y3 Y3
Y4 Y4
• Si la colonne X2 est activée par le microcontrôleur (le
microcontrôleur y écrit 1) et si on appuie sur la touche 8, le
Colonnes lignes microcontrôleur recevra un niveau haut sur la ligne Y3 et un niveau
X1 X2 X3 X4 Y1 Y2 Y3 Y4 bas sur les autres lignes (configuration en pull-down)

• Si on active la colonne X1 et X2 en même temps, les appuis sur la


touche 7 ou 8 donneront tous les deux un Y3=1
 il faut activer une colonne à la fois (à tour de rôle) pour distinguer
les touches appuyées
11
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel

• Exemple de capteurs tout ou rien


• Les boutons d’un clavier matriciel
• Exemple du clavier 4x4 EAO ECO
• Pour détecter les touches appuyées
1) Il faut choisir soit d’activer les lignes soit les colonnes
• Si on active les lignes  les lignes seront des sorties
pour le microcontrôleur et les colonnes des entrées
• Si on active les colonnes  les colonnes sont des
sorties pour le microcontrôleur et les lignes des
entrées

2) Utiliser des résistance de pull-up/pull-down sur les entrées


du microcontrôleur
Colonnes lignes
X1 X2 X3 X4 Y1 Y2 Y3 Y4

3) Activer les lignes (ou les colonnes) à tour de rôle (dans


une boucle infinie), un délai d’activation d’une ms devrait
suffire

12
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel

• Exemple de capteurs tout ou rien


• Les boutons d’un clavier matriciel • Pour détecter les touches appuyées
• Exemple du clavier 4x4 EAO ECO • Si on choisit d’activer les lignes:
1) Il faut choisir 4 pins du microcontrôleur, les configurer en
sortie (registre MODER) et les lier aux lignes du clavier

2) Choisir 4 pins du microcontrôleur, les configurer en entrée,


leur configurer les résistances de tirage et les lier aux
colonnes du clavier

Colonnes lignes
X1 X2 X3 X4 Y1 Y2 Y3 Y4

13
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel

• Exemple de capteurs tout ou rien


• Pour détecter les touches appuyées
• Les boutons d’un clavier matriciel • Si on choisit d’activer les lignes:
• Exemple du clavier 4x4 EAO ECO 3) Activer les lignes à tour de rôle (dans une boucle infinie), un
délai d’activation d’un 1ms devrait suffire

Tant que (1) faire //boucle infinie


-Activer Y1 (registre ODR de la pin en question)
-Attendre 1ms
-Si on reçoit un signal sur l’une des colonnes (registre IDR)
alors
on stocke la valeur du bouton appuyé et on attend que le bouton
soit relâché (lecture sur IDR)
-Désactiver Y1 (registre ODR de la pin en question)
-Activer Y2 (registre ODR de la pin en question)
Colonnes lignes -Attendre 1ms
X1 X2 X3 X4 Y1 Y2 Y3 Y4 ……
Fin tant que

14
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le capteur ultrason
• Exemple de capteurs numériques
• Le capteur ultrason HC - SR04 (parmi les composants proposés pour les projets)

• Ce capteur contient un émetteur et un récepteur de signal ultrason


• L’émetteur émet un signal ultrason dont la fréquence est trop grande pour être captée par l’oreille humaine (de
20KHz à 10MHz)
• Si ce signal rencontre un obstacle, il est retransmis au capteur ultrason et capté donc par le récepteur
• Après avoir envoyé le signal ultrason par son émetteur, le capteur met sa sortie (echo) à 1 jusqu’à ce qu’il capte la
réflexion de ce signal sur son récepteur à ce moment là il remet le signal echo à 0
• Le capteur ultrason donne en sortie une impulsion sur sa sortie echo dont la longueur dépend de la distance qui le
sépare d’un obstacle
15
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le capteur ultrason

• Exemple de capteurs numériques


• Le capteur ultrason HC - SR04

• Comment calculer la distance qui sépare le capteur d’un obstacle en cm?

• La vitesse du son dans l’air est 340 m/s  le son parcourt 34000cm en 1s  pour parcourir 1cm il met
1s/34000= 29us  si l’obstacle est à 1cm du capteur la longueur de l’impulsion est 29us x 2= 58us (aller
retour)

 pour avoir la distance en cm, il faut diviser la longueur de l’impulsion par 58us
16
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le capteur ultrason

• Exemple de capteurs numériques Exemple de programme:


• Le capteur ultrason HC - SR04
Tant que (1) faire //boucle infinie
//Faire une impulsion de 10us sur le signal Trig
Trig 1
Attendre 10us
Trig  0

//Attendre que l’echo passe de 0 à 1


Tant que (echo=0) faire
Fin tant que

Tant que (echo=1) faire


Attendre 58us
Distance  distance +1 //distance en cm
Fin tant que

Afficher distance
Attendre 1s

Fin tant que 17


SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le capteur infrarouge

• Exemple de capteurs analogiques


• Capteur infrarouge de distance Sharp GP2Y0A21YK0F (parmi les composants proposés pour les
projets)

Signal analogique

Un convertisseur CAN à l’intérieur du


microcontrôleur permet de convertir
le signal analogique en signal
numérique compréhensible par le
La sortie du capteur est une tension dont la CPU
valeur dépend de la distance qui sépare le
capteur de l’obstacle 18
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique
• Convertisseur analogique numérique du microcontrôleur Cortex-M0+
• 16 canaux analogique externes
• Les pins en orange

• 3 canaux internes

 19 canaux en tout

19
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

CAN

L’entrée est une tension analogique, la sortie est une valeur binaire

• La résolution (n)
• Le nombre de bits utilisé pour coder les signaux d’entrée
• Pour Cortex-M0+: 4 résolutions sont possibles (12, 10, 8 et 6 bits)
• Pour Arduino Uno/Mega: la résolution est de 10 bits

• La plage de conversion (Vref)


• L’intervalle entre la valeur maximale et minimale de la tension en entrée (exemple: 0V-3.3V pour
Cortex-M0+)

20
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique
• Pas de conversion
• Quantum ou LSB= plage de conversion/ (2n-1)
Exemple: pour une plage de conversion de 0-3.3V et une
résolution de 8 bits, le quantum/LSB est de
3.3V/255=0.01V

Pour une résolution de 10 bits, le quantum/LSB est de


3.3V/1023=0.003V

 Plus la résolution est grande, plus la valeur numérique


donnée par le convertisseur est précise
0V 1V 2V 3V 4V 5V 6V 7V

Exemple pour une résolution de 3 bits

21
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Valeur numérique
• N= Ve/LSB

N = Ve *(2n-1) /plage de conversion

• Exemple, si on utilise la résolution sur 8 bits et qu’on reçoit une tension de 2V sur l’entrée analogique du
microcontrôleur, cela correspond à une valeur numérique de 2*255/3.3=155

2V

22
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• N= Ve/LSB
= Ve *(2n-1) /plage de conversion
N

Exemple: pour une distance entre 10 et 20 cm, la sortie du


capteur sera entre 1.3V et 2.3V
 la valeur numérique correspondante est entre
1.3*255/3.3= 100 et 2.3*255/3.3=178 (si on prend une
résolution de 8 bits)

 Selon l’intervalle de la valeur numérique donnée par le


convertisseur, on peut déduire l’intervalle de distance de
l’obstacle

23
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
• Pour configurer un convertisseur CAN sur Cortex-M0+, il faut faire les étapes suivantes:

1) Activation de l’horloge (1ère méthode)

• RCC->APB2ENR |= (1<<9);

24
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
• Pour configurer un convertisseur CAN sur Cortex-M0+, il faut faire les étapes suivantes:

1) Activation de l’horloge (2ème méthode)


Remarque: si vous commencez à taper une commande
et vous appuyez sur Ctrl+Espace, le logiciel
• RCC->APB2ENR |= RCC_APB2ENR_ADCEN; STM32CubeIDE vous donne des propositions pour la
compléter

25
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur

2) Choix du mode de l’horloge

Exemple: on choisit le mode synchrone avec


l’horloge sans prescaler

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs

26
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
2) Calibration (optionnelle)
• Pour assurer la précision de la conversion, on peut lancer la calibration du convertisseur
• La calibration doit se faire quand le convertisseur est désactivé
if((ADC1->CR & ADC_CR_ADEN) != 0) {
ADC1->CR &= ~(uint32_t)ADC_CR_ADEN;
}
ADC1->CR |= ADC_CR_ADCAL; // Calibration

// Attente ADCAL = 0 (fin calibration)


while ((ADC1->CR & ADC_CR_ADCAL) != 0);

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs 27
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
3) Activation de la conversion en continu

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs 28
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
4) Choix de la résolution

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs
29
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
5) Sélection du canal parmi les 19 disponibles

Exemple: Pour une entrée analogique


connectée sur PA7, il faut activer le canal 7
 Mettre le bit 7 du registre CHSELR à 1

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs

30
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
6) Activer le convertisseur

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs

31
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
7) Lancer la conversion

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs
32
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique

• Configuration du convertisseur
8) Lecture des valeurs
while (1)
{

// Attendre la fin de la conversion


while((ADC1->ISR & ADC_ISR_EOC)==0);

// Lire le résultat de la conversion


data= ADC1->DR;

LL_mDelay(200); // Attente 200 ms

Remarque: Ce programme peut être adapté pour lire les


tensions d’un capteur infrarouge analogique et en déduire la
distance qui le sépare d’un obstacle.
Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs
33
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur analogique

• Le potentiomètre
C’est une résistance variable. En agissant sur un axe rotatif ou
rectiligne, les résistances entre le curseur et les deux extrémités
changent (la résistance totale entre les deux extrémités est
constante).

Exemple d’utilisation
La valeur lue sur la pin
analogique A0, correspond
à la tension entre la masse
et le curseur du
potentiomètre
Pour un potentiomètre de
10KΩ, si la pin A0 reçoit
une tension de 1.1V, cela
veut dire que la résistance
entre le curseur et
l’extrémité connectée à la
masse du potentiomètre est
(1,1V x 10KΩ)/3.3V=
3.333K Ω 34
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur analogique

• Le potentiomètre
• Exemple d’utilisation
• En agissant sur le potentiomètre, on varie les valeurs analogiques reçues par A0. On varie ainsi les valeurs
numériques données par le convertisseur CAN. On peut, par exemple, écrire un programme qui varie la
luminosité d’une LED (la led LD2 dans l’exemple) selon la valeur numérique donnée par le CAN.

Autres utilisations: contrôler la vitesse ou la position d’un


moteur, contrôler le son dans les applications audio/vidéo,
etc.

35
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur analogique

• Le potentiomètre
• Exemple d’utilisation
• Entrainé par un moteur, la tension donnée par un potentiomètre varie selon la position angulaire du moteur
 Le potentiomètre peut être utilisé comme un capteur de la position angulaire du moteur
 Le potentiomètre peut être utilisé pour l’asservissement d’un moteur en comparant la tension d’entrée de
commande du moteur (qui indique l’angle de rotation qu’on veut) à celle donnée en sortie de ce moteur
(tension du potentiomètre). Cet aspect est vu dans le module mécatronique.

Alimentation
Masse

Tension Sortie moteur

36
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Les encodeurs rotatifs ressemblent aux potentiomètres rotatifs mais ont un comportement et un usage
différents.

• Les principales utilisations d’un encodeur


• Mesure de la position angulaire d’un moteur
• Déterminer le sens de rotation d’un moteur
• Déterminer la vitesse de rotation d’un moteur

• Exemple d’applications
• Asservissement d’un moteur en position angulaire
• Localisation d’un robot en se basant sur les vitesses des deux roues données par les encodeurs

37
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Différentes technologies
• Magnétique
• Mécanique
• Optique
• …

• Les encodeurs rotatifs optiques sont les plus utilisés

38
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Encodeur optique incrémental
• Le disque, monté sur l'axe rotatif, comporte des motifs encodés de secteurs opaques et
transparents. Lorsque le disque tourne, les segments opaques bloquent la lumière alors que ceux
où le verre est clair la laissent passer. Ceci génère des impulsions d'onde carrée qui peuvent
ensuite être interprétées comme position ou mouvement.

39
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Encodeur optique incrémental

• L'encodeur en quadrature comporte deux pistes de code dont les secteurs sont décalés de 90 degrés d'une piste
à l'autre; ceci permet d'avoir deux sorties de voie (A et B) qui indiquent la position et la direction de la
rotation.
• Si A devance B, le disque tourne dans le sens des aiguilles d'une montre. Si B devance A, le disque tourne
dans le sens contraire. Par conséquent, en surveillant à la fois le nombre d'impulsions et les phases relatives
des signaux A et B, on peut suivre la position et la direction de la rotation.

40
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Encodeur optique incrémental
• Cet encodeur donne un mouvement relatif/incrémental par rapport à la position initiale. Il ne
donne pas la position absolue. Il y a des encodeurs absolus (ont besoin de plusieurs pistes et
coûtent plus cher)

n pistes  2n positions

0011

4 pistes  16 positions

Encodeur absolu
Encodeur incrémental
41
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Exemple 1: Déterminer le sens de rotation

• Il y a 4 combinaisons possibles entre les fronts montants et descendants


des signaux A et B
• Dans le sens horaire de la rotation, à chaque fois A change de valeur, en
vérifiant B on trouve qu’il a la valeur opposée de A; et à chaque fois que
B change de valeur, en vérifiant A on trouve qu’il a la même valeur de B
• Dans le sens anti-horaire de la rotation, à chaque fois A change de valeur,
en vérifiant B on trouve qu’il a la même valeur que A; et à chaque fois
que B change de valeur, en vérifiant A on trouve qu’il a la valeur
opposée de B

 A chaque changement de la valeur de A:


Si A!=B alors sens horaire
Si A=B alors sens anti-horaire
Et A chaque changement de la valeur de B:
Si A==B alors sens horaire
Si A!=B alors sens anti-horaire
 En mettant deux interruptions sur les fronts montants et descendants de A et B, on peut déterminer le sens de rotation42
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Exemple2: Déterminer la position angulaire
• Si on veut déterminer la position de rotation d’un moteur, il faut le positionner d’abord à la position de
référence qui correspond à l’angle 0 avant de lancer la rotation du moteur car la sortie de l’encodeur ne
permet pas de donner l’angle absolu de rotation

• La résolution de l’encodeur correspond à combien d’impulsions sont générées sur l’une des voies par tour
complet
• Exemple: si la résolution est 200 PPR (Pulse per Revolution), chaque période de la voie A correspond à
360°/200=1.8°

43
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature 90°


• Exemple2: Déterminer la position angulaire
0° 180°
• Si on vérifie chaque changement de valeur de A et de B, on obtient des pas qui correspondent à un
quart de période
-90°
• Exemple: si la résolution de l’encodeur est 200 PPR, chaque changement de valeur de A ou B
correspond à (360°/200)/4=0.45°

• A chaque changement de la valeur de A:


Si A!=B alors compteur++; //sens horaire
Si A=B alors compteur--; //sens anti-horaire

• A chaque changement de la valeur de B:


Si A==B alors compteur++; //sens horaire
Si A!=B alors compteur--; //sens anti-horaire
• A chaque fois que la valeur du compteur correspond à un tour complet
de l’encodeur, il faut le remettre à 0 (pour un encodeur à 200 PPR si le
compteur=+/- 800)

44
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature 90°


• Exemple2: Déterminer la position angulaire
0° 180°

-90°

• En multipliant le compteur par la rotation correspondante à un quart


de période, on obtient la position
• Exemple: pour un encodeur à 200 PPR:
• Si la valeur du compteur est 20 cela correspond à une
position de 20*0.45°=9°
• Si la valeur du compteur est -200 cela correspond à une
position de (-200*0.45°) =-90°

45
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique

• L’encodeur rotatif en quadrature


• Exemple3: Déterminer la vitesse de rotation d’un moteur

• Il faut compter le nombre d’impulsions généré par l’encodeur pour


un temps fixe

• Vitesse= angle de rotation/temps

• Exemple: pour un encodeur à 200 PPR, une impulsion correspond


à 1.8°
• Si le nombre d’impulsions comptées pour 0.01s est 50, la
vitesse est 50*1.8°/0.01s=90°/0,01s=9000°/s= (9000°/360)
tour/s=25 tours/s

• Exemple d’application: Pour un robot à deux roues, si on détermine


la vitesse de chaque roue, on peut déterminer sa position à un
instant donné en appliquant une formule qui prend en compte sa
position initiale, son orientation initiale et la distance entre les
roues 46
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les actionneurs

• Exemples:
• Leds
• Afficheur 7-segments
• Afficheur LCD
• Moteurs

47
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les Leds

• Utilisation des leds externes

anode cathode anode cathode


Le courant passe de l’anode à la cathode et pas inversement.
L’anode doit être connectée côté « + » (3,3/5V ou pin GPIO) et la cathode côté « - » (GND).

48
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les Leds

• Utilisation des leds externes


• La led a une limite de courant maximum qu’elle peut accepter. Si on dépasse cette limite, la led est
grillée

• Pour protéger la led on connecte toujours une résistance en série avec celle-ci

Comment choisir la valeur de la résistance?

Il faut chercher dans la doc technique de la led:


• Le courant maximum accepté par la led
• La tension de la led (la tension de la led varie très
peu en fonction de l’intensité du courant)
Exemple:
Si l’alimentation est de 3,3V et que la tension de la diode est 2,1V
et son courant maximal est 10mA, il faut choisir une résistance
d’au moins (3,3-2,1)/10mA= 120Ω
Cette valeur de résistance permet une luminosité maximale, mais
on peut choisir des valeurs supérieure qu’on a à disposition
(exemple: 220 Ω, 1KΩ, etc.)
49
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les Leds

• Faire clignoter une led

int main(void)
{
….

//configuration de la led LD2


……

while(1){
GPIOA->ODR |=(1<<5);
LL_mDelay(500);//500ms
GPIOA->ODR &=~(1<<5);
LL_mDelay(500);//500ms
}
}

50
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les Leds

• Contrôler la brillance de la led


• On peut contrôler la tension sur une pin de sortie, ce qui permet de contrôler le courant circulant dans une
led et donc sur sa brillance
 utiliser la méthode PWM

51
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


Un microcontrôleur ne traite que des données numériques
0 0V
1 3.3V pour Cortex-M0+ (5V pour Arduino Uno/Mega)

Le PWM est une technique qui permet d’avoir des résultats


analogiques (des valeurs entre 0 et 3.3V) avec des moyens
numériques.

Cette technique permet de simuler des tensions entre 0 et 3.3V en


agissant sur la portion de temps où le signal se trouve à l’état haut
(3.3V) par rapport à celle passée à l’état bas (0V).

52
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Le signal PWM est un signal périodique. La proportion de
temps où le signal est à l’état haut dans une période est
appelée “duty cycle” (rapport cyclique).

• Par exemple, si le signal passe la moitié de chaque période à


l’état haut, on parle d’un “duty cycle” de 50%.

• La durée de temps où le signal est à l’état haut dans une


période est appelée largeur d’impulsion “pulse width”.

• Si, en passant d’une période à une autre, on change la largeur


d’impulsion, on obtient des valeurs analogiques différentes.

53
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Si la fréquence du signal PWM est assez grande, le
résultat sera vu comme si on avait un signal analogique
continu avec une valeur entre 0 et 3.3V.

54
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Exercice: Donner la valeur de tension obtenue dans
chaque cas

55
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Solution: Donner la valeur de tension obtenue dans
chaque cas
• 1er cas: 0v
• 2ème cas: 0.825v
• 3ème cas: 1.65v
• 4ème cas: 2.475v
• 5ème cas: 3.3 v

56
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
• Utilisation d’un signal en PWM
• Implémentations
1) Programmer un PWM sur une pin ordinaire (écrire 1 et attendre un certain temps puis écrire
zéro et attendre pour un certain temps, etc.)

2) Utilisation d’un Timer en mode PWM: valable uniquement pour les pins compatibles PWM

Les pins compatibles PWM sont marquées en violet


57
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 1ère méthode: Programmer un PWM sur une pin
ordinaire (écrire 1 et attendre un certain temps puis int main(void)
écrire zéro et attendre pour un certain temps, etc.) {
//configuration de la fréquence à 16MHz
….
• Exercice: la pin PA8 est une pin qui n’est pas
//configuration de la led LD2
compatible PWM (voir fichier RCC->IOPENR|=RCC_IOPENR_GPIOAEN;
GPIOA->MODER&=~(0b11<<(5*2));
Pin_Mapping.pdf sur Moodle), donner un GPIOA->MODER|=(0b01<<(5*2));
programme C qui permet de générer un signal LL_Init1msTick(16000000);

PWM à la sortie de cette pin avec un duty while(1){


GPIOA->ODR |=(1<<5);
cycle de 75% et une fréquence de 10Hz à LL_mDelay(500);//500ms
GPIOA->ODR &=~(1<<5);
partir de la fréquence de base de 16MHz. LL_mDelay(500);//500ms
}
• Inspirez-vous de ce programme }

58
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 1ère méthode: Programmer un PWM sur une pin int main(void)
{
ordinaire (écrire 1 et attendre un certain temps puis //configuration de la fréquence à 16MHz
écrire zéro et attendre pour un certain temps, etc.) ….

//configuration de PA8
• Exercice: la pin PA8 est une pin qui n’est pas GPIOA->MODER&=~(0b11<<(8*2));
GPIOA->MODER|=(0b01<<(8*2));
compatible PWM (voir fichier
while(1){
Pin_Mapping.pdf sur Moodle), donner un GPIOA->ODR |=(1<<8);
programme C qui permet de générer un signal LL_mDelay(75);//75ms
GPIOA->ODR &=~(1<<8);
PWM à la sortie de cette pin avec un duty LL_mDelay(25);//25ms
}
cycle de 75% et une fréquence de 10Hz à }

partir de la fréquence de base de 16MHz.

59
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM

(voir fichier Pin_Mapping.pdf sur Moodle)

• Avantage:
• On peut configurer le signal PWM et le lancer au début du programme
• Le signal est maintenu tout au long du programme tant qu’on ne change pas les registres de
configuration de ce signal puisqu’il est géré par un composant matériel (timer) et pas par le
processeur
• Avec la première méthode, on ne peut pas avoir un signal bien périodique du PWM si la boucle
infinie du main gère d’autres tâches en plus du signal PWM
60
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• Pour qu’une pin agisse comme une pin PWM, il faut:
• Activer ce mode pour la pin en question
• Configurer le Timer lié à cette pin en mode PWM
 Le timer va diviser son cycle de comptage sur deux parties, une partie où il va
mettre le signal PWM à 1 et une partie où il le met à 0

Dans l’exemple, au début du comptage, le signal


PWM est à 1. Après 4 cycles d’horloge, le signal
PWM passe de 1 à 0. Quand le compteur déborde
et recommence le comptage, le signal PWM
repasse à 1.

ARR: Auto-Reload Register (registre de comptage)


CCR: Capture/Compare Register (registre de comparaison)

61
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 1ère étape: configurer la pin qui va générer le signal en alternate function
Exemple: configurer la pin PC7 (liée au canal 2 du Timer 22) en alternate function
GPIOC->MODER&=~(0b11<<(7*2));
GPIOC->MODER|=(0b10<<(7*2));//alternate

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs 62
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 2ème étape: activer l’alternate function en question
• Les alternate functions sont gérés par les registres AFRL et AFRH du GPIO en question
• Puisque les valeurs des alternate functions s’écrivent sur 4 bits, il faut deux registres pur
couvrir les fonctions des 16 pins d’un port GPIO (4 bits x16= 64 bits  2x32 bits)

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 2ème étape: activer l’alternate function en question
Exemple pour configurer le PWM sur la pin PC7, il faut écrire dans AFRL pas AFRH puisque AFRL gère les pins de 0 à 7
GPIOC->AFR[0]&=~(0b1111<<(7*4)); /*AFR[0] représente AFRL et AFR[1] AFRH*/

Attention: L’information sur les numéros des alternate


functions se trouve dans la datasheet et pas dans le manuel

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs Source: STM32L053C6 STM32L053C8 STM32L053R6 STM32L053R8 -- Ultra-low-power 32-bit MCU Arm®-
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2 based Cortex®-M0+
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 3ème étape: configurer le timer en question en mode PWM
• Exemple pour la pin PC7, il s’agit du timer 22, canal 2

65
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 3ème étape: configurer le timer en question en mode PWM

//configuration en mode PWM mode1 sur le canal 2


TIM22->CCMR1 &= ~TIM_CCMR1_OC2M_0;
TIM22->CCMR1 |= TIM_CCMR1_OC2M_1| TIM_CCMR1_OC2M_2;

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3


Attention, si on était sur le canal 1, le mode s’écrirait sur les advanced ARM®-based 32-bit MCUs

bit OC1M au lieu d’OC2M


66
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 4ème étape: activer la sortie du signal PWM sur le canal en question

//activation du canal2
TIM22->CCER |= TIM_CCER_CC2E;

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3


advanced ARM®-based 32-bit MCUs

67
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 5ème étape: configurer les registres de comptage et de comparaison

• Registre ARR (Auto-reload register)  c’est le


nombre de ticks d’horloge dans un cycle de
comptage -1

• Registre CCR (capture/compare register)  la


valeur qui va servir de duty cycle

• Fréquence (PWM)= fréquence (Timer)/ (ARR+1)


 ARR= fréquence (Timer)/fréquence PWM -1

• Pour ARR=7, la période du PWM contient 8 cycles


d’horloge, un duty cycle de 50% correspond à 4
cycles d’horloge (CCR=4)= 8x%50
 CCR= (ARR+1) x duty cycle(%)
68
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 5ème étape: configurer les registres de comptage et de comparaison

Exercice: on veut avoir un signal PWM sur la


pin PC7 d’une fréquence de 20kHz avec un
duty cycle de 20%, quelles serait les valeurs
d’ARR et CCR pour une horloge de base de
16MHz?

69
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• 5ème étape: configurer les registres de comptage et de comparaison
Exercice: on veut avoir un signal PWM sur la pin
PC7 d’une fréquence de 20kHz avec un duty cycle de
20%, quelles serait les valeurs d’ARR et CCR pour
une horloge de base de 16MHz?

Pour avoir un signal de fréquence=20KHz, il faut


avoir ARR= 16MHz/20KHz -1=799

Pour un duty cycle de 20%, il faut avoir


CCR=(ARR+1)x20%=160
TIM22->ARR = 799;
TIM22->CCR2 = 160; //CCR du canal 2 tu timer 22

• Attention pour configurer une pin liée au canal 1 d’un timer


il faut configurer le registre CCR1 à la place de CCR2
70
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 2ème méthode: Utiliser des pins compatibles PWM
• Configurer le timer en question en mode PWM
• Résumé
// activation de l’horloge pour le timer 22
RCC->APB2ENR |= RCC_APB2ENR_TIM22EN;
//configuration en mode PWM mode1 sur le canal 2
TIM22->CCMR1 &= ~TIM_CCMR1_OC2M_0;
TIM22->CCMR1 |= TIM_CCMR1_OC2M_1| TIM_CCMR1_OC2M_2;
//activation de la sortie PWM sur le canal 2
TIM22->CCER |= TIM_CCER_CC2E;

//configuration des ARR et CCR


TIM22->ARR = 799;
TIM22->CCR2 = 160; //CCR du canal 2 tu timer 22

// Lancement du timer 22
TIM22->CR1 |= 1;
71
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM

• Utilisation d’un signal en PWM


• Implémentations
• 1ère méthode: Programmer un PWM sur une pin ordinaire (écrire 1 et attendre un certain temps puis
écrire zéro et attendre pour un certain temps, etc.)
• Avantages:
• Permet de générer un signal PWM sur n’importe quelle pin GPIO et pas seulement celles qui
sont compatibles PWM
• Très utile si on a besoin de générer plusieurs signaux PWM pour un nombre de broches
compatibles limité
• Inconvénients:
• Difficile de gérer d’autres tâches en parallèle et d’avoir un signal PWM « propre »

• 2ème méthode: Utilisation d’un Timer en mode PWM: valable pour les pins compatibles PWM
• Avantages:
• La génération du signal PWM est lancée au début du programme ce qui permet d’avoir
d’autres tâches en parallèle
72
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

• Structure
• Le corps du moteur et les aimants statiques qui y sont fixés : le tout s'appelle le stator car il ne
bouge pas.
• Les bobines et leur noyau de fer (orange et vert) sont appelés le rotor car c'est la partie qui tourne.
• L'axe qui est la partie qui sera ensuite utilisée pour récupérer ce mouvement de rotation (en
entraînant des engrenages, une roue, etc.).

73
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

Source: STM32L053C6 STM32L053C8 STM32L053R6 STM32L053R8 -- Ultra-low-


power 32-bit MCU Arm®-based Cortex®-M0+
Il ne faut pas connecter un moteur directement à une pin de sortie du microcontrôleur
1) le moteur a de fortes chances de ne pas démarrer puisqu’un microcontrôleur fournit à ses bornes digitales
un courant trop faible pour que le moteur fonctionne
 il faut trouver un moyen pour augmenter ce courant
2) Lorsque le moteur s’arrête, il continue d’envoyer du courant dans l’autre sens (vers le microcontrôleur), ce
qui peut l’endommager
 il faut trouver un moyen pour protéger le système en cas d’arrêt du moteur 74
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

• Le transistor permet d’avoir plus de courant

• La diode permet de protéger le circuit quand


le moteur s’arrête brusquement
• La bobine contenue dans le moteur génère
une tension qui est fonction de la variation
du courant (Loi de Lentz)

• Plus la variation du courant est rapide


(coupure brusque du courant) plus la tension
est haute, ce qui génère une très forte
tension  risque d’endommager les
composants

• En ajoutant la diode, la variation du courant


n’est plus brusque puisque le courant
Moteur CC commandé par un transistor NPN, avec une diode
roue libre continue de passer dans la diode jusqu’à
s’annuler et on évite ainsi une surtension
dangereuse 75
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

Si on diminue la valeur de la résistance, le moteur


tourne plus rapidement. En fait, l’intensité du
courant qui va passer dans le transistor dépend en
partie de la tension d'entrée sur sa base. Donc la
valeur de cette résistance peut impacter la vitesse de
rotation.

76
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

On peut contrôler la vitesse du moteur par un signal


PWM, ce qui permet de varier la tension de la base du
transistor et donc celle qui passe dans le moteur

77
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

• Sens de rotation d’un moteur


• Si on inverse le sens du courant, le moteur tourne dans l’autre sens

78
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

• Le pont en H permet de faire tourner le moteur dans les deux sens


• Il permet de connecter sur chaque côté soit un moteur qui tourne dans les deux sens, soit deux moteurs
qui tourne dans un seul sens
• Il contient des transistors qui permettent d’amplifier le courant
• Il contient des diodes pour protéger le circuit quand le moteur s’arrête brusquement

75
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu

• Le pont en H

• Les pins pin ~ permettent d’activer


la partie droite ou gauche du pont et
de contrôler la vitesse (avec un
signal PWM par exemple)

• Les pins pin permettent de faire


tourner les moteurs dans un sens ou
dans l’autre

• La pin 8 permet au moteur d’avoir


une tension supérieure à 5V s’il
fonctionne avec une tension
supérieure

80
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs
• Rôle: faire des rotations d’un angle fixé par l’utilisateur

• Ce robot contient par exemple 16


servomoteurs
• 8 pour les épaules, bras et mains
• 6 pour les jambes et pieds
• 2 pour la tête
Servomoteur SG90
Robot JD revolution de EZ-Robot

• Caractéristiques
• Tension d’alimentation
• Taille
• Vitesse (degrés par seconde)
• Couple (Kg.cm)
• Exemple: 2.5Kg.cm  le servomoteur est capable de faire tourner au maximum une charge
de 2.5Kg si elle est placée à 1cm du moteur ou une charge de 250g si elle est placée à 10cm,
etc. 81
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Il est constitué :
• D'un micromoteur à courant continu
• D'une boite de réduction de la vitesse
• D'une électronique de contrôle

• Les petits moteurs à courant continu sont capables de tourner très rapidement mais ont un couple
(force de rotation d’une charge) faible

• Le servomoteur intègre une boîte de réduction de vitesse contenant des pignons qui permettent de
réduire la vitesse du moteur continu et en même temps augmenter son couple

• Pour les servomoteurs légers, les pignons sont faits en plastique, pour ceux qui ont besoin d’un
couple assez important, les pignons sont métalliques.

Ce robot contient des servomoteurs


à pignons métalliques (couple=19
Servomoteur à pignons en plastique
Kg.cm) 82
(couple=2.5 Kg.cm) SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Le servomoteur contient un capteur de position (un potentiomètre ou un encodeur rotatif par exemple) qui
indique au circuit de contrôle à l’intérieur du servomoteur l’angle de rotation actuelle du moteur.

• Lorsque l’utilisateur envoie une commande de rotation au moteur, le circuit de contrôle déduit combien de
degrés il faut bouger par rapport à la position actuelle pour atteindre la position demandée par l’utilisateur.

• Le circuit de contrôle compare en continu la consigne avec la valeur actuelle (asservissement). Quand
elles sont égales, le moteur maintient sa position. Dans ce cas, le moteur reste toujours en action, mais il
tourne très peu dans un sens puis dans l'autre pour garder cet équilibre.

• Si on exerce une force sur le servomoteur, quand il est en train de garder sa position consigne, il y résiste
pour ne pas quitter cette position. Cela dépend du couple du moteur.

83
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Les types
• Rotation angulaire/position:
• le plus commun
• on demande au moteur se mettre dans une position/un angle défini
• L’angle de rotation ne peut pas dépasser 180°

• Rotation continue
• Moins utilisé
• L’angle de rotation est entre 0° et 360°
• Il ne sert pas à positionner le moteur dans une position/angle donnés mais de contrôler la vitesse
de rotation
C’est un moteur à courant continu avec un driver intégré et une seule pin de commande (plus
facile à utiliser mais plus cher qu’un moteur à courant continu)

84
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Comment commander par microcontrôleur?


• Le microcontrôleur envoie des impulsions pour indiquer l’angle de rotation/la position

• Pour un servomoteur de 50Hz (pour la plupart des servomoteurs), il faut envoyer des
impulsions toutes les 1/50Hz= 20ms

85
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Commande par un signal PWM

Servomoteur SG90

• Une position de 0° correspond à une impulsion de 1.5ms


• Une position de 90° correspond à une impulsion de 2ms
• Une position de -90° correspond à une impulsion de 1ms

86
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Commande par un signal PWM


• Il faut envoyer les impulsions en continu pour une
durée assez longue pour laisser au servomoteur le
temps de se mettre à la position demandée, et de
maintenir cette position pour une durée donnée.

• Par exemple: si la vitesse du servomoteur est de


0,12 s/60° (cas du SG90), il faudrait 360ms soit 18
impulsions au minimum pour faire une rotation de
180°.

• Si on arrête d’envoyer les impulsions, le


servomoteur peut ne pas maintenir sa position si on
y exerce une force

87
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Commande par un signal PWM

Exercice:
On configure le Timer22 pour générer un signal PWM pour le servomoteur.
On suppose que l’horloge de base est de 1MHz.
1) Quelle serait la valeur du registre ARR de ce timer pour avoir un signal
PWM de fréquence 50Hz?
2) Quelles seraient les valeurs du registre CCR pour des impulsions de
2ms, 1.5ms et 1ms respectivement?
88
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Commande par un signal PWM

Solution:
1) Quelle serait la valeur du registre ARR de ce timer pour avoir un signal
PWM de fréquence 50Hz?
• ARR=1MHz/50Hz -1= 20000-1=19999

89
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs

• Commande par un signal PWM

Solution:
2) Quelles seraient les valeurs du registre CCR pour des impulsions de
2ms, 1.5ms et 1ms respectivement?
CCR= (ARR+1) x impulsion/20ms
 CCR(2ms)= 20000x2/20=2000
 CCR(1.5ms)=20000x1.5/20=1500
 CCR(1ms)=20000x1/20=1000
90
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Rôle: contrôle de la position ou la vitesse d’un système en boucle ouverte

• Utilisations: Applications nécessitant une grande précision de positionnement: imprimante 3D, découpeuse
CNC, imagerie médicale, disques durs, etc.

• Fonctionnement: chaque impulsion du système de commande le fait avancer d’un pas

 il n’a pas besoin de détecteur de position tel qu’il est le cas pour le servomoteur

• Il existe 3 types de moteurs pas à pas: à aimants permanents, à réluctance variable ou hybrides.

Différentes tailles disponibles 91


SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• Le moteur pas à pas à aimant permanent
• Le rotor est constitué d’un aimant permanent, et le stator comporte 2 bobinages (ou 2 groupes de
bobinages). En contrôlant l’alimentation des bobines, et le sens du courant dans celles-ci, on peut faire
varier le champ dans le moteur.

92
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• Le moteur pas à pas à aimant permanent
• Deux mode de fonctionnement en pas complet ou en demi-pas

• Exemple: un moteur 4 pas  1pas=90°


• En contrôlant l’alimentation
des bobines, et le sens du
courant dans celles-ci, on
contrôle le mode de
fonctionnement (pas
• Exemple: 8 demi-pas  1 demi-pas=45° complet/demi-pas)

• Dans le mode pas complet,


une seule bobine est
alimentée à la fois

93
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• Le moteur à réluctance variable
• Comme pour le moteur pas à pas à aimant permanent, on alimente successivement les différentes
bobines. Par contre, ici le sens d’alimentation n’a pas d’importance (on utilise un seul sens
d’alimentation pour chaque bobine) car le rotor n’est pas polarisé. Le rotor va prendre une position
telle qu’une des paires de dents soit alignée avec la bobine alimentée.

94
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• Le moteur à réluctance variable
• Deux mode de fonctionnement en pas complet ou en demi-pas

• Exemple: un moteur 12 pas  1pas=30°


• En contrôlant l’alimentation
des bobines, on contrôle le
mode de fonctionnement (pas
complet/demi-pas)

• Exemple: 24 demi-pas  1 demi-pas=15° • Dans le mode pas complet,


une seule bobine est
alimentée à la fois

95
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• Le moteur hybride
• En mode pas entier, les bobines sont alimentées une par une alternativement, dans un sens puis dans
l’autre.
• Le rotor est polarisé

96
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• A réluctance variable: On ne sent pas les pas. A caractéristique électrique identique, un tel moteur est
moins puissant, mais plus rapide que les moteurs à aimant permanent.
• A aimants permanents: on sent les pas. Ce sont des moteurs à faible coût, et de résolution moyenne
(jusqu’ à 100 pas/tour).
• Les hybrides: Ces moteurs combinent les 2 technologies précédentes, et sont plus chers. Leur intérêt
réside dans un meilleur couple, une vitesse plus élevée, et une résolution de 100 à 400 pas/tour.
• Les moteurs les plus courants sont ceux à aimants permanents et les hybrides.

97
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Exemple de moteur pas à pas hybride:


• Le 440-436 (parmi les composants disponibles pour les projets)

• C’est un moteur 12V  besoin d’une alimentation


externe

• Il consomme un courant de 0,16A  besoin d’un moyen


d’amplification (driver)

98
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Exemple de moteur pas à pas hybride:


• Le 440-436 (parmi les composants disponibles pour les projets)

6 entrées de
commande

Inversion de polarité d’alimentation


obligatoire pour un moteur hybride
bipolaire (4 fils)
Câblage 6 fils :
Un point milieu est créé sur chacun des deux bobinages. Généralement ces deux points milieux (brown) sont reliés à la
masse de l’alimentation. En alimentant un des 4 autres points on peut choisir le sens du courant sans avoir à inverser la
polarité de l’alimentation (ce qui est obligatoire pour un moteur à 4 fils). Ces moteurs sont appelés moteurs pas à pas
unipolaires (chaque demi-bobine ne peut être alimentée que dans un seul sens)
99
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• Exemple de moteur pas à pas hybride:
• Le 440-436 (parmi les composants disponibles pour les projets)
• Attention
• Le couple moteur décroit rapidement avec la vitesse
• Pour avoir un couple acceptable il faut commander le moteur avec des fréquences de
quelques centaines de Hz

100
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Commande d’un moteur hybride


• Utilisation de driver
• Il existe des drivers qui génèrent les signaux de commande des bobines (pas besoin d’alterner
l’alimentation des bobines par programmation)
• Exemple: le MC3479 Alimentation (exemple:12V pour un moteur 12V)

Horloge: peut être commandé par un signal PWM

Sens de rotation (0: sens horaire, 1: sens


anti-horaire)
Mode de fonctionnement (0: pas
complet, 1: demi-pas)

• En variant la fréquence du signal Clock, on varie


la vitesse de rotation
• Le mode pas complet permet une rotation plus
rapide que le mode demi-pas

101
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Commande d’un moteur hybride


• Utilisation de driver
• Exemple: le MC3479

• La fréquence du signal Clock permet de gérer la


vitesse du moteur

• Exercice:
1) On veut faire tourner le moteur pas à pas
avec une fréquence d’horloge de 100Hz,
quel seraient les valeurs des registres ARR
et CCR du timer utilisé pour générer un
signal PWM avec une fréquence de 100Hz
et un rapport cyclique de 50% à partir
d’une fréquence de timer de 1MHz?

2) Un moteur pas à pas a un pas de 1.8°, pour


combien de temps il faudrait activer le
signal d’horloge pour faire une rotation de
90° avec une fréquence de 100Hz?
102
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Commande d’un moteur hybride


• Utilisation de driver
• Exemple: le MC3479
• La fréquence du signal Clock permet de gérer la vitesse
du moteur

• Exercice:
1) On veut faire tourner le moteur pas à pas avec une
fréquence d’horloge de 100Hz, quel seraient les
valeurs des registres ARR et CCR du timer utilisé
pour générer un signal PWM avec une fréquence
de 100Hz et un rapport cyclique de 50% à partir
d’une fréquence de timer de 1MHz?

• Fréquence PWM= fréquence timer /(ARR+1)


 ARR= (fréquence timer /fréquence PWM)-1
ARR= 1MHz/100Hz -1=9999

CCR= (ARR+1)* 50%=5000

103
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Commande d’un moteur hybride


• Utilisation de driver
• Exemple: le MC3479

• Solution:
2) Un moteur pas à pas a un pas de 1.8°, pour
combien de temps il faudrait activer le
signal d’horloge pour faire une rotation de
90° avec une fréquence de 100Hz?
• F=100Hz  10ms=1.8°
 90°=500ms

 Pour faire tourner le moteur 90°, on peut


générer un signal PWM d’une fréquence de
100Hz pour l’entrée horloge du driver,
faire un délai de 500ms, puis mettre le
signal PWM à 0 (en mettant CCR à 0, par
exemple)

104
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas

• Commande d’un moteur hybride


• Utilisation de driver
• Exemple: A4988 (ce driver est parmi les composants disponibles pour les projets)

• Le signal STEP est un signal d’horloge qui


permet de faire avancer le moteur à chaque
impulsion  ce signal peut être géré par un
signal PWM généré par le microcontrôleur
avec une fréquence qui permet de contrôler la
vitesse de rotation

• Le signal DIR permet de donner le sens de


rotation

• Les signaux MS1, MS2 et MS3 permettent de


donner le pas d’avancement. Avec ce driver, il
est possible d’avoir un fonctionnement en pas
complet, demi-pas, quart de pas, 1/8 de pas et
1/16 de pas.
105
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas et les servomoteurs

• Avantages Des Moteurs Pas À Pas


• Le couple d’un moteur pas à pas à basse vitesse est supérieur à un moteur d’asservissement de la même
taille.
• Coût relativement peu élevé

• Avantages Des Servomoteurs


• Le servo-moteur maintient un couple élevée à vitesse élevée

• Pour des applications basse vitesse nécessitant un couple important  moteur pas à pas

• Pour des applications grande vitesse nécessitant un couple important  servomoteur

106
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les décodeurs

• Les décodeurs traduisent un code sur n bits en un nombre supérieur de bits


• Exemple: un décodeur pour un afficheur 7 segments, ont des codes d’entrées sur 4 bits et donnent en
sorties les signaux d’activations des 7 segments

• Avantages:
• Minimiser le nombre de pins de microcontrôleur à utiliser
• Au lieu d’écrire du code pour gérer les 7 sorties microcontrôleur pour les 7-segments, on
programme que 4 sorties indiquant la valeur décimale à afficher

Commandes du
microcontrôleur

107
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les décodeurs

• Les décodeurs

Afficheur cathode commune Afficheur anode commune


Les pins 3 et 8 doivent être liés Les pins 3 et 8 doivent être liés
à la masse à l’alimentation
Pour allumer un segment donné, Pour allumer un segment donné,
il faut envoyer 1 sur l’anode de il faut envoyer 0 sur la cathode
la led en question de la led en question
 Il faut utiliser un décodeur
inverseur
108
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les décodeurs

• Pour les projets, on a parmi les composants disponibles, des afficheurs 7-segments anode commune et des
décodeurs inverseurs (SN7447)
Sorties vers l’afficheur
Commandes du 7-segments
microcontrôleur

Décodeur inverseur

Afficheur anode commune


Les pins 3 et 8 doivent être liés à l’alimentation

Pour allumer un segment donné, il faut envoyer


0 sur la cathode de la led en question

 Il faut utiliser un décodeur inverseur

109
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• On distingue deux principaux types de communication


• La communication série
• La communication parallèle

Les données sont transférées sur un seul fil en série (bit Les données sont transférées en parallèle sur
par bit) plusieurs fils

110
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• Avantages de la communication série

• Une rapidité de communication


• Même si la communication série permet de transférer moins de données par cycle d’horloge, les
interfaces séries peuvent utiliser des fréquences d’horloge qui sont plus grandes que celles des
interfaces parallèles. Deux raisons à cela:

• Moins de problèmes de synchronisation: Les interfaces série ne risquent pas les problèmes de
synchronisation (clock skew) entre plusieurs fils de données

• Plus d’immunité aux bruits: Les interfaces série utilisent moins de fils et occupent moins
d’espace, ce qui permet d’avoir plus d’espace pour isoler les liaisons série de leur
environnement

• Un prix moins cher (moins de pins)

 La communication série est plus utilisée que la communication parallèle

111
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• Différents types d’interface série


• SPI – Serial Peripheral Interface
• 6/8/10 pins

• I2C – Inter-Integrated Circuit


• 4 pins

• FireWire
• 4, 6 ou 8 pins

• USB
• 4 pins

• RS-232
• 9 pins 112
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série
• UART/USART
• Derrière les ports série (COM) d’un ordinateur, on trouve des modules UART/USART qui
sont des modules matériels qui permettent de convertir les données parallèles en des données
série et inversement
• UART: Universal Asynchronous serial Receiver and Transmitter
• USART: Universal Synchronous and Asynchronous serial Receiver and Transmitter
• Quand le processeur veut envoyer une donnée sur 8 bits (vers un écran par exemple),
l’USART permet de l’envoyer en série bit par bit
• Quand le processeur reçoit une donnée en série (à partir du clavier par exemple), l’USART
combine les bits reçue pour les écrire dans un registre à n bits

Réception
Transmission

Circuit lié à un port Série 113


SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série
• UART
• Les ports série ne sont plus utilisés dans les ordinateurs modernes, ils sont remplacés par des
ports USB.
• Pour communiquer en série avec une autre carte électronique (ex: FPGA, raspberry Pi,
Arduino, etc.), deux possibilités:
• 1) passer par un convertisseur USB-Série.
• Le rôle du convertisseur:
• Il traduit les données sortant du port USB de l’ordinateur en une série de bits sur la
ligne RX du convertisseur qui seront transmis par la suite à la carte
• Il traduit les suite de bits envoyées par la carte à travers la ligne TX en un signal
USB à envoyer à l’ordinateur
Exemple 1

Exemple 2

114
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• UART
• Pour communiquer en série avec une autre carte électronique (ex: FPGA, raspberry Pi, Arduino, etc.), deux
possibilités:
2) Le convertisseur USB-Série est intégré dans la carte
• La carte STM32l053 contient deux modules USART (USART1 et USART2).
• L’interface USART2 est par défaut connectée à la carte de programmation et de debug ST-LINK
• Cela permet de passer par un port COM virtuel pour communiquer avec le PC à travers un terminal

ST-LINK

115
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série
• UART
• Les microcontrôleurs intègrent des modules UART/USART directement sur leurs puces

Le CortexM0+ intègre des modules USART


capables de fonctionner dans les deux modes
asynchrone et synchrone

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs
116
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Ce protocole de communicaton série est basé sur l’envoi des trames de données
1) Le mode asynchrone
• L’émetteur et le récepteur n’ont pas forcément la même horloge
• Il faut indiquer au récepteur le début et la fin d’une trame
• L’émetteur et le récepteur se mettent d’accord sur la forme des trames échangées

Une trame est composée de:


• bit de départ (toujours 0)
• Les bits de données (7, 8 ou 9 bits)
• Bit de parité (en option pour vérifier la validité des données transmises)
• bits d'arrêt (1 ou 2 bits à 1)
117
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
1) Le mode asynchrone

• Qu’est-ce qui permet au récepteur de différencier les bits alors qu’il n’a pas la même horloge que
l’émetteur?

l’émetteur et le récepteur se mettent d’accord sur un baud rate

• Baud rate= nombre de bits envoyés par s


• Exemple: si le baud rate est 115200 bps (bits/s)  l’émetteur envoie un bit toutes les
1s/115200=8.68 us
118
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
1) Le mode asynchrone

……………………

• Pour un baud rate de 115200 bps (1 bit toutes les 8.68us):

• Le récepteur attend la réception d’un 0 pour démarrer la réception de la trame (s’il n’y a pas de
communication (idle), le signal est à 1)

• Une fois il reçoit 0, il attend la moitié de la durée d’un bit (8.68us) puis il lit les valeurs reçues avec un
rythme d’une lecture toutes les 8.68us

119
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
1) Le mode asynchrone

• Le bit de parité

• Généré par l’émetteur et vérifié par le récepteur pour détecter les erreurs

• Pour une parité paire, le nombre de 1 dans la donnée plus le bit de parité est pair.

• Pour une parité impaire le nombre de 1 de la donnée plus celui de la parité est impaire.

120
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
2) Le mode synchrone

• L’horloge est partagée entre l’émetteur et le récepteur


sur une ligne d’horloge
• Le récepteur n’a pas besoin d’avoir le baud rate pour
avoir la durée d’un bit
• Il a juste à détecter l’activation de la ligne de l’horloge
et de lire les données sur front de l’horloge

• Avantages:
• On partage la même horloge  on a mois de problème de dérive d’horloge
• On n’a pas besoin de bits de start et stop  on peut envoyer plus de données en comparaison à la
communication asynchrone
• Inconvénients:
• On a besoin de fils supplémentaires pour partager le signal d’horloge entre émetteurs et récepteurs
121
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Le microcontrôleur Cortex M0+
• Le module USART contient
• Deux registres de données pour la
transmission (TDR) et la réception (RDR)
• Un registre de baudrate (BRR)
• Un registre d’état (ISR)
• Des registres de configuration

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based122


32-bit MCUs
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
1) Attendre que le registre de transmission soit libre

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs

• Le flag TXE se met à 1 quand le registre de transmission est vide


while(LL_USART_IsActiveFlag_TXE(USART2)==0);
//transmettre les données
//...
//….

123
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
2) Transmettre les données
LL_USART_TransmitData8(USART2,c);

La fonction LL_USART_TransmitData8 écrit une donnée de 8 bits dans le registre de transmission (TDR)

__STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value)


{
USARTx->TDR = Value;
}

124
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
• Redéfinition de la fonction « printf »
#include <stdio.h>
int _write(int file,char * ptr, int len)
{
for (int i=0; i<len;i++)
{
while(LL_USART_IsActiveFlag_TXE(USART2)==0);
LL_USART_TransmitData8(USART2,*ptr);
ptr++;
}
return len;
}

• En ajoutant cette fonction dans le main.c par exemple, on peut utiliser la fonction « printf » pour
écrire dans un terminal virtuel (« Putty » par exemple)

125
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
• Redéfinition de la fonction « printf »
#include "main.h" int main(void)
#include "usart.h" { Commandes générées par
#include "gpio.h" STM32CubeIDE permettant
SystemClock_Config(); de:
static void LL_Init(void); MX_GPIO_Init();
void SystemClock_Config(void); MX_USART2_UART_Init(); • configurer la fréquence
#include <stdio.h> while (1) d’horloge
int _write(int file,char * ptr, int len) {
{ printf("Hello World!\n"); • configurer les GPIOs
for (int i=0; i<len;i++) } actifs par défaut (la led et
{ le bouton)
while(LL_USART_IsActiveFlag_TXE(USART2)==0); }
LL_USART_TransmitData8(USART2,*ptr); • configurer l’USART2
ptr++;
}
qu’on a activé dans
return len; STM32CubeIDE
}

126
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
• Redéfinition de la fonction « printf »

127
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
• Redéfinition de la fonction « printf »

int main(void)
{


SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();

while (1)
{
printf("Hello World!\n");
}

• Pour ce microcontrôleur, printf(« \n ») permet de passer à la ligne suivante mais pas de faire un retour à gauche
128
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
• Redéfinition de la fonction « printf »

int main(void)
{

LL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();

while (1)
{
printf("Hello World!\n");
}

129
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Réception des données
1) Vérifier qu’on vient de recevoir un caractère

Source : RM0367 Reference manual -- Ultra-low-power STM32L0x3 advanced ARM®-based 32-bit MCUs

• Le flag RXNE se met à 1 si le registre de réception (RDR) n’est pas vide


while(LL_USART_IsActiveFlag_RXNE(USART2)==0);
//traiter les données reçues
//...
//….

130
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Réception des données
2) Stocker les données reçues
c=LL_USART_ReceiveData8(USART2);

La fonction LL_USART_ReceiveData8 lit une donnée de 8 bits dans le register de reception (RDR)

__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx)


{
return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR));
}

131
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Réception des données
• Redéfinition de la fonction « scanf »
#include <stdio.h>
int _read(int file, char *ptr, int len) {
int count = 0;

while (count < len) {


while (LL_USART_IsActiveFlag_RXNE(USART2) == 0);
*ptr = LL_USART_ReceiveData8(USART2);
LL_USART_TransmitData8(USART2, *ptr);
ptr++;
count++;
if (*(ptr - 1) == 0x0D) {//si on reçoit le caractère carriage return
return count;
}
}
return count;
}

• En ajoutant cette fonction dans le main.c par exemple, on peut utiliser la fonction « scanf » pour lire dans un
terminal virtuel (« Putty » par exemple)

132
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
• Redéfinition de la fonction « scanf »
#include "main.h" int main(void)
#include "usart.h" {
#include "gpio.h"

static void LL_Init(void); SystemClock_Config();
void SystemClock_Config(void); MX_GPIO_Init();
MX_USART2_UART_Init();
#include <stdio.h>
int _write(int file,char * ptr, int len) char c;
{…. char chaine[10];
} int i;
int _read(int file, char *ptr, int len) {
…. while (1)
} {
scanf(" %c",&c);
scanf ("%s",chaine);
scanf("%d",&i);
printf("char=%c chaine=%s i=%d\n",c,chaine,i);
}
}

133
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Transmission des données
• Redéfinition de la fonction « scanf »
int main(void)
{

….
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();

char c;
char chaine[10];
int i;

while (1)
{
scanf(" %c",&c);
scanf("%s",chaine);
scanf("%d",&i);
printf("char=%c chaine=%s i=%d\n",c,chaine,i);
}
}

134
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série

• USART
• Exemple: Communication avec un module bluetooth

HC-05/ HC-06

Nucleo L053R8
UART1_TX PA9

UART1_RX PA10

3.3v
GND

A la différence d’un montage avec Arduino, on n’a pas


besoin d’utiliser un diviseur de tension entre la pin TX
(5V dans Arduino) du microcontrôleur et la RX (3.3V)
du module Bluetooth
135
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2

Vous aimerez peut-être aussi