18
CCP- Módulo PWM Victor Anaya Yimmy Cervera Jair Martínez Luis Orozco Jorge Peréa

Ccp- Módulo Pwm

Embed Size (px)

DESCRIPTION

programacion

Citation preview

CCP- Módulo PWM

Victor AnayaYimmy CerveraJair MartínezLuis OrozcoJorge Peréa

EL MÓDULO CCP

Los módulos de Captura, Comparación y Modulación de Pulsos en Anchura (CCP: Capture/Compare/PWM) son circuitos que junto con los módulos Timer1 y Timer2 permiten temporizar de otras formas.

En un mismo microcontrolador PIC pueden existir hasta dos módulos CCP, denominados CCP1 y CCP2. Un módulo CCP está formado básicamente 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 módulo CCP al que esté haciendo referencia. En estos registros se puede almacenar, respectivamente, la parte alta y baja de un número de 16 bits. Cada módulo CCP utiliza también el registro CPPxCOM para el control y el bit CCPxIF del registro PIR como indicador de que se ha producido un evento. Si la interrupción del módulo está habilitada (con el bit CCPxIE del registro PIE), cuando CCPxIF pasa a 1 se genera una solicitud de interrupción.

EL MÓDULO CCP

Cada módulo CCP puede operar en cualquier de los siguientes modos:

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

Modo comparador: El registro del módulo CCP almacena un número de 16 bits que se compara con el valor del Timer1, según el resultado de la comparación, se genera un evento, que puede incluir un cambio en el terminal CCPx.

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

C

C

P

EL MÓDULO 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 módulo 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 módulos 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 señal PWM.

Dado que los módulos CCP comparten funciones con los temporizadores Timer1 y Timer2, en los PIC que disponen de dos módulos CCP, hay que tener en cuenta el uso compartido de estos temporizadores para ambos módulos.

EL MÓDULO CCP

EL MÓDULO CCP

Los registros de funciones especiales CCPxCON se utilizan para programar los módulos CCP. La figura muestra los bits de estos registros. El modo de trabajo de los módulos CCP se programa mediante los bits CCPxM3:CCPxM0. Los bits DCxB1 y DCxB0 se usan sólo en el módulo PWM.

EL MÓDULO 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 módulos CCP, que se explican en los apartados siguientes.

EL MÓDULO PWMBásicamente el módulo PWM de un micro se utiliza cuando queremos implementar señales analógicas (impulsos) con el mismo. El módulo 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 señal.

EL MÓDULO PWMEl pin RB3/CCP1 esta 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 MÓDULO PWM

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

Modo PWM

Se borra el TMR2 Se pone a “1” el pin CCP1 Se pasa el valor del CCPR1L al

CCPR1H (para evitar glitch)

EL MÓDULO PWMDe esta manera, de acuerdo a la figura anterior, el siguiente valor de comparación para TMR2 en el comparador de 10 bits es el Ciclo de Trabajo, el cual al alcanzarse limpiará el pin CCP1.El ciclo de trabajo se determina con el contenido del CCPR1L y los dos bits de CCP1CON (CCP1X y CCP1Y).

EL MÓDULO PWM

El parámetro fundamental de una modulación PWM es la frecuencia (o su inverso el periodo) de modulación. 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 fórmula:  

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 MÓDULO PWM Ciclo de Trabajo del PWM (CTPWM):

El ciclo de Trabajo se especifica escribiendo un valor de 10 bits al registro CCPR1L (los 8 bits más significativos (msb)) y los dos bits menos significativos (lsb) a CCP1CON<5:4>::

CTPWM = (CCPR1L:CCP1CON<5:4>) x Tosc x PRE Como se puede ver en la figura anterior, el valor que determina la duración de

C.T. del PWM no es el cargado en CCPR1L, sino en CCPR1H, el cual sólo se actualiza en el momento en que TMR2 alcanza el valor de PR2 (es decir, cada vez que se completa un periodo). Por ello, aunque CCPR1L puede 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 registro CCPR1H, ya que este es un registro de sólo lectura.

EL MÓDULO PWM El número de divisiones que se pueden tener en un Ciclo de Trabajo será 2^n,

donde n es el número de bits usados, por lo tanto su duración máxima será:

     CTPWM = 2^n x Tosc x PRE

Sin embargo, dependiendo del valor de Ciclo de trabajo máximo (CT_PWM) deseado, no será posible realizar las 2^n divisiones y por lo tanto no se podrán usar los n bits de resolución. O al revés, si se elige una resolución deseada n no será posible tener cualquier Ciclo de Trabajo máximo (CT_PWM) Deseado.

De la ecuación anterior se puede despejar cual es la resolución máxima:

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

EL MÓDULO PWM

Ejemplo: Si fijamos PR2 en 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 resolución, sino “8.66” bits. Caso contario el pin RB3/CCP1 nunca será reseteado.

En la siguiente tabla se resumen diversas elecciones de resolución n y la correspondiente frecuencia F_PWM máxima, así como el valor dePR2 con el que se logra (para un frecuencia del cristal de 20 Mhz):

EL MÓDULO PWM

Secuencia de configuración del PWM: A continuación se resumen los pasos para realizar la configuración 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 módulo CCP1 para operación PWM. Poniendo en alto los bits CCP1CON <2:3>.

EL MÓDULO PWM

Ejemplo PWM en Proteus:

Código del PWM en MPLAB:

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

// 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 } }