Mode PWM Des Pic16f87x
Mode PWM Des Pic16f87x
Mode PWM Des Pic16f87x
MODE PWM
DU
PIC16F877
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
TMR2=PR2
TMR2=PR2 TMR2=CCPRxL
T CLK =
1 K$F QUARTZ
CONFIGURATION
Bit 6 TOUTPS3
Bit 7 Inutilis 0
Bit 3 TOUTPS0
Bit 2 TMR2ON 1
PWM_PIC2.LWP
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
PAGE 2 SUR 3