Vous êtes sur la page 1sur 2

Modulation de Largeur d'Impulsion (MLI, PWM)

Il est trs souvent ncessaire de faire varier la puissance transmise une charge. Par exemple, l'intensit d'une lampe doit varier ou la vitesse d'un moteur doit tre rgle. La premire ide qui vient l'esprit est de faire varier la tension ou le courant dans la charge. ais il faut pour cela des circuits lectronique complexes. Il est gnralement !eaucoup plus simple d'alterner des instants o" la puissance maximale est transmise la charge avec des moments o" aucune puissance n'est transmise. La technique la plus utilise est la Modulation de Largeur d'Impulsion # LI$ ou Pulse Width Modulation #PWM$ en anglais.

%omme on le voit sur la figure, le signal est de priode constante, mais la dure de la partie active du signal varie. &ans la premire partie, '() de la puissance maximale est envo*e la charge, vu que le signal est +,- durant '() du temps alors qu'il est +.- le reste du temps. &e mme, la puissance passe (.) au milieu du trac et /() sur la dernire partie. La frquence du signal va dpendre de l'application. Pour commander une diode lumineuse, la frquence doit tre suprieure ,..01, pour que l'oeil humain ne per2oive pas le clignotement. &ans ce cas, c'est !ien l'oeil qui effectue l'intgration du signal pour en percevoir une valeur mo*enne. Pour un moteur courant continu, ce sont la fois l'inductance de son circuit lectrique et son inertie mcanique qui participent cette intgration. Les frquences des signaux PWM peuvent aller couramment 3usqu' des centaines de 401. ais plus la frquence est leve, plus les pertes lectriques l'instant des commutation sont importantes et peuvent dissiper de l'nergie dans les lments de commutation. 5oici un programme qui gnre un signal PWM6
void main() { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= (1<< ); !"a# !ommand$=% ; !"a# t$mp&; vo'ati'$ !"a# i; ("i'$ (1) { P1O)T |= (1<< ); *o#(t$mp&=+; t$mp&<!ommand$; t$mp&++){ *o# (i=+; i< +; i++); , P1O)T -= .(1<< ); *o#(t$mp&=+; t$mp&<(1++/!ommand$); t$mp&++){ *o# (i=+; i< +; i++); , , ,

2010-2013 Pierre-Yves Rochat, pierre-yves.rochat@epfl.ch, version du 01 0! 2013

7prs les initialisations de la sortie et des varia!les, la !oucle infinie alterne la partie active et la partie inactive du signal. Les attentes sont o!tenues par une simple !oucle d'attente active, dont le nom!re d'instructions dtermine le temps. 7ttention6 le terme volatile est ncessaire pour que le compilateur, dans son mode optimis, ne supprime pas les !oucles for constatant qu'elles sont vides. %e programme donne l'impression que la diode lumineuse est demi8intensit. %'est li au fait que la rponse de l'oeil n'est pas linaire, mais logarithmique. 9n remarque aussi que le PWM est visi!le en dpla2ant rapidement la diode devant l'oeil. :eaucoup de microcontr;leurs disposent l'intrieur de circuits ddis facilitant la gnration de signaux P< . Ils sont !ass sur des timers #dcrits plus en dtail dans la fiche Les Timers$. &e manire simplifie, le principe est le suivant6

=0 H CNT = OC

Set Sortie PWM

Reset

=n compteur !inaire #"#$$ est actionn par une horloge de frquence rgla!le, drive de l'horloge du processeur. &eux comparateurs sont prsents. L'un permet de mettre la sortie , lors du passage du compteur la valeur ., l'autre permet de mettre la sortie . lorsque le compteur atteint la valeur contenue dans un registre #%"6 %utput "o&pare$. 5oici un programme pour le microcontr;leur M'P!30(2))3. >ote1 qu'il * a deux modles diffrents de ti&ers dans les processeurs ?P@A., selon le modle. Ici, le $i&er* est utilis.
void main(){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= (1<<0); // P110 $n &o#ti$ P1S2L |= (1<<0); // S3'$!tion d$ P110 po4# '$ tim$# T5+11 CCR+ = 10; // P3#iod$ d4 PW67 dan& '$ #$8i&t#$ d$ !ompa#ai&on + CCTL1 = O)T6OD9%; // CCR1 a!tivation d4 mod$ PW6 CCR1 = 10:; // va'$4# d$ 'a p3#iod$ a!tiv$ d4 PW6 (0 ; d$ 10) T5CTL = T5SS2L90 + 6C91; // !"oi< d$ '="o#'o8$7 mod$ montant7 &i8na' a!ti* > 1 ("i'$(1) { // i' n=? a p'4& #i$n > *ai#$ , , dan& 'a @o4!'$ p#in!ipa'$ A

Il n'* a malheureusement pas mo*en de choisir la pin sur laquelle les PWM est gnr. &ans ce cas, il s'agit de la pin P1.2, note aussi $*0.1 # $i&er0+*$. Bemarque1 la simplicit du programme et la !oucle ("i'$(1) totalement vide. Le processeur est donc li!re pour excuter d'autres tCches D
2010-2013 Pierre-Yves Rochat, pierre-yves.rochat@epfl.ch, version du 01 0! 2013