Vous êtes sur la page 1sur 5

Formation STM32

La PWM du STM32

Formation / Evaluation
GPIO
Timer

TP sur la PWM (Pulse Width Modulation)

IT
PWM

1- Le PWM en gnral
2- Travail de l'tudiant configuration d'un timer en PWM

ADC
Projet
Voilier

Individuelle

Rapport

1- La PWM en gnral
1.1 Gnralits
u(t)
vcc

Th

STM32
u(t)

Le signal u(t) est priodique, et possde donc une frquence F=1/T. Sa forme est numrique, la
dure de l'impulsion note Th est susceptible de varier de 0 T.
1.2 Utilisation en transmission d'information
Dans ce cadre, les deux dispositifs qui vont communiquer (l'metteur et le rcepteur d'information)
doivent s'entendre sur la frquence du signal PWM. Une fois cela rsolu, le rcepteur sera attentif
uniquement la dure de chaque impulsion pour en dduire l'information porte.
L'metteur (STM32) labore le signal PWM en contrlant numriquement la largeur de chacune des
impulsions. L'tendue de valeurs possibles, finie, constitue la rsolution de la PWM.
Frquence de PWM : 1KHz
Rsolution : 256 valeurs possibles pour la dure Th. Dit autrement, une rsolution de 8 bits.
Pour information, on pourra dire de cette transmission qu'elle a les caractristiques suivantes :
Vitesse de transmission ou dbit de moments (dbit d'impulsions dans notre cas): 1kBauds
Dbit binaire : 8kbits/s ou 1kbyte/s (byte = octet)
Dans le cas qui nous intresse, le servo-moteur travaille une frquence de 50Hz ou 40Hz (selon le
Formation_STM32_PWM.odt

1/5

Periph team GEI INSA Toulouse

Formation STM32

La PWM du STM32

type). Sa priode est donc de 20 ms ou 25 ms. Il est sensible des largeurs d'impulsions qui sont
comprises entre 1 ms et 2 ms environ. Ds qu'il reoit une impulsion, il traduit sa largeur en un
angle mcanique. Autrement dit, pour 1 ms on obtient l'angle minimum de rotation de l'arbre du
servo-moteur, pour 2 ms l'angle maximum.

1.3 Utilisation pour gnrer une tension analogique


Dans ce cas, on change totalement la manire de voir la PWM. Bien que vhiculant une information
au sens des transmissions, la grandeur qui va nous intresser au final, n'est plus directement la
dure. Nous allons voir en effet, que le signal PWM va tre associ un filtre passe-bas, et ne
pourra en tre dissocie pour l'obtention de la tension analogique.
Prenons un exemple de signal PWM:

STM32

u(t)

u(t)
passe-bas
u(t)
vcc

Th

Th

T
t

Th(t)
Rgime transitoire
d au filtre

v(t)
vcc

t
t0

t1

Le chronogramme du milieu peut surprendre, mais il traduit bien le que fait le STM32, t0,
provoque un changement de dure Th , ce qui s'apparente un chelon de dure.
Analyse :
De t = 0 t= t0 (et pout t>t1) , la dure des impulsions est constante (environ le de la priode,
puis ). Sur ces intervalles de temps on peut calculer trs simplement la valeur moyenne de u(t),
elle vaut (de 0 t0):
V cc
Th
, est le rapport cyclique de u(t)
u moy = .V cc = .V cc =
T
4
Un filtre passe-bas laisse toujours passer la valeur moyenne de la tension d'entre. Si par ailleurs, sa
Formation_STM32_PWM.odt

2/5

Periph team GEI INSA Toulouse

Formation STM32

La PWM du STM32

frquence de coupure est trs basse devant la frquence PWM, le filtre va supprimer toutes les
ondulations pour ne garder que la composante continue.
Entre t0 et t1, on observe un rgime transitoire. Plus la frquence de coupure est basse, plus ce
rgime est long, ce qui peut tre gnant. On a donc un compromis trouver entre ondulation
acceptable, et dure du rgime transitoire pas trop longue.
On retiendra :
Un signal PWM est caractris par :
sa frquence
sa rsolution
Si la PWM est utilise comme un DAC (Digital to Analog Converter), c'est dire pour laborer une
tension analogique, il faut lui associer un filtre passe-bas de frquence de coupure adapte au
cahier des charges, en tout cas faible par rapport la frquence PWM.
Habituellement, un rapport de 10 20 entre frquence PWM et frquence de coupure du filtre
passe-bas (RC) est convenable.

1.4 Structure habituelle d'une unit PWM dans un microcontrleur


La PWM utilise systmatiquement un Timer auquel on associe un nouveau registre, dit registre de
comparaison (compare register), comme le montre le schma ci-dessous :
up/down on/off

quartz

16 bits (par
exemple)

Logique de
contrle
Demande

compteur

prescaler
broche

Ordre de
chargement

d'interruption
(Interrupt
Request)

Autoreload

Comparateur
logique

Set/
reset

Alternate
function
vers IO

Compare
register

Timer en mode PWM

Le Timer devra tre configur pour qu'il dborde la frquence PWM. Au dbordement, une
Formation_STM32_PWM.odt

3/5

Periph team GEI INSA Toulouse

Formation STM32

La PWM du STM32

broche ddie passe '1' grce une logique squentielle (RS par exemple). Au moment ou le timer
atteint la valeur contenue dans le registre de comparaison, alors la broche passe '0'. On obtient ansi
la PWM souhaite, avec la dure d'impulsion contrle par le registre de comparaison.
Chronogramme :

CNT
autoreload

Compare
register

t
Tension u(t)
sur la broche
PWM

Dans bien des cas, un bit de configuration permet d'inverser la polarit du signal de sortie afin de
ranger presque directement dans le registre de comparaison, la dure l'tat haut.
En rsum, 2 paramtres du priphrique Timer en mode PWM vont influer sur les 2 paramtres de
la PWM (rsolution et frquence), ce sont :
la frquence d'entre du compteur
la valeur de l'autoreload

2- Travail de l'tudiant configuration d'un timer en PWM


2,1 Questions prliminaires
1- Comment configurer l'entre/sortie d'un priphrique Timer, Ocy en sortie ( y de 1 4, puisque 4
entres/sorties par timer) ?
2- Quel bit permet de contrler la polarit de la sortie y ?
3- Quel bit permet de valider la sortie y ?
4- On propose d'utiliser le mode 1 pour la PWM. De quoi s'agit-il ? Quel champ de bit lui est
associ ?
NB: Le timer 1 est plus complexe que les autres. Un bit supplmentaire doit tre mis 1 pour
valider la sortie y, c'est le bit MOE.
NB: Bien sr, vous utiliserez la fonction dj crite lors du TP Timer, pour rgler la frquence de la
PWM.

Formation_STM32_PWM.odt

4/5

Periph team GEI INSA Toulouse

Formation STM32

La PWM du STM32

2,2 Travail demand


Vous devez complter le travail fait sur les Timers pour intgrer les fonctionnalits PWM. Durant
cette sance de TP, nous vous demandons de :
trouver les fonctions ncessaires pour configurer et utiliser PWM sur n'importe quelle voie
des Timers 1,2,3,4 et 5,
crire les dclarations des fonctions du PWM dans le fichier .h que vous avez crer au cours
du TP sur les Timers,
crire les squelettes de ces fonctions dans le fichier .c correspondant,
crire dans le fichier contenant le main, le test d'un PWM.
NB : Nous ne vous demandons pas d'crire le corps des fonctions.
titre d'exemple, nous vous indiquons ci-dessous une fonction.
vu16 PWM_Init(TIM_TypeDef *Timer, char Voie, float Frequence_PWM_Khz);
//
// Cette fonction initialise la voie spcifie du timer voulu en PWM.
// La frquence souhaite est passe en paramtre.
// La fonction renvoie un entier qui correspond la rsolution de la PWM pour
// pouvoir ensuite rgler les rapports cycliques.
//
// 3 Timer "general Purpose", TIM2, TIM3 et TIM4 + TIM1
// Chacun d'entre eux dispose de 4 voies de sorties numrotes de 1 4
// Mapping des IO:
// TIM1_CH1 - PA08
TM2_CH1_ETR - PA0
TM3_CH1 - PA6
// TIM1_CH1 - PA09
TM2_CH2 - PA1
TM3_CH2 - PA7
// TIM1_CH1 - PA10
TM2_CH3 - PA2
TM3_CH3 - PB0
// TIM1_CH4 PA11 TM2_CH4 - PA3
TM3_CH4 - PB1

TIM4_CH1 - PB6
TIM4_CH2 - PB7
TIM4_CH3 - PB8
TIM4_CH4 - PB9

NB: La fonction d'initialisation ne gre pas la broche d'IO associe. C'est au programme appelant de
grer cela. En particulier, vous allez devoir complter votre pilote GPIO, pour qu'il propose une
fonction qui place en alternate output push pull une broche donne.

Formation_STM32_PWM.odt

5/5

Periph team GEI INSA Toulouse