Vous êtes sur la page 1sur 2

MICROCONTRLEUR

MODE PWM

DU

PIC16F877

Mode PWM des PIC16F87X


PRSENTATION
Il sagit dobtenir, dans ce mode, un signal de frquence fixe et dont la dure de ltat haut peut tre module (PWM = Pulse Width Modulation = MLI = Modulation de largeur d'impulsion ou rapport cyclique variable). CCPRxL CCP1con 5:4 w Ce mode permet la gnration d'un ou COMP 10 bits CCPRxL=TMR2 de deux signaux PWM, et utilise au plus 2 sorties : CCP1 (RC2) et CCP2 R Q CLK(osc) DIV TMR2 (RC1). CCPx 4

w Les broches du port C correspondant

RESET

w w w

CCP1 et CCP2 doivent tre configures en sortie grce au registre PR2 de direction TRISC pour pouvoir gnrer un signal PWM. La priode est obtenue par comparaison sur 8 bits du timer2 et du registre de priode PR2. Le rapport cyclique est obtenu par comparaison du timer2 avec le registre CCPRxL. La rsolution sur le rapport cyclique peut tre de 8 10 bits, car 2 bits supplmentaires du registre CCPxCON permettent de raliser une comparaison sur 10 bits. Ce mode PWM Utilise le Timer 2 ainsi que les registres CCPRxL et CCPxCON (x = 1 ou 2 selon la sortie considre). Rem: Des registres CCPRxH sont utiliss (esclave de CCPRxL) mais ne sont pas accessibles par l'utilisateur.

COMP

8 bits

TMR2 = PR2

CONFIGURATION

DE

CCPXCON

Les bits 2 et 3 de mode du registre CPPxCON (x=1 ou 2) doivent tre configurs 1 pour tre en mode PWM (voir doc PIC pour plus de dtails) : Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Inutilis Inutilis CCPxY CCPxX CCPxM3 CCPxM2 CCPxM1 CCPxM0 0 0 Bits de poids faibles 1 1 X X

CARACTRISTIQUES
PRIODE

DU SIGNAL

CCPx

TPWM TDC

TPWM = (PR2+1)$4 $T CLK


PR2 : Valeur du registre de priode du Timer 2 (8 bits). T CLK : priode du signal dhorloge

TMR2=PR2

TMR2=PR2 TMR2=CCPRxL

T CLK =

1 K$F QUARTZ

K est le rapport du prdiviseur du timer2, accessible dans le registre T2CON.

CONFIGURATION
Bit 6 TOUTPS3

DE T2CON : REGISTRE DE CONTRLE DU TIMER 2

Bit 7 Inutilis 0

Bit 5 Bit 4 TOUTPS2 TOUTPS1 Postdiviseur du Timer 2

Bit 3 TOUTPS0

Bit 2 TMR2ON 1

Bit 1 Bit 0 T2CKPS1 T2CKPS0 Voir tableau ci dessous

Bit 1 et 0 du registre T2CON T2CKPS1 T2CKPS0 0 0 0 1 1 X

Prdivision dhorloge K 1 1/4 1/16

PWM_PIC2.LWP

SECTION T.S. LECTRONIQUE - PADIOLLEAU J-LUC ET COTTET JJ

PAGE 1 SUR 3

MICROCONTRLEUR

MODE PWM
CYCLIQUE

DU

PIC16F877

RAPPORT

T DC =

COMP $T CLK 16

T DC : Dure de ltat de ltat haut du signal PWM. COMP : Registre de comparaison 10 bits obtenu par la concatnation de CCPRxL (contient les 8 bits de poids forts) et des bits 5, 4 de CCPxCON (contient les 2 bits de poids faibles).

INITIALISATION

CORRESPONDANT CE MODE

PWM

1. Configuration des broches du port C correspondant CCP1 et CCP2 en sortie par une
criture dans le registre TRISC.

2. Initialisation de CCPxCON = 0 (Tout les modes sont sur arrt: capture, comparaison et 3. 4. 5. 6.
PWm). Et TMR2 = 0 (Pour dmarrage final du Timer 2). Ecriture dans le registre PR2 afin dtablir la priode (en choisissant dj le rapport de prdivision d'horloge du Timer 2). Ecriture dans le registre CCPRxL afin dtablir le rapport cyclique initial (sur les 8 bits de poids forts). Ecriture dans le CCPxCON afin de configurer le mode PWM et dtablir le rapport cyclique initial (sur 10 bits) l'aide des bits CPPxY et CPPxX (2 bits de poids faibles). Dfinition du rapport de prdivision dhorloge du Timer 2 et dmarrage du Timer ,2 par une criture dans le registre T2CON.
EN LANGAGE

EXEMPLE

#include <pic.h> /* *********************************************************************************************************************** Fichier PWM_T2.c version: 1.0 Mr COTTET jj Lyce Maurice GENEVOIX INGRE Gnration de 2 signaux 20kHz, l'un avec rapport cyclique de 25% l'autre avec un rapport cyclique de 40% (prcision de 0.25% sur les deux) Manip avec un Quartz 8MHz fh= fq/4 = 2MHz T2CON = - Toutps3 Toutps2 Toutps1 Toutps0 TMR2ON T2CKPS1 T2CKPS0 CCP1CON = - - DC1b1 DC1b0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 On souhaite obtenir f PWM = 20kHz soit (fh / fPWM) = 100 si div = 1 => Fh Timer2 = 2Mhz et Tpwm = (PR2 +1).4.TQ soit fh = (PR2+1). Fpwm Donc PR2 = (fh /fpwm)-1 = 99 Si on veut un rapport cyclique de 25%, il faut donc CCPR1L = PR2 * rapport cyclique donc CCPR1L= 24.75 (car PR2 = 99), soit CCPR1L=24 et les deux bits DC1b1 DC1b0 = 11 pour obtenir 0.75 (rsolution de 99/4 = 0.25 ici) On veut (par exemple) galement un rapport cyclique de 4/10 =0.4 % sur CCPR2L CCPR2L = 0.4 * 99 = 39.6 soit CCPR2L = 39 + 0.5 (DC2b1 DC2b0 = 10) ************************************************************************************************************** ********* */ //************** Programme principal *************** void main(void) { TRISC = TRISC & 0b11111001; // RC2 = CCP1 et RC1=CCP2 en sortie CCP1CON = 0; // Modes comparaison, capture et PWM = arrt CCP2CON = 0; TMR2 = 0; // Raz timer 2 PR2 = 99; CCPR1L = 24; // Registre de priode pour obtenir 20kHz // Pour rapport cyclique 1/4 (0 PR2) sur 10 bits max // les 2 bits de poids faibles sont DC1b1 et DC1b0 de // CCP1CON

CCPR2L = 39; CCP1CON = 0b00111100; CCP2CON = 0b00101100; T2CON = 0x04; while(1) { // Programme a complter } } // DC1b1 et DC1b0 = 11, et CCP1 Mode = 11XX pour PWM // soit Timer2 ON avec div = 1

PWM_PIC2.LWP

SECTION T.S. LECTRONIQUE - PADIOLLEAU J-LUC ET COTTET JJ

PAGE 2 SUR 3