You are on page 1of 8

8 Canales de PWM con un 16F628A

Luego del mtico 16F84A, el microcontrolador que le sucede en complejidad es el tambin popular 16F628A. Con su aparicin en el mercado, marc un avance significativo por sobre el 16F84A en incontables aspectos, uno de ellos es la incorporacin de un mdulo CCP (Capture/Compare/PWM). La posibilidad de incorporar en forma nativa un generador de seal PWM simplific mucho los trabajos al momento de emular una salida analgica desde el chip. Hasta aqu todos haban sido 1s y 0s, los LEDs slo encendan o apagaban y los motores funcionaban o no, mientras que necesitabas tener la posibilidad de atenuar la iluminacin de un LED, variar la velocidad de un motor y otras aplicaciones que requeran una urgente salida analgica. De manera muy inteligente, y sin dejar de trabajar con niveles lgicos, veremos los mtodos ms frecuentes para aprovechar no slo una salida PWM, sino ocho a partir de un microcontrolador sencillo y muy econmico.

Con el trabajo de hoy veremos de manera muy sencilla y didctica, algunas posibilidades que existen dentro del mundo de los microcontroladores que te ayudarn a comprender muchos conceptos que son importantes en la fase inicial, cuando nos decidimos a trabajar con estos dispositivos. Por supuesto que lo primero que debemos aclarar y definir es el concepto de PWM. Qu es el PWM? Pulse-Width Modulation o lo que en castellano significa modulacin por ancho de pulsos. Es decir, partiendo de una seal de amplitud y frecuencia fija, vamos a proceder a variar el ancho del semiciclo activo, comprimindolo o expandindolo para as lograr transportar dentro de la seal una informacin variable que utilizaremos para diversas aplicaciones segn la necesidad del desarrollo que emprendamos.

Distintos ciclos de trabajo para una misma frecuencia. Eso es la escencia del PWM

En la grfica vemos claramente que, manteniendo una frecuencia constante (representada por el Perodo) de la seal de salida de cualquiera de los puertos de un microcontrolador, podemos aplicar una variacin del tiempo de duracin de la mencionada salida en estado alto (referencias de color rojo). De esta manera, si la variacin es en aumento, incrementar el valor promedio de la tensin aplicada en el dispositivo conectado (referencias de color verde). En el caso de la aplicacin de un ancho de pulso mnimo, observaremos una salida de tensin promedio casi nula, por lo que si tenemos all conectado un LED, el mismo lucir prcticamente apagado. Por el contrario, si el ancho de pulsos que le imponemos a nuestra seal es el mximo posible, el mismo LED brillar en toda su intensidad.

Declaracin de variables y alias a usar en el programa

Con este artilugio electrnico estaremos acercndonos mucho a una salida analgica con la que podremos variar velocidades de motores, intensidad de brillo de un conjunto de LEDs y hasta las aplicaciones ms interesantes y divertidas que se nos ocurran. La idea de funcionamiento inicial es muy simple y se sustenta en el funcionamiento del Timer0 del microcontrolador. Habilitando el overflow del TMR0 (T0IE = 1) y manejando su incremento con una variable BYTE, podemos jugar con valores que irn desde 0 hasta 255, donde desbordar y recomenzar el ciclo de cuenta. Por lo tanto, lo primero que haremos es (dentro del programa fuente) habilitar las interrupciones y darle un marco funcional y operativo ajustando los registros pertinentes para un funcionamiento correcto del TMR0.

Registros e interrupcin

Una vez que la interrupcin (PWM_INT) est preparada para acumular los valores que comenzarn a aparecer en la variable DUTY0 para finalmente entregar el resultado en el puerto B (seccin del programa indicada en rojo difuso), ya estaremos listos para organizar y preparar la variable DUTY0 con valores comprendidos entre 0 y 255. Entre las ms sencillas y prcticas para

experimentar dentro de la mayora de los programas que manejan el lenguaje BASIC, se encuentra la instruccin POT. Esta sencilla instruccin ser capaz de leer un potencimetro, una resistencia variable del tipo preset, un termistor, un LDR, un NTC, un PTC y cualquier otra resistencia que no supere los 50K.

Conexin del potencimetro y ejemplo de rutina POT

La aplicacin del circuito es muy sencilla y slo se necesita un capacitor en serie con la resistencia variable. Mediante la instruccin POT, el microcontrolador mide el tiempo de descarga del capacitor, tiempo que ser directamente proporcional a la resistencia que adopte P1. La sintaxis del ejemplo mostrado en la grfica devolver un valor mximo de 100 y lo cargar en la variable VAR1. Esto se conectar al pin 0 del puerto B y, a cada vuelta del lazo, estar informando al PIC si la resistencia ha variado o no. En nuestro caso, la instruccin llevar un lmite de 255 para cargar al mximo la variable DUTY0. Veremos el funcionamiento del sistema de la siguiente forma:

Como habrs apreciado en el video, el funcionamiento es muy claro y sencillo y nos invita a profundizar en la experimentacin. La primera posibilidad clara es la de hacer un contador de 1 a 255 por pasos de 1 en forma ascendente y luego en forma descendente. De esta forma, el LED que estamos utilizando para el ensayo variar entre mximos y mnimos y a ese comportamiento podemos darle mayor o menor velocidad segn el ajuste del retardo que se ubica entre cada lazo FOR NEXT.

En el final del ensayo con el hardware, completaremos la conexin de todo el puerto B con 8 LEDs indicadores a la salida e implementaremos un recorrido secuencial que, al ubicar los 8 LEDs en forma de crculo, nos permitir observar un agradable efecto que, como en el caso anterior, podemos variar en velocidad para darle un poco de vrtigo al movimiento.

