Como controlar el brillo de un LED : Introducción al PWM.

Como están estimados lectores, en este post que hemos llamado : “Como controlar el brillo de un LED : Introducción al PWM.” abordaremos el tema de como encender y apagar un led gradualmente utilizando para ello nuestro pequeño amigo el microcontrolador PIC16f628.

Seguro que ya sabes que encender y apagar un led no es una tarea muy difícil de realizar. Sin embargo encender el mismo led pero hacerlo de forma gradual, variando el brillo desde muy bajo hasta muy alto, ya no seria algo muy fácil de lograr.

Imaginemos que tenemos un circuito análogo simplificado, conformado por una batería, un regulador de voltaje, un potenciómetro y un led.

potenciómetro led

Girando el potenciómetro podemos ir variando el voltaje que alimenta al led digamos entre 0 y 1 voltio, lo que veríamos es que el brillo del led también cambiaria al ritmo del potenciómetro:

Control de brillo circuito analogo

Sin embargo, en electrónica digital no es posible llevar a cabo esta tarea de forma directa ya que nuestro microcontrolador solo puede manejar ceros y unos. Es decir el led solo podría estar o encendido o apagado. No existen puntos intermedios.

COMPRENDIENDO EL PWM Y SUS TERMINOS TECNICOS

Para lograr nuestro objetivo entonces sera necesario buscar la forma de emular una señal análoga y a esta técnica muy útil por cierto se le denomina Modulación por ancho de pulso o PWM por su traducción en ingles : Pulse Wide Modulation.

A lo largo de este post iremos revisando poco a poco en que consiste esta técnica y todos los terrinos técnicos que se requieren conocer para su dominación.

Ahora observa por un momento la siguiente animación .

Como controlar el brillo de un LED : Introducción al PWM.

Si logras comprender la animación ya habrás comprendido de forma general como funciona el famoso PWM y como un circuito digital se las arregla para emular un resultado que solo seria posible con un circuito análogo.

Sigamos entonces analizando, con un poco mas de detalle técnico, como opera una señal PWM.

Analicemos esta parte de la señal digital :

Como controlar el brillo de un LED : Introducción al PWM.

Lo que observamos es una señal digital con un periodo de duración fijo de 512 micro segundos.

Sin embargo lo que podemos apreciar que varia es el tiempo en el que la señal esta en estado alto ON dentro de cada uno de los periodos.

A ese tiempo lo llamaremos TIEMPO en que la señal es ON o simplemente TON.

Entonces, en este ejemplo tenemos un TON1 un TON2 un TON3 y un TON4 y si esta señal alimentaria un LED a cada uno de ellos le correspondería un brillo equivalente al ancho de su pulso.

CICLO DE TRABAJO DEL PWM

Un dato técnico importante es que a la relación o mejor dicho el cociente entre el TIEMPO ON o TON y el Periodo T se le conoce como CICLO DE TRABAJO o DUTY CICLE.

Analicemos el Duty cicle o ciclo de trabajo para el TON 3 y TON 4:

pwm ciclo de trabajo

En nuestro ejemplo el Ciclo de trabajo para el TON 3 seria del 50% y para el caso del TON 4 seria del 93.75 %.

Entonces como ya mencionamos si queremos usar una señal PWM para variar la intensidad de brillo de un led debemos buscar la forma de controlar y a su ves variar el Tiempo ON o TON de una señal digital de periodo fijo.

PERIODO Y FRECUENCIA DEL PWM

Ahora las formulas que relacionan al tiempo de periodo T y la frecuencia f de una señal PWM son las mismas que para cualquier otra señal digital :

Entonces, aplicando estas formulas para el ejemplo donde el periodo T del PWM es 512 microsegundos tendríamos que la frecuencia seria:

f = 1/(0.000512 segundos)

f = 1953.125 Hertz por segundo.

En este punto hacemos un paréntesis a la teoría del PWM para recordarte que no se debe confundir la frecuencia de Oscilación llamada FOSC y el Periodo de Oscilación llamado TOSC que son señales de entrada del PIC con la Frecuencia f y Periodo T del PWM la cual es una señal de salida.

Recuerda que FOSC y TOSC dependen del cristal que le coloques al PIC y estos determinan el CICLO DE MAQUINA o ciclo de trabajo del PIC, del cual dependen todas las tareas que el realiza, incluido por supuesto nuestro PWM.

Observa el siguiente grafico :

fosc, tosc y pwm

Las formulas que relacionan las señales FOSC y TOSC y que mas adelante nos servirán para realizar los cálculos de nuestro PWM te las muestro a continuación:

fosc y tosc y pwm

Bueno hasta aquí como te habrás podido dar cuenta solo nos hemos familiarizado con algunas variables y algunos de los términos mas importantes que intervienen en el tema del PWM como son:

  • Frecuencia de oscilación del pic o FOSC.
  • Periodo de oscilación del pic o TOSC.
  • Ciclo de maquina o ciclo de instrucción del PIC.
  • Tiempo ON o TON del PWM.
  • Ciclo de trabajo o DUTY cicle del PWM.
  • Periodo T del PWM.
  • Frecuencia f del PWM.
  • Resolución del PWM ( Esto lo veremos mas adelante ).
  • TIMERS del PIC ( Esto lo veremos mas adelante ).

