6 PWM
6 PWM
6 PWM
Matériel : Ce TP utilise une NUCLEO-F411RE, mais n'importe quelle autre carte NUCLEO convient.
Logiciel : MBED
www.multisim.com
Tension sinusoïdale modulée PWM à l’aide d’un signal triangulaire et d’un comparateur.
La valeur moyenne est récupérée simplement par un filtre passe bas.
Exemple de structure d'un hacheur permettant la commande d'un moteur à courant continu par PWM.
K est un interrupteur
électronique, généralement un
MOSFET.
K fermé le courant passe de
l’alimentation vers le moteur.
K ouvert l'énergie emmagasinée
dans l'inductance du moteur s'évacue sous forme d'un courant traversant la diode (dite de roue libre)
MBED propose une bibliothèque PWM très simple d'emploi, qui permet de définir la période et le rapport
cyclique d'un signal PWM. Attention tous les GPIO ne supportent pas le mode PWM.
https://os.mbed.com/docs/v5.7/reference/pwmout.html
Pour tester le mode PWM, créer un nouveau projet avec comme modèle "Output a PWM signal"
Tester ce programme qui contrôle l'intensité lumineuse sur la LED verte
#include "mbed.h"
PwmOut mypwm(LED1); // Attention tous les GPIO ne supportent pas le PWM
int main() {
mypwm.period_ms(10);
mypwm.pulsewidth_ms(3);
printf("pwm set to %.2f %%\n", mypwm.read() * 100);
while(1) ;
}
Exercice 1:
Réaliser un programme en C (C++), faisant varier l’intensité de la LED verte de +10% toutes les 100mS. La
période PWM sera de 1mS.
La LED est allumée durant l’état haut de la sortie. La puissance lumineuse restituée est proportionnelle au
rapport cyclique η=th/T (th= temps état haut, T est la période ici 1KHz). La persistance rétinienne fait office
de filtre passe bas. (Il est admis que l’œil humain ne perçoit pas les variations de lumière inférieure à 30mS)
Exercice 2:
Un signal PWM peut permettre de faire clignoter automatiquement une LED, avec les mêmes structures que
pour l’exercice, la fréquence est maintenant de 1Hz et le rapport cyclique est de ½ (th=T/2). Une fois le
périphérique configuré et activé, le clignotement est automatique et n’est plus géré par le logiciel, le
programme comportera une boucle infinie vide.
Exercice 3 :
La fonction PWM permet la synthèse de signaux, la valeur moyenne du signal PWM étant directement
proportionnelle au rapport cyclique, celle-ci peut être récupérée par un simple filtre passe-bas. Ainsi il est
possible de générer un signal analogique dont la fréquence est très inférieure à celle de la PWM, en filtrant
la fréquence PWM on récupère les fréquences de modulation.
Voici un exemple de spectre d’un signal PWM de fréquence 50KHz modulé par une sinusoïde de fréquence
1KHz
En plaçant sur ce signal un filtre passe bas (en rouge) éliminant la porteuse PWM (et donc toutes les
harmoniques) , on récupère le signal sinusoïdal modulant.
La sortie du signal PWM s’effectuera sur un connecteur Arduino de la carte Nucleo et sera reliée à un filtre
RC passe bas (prendre C=100nF) du premier ordre et de fréquence de coupure 100Hz . (On rappelle que
ωc=1/RC),
La fréquence du signal PWM sera de 1KHz.
A l’aide d’un tableur on génère 20 valeurs comprises entre 0uS et
1000uS suivant une fonction sinusoïdale. 1,2000
Dans le programme, ces valeurs entières seront introduites dans 1,0000
un tableau qui servira à produire les PWM successives. 0,8000
0,6000
Le programme utilisera le tableau de vingt valeurs et mettra à jour
la PWM (méthode pulsewidth_us) périodiquement de manière à 0,4000
produire une onde sinusoïdale de fréquence 10Hz. 0,2000
La temporisation entre deux valeurs PWM sera réalisée avec une 0,0000
fonction wait dans un premier temps.
Vérifier le résultat à l’aide d’un oscilloscope.
Interpréter le résultat, indiquer comment l’améliorer.
Améliorer le programme en remplaçant la méthode wait par un objet Ticker. En quoi cette seconde solution
est elle préférable ?
On remarque dans le tableau ci-après une répétition des valeurs de th. Comment améliorer le programme
en réduisant la taille du tableau à 10 valeurs tout en conservant la même résolution ?