Anda di halaman 1dari 18

CCP- Mdulo PWM

Victor Anaya
Yimmy Cervera
Jair Martnez
Luis Orozco
Jorge Pera

EL MDULO CCP
Los mdulos de Captura, Comparacin y Modulacin de Pulsos en Anchura (CCP:
Capture/Compare/PWM) son circuitos que junto con los mdulos Timer1 y Timer2
permiten temporizar de otras formas.
En un mismo microcontrolador PIC pueden existir hasta dos mdulos CCP, denominados
CCP1 y CCP2. Un mdulo CCP est formado bsicamente por una pareja de registos de 8
bits denominados CCPRxH y CCPRxL. Aqu y en lo sucesivo, la letra x se debe sustituir
por 1 2, indicando el mdulo CCP al que est haciendo referencia. En estos registros se
puede almacenar, respectivamente, la parte alta y baja de un nmero de 16 bits. Cada
mdulo CCP utiliza tambin el registro CPPxCOM para el control y el bit CCPxIF del
registro PIR como indicador de que se ha producido un evento. Si la interrupcin del
mdulo est habilitada (con el bit CCPxIE del registro PIE), cuando CCPxIF pasa a 1 se
genera una solicitud de interrupcin.

EL MDULO CCP
Cada mdulo CCP puede operar en cualquier de los siguientes modos:

Modo de captura: El mdulo CCP captura el valor del Timer1 cuando ocurre un evento
externo en el terminal CCPx.

Modo comparador: El registro del mdulo CCP almacena un nmero de 16 bits que se
compara con el valor del Timer1, segn el resultado de la comparacin, se genera un evento,
que puede incluir un cambio en el terminal CCPx.

Modo modulador de pulso en anchura (PWM: Pulse Width Modulation). El mdulo CCP y
el Timer2 forman un modulador de ancho de pulso con salida por el terminal CCPx.

EL MDULO CCP
Los terminales CCPx (CCP1 y CCP2) son entradas en el modo de captura y salida en los
modos comparador y PWM. Estos terminales, uno por cada mdulo CCP existe en el PIC,
comparten funciones con los terminales del puerto C.
En los modos de captura y comparador, el Timer1 es utilizado por los mdulos CCP como
base de tiempo. En estos modos, el Timer1 debe ser programado como temporizador o como
contador en modo sincronizado. En el modo PWM, el Timer2, que opera siempre como
temporizador, determina la frecuencia de la seal PWM.
Dado que los mdulos CCP comparten funciones con los temporizadores Timer1 y Timer2,
en los PIC que disponen de dos mdulos CCP, hay que tener en cuenta el uso compartido de
estos temporizadores para ambos mdulos.

EL MDULO CCP

EL MDULO CCP

Los registros de funciones especiales CCPxCON se utilizan para programar los mdulos
CCP. La figura muestra los bits de estos registros. El modo de trabajo de los mdulos CCP
se programa mediante los bits CCPxM3:CCPxM0. Los bits DCxB1 y DCxB0 se usan slo en
el mdulo PWM.

EL MDULO CCP

La tabla muestra los valores que hay que poner en los bits CCPxM3:CCPxM0 de los registros
CCPxCON para programar los diferentes modos de trabajo de los mdulos CCP, que se explican
en los apartados siguientes.

EL MDULO PWM
Bsicamente el mdulo PWM de un micro se utiliza cuando queremos implementar seales
analgicas (impulsos) con el mismo. El mdulo PWM del micro genera una onda cuadrada con una
frecuencia dada (generalmente del orden de los KHz). Luego nosotros podemos ir cambiando el
ciclo de trabajo (% del periodo en ON) de la seal.

EL MDULO PWM
El pinRB3/CCP1esta configurado como salida y cambia entre los niveles 0 y 1 a intervalos de
tiempos variables, logrando un pulso cuyo nivel alto tiene un ancho variable dentro del intervalo
del periodo de trabajo:

Modo PWM

EL MDULO PWM
La base de tiempos es el Timer2 (TMR2) ms dos bits adicionales para tener los 10.
El periodo se determina con el registro PR2, ya que cuando TMR2=PR2:

Se borra el TMR2
Se pone a 1 el pin CCP1
Se pasa el valor del CCPR1L al
CCPR1H (para evitar glitch)

Modo PWM

EL MDULO PWM
De esta manera, de acuerdo a la figura anterior, el siguiente valor de comparacin paraTMR2en el
comparador de 10 bits es el Ciclo de Trabajo, el cual al alcanzarse limpiar el pinCCP1.
El ciclo de trabajo se determina con el contenido delCCPR1Ly los dos bits deCCP1CON (CCP1X y CCP1Y).