Una ves que tengas muy clarito que son cada uno de estos términos ya podrás avanzar sin dificultades con lo que sigue de nuestro post:

DOS FORMAS DE LOGRAR UNA PWM UTILIZANDO UN MICROCONTROLADOR

Existen 2 formas de conseguir salidas digitales PWM utilizando microcontroladores, cada una de ellas con diferentes características y peculiaridades.

PWM POR HARDWARE:

La primera y la mas conocida es utilizando un modulo llamado CCP con el que viene equipados la gran mayoría de los microcontroladores y también por su puesto nuestro viejo PIC16f628.

Esta manera de lograr el PWM se le conoce como PWM POR HARDWARE, debido a que utiliza el equipamiento del microcontrolador para realizar la tarea de controlar la frecuencia f , el periodo T y los ciclos de trabajo TONs. Términos que obviamente ya conoces y dominas.

Un dato importante que debes saber es que en el caso del PWM por HARDWARE, el Microcontrolador PIC utiliza el TIMER 2 para su funcionamiento.

PWM POR SOFTWARE:

La segunda forma de lograr una PWM y digamos que la menos conocida o difundida es mediante el uso de código de programación, es decir mediante instrucciones de comando en donde se le indica al PIC que realice el control de todas las variables del PWM sin utilizar el modulo CCP.

Un dato técnico importante es que el modo por software utiliza el TIMER 0 o el TIMER 1 del pic para lograr controlar todas las variables del PWM.

A continuación una pequeña comparación de ambas técnicas para generar PWM:

Lo que sigue a continuación es una breve descripción del funcionamiento de los TIMERS del PIC y como se utilizan para lograr el control de las variables de una señal PWM.

BREVE INTRODUCCION AL TIMER 0 Y TIMER 2 DEL PIC16F628.

Para trabajar el control de tiempos, de periodos, anchos de pulso y frecuencias necesitamos de la ayuda de los TIMERS del PIC .

pwm timer 0 y timer 2

Por ello es necesario que demos un breve repaso al funcionamiento de al menos 2 de los 3 TIMERS del PIC 16f628, que usaremos en nuestros proyectos de PWM.

El TIMER 0

El TIMER 0 (TMR0) es uno de los tres temporizadores disponibles en el 16F628A. Puede ser utilizado como temporizador o contador de señales.

Para utilizarlo como control de una señal PWM solo nos interesa el modo temporizador de este timer.

El TIMER 0 es básicamente un registro de 8 BITS que puede alimentarse del ciclo de instrucción o ciclo de maquina del PIC (4xTOSC) . También podría alimentarse de una señal externa por el pin RA4.

Al ser de 8 bits significa que podemos temporizar pulsos desde 0 hasta FF o su equivalente decimal 0 hasta 255.

Como todos los demás timers del PIC, el TIMER 0 tiene la opción de prescaler para ralentizar las operaciones de temporización tal como lo muestra la siguiente figurita:

PWM prescaler timer0

En el caso de los prescalers del TIMER 0 este puede tomar los siguientes valores:

Algo importante a tener en cuenta del TIMER 0 es que podemos indicarle que inicie su temporización desde un valor inicial llamado PRECARGA y desde este valor iniciar su temporización hasta llegar a 255.

Para que entiendas esto mejor mira la siguiente figurita:

Como controlar el brillo de un LED : Introducción al PWM.

Una ves llegado a 255 , ya sea que inicio desde 0 o desde un valor de PRECARGA, el TIMER 0 se reinicia y en este momento puede ejecutar alguna acción de control que le indiquemos. Justamente esta acción de control puede ser la de controlar el periodo de nuestro PWM o incrementar el ancho de pulso de una señal.

La formula que debes conocer y que nos servirá mas adelante para nuestro control PWM por SOFTWARE es la siguiente:

Te recalco que El TIMER 0 lo utilizaremos en el caso de querer programar lo que se denomina PWM basado en SOFTWARE.

A continuación hagamos un repaso similar del TIMER 2.

TIMER 2

El TIMER2 del PIC es también un temporizador de 8 BITS, de 8 Bits significa que puede temporizar pulsos desde 0 hasta 255. Similar al TIMER0.

Como todos los demás timers del PIC tiene también la opción de prescaler para ralentizar las operaciones de temporización pero a diferencia del TIMER 0 solo posee 4 posibles valores de prescalador:

PRESCALER TIMER 2
1
4
16

Ahora en el caso del TIMER2 existe un registro denominado PR2 que es parecido al valor de PRECARGA que vimos en el TIMER 0. Solo que en este caso marca no el valor de inicio de temporización sino su FIN. Veamos la siguiente figurita para poder entender mejor como funciona:

Como controlar el brillo de un LED : Introducción al PWM.

Entonces el TIMER2 al llegar al valor de PR2 se reinicia y en este momento puede ejecutar una acción de control.

El TIMER2 se utiliza para controlar el PWM por HARDWARE.

