martes, 10 de enero de 2017

PWM avr II - Generación de señal pwm con AVR

En el post anterior se vió una introducción sobre PWM, cómo un dispositivo digital podría generar una señal analógica, mediante la técnica de modulación de ancho de pulso de sus salidas "especiales". El ATmega2560 de AVR tiene algunas salidas con esas capacidades.

Antes de continuar sería interesate que se lean el siguiente artículo
Introducción a PWM

La generación de una señal PWM se lleva a cabo através de Hardware dedicado. Tener HW dedicado para realizar este tipo de trabajo, disminuye la sobrecarga desde el lado del software y CPU. Una vez que la CPU indica que se tiene que producir una salida determinada, el HW dedicado envía la señal hacia los pines de salida, mientras que la CPU se dedica a otra cosa.

En AVR las señales PWM se generan a través de Timers. En esteejemplo utilizaré el TIMER0 del Atmega2560 para generar pwm (Esto también puede ser utilizado en el ATmega16 y ATmega32).

En primer lugar, se tiene un contador de 8 bits, es decir que va desde 0 a 255. Se puede apreciar en la figura la representación gráfica del contador.


El periodo del contador depende del prescalar que se elija en la configuración del TIMER. Existe un registro que vamos a utilizar que se denomina OCR0 (Output Compare Register Zero, cero porque depende del TIMER0, vamos a tener un OCR1, OCR2, etc... dependiendo del TIMER). OCR0 es un número cualquiera (que seteamos) entre 0 y 255. Por ejemplo tomemos el número 30. Esto lo vemos en la figura como una línea recta roja horizontal.


¿Para qué sirve el OCR? Cuando se encuentra configurado el modo "fast PWM", mientras el valor del TCNT0 del TIMER0 se encuentra por encima del valor del OCR0, el pin de salida OC0 es puesto en cero. En cambio, cuando el contador (TCNT0) se encuentra entre cero y el valor de OCR0, el PIN OC0 es puesto en HIGH.

Con esto podemos calcular el ciclo de trabajo 30/256 = 11.7%. Entonces se puede setear el valor de OCR0 y con esto calcular el PWM del ciclo de trabajo  de OCR0/256. Nótese que un OCR0 = 0 es un ciclo de trabajo de 0% y un OCR0 = 255, es un ciclo de trabajo del 100%, es decir 5V.

En la siguiente imagen se puede observar mejor lo que se trató de eplicar anteriormente.

Fuente: http://extremeelectronics.co.in/avr-tutorials/pwm-signal-generation-by-using-avr-timers/

Con esta introducción a la Generación de señal PWM, ya podemos pasar a la práctica, que lo haremos en el siguiente post.

No hay comentarios:

Publicar un comentario