Timer PWM

Transcription

Timer PWM
COLDFIRE: LES TIMERS
Harmonisation de langages de programmation: uP Coldfire
Séance no. 3
IUT1
DGEII2
LPRO-SE
JE GOMEZ-BALDERAS
SOMMAIRE
1. Présentation Timers
2. Timers
3. Introduction
4. Principe de fonctionnement
5. Registres de configuration
6. Fréquences extrêmes du signal MLI
7. Broches multifonctions
MODULES TIMERS MCF5272
• Les
timers = compteur
• Le
ColdFire 5272 comporte 4 timers identiques et un timer
chien de garde.
• Caractéristiques
principales :
période maximale de 4s (15ns) ‣ sortie de résultat de
comparaison,
‣ prédiviseur configurable de 1 à
‣ 5 registres dédiés à chaque
256,
timer : TMRn, TRRn, TCAPn,
‣ entrée d'horloge externe,
TCNn, TCRn (n=0-3)
‣ fonction de capture,
‣ compteur 16 bits,
‣
MODULES TIMERS MCF5272
• Un
timer est un compteur sophistiqué permettant :
• De
générer des signaux avec des caractéristiques temporelles (donc
fréquentielles) précises. C’est le mode référence du timer.
• De
mesurer précisément des durées (donc des fréquences). C’est le mode
capture du timer.
• De
compter des événements. C’est le mode comptage d’impulsions du
timer.
• Un
timer spécial, le watchdog timer surveille l’absence de plantage du
microprocesseur.
FONCTIONNEMENT
• Le
cœur de chaque timer est constitué d'un compteur 16 bits
(TCNn)
• L'horloge
du compteur est issue d'un prédiviseur de rapport
compris entre 1 et 256
• L'horloge
alimentant le prédiviseur peut être externe (entrées
TINn), ou issue de l'horloge principale du processeur (après
division ou non par 16).
• Fonction
référence
• Le
timer peut être configuré pour compter jusqu'à atteindre une
référence contenue dans le registre de référence TRRn
• Une
fois la référence atteinte, et en fonction du bit FRR ("Free Run/
Restart", registre TMRn), le compteur peut continuer à compter
librement, ou bien être remis à 0 automatiquement
• Lorsque
la référence est atteinte, le drapeau REF (registre TERn)
passe à 1. Une interruption est demandée si le bit ORI ("Output
Reference Interrupt", registre TMRn) est à 1.
• Les
timers 0 et 1 possèdent une sortie TOUTn qui peut être
configurée (bit OM, "Output Mode", registre TMRn) pour basculer à
chaque fois que la référence est atteinte, ou pour délivrer une
impulsion, active au niveau bas lorsque la référence est atteinte.
• Fonction
capture
• Les
timers possèdent un registre TCAPn utilisé pour capturer
la valeur du compteur
• La
capture est déclenchée par un événement extérieur sur la
broche TINn (timers 0 et 1) ou UARTn_RxD (timers 2 et 3)
• Les
bits CE ("Capture Edge", registre TMRn) activent ce mode
et déterminent le front sur le signal d'entrée déclenchant la
capture
6.2.2. Fonction capture
SCHÉMA DE PRINCIPE DES
TIMERS
Les timers possèdent un registre TCAPn utilisé pour capturer la valeur du compteur. La capture est
déclenchée par un événement extérieur sur la broche TINn (timers 0 et 1) ou UARTn_RxD (timers 2 et 3). Les bits
CE ("Capture Edge", registre TMRn) activent ce mode et déterminent le front sur le signal d'entrée déclenchant la
capture.
La capture déclenche la mise à 1 du drapeau CAP (registre TERn) et une demande d'interruption.
6.3. Schéma de principe des timers
Registre de configuration TMRn
15
PS
.....
CE
8 7
6
Registre de capture
OM ORI FRR CLK RST
5
4
3
2
1
0
Capture sur :
TINn
TINn
TINn
Pas de capture
1/16
Prédiviseur
par PS+1
Horloge
système
TINn
(sauf mode capture)
CE
b7 b6
1 1
1 0
0 1
0 0
TCAPn_15 -------------- TCAPn_0
Compteur
TCNn_15 -------------- TCNn_0
Si ORI =1
Registre de référence
CLK
b2 b1
1 1
0 1
1 0
0 0
Page 10/24
TRRn_15 -------------- TRRn_0
Générateur
TOUT0 / TOUT1
si OM=1
=1
Registre d'évènement
b1
TERn
xxxxxxxxxxxxxx
Contrôleur
d'interruptions
TOUTn
si OM=0
b0
REF CAP
IUT1 – Dpt GEII2 - Informatique Industrielle : Coldfire-Périphériques
REGISTRES DES TIMERS
• Compteurs
(Timer Counter : TCN0-TCN3)
• Le
compteur est constitué d'un registre 16 bits. La lecture de ce
registre permet de connaître la valeur instantanée du compteur du
timer.
• Registres
de référence (Timer Reference Register : TRR0-TRR3) Le
registre de référence est d'une taille de 16 bits. Le contenu du
registre TRRn est comparé au compteur TCNn correspondant.
• Lorsque
l'égalité survient :
la sortie Tout du timer (seulement pour timers 0 et 1) bascule ou
génère une impulsion au niveau bas (voir bit OM de TMRn), une
interruption est générée si elle est autorisée (bit ORI de TMRn)
REGISTRES DES TIMERS
• Registres
de capture (Timer CAPture : TCAP0-TCAP3) Le registre de
capture (16 bits) permet de capturer la valeur instantanée du compteur
lors d'un événement:
• sur
l'entrée TIN0-TIN1 pour les timers 0 et 1
• sur
l'entrée RxD des UART 0 et 1 pour les timers 2 et 3
• Le
mode capture est activé par les bits CE du registre TMRn. Lorsqu'un
front (montant et/ou descendant, en fonction des bits CE) survient sur
cette entrée :
• la
valeur du registre TCNn est copiée dans TCAPn, une interruption
est générée, le drapeau CAP est mis à 1 (registre TERn)
TCAPn_15 -------------- T
CE
Capture
b7 b6
sur :
TINn 1 1
• Registres de drapeaux (Timer évent 1Register
TER0-TER3)
0
TINn
Le bit 1 de TERn est le drapeau
REF (Output REFerence event) , le
TINn 0 1
bit 0 est le drapeau CAP (CAPture event).
Pas de capture 0 0
REGISTRES DES TIMERS
• Les
drapeaux doivent être remis àCompteur
0 par le programmeur pour
que lePrédiviseur
timer cesse de demander une interruption au contrôleur
TCNn_15
-------------TCNn_0
par PS+1 (acquittement de la demande).
d'interruptions
de l'écriture
référenced'un 1 sur le bit correspondant.
mise à 0Registre
se fait par
TRRn_15 -------------- TRRn_0
Exemple en C de remise à '0' du flag REF du timer2 : =1
io_16(TER2) = 2; //masquage inutile
Exemple en C de remise à '0' des 2 flags du timer0 : io_16(TER0) = 3; //masquage inutile Registre d'évènement
b1
b0
TERn
xxxxxxxxxxxxxx REF CAP
• La
6.4.5. Registres de configuration (Timer Mode Register : TMR0-TMR3)
registre TMR (16 bits) permet de configurer le fonctionnement du timer.
• Registres Lede
configuration (Timer Mode Register
Bits Nom
: TMR0-TMR3)
Description
15-8
PS
"PreScaler". Cet octet défini le rapport de division du pré-diviseur d'horloge. Le rapport de division
est égal à PS+1. Si PS = 0 : l'horloge système (66MHz) est divisée par 1. PS = 255 : division par 256.
7-6
CE "Capture Edge". Valide le mode capture et définit le front actif du signal de capture.
00 Capture et interruption désactivées
01 Capture sur front montant et interruption générée lors d'un événement de capture
10 Capture sur front descendant et interruption générée lors d'un événement de capture
11 Capture sur n'importe quel front et interruption générée lors d'un événement de capture
5
OM "Output Mode". (Utilisé sur TMR0 et TMR1 seulement, réservé sur TMR2 et TMR3)
Fonctionnement de la broche TOUTn lorsque TCNn=TRRn :
0 Génération d'une Impulsion active au niveau bas (durée d'un cycle d'horloge système soit 15ns)
1 Inversion de TOUTn
Au reset, TOUTn est à 1 mais n'est pas disponible en sortie tant que PBCNT7 (pour TOUT0) ou
PDCNT6 (pour TOUT1) n'est pas configuré.
4
ORI "Output Reference Interrupt enable".
0 Pas d'interruption lorsque TCNn=TRRn. Le passage à 1 du drapeau REF ne provoque pas
d'interruption.
1 Interruption lorsque TCNn=TRRn activée. Le passage à 1 du drapeau REF provoque une
interruption.
3
FRR "Free Run/Restart"
0 Comptage libre : le compteur du timer continue de s'incrémenter après avoir atteint TRRn
1 Reset compteur : le compteur repart de 0 dès qu'il a atteint TRRn
2-1 CLK "input ClocK source" : source d'horloge du timer
00 Pas d'horloge, comptage arrêté.
01 Horloge système (66MHz)
10 Horloge système divisée par 16
11 TINn est la source d'horloge (sur front descendant) du timer correspondant. La fréquence
maximale de TINn est égale à la moitié de celle de l'horloge système (33MHz). Cette source
d'horloge n'est pas disponible pour les timers 2 et 3.
0
RST "ReSeT timer"
0 Une transition de 1 à 0 remet à 0 le timer (registre TCNn). Tant que RST reste à 0, le compteur
reste bloqué à 0.
1 Timer activé.
PWM
•PWM est l’acronyme de Pulse Width Modulation, (Modulation
de Largeur d’Impulsion ou MLI)
•Le MCF5272 comporte trois modules permettant chacun, par
la configuration de deux registres, de générer un signal MLI
•Les sorties de ces modules PWMn se nomment
PWM_OUT0, PWM_OUT1, PWM_OUT2
Description
n features of PWM module are:
INTRODUCTION
Double-buffered period and duty cycle
eft-aligned or center-aligned outputs
ight independent PWM channels using 8-bit period register or four PWM channels using 16-bit
eriod register.
yte-wide registers provide programmable duty cycle and period control
our programmable clock sources
Les modules PWM
1.24 Présentation
PWM
est l’acronyme
Pulse Width Modulation
Explanation
de Pulse Width Modulation, (Modulation de La
mple code shows how the PWM works employing
PWM signals through
the
MLI).8 different
Le MCF5272
comporte
trois modules permettant chacun, par la
VB board.
Half of these signals are displayed on 4 LEDs and the others can be corroborated using
•
Le rapport registres,
cyclique
d’un tel
est
entre
0 et
1
deα
un signal
signal
MLI.compris
Les sorties
de ces
modules
oscope. This demonstrates how to configure
the PWM module
in angénérer
easy way and allows
you
to
t very quickly in your projects.
PWM_OUTn
avec ntH
valant
et correspond
au rapport
/ T’ 0, 1 ou 2. Le signal en sortie d’un de ces
signal has a frequency and a duty cycle. In most applications, the frequency is fixed while the
le varies. Figure 1 illustrates a PWM signal.
Figure 22 avec les différentes notations qui seront utilisées.
Counter
Counter
Counter
Counter
PERIOD
PWM_OUTn
VMAX
tH
DUTY
Counter
Match
T'
Counter
Match
Figure 1. PWM Signal
0
t
Figure 22. Signal MLI disponible en sortie d’un module
Counter
Match
l purpose timer (GPT) using output compare mode can also implement a PWM signal. However,
M module is more precise with frequency and duty cycle.
Lesignal
rapport peut
cyclique
α d’un
tel signal
est faire
compris
entre 0laet vitesse
1 et correspo
•
Exemple:
ce
être
utilisé
pour
varier
ted period and duty register exist for each channel and are double buffered. So if a change occurs
amplification,d’une
ce signal
peut être
utilisé
varier la v
d’un moteurMoyennant
ou la luminosité
lampe,
avec
depour
trèsfaire
bons
la luminosité d’une lampe, avec de très bons rendements théoriques.
rendements théoriques, peuvent être utilisés pour fabriquer un
Les modules PWM peuvent même être utilisés pour fabriquer un con
convertisseur
numérique analogique
analogique rudimentaire : en appliquant le signal PWM_OUTn à l’entré
egisters, the change does not take effect until one of the following events occur:
he effective period ends
he counter resets to zero
he channel is disabled
ally, the PWM module can generate four types of signals:
enter-aligned with clock
PRINCIPE DE FONCTIONNEMENT
• La valeur d’un compteur 8 bits piloté par une horloge de période T est comparée
à la valeur stockée dans le registre PWWDn
• Tant que la valeur du compteur est inférieure ou égale à la valeur de PWWDn, la
sortie du module est à 1
• Dès que la valeur du compteur est supérieure à la valeur de PWWDn, la sortie
du module passe à 0
• Au bout de 256 T, le compteur repart à 0
• La sortie est restée à 1 pendant PWWDn x T.
Ainsi, le rapport cyclique α vaut
PWWDn / 256. Ses valeurs extrêmes sont 0 et 255 / 256. Un rapport cyclique de
1 n’est pas possible a priori
• La période T’ du signal MLI correspond à 256 T
mpulsion (Pulse Width register : PWWD0-PWWD2)
PRINCIPE DE FONCTIONNEMENT
bits. Le rapport cyclique est défini comme PWWDn/256. Sa valeur est donc
d'un double buffer qui permet sa modification en cours de fonctionnement. La
mpte que lorsque le compteur rebouclera de 255 à 0.
tn
de
ion (PWM Control Register PWCR0-PWCR2)
contenu de PWWDn, la sortie est à 1. Lorsque le compteur dépasse PWWDn, la sortie bascule à 0. Le compteur
réinitialise automatiquement à 0 lorsqu'il a atteint 255.
SCHÉMA DE PRINCIPE
Un prédiviseur d'horloge configuré dans le registre PWCRn permet de régler la fréquence du signal d
sortie.
7.3. Schéma de principe
Registre de largeur d'impulsion
PWWDn_7------ PWWDn_0
Comparateur
Horloge
système
Prédiviseur
par 2CKSL
7 ------ 0
1
Compteur
EN FRC1 LVL 7 6 5 4
CKSL
3 .. 0
PWM_OUTn
Registre de
contrôle PWCRn
LVL
Notes : Les sorties PWM_out1 et 2 sont câblées sur des broches multifonctions. Afin d'utiliser les modules PWM 1 et 2, il est
impératif de configurer à "01" les bits 15-14 du registre PDCNT pour le module 1, et les bits 13-12 pour le module 2.
L'utilisation de PWM_out1 est incompatible avec celle de TOUT1. L'utilisation de PWM_out2 est incompatible avec celle
deTIN1.
REGISTRES DE CONFIGURATION
• Le
• Le
registre 8 bits PWWDn permet de régler le rapport cyclique
registre PWCRn permet d’effectuer quelques réglages,
notamment celui de la division de l’horloge système avant
d’attaquer l’entrée d’horloge du compteur 8 bits (bits CKSL)
REGISTRES DE CONFIGURATION
•
Possibilités de :
✴choisir
le niveau de la sortie PWM_OUTn quand le module
est désactivé (bit LVL)
✴forcer
cette sortie au niveau haut quand le module est activé,
et donc d’obtenir un rapport cyclique égal à 1 (bit FCR1)
✴activer
ou non le module (bit EN)
7.4.2. Registre de configuration (PWM Control Register PWCR0-PWCR2)
Ce registre a pour taille 8 bits. Il configure le fonctionnement du module PWM correspondant.
De même que pour le registre PWWDn, des modifications sur ce registre ne seront prises en compte qu'à la
fin du cycle de comptage en cours, à l'exception du bit EN (enable) qui permet une désactivation immédiate de la
sortie, quel que soit l'état actuel du module. Par exemple, si on souhaite modifier immédiatement (sans attendre la
fin du cycle de comptage en cours) la valeur du prédiviseur, il faut désactiver la sortie (mise à 0 de EN), modifier le
prédiviseur, puis réactiver la sortie.
REGISTRES DE CONFIGURATION
Bits Nom
7
EN
Description
"Enable". Active ou désactive le module PWM.
0 Désactive le module. Le module est en mode économie d'énergie et le prédiviseur ne compte pas.
La sortie est bloquée dans l'état défini par le bit LVL.
1 Module PWM activé.
6
FCR1 Force la sortie au niveau haut.
0 Fonctionnement normal de la PWM (valeur par défaut au reset)
1 Sortie forcée au niveau haut. FCR1 n'est pris en compte qu'au rebouclage du compteur de PWM.
EN est prioritaire sur FCR1, ce qui signifie que si LVL=0 et que EN=0 (PWM désactivée) alors la
sortie sera au niveau bas, même si FCR1=1.
5
LVL "disable LeVeL". Définit le niveau logique de la sortie lorsque le module est désactivé.
0 Sortie au niveau bas lorsque EN=0.
1 Sortie au niveau haut lorsque EN=0.
4
-
Réservé, devrait être à 0.
3-0 CKSL Définit le rapport de division du pré-diviseur d'horloge pour régler la période du signal PWM.
Le rapport de division est égal à 2CKSL :
CKSL[3..0] Rapport de division
0000
1
0001
2
0010
4
........
1111
32768
FRÉQUENCES EXTRÊMES DU
SIGNAL MLI
activé, et donc d’obtenir un rapport cyclique égal à 1 (bit F
du module (bit EN).
• La fréquence f ' du signal MLI peut présenter 16 valeurs possibles,
réglables
par les 4 bits CKSLextrêmes
1.27 Fréquences
du signal MLI
f
'
La
fréquence
du
signal
MLI
peut
présenter
16
valeurs
• Ainsi, si l’horloge système est à 66 MHz
CKSL. Ainsi, si l’horloge système est à 66 MHz :
6
6
66 × 10
66 × 10
f 'MAX =
= 258 kHz et f 'MIN = 15
= 8 Hz.
256
2 × 256
1.28 Broches multifonctions
BROCHES MULTIFONCTIONS
• Les sortie PWM_OUT1 et PWM_OUT2 sont sur des broches
multifonctions
• Il y a donc lieu de configurer le registre PDCNT pour choisir ces
sorties
#include "stdlib.h"
#include "mcf5272.h"
//fonctions standard
//Entete de definition des adresses des registres des periph.
unsigned char rc; //image du registre PWWD0
int touche;
//lecture touche clavier
void init (void)
{
/*-----init du module PWM--------*/
rc = 0;
io_16(PDCNT) = io_16(PDCNT) & 0x5fff;
io_16(PDCNT) = io_16(PDCNT) | 0x5000;
io_8(PWWD1) = rc;
//Pulse Width Width Data (module 0) sur 0% a l'init
io_8(PWCR1) = 0x8D; //Pulse Width Configuration Register (module 0)
/*b7 : PWM on
b6 : pas de forcage a 1 de la sortie
b5 : niveau bas quand la pwm est off
b4 : reserved
b3-0 : div horloge par 2^13 => Fclk = 8,056 kHz => Fpwm = Fclk/256 = 31,47 Hz*/
}
int main(void)
{
printf("+ pour augmenter, - pour diminuer\n");
printf("Echap pour quitter\n");
for(;;)
{
touche = getch();
switch (touche)
{
case '+' :
if (rc < 246)
rc += 10;
io_8(PWWD0)=rc;
break;
case '-' :
if (rc > 9)
rc -= 10;
io_8(PWWD0)=rc;
break;
}
}
}
case 27 :
return(0);
er plus loin…
NOMBRES
RÉELS
SIGNÉS
:
Nombres
réels
signés
:
VIRGULE
virgule
flottanteFLOTTANTE
au format IEEE 754, un nombre en virgule flottante se
code sur 32 bits :
s
(signe)
1bit
e
(exposant)
8 bits
m
(mantisse)
23 bits
aller plus loin…
Nombres réels signés :
virgule flottante
Principe : il faut chercher s, e, et m tels que le nombre
N puisse s'écrire sous la forme
s
N = ( −1) (1, m ) * 2
e − 127
virgule flottante
démarche :
•  déterminer le signe : s = 0 si N ≥ 0 et s = 1 si N < 0
•  coder la valeur absolue du nombre N en binaire
•  soit x le nombre de rangs dont il faut décaler la virgule
(sur le nb binaire) pour avoir 1,… => e = x + 127
•  coder e sur 8 bits
•  quand on a décalé la virgule de x rangs, tout ce qui est à
droite du 1 correspond à m (compléter par des 0 à droite
si nécessaire pour avoir m sur 23 bits)
39
virgule flottante
Exemple : coder -5 au format IEEE 754
!  s = 1 car N est négatif
!  (5)d = (101)b
!  101,0… => 1,01 => x = 2 => e = 129
!  e = 10000001
!  m = 01000000000000000000000
!  -5 se code donc
1 10000001 01000000000000000000000
au format IEEE sur 32 bits
virgule flottante
Exceptions :
!  représentation du nombre 0 : tous les bits de
l'exposant et de la mantisse sont nuls, le signe est à
0 ou à 1
!  représentation de l'infini : tous les bits de l'exposant
à 1, ceux de la mantisse à 0, et le signe à 0 ou à 1
!  représentation d'un nombre non valide (NaN pour
"not a number", obtenu en divisant 0 par 0 ou l'infini
par l'infini) : tous les bits de l'exposant à 1, au moins
un bit de la mantisse non nul, et le signe à 0 ou à 1
41

Documents pareils