Luego del mítico
16F84A, el microcontrolador que le sucede en complejidad es el también
popular 16F628A. Con su aparición en el mercado, marcó un avance
significativo por sobre el 16F84A en incontables aspectos, uno de ellos
es la incorporación de un módulo CCP (Capture/Compare/PWM). La
posibilidad de incorporar en forma nativa un generador de señal PWM
simplificó mucho los trabajos al momento de “emular” una salida
analógica desde el chip. Hasta aquí todos habían sido 1’s y 0’s, los
LEDs sólo encendían o apagaban y los motores funcionaban o no, mientras
que necesitabas tener la posibilidad de atenuar la iluminación de un
LED, variar la velocidad de un motor y otras aplicaciones que requerían
una urgente salida analógica. De manera muy inteligente, y sin dejar de
trabajar con niveles lógicos, veremos los métodos más frecuentes para
aprovechar no sólo una salida PWM, sino ocho a partir de un
microcontrolador sencillo y muy económico
Con el trabajo de hoy
veremos de manera muy sencilla y didáctica, algunas posibilidades que
existen dentro del mundo de los microcontroladores que te ayudarán 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
modulación por ancho de pulsos. Es decir, partiendo de una señal de
amplitud y frecuencia fija, vamos a proceder a variar el ancho del
semiciclo activo, comprimiéndolo o expandiéndolo para así lograr
transportar dentro de la señal una información variable que utilizaremos
para diversas aplicaciones según la necesidad del desarrollo que
emprendamos.
Importante: Si lo que encuentras
aquí te resulta útil, ayúdanos a mantener
este sitio. Cualquier donación es bienvenida. Tu apoyo nos
permitirá acceder a nuevos materiales y a montajes más
interesantes y útiles. Gracias por ayudarnos a hacer
Servisystem cada día mejor. Tu ayuda será muy importante
para nosotros. Gracias.
En la gráfica vemos claramente que, manteniendo una frecuencia constante
(representada por el Período) de la señal de salida de cualquiera de los
puertos de un microcontrolador, podemos aplicar una variación del tiempo
de duración de la mencionada salida en estado alto (referencias de color
rojo). De esta manera, si la variación es en aumento, incrementará el
valor promedio de la tensión aplicada en el dispositivo conectado
(referencias de color verde). En el caso de la aplicación de un ancho de
pulso mínimo, observaremos una salida de tensión promedio casi nula, por
lo que si tenemos allí conectado un LED, el mismo lucirá prácticamente
apagado. Por el contrario, si el ancho de pulsos que le imponemos a
nuestra señal es el máximo posible, el mismo LED brillará en toda su
intensidad.
Declaración de variables y alias a usar
en el programa
Microcontroladores PIC
No te pierdas este nuevo espacio donde hablamos de ... más Electrónica
El primer Tutorial de TV en castellano de la Web.
Para aprender a reparar y todo lo que quieras saber de TV .
Con este artilugio electrónico estaremos acercándonos mucho a una salida
analógica con la que podremos variar velocidades de motores, intensidad
de brillo de un conjunto de LEDs y hasta las aplicaciones más
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 irán 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 interrupción
Descubrí la técnica que muchos ya
utilizan para personalizar su DVD. Hacé el tuyo a tu medida!
Una vez que la
interrupción (PWM_INT) esté preparada para acumular los valores que
comenzarán a aparecer en la variable DUTY0 para finalmente entregar el
resultado en el puerto B (sección 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 más sencillas y prácticas
para experimentar dentro de la mayoría de los programas que manejan el
lenguaje BASIC, se encuentra la instrucción POT. Esta sencilla
instrucción será capaz de leer un potenciómetro, una resistencia
variable del tipo preset, un termistor, un LDR, un NTC, un PTC y
cualquier otra resistencia que no supere los 50K.
Conexión del potenciómetro y ejemplo de
rutina POT
La aplicación del circuito es muy sencilla y sólo se necesita un
capacitor en serie con la resistencia variable. Mediante la instrucción
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 gráfica devolverá un valor
máximo 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 instrucción llevará un
límite de 255 para cargar al máximo la variable DUTY0. Veremos el
funcionamiento del sistema de la siguiente forma:
Como habrás apreciado
en el video, el funcionamiento es muy claro y sencillo y nos invita a
profundizar en la experimentación. 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 máximos y mínimos y a ese comportamiento podemos
darle mayor o menor velocidad según el ajuste del retardo que se ubica
entre cada lazo FOR – NEXT.
En el final del ensayo
con el hardware, completaremos la conexión 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 círculo, nos permitirá observar un
agradable efecto que, como en el caso anterior, podemos variar en
velocidad para darle un poco de “vértigo” al movimiento. Pero es bueno
dejarlo en la etapa inicial a la velocidad que te lo entregamos para
poder apreciar el efecto “cuasi-analógico” que ofrecen los LEDs.
Observarás en el código fuente la implementación de un comando que no
habíamos utilizado hasta ahora y es el comando complemento.
Listado para las 8 salidas PWM
Aquí necesitaremos 8 acumuladores y 8 variables DUTY; la función 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 número 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 transición suave desde
un LED al contiguo. Si no se utiliza esta línea de código, que puedes
eliminar para notar la diferencia, observarás 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 transición es más 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 alimentación de 5Volts
y aplicarle en su conexión de oscilador un cristal de cuarzo de 4Mhz. Si
lo que deseas es construir un gadget llamativo, dinámico y con luces en
movimiento, puedes optar por una construcción a partir de una batería de
9Voltios y un 7805, sacando el ejemplo del popular artículo del POV.
Luego, una resistencia de 4K7 para el MCLR por pin 4, más ocho
resistencias de 220 ohms y 8 LEDs del color que gustes y quedarás como
un rey regalando a tus chicas un presente navideño tan original.
Seguramente, no podrás evitar ganar el mote de “friki del año”, pero sin
duda alguna muchos te pedirán una demostración de lo que es capaz de
hacer tu maravilla.
A toda esta aplicación
que hemos visto se le puede agregar conexión RS232 al ordenador para
variar parámetros como velocidad, efectos de transición de encendido,
selección de salidas activadas y muchas aplicaciones más. También 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 sería un
circuito como el siguiente:
Circuito sugerido para exitar cargas a
través de un transistor MOSFET
En general, la frecuencia de PWM depende de la aplicación. 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, también lo hace la
demanda de corriente debido a pérdidas 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 mínimo de
frecuencia posible con la finalidad de reducir pérdidas. En los
circuitos, la capacitancia y/o inductancia que intervienen son factores
que deben ser considerados para la correcta elección 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 regulación 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 más rápida a
cambio de un "DutyCycle" a frecuencias mayores. Otra consideración 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 fenómeno, 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 mecánica 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
artículo 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 aplicación va mucho más allá que un simple juego de luces en forma
de círculo o un emulador del efecto de Knight Rider, sino que estás ante
un verdadero sistema de control que, aplicado apropiadamente, puede
ayudarte a resolver muchos problemas de control. Además, PWM se puede
lograr hasta con 555, pero del modo en que te lo hemos presentado, todas
las salidas pueden mantener una probable sincronía requerida por la
aplicación, hecho que con los 555 eso sería impensado.
Por otra parte, también puedes utilizar el/los módulos CCP que traen en
forma nativa los microcontroladores, pero nunca alcanzarías a sumar ocho
unidades a un costo tan irrisorio como el circuito propuesto. Es decir,
un PIC que traiga más de dos módulos CCP, puede costar muchos euros,
mientras que tú podrás controlar todo un mecanismo complejo con muy poco
gasto y, además, siempre tendrás la posibilidad de hacer trabajar a este
16F628A (que controlará tus LEDs RGB o tus motores) como esclavo de
otros procesadores más específicos abocados a cualquier función
especial. Podemos afirmar en pocas palabras que el circuito propuesto
hoy es un verdadero expansor de salidas PWM para cualquier sistema.
Importante: Si lo que encuentras
aquí te resulta útil, ayúdanos a mantener
este sitio. Cualquier donación es bienvenida. Tu apoyo nos
permitirá acceder a nuevos materiales y a montajes más
interesantes y útiles. Gracias por ayudarnos a hacer
Servisystem cada día mejor. Tu ayuda será muy importante
para nosotros. Gracias.