Pero es bueno dejarlo en la etapa inicial a la velocidad que te lo entregamos para poder apreciar el efecto cuasi-analgico que ofrecen los LEDs. Observars en el cdigo fuente la implementacin de un comando que no habamos utilizado hasta ahora y es el comando Complemento ~

Listado para las 8 salidas PWM

Aqu necesitaremos 8 acumuladores y 8 variables DUTY; la funcin del complemento ser muy sencilla de entender y muy til. Como todos sabemos, el complemento de 1 es 0, de 11 es 00, de 1010101010 es 0101010101, y as con cualquier nmero binario. Por lo tanto, y para dar un ejemplo, mientras DUTY5 vaya decrementando su valor desde 255 hasta 1, DUTY6 se ir incrementando al mismo ritmo desde 1 a 255. Esto es muy interesante de ver y ensayar porque permite una transicin suave desde un LED al contiguo. Si no se utiliza esta lnea de cdigo, que puedes eliminar para notar la diferencia, observars que, cuando se apaga totalmente DUTY5, se enciende de golpe y a pleno DUTY6 siguiendo as toda la vuelta. En cambio, de esta forma, mientras uno se apaga el otro comienza a encenderse y la transicin es ms suave y agradable. Observa el video:

Por supuesto que el circuito es tan sencillo y simple que no merece aclaraciones especiales. Al 16F628A debemos alimentarlo con una fuente de alimentacin de 5Volts y aplicarle en su conexin de oscilador un cristal de cuarzo de 4Mhz. Si lo que deseas es construir un gadget llamativo, dinmico y con luces en movimiento, puedes optar por una construccin a partir de una batera de 9Voltios y un 7805, sacando el ejemplo del popular artculo del POV. Luego, una resistencia de 4K7 para el MCLR por pin 4, ms ocho resistencias de 220 ohms y 8 LEDs del color que gustes y quedars como un rey regalando a tus chicas un presente navideo tan original. Seguramente, no podrs evitar ganar el mote de friki del ao, pero sin duda alguna muchos te pedirn una demostracin de lo que es capaz de hacer tu maravilla.

A toda esta aplicacin que hemos visto se le puede agregar conexin RS232 al ordenador para variar parmetros como velocidad, efectos de transicin de encendido, seleccin de salidas activadas y muchas aplicaciones ms. Tambin puedes utilizar este sistema de control PWM para cargas importantes de varios amperes, donde puedas manejar motores y/o luminarias incandescentes de varias decenas de watts. Para esto es importante que utilices un circuito optimizado con un MOSFET de potencia que pueda manejar una carga de varios amperes. Un ejemplo que te recomendamos sera un circuito como el siguiente:

Circuito sugerido para exitar cargas a travs de un transistor MOSFET

En general, la frecuencia de PWM depende de la aplicacin. Sin embargo, hay dos reglas de oro en lo que respecta a la frecuencia del PWM. La primera es que a medida que la frecuencia aumenta, tambin lo hace la demanda de corriente debido a prdidas propias de un circuito conmutado. La segunda es que la capacitancia e inductancia de la carga tienden a limitar la respuesta en frecuencia del circuito. En condiciones de bajo consumo, es una buena idea utilizar el mnimo de frecuencia posible con la finalidad de reducir prdidas. En los circuitos, la capacitancia y/o inductancia que intervienen son factores que deben ser considerados para la correcta eleccin de la frecuencia del PWM. Los sistemas operados por PWM son utilizados frecuentemente en el control de motores debido a la eficacia de los sistemas conmutados en contraste con los de regulacin lineal de velocidad. Un aspecto importante a la hora de elegir la frecuencia de PWM para el control de un motor es la respuesta del motor ante cambios en el "DutyCycle" (ciclo de trabajo) del PWM. Un motor va a tener una respuesta ms rpida a cambio de un "DutyCycle" a frecuencias mayores. Otra consideracin que no debes dejar de tener en cuenta es el ruido provocado por el motor. Los motores de corriente continua del tipo "brushed" (con escobillas y colector) hacen un ruido intolerable dentro del rango audible cuando son llevados a altas frecuencias. Para eliminar este fenmeno, hay que utilizar este tipo de motores a frecuencias mayores que los 4kHz. Recordemos que los humanos pueden escuchar frecuencias hasta los 20kHZ; sin embargo, la mecnica de los motores va a atenuar el ruido en virtud de su imposibilidad de resonar a tan altas frecuencias. Es muy importante que conozcas las posibilidades que te brinda este artculo de poder obtener hasta 8 salidas PWM con un ajuste individual para cada salida en lo que refiere a su factor de trabajo (DutyCycle). Esta aplicacin va mucho ms all que un simple juego de luces en forma de crculo o un emulador del efecto de Knight Rider, sino que ests ante un verdadero sistema de control que, aplicado apropiadamente, puede ayudarte a resolver muchos problemas de control. Adems, PWM se puede lograr hasta con 555, pero del modo en que te lo hemos presentado, todas las salidas pueden mantener una probable sincrona requerida por la aplicacin, hecho que con los 555 eso sera impensado. Por otra parte, tambin puedes utilizar el/los mdulos CCP que traen en forma nativa los microcontroladores, pero nunca alcanzaras a sumar ocho unidades a un costo tan irrisorio como el circuito propuesto. Es decir, un PIC que traiga ms de dos mdulos CCP, puede costar muchos euros, mientras que t podrs controlar todo un mecanismo complejo con muy poco gasto y, adems, siempre tendrs la posibilidad de hacer trabajar a este 16F628A (que controlar tus LEDs RGB o tus motores) como esclavo de

otros procesadores ms especficos abocados a cualquier funcin especial. Podemos afirmar en pocas palabras que el circuito propuesto hoy es un verdadero expansor de salidas PWM para cualquier sistema. Disfrtalo.

You might also like