Está en la página 1de 4

Servicio Nacional de Aprendizaje

MODULACION POR ANCHO DE PULSO-PWM

Modelo de la Mejora Continua

Mdulo PWM
El modo PWM (Pulse WidthModulalion) o MODUL.ACIN DE ANCHO DE PULSO, permite obtener en los pines CCPx una seal peridica en la que se puede modificar su ciclo de trabajo (Duty Cicle). Es decir, puede variarse el tiempo en el cual la seal est a nivel alto (Ton) frente al tiempo que est a nivel bajo (Toff); ver la figura a. De esta forma, la tensin media aplicada a la carga es proporcional al Ton, controlando, por ejemplo, la velocidad de motores, luminosidad de lmparas, etc.

Ton Vpromedio t T Vpromedio Ton T


Figura 1. Seal PWM La resolucin de salida es de hasta 10 bits. Para que este mdulo funcione correctamente, el Pin debe estar configurado como salida, mediante la configuracin del TRIS correspondiente. El periodo de la seal PWM se obtiene de configurar el TIMER2 y el contenido del registro PR2 (direccin 0x92). Este registro de 8 bits contiene los 8 bits ms significativos de una cuenta de 10 bits. Para calcular el periodo de la seal PWM se utiliza la siguiente ecuacin:

Vpromedio Ton T = Constante

Periodo y frecuencia y de la onda PWM


El periodo de la onda PWM est determinado por el tiempo que dura el conteo del TMR2 desde 0 hasta el valor del registro PR2. Esto es:

Donde: PR2 = Valor del registro PR2 (entre 0 y 255). Fosc = Frecuencia del XTAL. Prescaler = Prescaler del Timer2 (1, 4 16). Se configura en el registro T2CON.

El Timer2 tiene un Postscaler, pero es una etapa posterior y no interviene directamente en el avance del Timer2.

Este documento impreso se considera COPIA NO CONTROLADA

Versin

2.0

F08 9227 040

Pgina 1 de 4

Servicio Nacional de Aprendizaje

MODULACION POR ANCHO DE PULSO-PWM

Modelo de la Mejora Continua

En la prctica es mucho ms habitual hablar de la frecuencia del PWM. Como sta es la inversa del periodo, de la frmula anterior surge la siguiente:

Ciclo de trabajo Duty cycle de la onda PWM El duty cycle es la cantidad de tiempo que en un periodo la salida PWM permanece en estado alto. Este tiempo queda determinado por el valor del registro CCPR1L. Mientras TMR2 sea menor que CCPR1L la salida PWM ser un 1 lgico. Apenas TMR2 alcance a CCPR1L, la salida ser 0. En caso de que este tope sea superior al periodo, la salida ya no conmutar a 0. En consecuencia, el dutycycle se controla variando el valor del registro CCPR1L. La frmula que da su valor en tiempo es:

Donde:

CCPR1L = Valor del registro CCPR1L (entre 0 y 255). Fosc = Frecuencia del XTAL. Prescaler = Prescaler del Timer2 (1, 4 16).

Tambin es mucho ms ilustrativo hablar del duty cycle en trminos de porcentajes. Un 0% significa que la salida es siempre bajo, 100% es un alto continuo, un 50% significa una onda cuadrada simtrica, y as. Para esto solo hay que dividir el dutycycle (en tiempo) entre el periodo y multiplicarlo por 100%. Realizando esta operacin con las frmulas presentadas anteriormente llegaremos a:

Esta frmula es fcil de interpretar: el numerador CCPR1L representa al dutycycle y el denominador PR2+1, al periodo. La siguiente figura indica que cada periodo se divide en PR2+1 tramos equitativos y que CCPR1L es la cantidad de tramos que estn en alto. Eso es una PWM.

Figura 2. Duty cycle de la onda PWM.


Este documento impreso se considera COPIA NO CONTROLADA

Versin

2.0

F08 9227 040

Pgina 2 de 4

Servicio Nacional de Aprendizaje

MODULACION POR ANCHO DE PULSO-PWM

Modelo de la Mejora Continua

Ejemplo 1: Calcular el valor de PR2 que permita generar una frecuencia de PWM de 5Khz; utilizando un pre escalador en el Timer2 de 16 y una frecuencia del oscilador de 20Mhz Solucin:

5kHz =

20MHz 4(PR2 + 1)16 20MHz PR2 = -1 = 62,5 63 5KHz416

La funcin el lenguaje C que permite configurar este valor en el timer2 es: setup_timer_2 (modo, periodo, postscale).

Los parmetros son los siguientes: Modo T2_DISABLED T2_DIV_BY_1 T2_DIV_BY_4 T2_DIV_BY_16 Periodo Es un entero entre 0 y 255 Post- escala Es un valor entre 1 y 16

Con el valor de PR2 se configura el Timer2 de la siguiente manera: setup_timer_2(T2_DIV_BY_16, 63, 1); Mdulo CCP en C El compilador C suministra una serie de funciones para el manejo del mdulo CCP. Configuracin del mdulo CCPx: - setup_ccpx (modo); modo hace referencia a los bits CCPxM3:CCPxM0 del registro CCPxCON, si se desea configurar el modulo como PWM se debe definir como sigue: setup_ccp1(CPP_PWM); Definicin del ciclo de trabajo para PWM: set_pwmx_ duty (valor);

valor: dato de 8 o 16 bits que determina el ciclo de trabajo. Este valor, junto con el valor del preescaler del TMR2, determina el valor del ciclo de trabajo. En la configuracin del TIMER2, el postcaler debe valer 1.
Este documento impreso se considera COPIA NO CONTROLADA

Versin

2.0

F08 9227 040

Pgina 3 de 4

Servicio Nacional de Aprendizaje

MODULACION POR ANCHO DE PULSO-PWM

Modelo de la Mejora Continua

Ejemplo2: calcular CCPR1L para ajustar el PWM en un 50%, con la frecuencia del ejercicio anterior

CCPR1L 100 PR2 + 1 50 ( PR2 + 1) CCPR1L = 100 = 32 50 =


Ejemplo 3: Con los datos obtenidos en los ejercicios 1 y 2, realizar un programa en lenguaje C que permita generar una seal PWM de 5kHz y un ciclo de trabajo del 50%. Solucin:
#include <16F877.h> #byte trisc=0x87 void main() { trisc= 0b11111011; //RC2 es la salida PWM del mdulo CCP1 setup_ccp1(CCP_PWM); // Configura el mdulo CCP1 como PWM setup_timer_2(T2_DIV_BY_16, 63, 1); //configura el Timer2 y con el valor del PR2 para una frecuencia de 5kHz set_pwm1_duty( 32 ); // escribe el valor de CCPR1L con el valor del dutycycle while (1){ // programa }// fin while }// fin main

Tomado con fines educativos de: - www.mundomicros.com - Compilador C CCS y simulador PROTEUS para microcontroladores PIC. Eduardo Garca Breijo.Alfaomega- Marcombo. Desarrollado por: Andrey Julin Rentera Scarpetta

Este documento impreso se considera COPIA NO CONTROLADA

Versin

2.0

F08 9227 040

Pgina 4 de 4

También podría gustarte