El registro PR2 al indicar el máximo valor de temporización del TIMER2 será el que controlara el PERIODO T de nuestra señal PWM”.

La formula del TIMER 2 que se emplea para el control de periodo de la señal PWM es la siguiente:

Mas adelante aprenderemos a aplicar esta formula.

Ahora que ya revisamos como operan los TIMERS del PIC podemos hablar finalmente de LA RESOLUCION de una señal PWM.

RESOLUCION DE UNA SEÑAL PWM.

El termino resolución de una señal PWM es muy similar a lo que entendemos por ejemplo de la resolución de un TV. Es la cantidad de información que se puede almacenar en un registro para brindar una mayor calidad de experiencia visual.

En el caso de una señal PWM controlada por microcontrolador tenemos que la resolución viene dada por la cantidad de TONS que podemos meter dentro de los periodos de la señal PWM:

pwm : resolución PWM

En el ejemplo del control de brillo del LED mientras mas alta la resolución del PWM mas fluida y continua seria la transición del brillo del LED desde un brillo bajo a un brillo alto y viceversa.

Una baja resolución en una señal PWM alimentando un LED nos haría ver parpadeos molestos en la transición de brillo del LED.

El termino de resolución de una señal PWM se utiliza tanto para los programas de PWM por HARDWARE como PWM por SOFTWARE.

Resolución de una señal PWM por HARDWARE.

En términos técnicos en nuestro PIC 16f628 el control de la resolución del PWM por HARDWARE se logra gracias a un grupo de BITS que pueden ser como máximo 10 y que se guardan dentro de 2 registros llamados CCPR1L y CCP1CON de la siguiente manera:

  • El registro CCPR1L contendrá los 8 bits mas significativos de la resolución.
  • El registro  CCP1CON <5: 4> contendrá los 2 bits menos significativos de la resolución.

Gracias a estos 2 registros ya tenemos un contenedor de hasta 10 bits que conformaran la resolución total de nuestro PWM.

Y que significa esto de 10 bits de resolución ?

Pues muy sencillo :

Con 10 bits podemos obtener 1024 distintos anchos de pulso disponibles. Es decir 1024 distintos TIEMPOS ON o TONs que podemos encajar dentro de nuestro PERIODO PWM.

La resolución máxima de 10 BITS osea 1024 TONs se logra siempre y cuando se coloque en el registro PR2 del TIMER 2 el valor de 255. (Su valor máximo).

Luego de aplicar la formula del periodo podrás conocer el valor que tomara PR2 y luego podremos aplicar la siguiente formula para hallar los bits de resolución que le corresponden.

resolucion PWM

Por ejemplo digamos que la formula de periodo nos arroja un valor de 200 para PR2, veamos cual seria la resolución de nuestro PWM.

resolucion PWM

Como podemos ver cuando PR2 toma el valor de 200 la resolución ahora sera como máximo de 803.

En este punto deberás darte cuenta el que valor de PR2 para PWM por HARDWARE es muy importante ya que esta vinculado tanto a la formula de la RESOLUCION como a la formula del PERIODO.

Resolución de una señal PWM por SOFTWARE

En el caso del PWM generado por software no existe una formula o camino directo para aplicar una resolución determina a una señal, y dependerá básicamente del uso de interrupciones del TIMER con el que se trabaje.

En nuestro caso utilizaremos en TIMER 0 y sus INTERRUPCIONES para controlar tanto el ancho pulso es decir la RESOLUCION como también el periodo de la señal PWM.

La forma de lograrlo la explicamos gráficamente a continuación:

Como controlar el brillo de un LED : Introducción al PWM.

Recordemos que la formula que maneja el tiempo de cada interrupción del TIMER 0 es:

Como puedes ver cada interrupción del TIMER0 es la pieza de control tanto de la resolución como del periodo. En el ejemplo vemos que a la sexta interrupción del TIMER0 podemos pedirle al PIC que ponga a cero la señal marcando así el ancho de pulso. Luego en la interrupción numero 12 que se levante nuevamente la señal marcado el fin del periodo.

Trabajando con puras interrupciones podemos lograr controlar toda una señal PWM.

Mas adelante veremos un ejemplo practico de como aplicar toda esta teoría.

Eso ha sido todo amigos en este post introductorio “Como controlar el brillo de un LED : Introducción al PWM.“.

En los siguientes post veras como aplicamos las formulas y los métodos que utilizamos para programar señales PWM de las 2 formas que hemos estudiado:

PROGRAMACION PWM POR HARDWARE control de brillo de un led.

PROGRAMACION PWM POR SOFTWARE.

Recuerda que una manera de ayudarnos a mantener este contenido en linea es visitando los anuncios que aparecen a lo largo del post. Gracias!

Recuerda tambien que puedes visitar todo el contenido de nuestro blog en :

BLOG DE TECNOCIENCIA.

Tambien puedes visitar nuestro canal de youtube en :

CANAL DE YOUTUBE TECNOCIENCIA

https://www.tecnocienciaperu.com/blog/

https://www.youtube.com/c/MarcosAguilar_mks/videos?view_as=subscriber

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *