Vous êtes sur la page 1sur 19

TEMA 21

PWM MODULACION DE ANCHURA DE PULSO

INTRODUCCIN
Seguidamente comenzamos el estudio de la modulacin por anchura de impulsos PWM, como ya conocemos el PIC 16F876 dispone de dos mdulos CCP captura/comparacin/modulacin de anchura de impulsos. Comenzaremos con el estudio del CCP1, este mdulo se multiplexa con el latch del puerto C y en particular nos da la seal por el pin RC2. El recurso que se utiliza es el TIMER2, por lo que deberemos programarlo. Cuando generamos un PWM, y realizamos la programacin en C y en concreto con el compilador CCS, deberemos utilizar las siguientes funciones : setup_timer_2(mode,period,postscale); set_pwm1_duty(duty) que pasamos a comentar
CCFF D.P.E. MDULO DE PROYECTOS 2

setup_timer_2 (mode, period, postscale) Su funcin es inicializar el el TIMER2 (T2 es un contador temporizador de 8 bits), los parmetros que incluye esta funcin son: MODO: especifica el divisor para el reloj del microprocesador, tiene 4 opciones: T2_DISABLED T2_DIV_BY_1 T2_DIV_BY_4 T2_DIV_BY_16 T2_Desactivado Se divide por 1 Se divide por 4 Se divide por 16

PERIOD (periodo): Es un INT de 0 a 255, que nos indica el nmero de impulsos necesarios para el overflov del timer recordemos que T2 es un contador CCFF D.P.E. MDULO DE PROYECTOS 3 de 8 bits.

POSTSCALE (postescaler): es un nmero de 1 a 16 que especifica el nmero de desbordamientos del T2 que se deben producir para que se solicite una interrupcin. En el modo PWM no tiene significado y se suele poner a 1 . Los parmetros que introduzcamos en esta funcin, ser los que determinen la frecuencia de del PWM. Veamos un ejemplo: Dispositivo 16F876, con un reloj a 20 MHz, o lo que es lo mismo, un periodo de oscilador de 0,05 s. La funcin est definida: setup_timer_2(T2_DIV_BY_4,191,1);
CCFF D.P.E. MDULO DE PROYECTOS 4

Sin divisor de frecuencia, El contador (T2) aumentara su cuenta cada 4 ciclos de reloj o sea cada 0,2 s, pero como el mode indica que est divido por 4, lo har cada 0,8 s. Por otra parte el periodo es 191, luego se desborda cada (191+1) * 0,8 s = 153,6 s F = 1/ 153,2 s = 6.527 KHz. En resumen el ciclo del PWM viene determinado por la expresin: F(pwm) = (1/clock) * 4 *T2DIV*(period+1) De todos modos es el propio compilador el que realiza los clculos y nos da el valor de cada uno de ellos siempre y cuando utilicemos PIC WIZAR.

CCFF D.P.E. MDULO DE PROYECTOS

set_pwm1_duty(value) Esta funcin es la encargada de escribir los 10 bits que determinarn el tiempo en alta del PWM (ciclo de trabajo). El valor de value se obtiene despejando en la siguiente expresin expresin: duty= value*(1/clock)*t2div Donde duty es el tiempo que deseamos que est en alta la seal En nuestro caso: Frecuencia de reloj 20 MHz, frecuencia del PWM:6,527 KHz T = 153,6 s Tiempo en alta que deseamos 50%= 76,8 s(duty) value = 0.0000768 s* (reloj/modo) value = 0.0000768 s * (20.000.000/ 4)= 384
CCFF D.P.E. MDULO DE PROYECTOS 6

Realicemos ahora un ejercicio prctico, cuyo enunciado respondera a: Deseamos generar un PWM a travs del pin RC2/CCP1 con un PIC 16F876, el reloj del microcontrolador es de 4 MHz, la frecuencia de la seal PWM ser de 1 KHz, y deseamos que el ciclo de trabajo sea del 50%. Comenzamos arrancando el seleccionamos project, PIC WIZAR compilador, y

CCFF D.P.E. MDULO DE PROYECTOS

En la pantalla general fijamos los parmetro usuales del microcontrolador como son: frecuencia de funcionamiento, cdigo no protegido, tipo de oscilador etc.

CCFF D.P.E. MDULO DE PROYECTOS

El fichero.h que se genera con todas las opciones seleccionadas es:

Seguidamente pulsamos sobre la pestaa Oters, con lo que nos abre la siguiente ventana de seleccin
CCFF D.P.E. MDULO DE PROYECTOS 9

En esta ventana seleccionamos: PWM, y posteriormente l en CCPX, CCP1

Una vez que hemos seleccionado modo PWM y que deseamos trabajar con CCP1, picamos sobre More options, emerger una nueva ventana
CCFF D.P.E. MDULO DE PROYECTOS 10

Ene esta nueva ventana introducimos el valor de la frecuencia de PWM deseada en nuestro caso 1000Hz., y validamos picando en OK

CCFF D.P.E. MDULO DE PROYECTOS

11

Si picamos sobre View Code Generated.. Obtenemos el sentencia que se insertar en la funcin main

CCFF D.P.E. MDULO DE PROYECTOS

12

El cdigo y el fichero.h generados son:

Importante T2DIV = 4

CCFF D.P.E. MDULO DE PROYECTOS

13

Nos resta editar el resto de cdigo, en concreto fijar el ciclo de trabajo del PWM. En nuestro caso ya que deseamos un ciclo de 50%, deseamos que duty sea igual a 500 s =0,5 ms = 0,0005 s. Como ya conocemos valor duty* (F reloj/T2DIV), observando en el cdigo (pgina anterior) obtenemos que T2DIV = 4. Operando obtendramos que Valor = 500; No olvide que la variable valor se debe incluir como un long. Una vez realizados estos clculos pasamos a escribir el resto de sentencias:

CCFF D.P.E. MDULO DE PROYECTOS

14

CCFF D.P.E. MDULO DE PROYECTOS

15

Nos resta simular el programa, para ello construimos el siguiente circuito en Proteus:

CCFF D.P.E. MDULO DE PROYECTOS

16

Simulacin en modo contnuo, en el osciloscopio se puede observar la seal PWM generada.

CCFF D.P.E. MDULO DE PROYECTOS

17

Mediante el anlisi digital comprobamos la frecuencia del PWM.

CCFF D.P.E. MDULO DE PROYECTOS

18

Medicin del ciclo de trabajo:

CCFF D.P.E. MDULO DE PROYECTOS

19

Vous aimerez peut-être aussi