El documento describe cómo generar una señal PWM con un microcontrolador utilizando los módulos CCP. Los módulos CCP pueden operar en modo captura, comparación o PWM. En modo PWM, cada módulo CCP puede generar una onda cuadrada con resolución de hasta 10 bits y frecuencia y ciclo de trabajo configurables utilizando los registros CCPxCON, CCPRxL y TMR2.
2. MODULO CCP
(CAPTURA/ COMPARACIÓN/ PWM)
Cada modulo CCP contiene un registro de 16 bits los cuales pueden ser
operados como:
• Modo Captura
• Modo Comparación
• Modo PWM
MODULO CCP1
El primer registro del modulo CCP (CCPR1 ) esta conformado por dos
registros de 8 bits: CCPR1L (LSB) y CCPR1H (MSB). El registro CCP1CON
controla la operación del modulo CCP1.
MODULO CCP2
El segundo registro del modulo CCP (CCPR2) esta conformado por dos
registros de 8 bits: CCPR2L (LSB) y CCPR2H (MSB). El registro CCP2CON
controla la operación del modulo CCP2.
3. Modo CCP Recurso Temporizador
Captura Timer1
Comparación Timer1
PWM Timer2
Tabla 1. Modos del modulo CCP – Temporizador requerido
En lo referente a los modos “Captura” o “Comparación”, algunas tipicas
aplicaciones son la generación de un pulso de ancho programado o
medida del ancho de un pulso externo. En ambos casos, los módulos
CCP1 y CCP2 trabajan con el Timer1.
Cada modulo CCPx puede generar una onda PWM de hasta 10 bits de
resolución con una frecuencia y ciclo de trabajo (duty cycle)
configurables. Ambas ondas son semi independientes, es decir,
pueden tener diferente ciclo de trabajo pero comparten la misma
frecuencia.
4. Cada módulo CCPx se puede habilitar o inhabilitar
independientemente. La salida PWM del módulo CCP1 es el pin
RC2/CCP1 y del módulo CCP2 es el pin RC1/CCP2. Dichos pines deben
ser configurados como salidas.
Figura 1. Salidas de los módulos CCPx.
5. REGISTROS DE LOS MODULOS CCP
• CCP1CON y CCP2CON
Registros para la configuración de los módulos CCP1 y CCP2
respectivamente en modo Captura, Comparación o PWM.
• CCPR1L y CCPR2L
Registros para controlar el ciclo de trabajo de cada onda PWM.
• CCPR1H y CCPR2H
Funcionan como registros imagen de los dos anteriores, pero no
pueden ser accedidos directamente.
• TMR2, PR2 y T2CON
Son los registros del Timer2. Sirven para establecer el periodo, o la
frecuencia, de los dos canales PWM.
6. REGISTRO CCP1CON / REGISTRO CCP2CON
Bit 7-6 Sin implementar
Se leen como „0‟
Bit 5-4 CCPxX:CCOxY
Solo se utilizan para el modo PWM. Estos son los dos bits menos significativos
del ciclo de trabajo (duty cycle) del PWM. Los 8 bits mas significativos se
encuentran en el registro CCPRxL.
7. Bit 3-0 CCPxM3:CCPxM0
Bits de selección para el modo del modulo CCPx
0000 = Modo Captura/Comparación/PWM inhabilitados (Reset modulo CCPx)
0100 = Modo Captura, cada flanco de bajada
0101 = Modo Captura, cada flanco de subida
0110 = Modo Captura, cada 4 flancos de subida
0111 = Modo Captura, cada 16 flancos de subida
1000 = Modo Comparación, poner a „1‟ en coincidencia (bit CCPxIF se setea)
1001 = Modo Comparación, poner a „0‟ en coincidencia (bit CCPxIF se setea)
1010 = Modo Comparación, genera una interrupción por software en
coincidiencia (el bit CCPxIF se setea)
1011 = Modo Comparación, disparo por evento especial (CCPxIF se setea)
CCP1 pone a cero el TMR1; CCP2 pone a cero el TMR1 e inicia la
conversión A/D si el modulo esta habilitado.
11xx = Modo PWM
8. MODULO TIMER2
TIMER2 es un temporizador de 8 bits que dispone de un prescaler y un
postscaler, además, puede ser usado como la base de tiempo para el
modulo CCP en modo PWM. El registro TMR2 es un registro de lectura
y escritura.
El reloj de entrada (FOSC/4) tiene una opción de pre-escala de 1:1, 1:4 y
1:16, que se selecciona mediante los bits de control T2CKPS1:T2CKPS0
(Registro T2CON).
El modulo Timer2 tiene un registro de periodo de 8 bits, PR2. El Timer2
se incrementa desde 00h hasta que su valor sea igual al valor del
registro PR2, y se pone a 00h luego de ejecutado el siguiente ciclo de
instrucción. PR2 es un registro de lectura y escritura, y se inicializa a FFh
después de cada Reset.
9. La salida del TMR2 pasa a través de un postscaler de 4 bits (el cual
proporciona escalas de 1:1 hasta 1:16) para generar la interrupción del
TMR2 (TMR2IF).
Figura 1. Diagrama de Bloques del
Tiimer2
10. REGISTRO DE CONTROL PARA TIMER2 (T2CON)
Bit 7 Sin implementar
Se lee como „0‟
Bit 6-3 TOUTPS3:TOUTPS0
Bits de selección para el postscale de salida del Timer2
0000 = 1:1
0001 = 1:2
0010 = 1:3
0011 = 1:4
0100 = 1:5
.
.
.
1111 = 1:16
11. Bit 2 TMR2ON
Bit de encendido del Timer2
1 = Timer2 esta encendido
0 = Timer2 esta apagado
Bit 1 T2CKPS1:T2CKPS0
Bits de selección de prescale para el reloj del Timer2
00 = Prescale es de 1
01 = Prescale es de 4
1X = Prescale es de 16
12. MODO PWM
En el modo de modulación por ancho de pulso, el pin CCPx produce
una salida de PWM de hasta 10 bits de resolución. Dado que el pin
CCP1 esta multiplexado con otras funciones en PORTC, el bit TRISC<2>
debe ponerse a „0‟ para hacer del pin CCP1 una salida.
La salida PWM tiene un
tiempo base (periodo) y un
tiempo en el cual la salida
permanece en estado ALTO
(ciclo de trabajo, duty cycle). La
frecuencia de la salida de
PWM es el inverso del periodo
(1/periodo).
Figura 2. Salida PWM
13. PERIODO PWM
El periodo del PWM se especifica mediante el registro PR2. El periodo
del PWM puede calcularse mediante la siguiente ecuación:
Periodo PWM = [(PR2 + 1)] * 4 * TOSC * (Valor del Prescaler TMR2)
CICLO DE TRABAJO DEL PWM (DUTY CYCLE)
El ciclo de trabajo del PWM se especifica en el registro CCPR1L y en los
bits CCP1CON<5:4>. La siguiente ecuación permite encontrar el ciclo
de trabajo en tiempo:
Ciclo de Trabajo PWM = (CCPR1L:CCP1CON<5:4>) * TOSC * (Valor del Prescaler TMR2)
14. PARA PARA CONFIGURACIÓN DEL PWM
1) Establecer el periodo del PWM mediante el registro PR2
2) Establecer el ciclo de trabajo mediante el registro CCPR1L y los bits
CCP1CON<5:4>
3) Definir como salida el pin CCP1
4) Establecer el Prescaler del TMR2 y habilitar el Timer2 mediante el
registro T2CON
5) Configurar el modulo CCP1 para operación del PWM