Generando señales PWM por software

Vamos a aprender a generar señales PWM por software para utilizar con modelos de micros que no dispongan de los periféricos necesarios para dicha tarea. Fácilmente podremos controlar LEDs RGB con cualquier PIC, incluso de gama baja.

A veces nos encontramos con la necesidad de trabajar con varias señales PWM y debido a limitaciones de algunos microcontroladores no lo podemos resolver utilizando el periferico CCP. Implementando esta técnica podemos generar varias señales PWM de manera rápida y fiable.

Para generar señales PWM por software utilizaremos la interrupción que genera el timer 0. Primero se debe implementar un reloj con la frecuencia más grande posible, lo que implica experimentar con el prescalado y los incrementos. En nuestro ejemplo generamos interrupciones cada 80uS:

PRESCALADO = 8
INCREMENTOS = 10

Esto generará una base de tiempo muy pequeña. Este será el reloj principal para nuestra señal PWM. El ciclo de trabajo más pequeño del PWM generado será periodo de dicha señal.

timer0

Cambiando valores de prescalado e incrementos modificaremos el tiempo de interrupción y esto se verá reflejado en la frecuencia de nuestra señal PWM.

Lógica del programa

Vamos a ejemplificar la lógica a seguir para generar una señal PWM, en caso de necesitar más señales simplemente repetimos la secuencia de pasos.

Se definen tres variables: el período del PWM, el ciclo de trabajo y un contador que establece cuando se cumple el ciclo de trabajo y cuando se cumple el periodo.

  1. Configurar el TIMER0 y la interrupción
  2. Inicializar pines de salida=1
  3. Inicializar el registro CONTADOR=0
  4. Inicializar el registro PERIODO
  5. Inicializar el registro DUTY (ciclo de trabajo)

Cuando ingresamos a la interrupción haremos lo siguiente:

  1. Incrementar el registro CONTADOR (verificar valor máximo para reiniciarlo)
  2. Si los registros CONTADOR y DUTY son iguales asignar 0 al pin de salida
  3. Si los registros CONTADOR y PERIODO son iguales asignar 1 al pin de salida

codigo

En nuestro ejemplo definimos PERIODO=20 y DUTY=5, durante las primeras 5 interrupciones el pin de salida será 1 y luego se hará 0 durante las proximas 15. Al llegar a 20 reinicamos el registro CONTADOR y comenzará el ciclo nuevamente. Si deseamos modificar el ancho del pulso debemos cambiar el valor del registro DUTY.

osciloscopio

Calculo de frecuencia.

Podemos realizar un calculo aproximado de la frecuencia de la señal PWM generada. Hay varios factores que afectan este calculo y debido al caracter experimentar de nuestro generador, recomendamos medir con un instrumento las señales para conocer el valor exacto. Si queremos calcular la frecuencia de la señal seguimos la siguiente ecuación:

formula

Puede descargar los archivos que complementan al tutorial (código fuente, esquemas y datasheets) haciendo clic AQUÍ.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInShare on TumblrPin on PinterestDigg thisShare on RedditEmail this to someonePrint this page

Un comentario sobre “Generando señales PWM por software”

Los comentarios están cerrados.