Cours sur la modulation de largeur d'impulsion et PWM
![Cours sur la modulation de largeur d'impulsion et PWM](/images/remos_downloads/id-11250.11250.pdf_thumb_prev.jpg)
Cours/TD d’informatique embarquée
Utilisation d’un microcontrôleur MBED
Partie 6
Modulation de Largeur d'Impulsion et Machine à Etat PWM & State machine
Plan du cours
6.1. Modulation de Largeur d'Impulsion (PWM)
6.2. Application utilisant des PWM
6.3. PWM sur mbed
6.4. Contrôle d'un servo moteur
6.5. Machine à état
6.6. Codage des machines à état en langage C
6.1. Modulation de Largeur d'Impulsion (PWM)
Une modulation de largeur d’impulsion (P________ W______ M____________ = PWM) est une méthode simple qui permet de _______________________________________________________ ________________________________________________________________________________
La commande par PWM est utilisée dans de nombreuses applications (communications, robotique, moteurs…)
En général la période est constante et c’est la largeur de l’impulsion, c’est-à-dire la durée _________________________, qui est variable.
Le rapport cyclique est
__________________________________________________________________________________ __________________________________________________________________________________.
Rapport cyclique (duty cycle) = 100% * (_________________)/(période)
A chaque instant le signal PWM a une valeur moyenne (average en anglais) matérialisée ici par un ligne en pointillés
Si le temps haut est petit la valeur moyenne sera _____________________ Si le temps haut est grand la valeur moyenne sera ____________________ En contrôlant le rapport cyclique on contrôle donc la valeur moyenne.
La valeur moyenne du signal PWM peut être obtenue avec un _____________________________ Si la fréquence de coupure est très ____________________ à la fréquence du signal Vout sera une grandeur analogique
![](/images/remos_downloads/detail/112/id-11250.11250.pdf-003.jpg)
Condition :
En pratique, il n’est pas toujours nécessaire de réaliser ce filtrage, la plupart des systèmes physiques ont des caractéristiques physiques qui agissent comme ____________________________________.
6.2 Applications utilisant des PWM
Composants utilisant la PWM en robotique
• Contrôle des moteurs à courant continu (commande du hacheur)
• Commande des servo-moteurs
• Capteur à sortie PWM (ex : télémètre SFR05)
• Communication (modulation d’impulsion codée) utilisée en audio
Avantages :
• Contrôle par microcontrôleur possible
• Bon rendement énergétique
• Meilleure tolérance au bruit
• Pas d’effet de dérive en température
6.3 PWM sur mbed
6 sorties PWM sont disponibles sur les broches
_________________________________
La classe __________________ permet de contrôler la ____________ et le ______________________________ des sorties PWM
Les méthodes associées au type PwmOut sont dans le tableau ci-dessous :
PwmOut | Utilisation/méthode |
PwmOut | Crée une variable de type PWM associée à une broche ![]() |
write | Fixe le rapport cyclique, float compris entre 0.0 et 1.0 |
read | Renvoie la valeur du rapport cyclique, float compris entre 0.0 et 1.0 |
period period_ms period_us | Fixe la valeur de la période, en secondes (float), millisecondes (int), et microsecondes (int), en gardant le rapport cyclique constant |
pulsewidth pulsewidth_ms pulsewidth_us | Fixe la valeur de la largeur de l’impuslion, en secondes (float), millisecondes (int), et microsecondes (int), en gardant la période constante |
Exemple : Génération d’un signal PWM de fréquence 100Hz et de rapport cyclique 35%
#include "mbed.h" PwmOut PWM1(p21); int main() { PWM1.period(0.010); // fixe la période à 10ms PWM1.write(0.35); // fixe le rapport cyclique à 35% while(1){ } } |
Exemple : Contrôle de l’intensité lumineuse d’une LED
#include "mbed.h" Serial pc(USBTX, USBRX); PwmOut Led(LED1); float intensite=0.0; int main() { pc.printf(“Contrôle de l’intensité de la Led\n\r"); pc.printf("Pressez ‘+’ ou ‘-’ \n\r"); while(1) { ![]() char c = (); wait(0.001); if((c == ‘+') && (intensite < 0.1)) { intensite += 0.001; Led.write(intensite); } if((c == ‘-') && (intensite > 0.0)) { intensite -= 0.001; Led.write(intensite); } pc.printf("%c %1.3f \n \r",c, intensite); } } |
6.4 Contrôle d'un servo moteur
Le chronogramme ci-dessous nous explique comment contrôler la position d’un servo-moteur avec une PWM
Le servo moteur _________________________________________________________________ que peut en fournir un USB standard. Il faudra l’alimenter avec _________________________________ De plus il faut un ___________ et une _________ pour augmenter le niveau de commande à 3,3V.
Exercice 1 :
Réaliser et tester un programme permettant de régler la position du servo moteur avec deux touches du clavier.
Exercice 2 :
Modifier le programme précédent en ajoutant le positionnement à 0° ou 180° avec deux touches supplémentaires. Vous devez créer des fonctions et créer une bibliothèque de fonctions (.h et .cpp).
Exercice 3 :
Réaliser et tester un programme permettant de régler la position du servo moteur avec un potentiomètre. Faites une mise à l'échelle pour qu'un tour de potentiomètre réalise la variation de 0 à 180° sur le servo.
6.5 Machine à état
Une machine à état permet de _________________________________________________________ Exemple de système séquentiel simple :
1. Le robot doit démarrer lorsqu'on enlève le jack.
![](/images/remos_downloads/detail/112/id-11250.11250.pdf-008.jpg)
2. Le robot doit s'arrêter lorsqu'on actionne le contact de fin de course.
3. Le robot doit rester arrêté lorsqu'on replace le jack.
On peut alors reprendre le fonctionnement à la première étape.
Initialisation - Arrêt Jack-retiré - Déplacement Obstacle percité - Arrêt
Le nombre d'états dans lesquels le robot peut se trouver est fini (ici 3 états) :
• Attente de départ : le robot est à l'arrêt, la fiche jack est en place
• En marche : le robot avance
• Arrêt sur obstacle : le robot a heurté un obstacle et s'est arrêté
On parle de machine ______________________________ ou d__________________________.
Les sorties du système ne dépendent que de ________________________________.
• Si on connaît l'état du robot, on sait comment agir sur les sorties : les moteurs peuvent fonctionner ou non.
Pour passer d'un état à l'autre, c'est-à-dire les ____________________, on observe les entrées du système.
Remarque : Cette machine à états finis particulière est une machine de Moore très utilisée en informatique industrielle.
ETATS :
• Un rond représente ________________________________.
• Chaque état est numéroté de manière unique.
• A un instant donné, le système se trouve dans un et un seul état.
TRANSITIONS :
• Une flèche représente ___________________________________________________.
• A chaque flèche est associée une condition.
![](/images/remos_downloads/detail/112/id-11250.11250.pdf-009.jpg)
• Si on se trouve dans un état et qu'une transition est vraie, alors ________________________
Remarques :
– Les transitions qui partent d'un même état doivent être exclusives.
– Si aucune transition ne peut être réalisée, __________________________________________
Exercice 4 :
Dessiner une machine à état modélisant une machine à café à capsule (touche café court et touche café long, montée en température, arrêt automatique )
On définit une variable etat pour coder l'état du système
On initialise etat à la valeur de l'état initial du système (ici etat=0;)
A l'intérieur de la boucle infinie du programme :
1. On effectue __________________________________________________________________
2. On exécute une instruction switch pour ___________________________________________ 3. On exécute une instruction switch pour ___________________________________________
#include "mbed.h"
DigitalIn broche5(p5),broche6(p6); //Jack et Fin de Course DigitalOut moteur(LED1); //commande du moteur (PullUp); (PullUp); int main(){
int etat = 0; while(1){ //1. LECTURE DES ENTREES jack = (); fin_de_course = (); //2. GESTION DE L’ETAT switch(etat){ case 0 : if(jack==0) etat=1; break; case 1 : if(fin_de_course==0) etat=2; break; case 2 : if(jack==1) etat=0; break; } //3. GESTION DES SORTIES EN FONCTION DE L’ETAT switch(etat){ case 0 : moteur.write(0); break; case 1 : moteur.write(1); break; case 2 : moteur.write(0); break; } } ![]() } |
Exercice 5 :
Réaliser un passage à niveau avec des feux (LEDs) et une barrière automatique (servo moteur), un bouton et deux capteurs de présence (photorésistances) en utilisant une machine à état.
Questions de cours :
Q1) Que signifie PWM ?
Q2) Expliquer ce qu'est le rapport cyclique
Q3) Quel est la formule donnant la valeur moyenne d'une PWM en fonction du rapport cyclique ? ?
Q4) Que faut-il faire pour obtenir une tension analogique proportionnelle au rapport cyclique d'une PWM ?
Q5) Ecrire les lignes de code permettant de fixer la période d'une sortie PWM dont la fréquence est de 100kHz et la durée du temps haut à 3µs.
Q6) Donner les lignes de code permettant positionner le servo moteur à 135°.
Q7) Dans "automate fini", que signifie le mot "fini" ?
Q8) Que signifie " Les transitions qui partent d'un même état doivent être exclusives" ?
Q9) Quelles sont les 3 parties du codage en C d'une machine à état ?
page