EL MDULO PWM
El parmetro fundamental de una modulacin PWM es la frecuencia (o su inverso el
periodo) de modulacin. En los PIC dicha frecuencia es programable (con ciertas
limitaciones) en base a varias variables:
La frecuencia del oscilador principal Fosc
El pre-scaler (PRE) o divisor previo del timer TMR2 que puede tomar los valores 1:1, 1:4 o 1:16
El registro PR2 (0-255) asociado al timer TMR2
La frecuencia PWM responde a la frmula:

F_pwm = F_osc / [4 x PRE x (PR2+1)]


O lo que es lo mismo, el periodo del PWM ser el inverso de dicha frecuencia:

T_pwm = [ (PR2+1) x 4 x PRE ] x Tosc

EL MDULO PWM
Ciclo de Trabajo del PWM (CTPWM):
El ciclo de Trabajo se especifica escribiendo un valor de 10 bits al registroCCPR1L(los 8 bits
ms significativos (msb)) y los dos bits menos significativos (lsb) aCCP1CON<5:4>::

CTPWM = (CCPR1L:CCP1CON<5:4>) x Tosc x PRE


Como se puede ver en la figura anterior, el valor que determina la duracin de C.T.
delPWMno es el cargado enCCPR1L, sino enCCPR1H, el cual slo se actualiza en el
momento en queTMR2alcanza el valor dePR2(es decir, cada vez que se completa un
periodo). Por ello, aunqueCCPR1Lpuede ser escrito en cualquier momento, el Ciclo de
Trabajo solo se actualiza hasta que termina el periodo que est en transcurso.
No hay otra manera de escribir al registroCCPR1H, ya que este es un registro de slo lectura.

EL MDULO PWM
El nmero de divisiones que se pueden tener en un Ciclo de Trabajo ser 2^n, donde n es el
nmero de bits usados, por lo tanto su duracin mxima ser:

CTPWM = 2^n x Tosc x PRE


Sin embargo, dependiendo del valor de Ciclo de trabajo mximo (CT_PWM) deseado, no ser
posible realizar las 2^n divisiones y por lo tanto no se podrn usar los n bits de resolucin. O
al revs, si se elige una resolucin deseada n no ser posible tener cualquier Ciclo de Trabajo
mximo (CT_PWM) Deseado.
De la ecuacin anterior se puede despejar cual es la resolucin mxima:

ResolucionPWM=log(CTPWM/Tosc.TMR2 Preescaler)/ log (2)

EL MDULO PWM
Ejemplo: Si fijamosPR2en 100 y usamos preescaler (PRE) 1/4 con un oscilador de 20
MHz, tendremos un PWM de periodo 80.8us. El ciclo de trabajo no puede superar este valor
por lo que despejando de las ecuaciones anteriores,CCPR1L:CCP1CON<5:4>no puede ser
mayor a 404. Aqu se ve claramente que no se pueden usar los 10 bits de resolucin, sino 8.66
bits. Caso contario el pin RB3/CCP1nunca ser reseteado.
En la siguiente tabla se resumen diversas elecciones de resolucin n y la correspondiente
frecuencia F_PWM mxima, as como el valor dePR2con el que se logra (para un frecuencia
del cristal de 20 Mhz):

EL MDULO PWM
Secuencia de configuracin del PWM:
A continuacin se resumen los pasos para realizar la configuracin inicial del PWM:

Establecer el periodo del PWM escribiendo al registro PR2.


Establecer el Ciclo de Trabajo del PWM escribiendo al registro CCPR1L y a los bits
CCP1CON<5:4>.
Configurar como salida el pin CCP1, limpiando el bit TRISB<3>.
Configurar el preescalador del Timer 2 (PRE) y habilitar el Timer 2 (TMR2), escribiendo al
registro T2CON.
Configurar el mdulo CCP1 para operacin PWM. Poniendo en alto los bits CCP1CON
<2:3>.

EL MDULO PWM
Ejemplo PWM en Proteus:

// FUNCION PRINCIPAL
void main(void) {
TRISC = 0;
// Puerto B como salidas
PORTC = 0;
// Limpio el puerto B

Cdigo del
PWM
en
MPLAB:

// CONFIGURANDO PWM
CCP1CON = 0b00001100;
// Activamos el modo PWM
PR2 = 250;
// Frecuencia 250Hz
T2CONbits.T2CKPS = 0b10; // Prescaler del timer 2 en 1:16
T2CONbits.TMR2ON = 1;
// Arranca el PWM
// BUCLE INFINITO
unsigned char i;
// Declaramos una variable
while (1){
for(i=0; i=50; i++) {
CCPR1L = CCPR1L++;
// Seteando el ciclo de trabajo
__delay_ms (80);
}
i=0;
// Reiniciamos la variable para comenzar el ciclo de
nuevo
}}