Académique Documents
Professionnel Documents
Culture Documents
Cours 4
Cours 4
CHIRAZ TRABELSI
trabelsi@esiea.fr
• 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
5
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs
On relâche le bouton
On appuie sur le bouton
6
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs
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
8
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les boutons poussoirs
9
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel
• Ce microcontrôleur aurait besoin d’une centaine d’entrées pour gérer toutes les touches
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)
12
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel
Colonnes lignes
X1 X2 X3 X4 Y1 Y2 Y3 Y4
13
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le clavier matriciel
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)
• 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
Afficher distance
Attendre 1s
Signal analogique
• 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
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
21
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique
• Valeur numérique
• N= Ve/LSB
• 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
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:
• 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:
25
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La conversion analogique numérique
• Configuration du convertisseur
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
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
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)
{
• 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.
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
36
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique
• 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
38
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique
39
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique
• 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
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
• 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
44
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique
-90°
45
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Autre capteur numérique
• Exemples:
• Leds
• Afficheur 7-segments
• Afficheur LCD
• Moteurs
47
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les Leds
48
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les Leds
• Pour protéger la led on connecte toujours une résistance en série avec celle-ci
int main(void)
{
….
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
51
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
52
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
53
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
54
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
55
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
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
58
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
//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 à }
59
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
• 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
61
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
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
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
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
65
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
//activation du canal2
TIM22->CCER |= TIM_CCER_CC2E;
67
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
69
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
// Lancement du timer 22
TIM22->CR1 |= 1;
71
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
PWM
• 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
76
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu
77
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu
78
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu
75
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs à courant continu
• Le pont en H
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
• 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.
• 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
• 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
Servomoteur SG90
86
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs
87
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les servomoteurs
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
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
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
• Utilisations: Applications nécessitant une grande précision de positionnement: imprimante 3D, découpeuse
CNC, imagerie médicale, disques durs, etc.
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.
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
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
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
98
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
6 entrées de
commande
100
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
101
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• 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?
• 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?
103
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• 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
104
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les moteurs pas à pas
• Pour des applications basse vitesse nécessitant un couple important moteur pas à pas
106
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les décodeurs
• 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
• 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
109
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série
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
• 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
111
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La communication série
• 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
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
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
• 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?
• USART
1) Le mode asynchrone
……………………
• 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
• 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
• 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
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)
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
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)
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;
• 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