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