Vous êtes sur la page 1sur 6

TPN°5 Gestion du temps et du signal

PWM
1- Gestion du temps
Le timer0 est un compteur qui assure deux fonctions :
- compter les impulsions reçues sur le pin RA4/T0CKI. Nous dirons dans ce
cas que nous sommesen mode compteur.
- compter les cycles d’horloge du PIC lui-même. Dans ce cas, comme
l’horloge est fixe, nous compterons donc en réalité du temps. Donc,
nous serons en mode « timer ».

Les registres associés au Timer0 :


Le registre INTCON : INTerrupt CONtrol Register

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF


bit7 bit0

Nom Fonctions ou états


bit7 GIE : Global Interrupt Enable bit 1 : autoriser toutes les interruptions
0 : bloquer toutes les interruptions
bit5 T0IE : TMR0 overflow Interrupt 1: autoriser l’interruption sur le Timer0
enable bit 0: bloquer l’interruption sur le Timer0
bit2 T0IF : TMR0 Overflow interrupt 1 : débordement du TMR0 (doit être
flag remis à zéro par soft)
0 : pas de débordement

Le registre OPTION_REG : Option Register :

RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0


bit7 bit0
Nom Fonctions ou états
bit5 T0CS : TMR0 Clock Source Select 1 : transition sur RA4/T0CKI/CMP2 pin
bit 0 : clock interne
bit4 T0SE : TMR0 Source Edge Select 1: incrémentation sur front montant sur
bit RA4 pin
0: incrémentation sur front descendant sur
RA4 pin
bit3 PSA : Prescaler Assignement bit 1 : Prescaler assigné au watchdog
0 : Prescaler assigné au Timer0
bit2-1-0 PS<2 :0> : Prescaler Rate Select
bits:
Prédiviseur : un diviseur
d’événements situé AVANT l’entrée
de comptage du timer0. Nous
pourrons décider d’avoir
incrémentation de tmr0 tous les 2
événements par exemple, ou encore
tous les 64 événements.

1-2-Travail demandé :
RELAI
Dans ce projet la minuterie, sur la base de registre TMR0, est utilisée comme un compteur.
L'entrée de comptage est reliée à un bouton-poussoir Input de sorte que toute pression sur
Input provoque TMR0 à compter une impulsion. Lorsque le nombre d'impulsions
correspond au nombre stocké dans le registre nommé TEST, la valeur logique 1 (5V)
apparaît sur le pin3 de PORTD. Cette tension active un relais électromécanique, et ce bit est
appelé « RELAI » dans le programme.

Dans le registre de TEST est stocké un nombre de 5 pour cet exemple. Bien sûr, il peut être
n'importe quel nombre défini comme une constante. Par ailleurs, le microcontrôleur peut
activer un autre appareil au lieu de relais, tandis que le capteur peut être utilisé à la place du
bouton-poussoir. Cet exemple illustre l'une des applications les plus courantes du
microcontrôleur dans l'industrie ; quand quelque chose est effectué autant de fois que
nécessaire, puis quelque chose d'autre doit être activé ou désactivé, etc.
Code-source 1
2- Signal PWM :
2-1- Principe :
Un signal MLI (PWM) possède une période fixe mais une longueur d’impulsion variable. Le
rapport entre la largeur de l’impulsion (ton) et la période (T) est la caractéristique principale
d’un signal PWM. C’est le rapport cyclique (Duty cycle). Cette technique est utilisée
principalement pour commander des moteurs à vitesse variable.

2-1-1- Configuration :

Le signal PWM est généré à l’aide du Timer2 (8 bits) et récupéré sur le pin CCP1 (RC2), pour
cela, ce pin doit être configuré en sortie.
Les données principales à fournir sont la période du signal (ou sa fréquence) et le rapport
cyclique :

a. La période du signal est enregistrée dans le registre PR2, elle est calculée par la formule
suivante :

PWM period = [(PR2) + 1] • 4 • TOSC • (TMR2 prescale value)


TOSC: fréquence d’horloge du PIC
TMR2 prescaler value (voir configuration Timer 2)
Lorsque TMR2 est égale à PR2, le TMR2 recommence le calcul à
zéro, le CCP1 (RC2) est égale à 1, et la valeur du rapport cyclique sera
copiée de CCPR1H.
b. Le rapport cyclique est une donnée de résolution 10 bits donc il sera écrit sur
deux registre: CCPR1L et les bits 5 et 4 du CCP1CON.

Duty cycle
Bit9 Bit2 Bit0
CCP1CON<5 :4>
CCPR1L (MSB)
(LSB)

PWM duty cycle = (CCPR1L:CCP1CON<5:4>) • TOSC • (TMR2 prescale value)

La valeur du rapport cyclique peut être modifié à tout instant, mais cette modification ne sera
pas vue que lorsque cette valeur est écrite dans le registre CCPR1H, c'est-à-dire lorsque
PR2=TMR2.

2-1-2- Les registres associés au module PWM :

Le registre CCPxCON : CCP CONtrol Register (x : 1 ou 2)

-- -- CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0


bit7 bit0

Nom Fonctions ou états


bit7-6 Non utilisé
bit5-4 CCPxX:CCPxY : PWM Least
Significant bits
Bit3-0 CCPxM3:CCPxM0 : CCPx 11xx : mode PWM
Mode Select bits Les autres combinaisons pour les
autres modes de fonctionnement

Le registre TMR2 : Timer2 Module’s Register (registre 8 bits)

Le registre PR2 : Timer2 Module’s Period Register


(Registre 8 bits) Le registre T2CON :

bit7 bit0
-- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Nom Fonctions ou états
bit7 Non utilisé
bit6-3 TOUTPS3:TOUTPS0: Timer2 Configuration du postscaler :
Output Postscale Select bits 0000 = 1:1
0001 = 1:2
0010 = 1:3
…….
1111 = 1:16
bit2 TMR2ON: Timer2 On bit 1 : Timer2 est activé
0 : Timer2 est désactivé
bit1-0 T2CKPS1:T2CKPS0: Timer2 00 : Prescaler is 1
Clock Prescale Select bits 01 : Prescaler is 4
1x : Prescaler is 16

2-2- Travail demandé

Pour faire varier la vitesse d’un moteur à courant continu, on vous propose le circuit de la
figure ci-dessous :
Ecrire un programme qui lit une valeur numérique sur le PORTB sous forme d’un nombre
codé sur 8 bits. Ce nombre constituera le rapport du cyclique d'un signal PWM qui va être
généré pour commander un moteur à courant continu.

Vous aimerez peut-être aussi