You are on page 1of 7

El Timer0 y el Timer2 en Modo PWM

Inicialmente era el Timer1 el que fue plenamente equipado para generar ondas PWM. Si bien los
otros Timers tambin ofrecen esa funcionalidad, an tienen muchas limitaciones.
El Timer0 de los AVR actuales puede producir hasta dos canales PWM, por los pines OC0A y OC0B.
El Timer2 hace lo propio por los pines OC2A y OC2B. Estos pines debern estar configurados como
salida para dar salida a las seales PWM. Esta es una caracterstica que distingue a los mdulos
PWM de los dems perifricos del megaAVR donde la configuracin y control de los pines
involucrados quedan a cargo del mdulo respectivo.
Dada la paridad entre los dos Timers y entre los dos canales PWM, volvemos a aclarar que la
siguiente exposicin est relacionada solo al canal A del Timer0, dando por sentado que es
tambin aplicable al canal B, tanto del Timer0 como del Timer2.
Tabla WGM02
WGM02 WGM01 WGM00 Modo de Operacin del Timer0 Inicio del Conteo Tope del Conteo
0 0 1 PWM de Fase Correcta 0x00 0xFF
0 1 1 Fast PWM 0x00 0xFF
1 0 1 PWM de Fase Correcta 0x00 OCR0A
1 1 1 Fast PWM 0x00 OCR0A
La tabla de arriba nos muestra que el Timer0 puede generar dos tipos de ondas PWM, Fast PWM y
PWM de Fase Correcta, segn la forma como avanza el registro TCNT0. Cada uno de estos modos
tiene a su vez una variante (aparecen sombreados en la tabla), donde el tope del conteo es el valor
del registro OCR0A. Estos modos son especiales que suelen entorpecer la comprensin del modo
PWM de los Timers. As que los ignoraremos por el momento y en adelante asumiremos que el
valor tope del Timer0 es siempre de 255. Con eso en mente podemos seguir.
Timer0 en modo Fast PWM
El modo Fast PWM se conoce tambin como PWM de pendiente nica porque el registro TCNT0
avanza siempre hacia arriba, es decir, cuenta desde 0 hasta un valor TOPE que es 255, despus de
lo cual se resetea y vuelve a empezar desde 0. Si graficamos este progreso, la curva resulta siendo
efectivamente una escalera de pendiente nica, como se ve abajo.

Como se indica en la figura, la onda Fast PWM es generada por la conmutacin del pin OC0A cada
vez que el registro TCNT0 llega al tope y cada vez que TCNT0 coincide con el registro OCR0A. En la
grfica las coincidencias se sealan con pequeas lneas rojas horizontales sobre la escalera. Segn
la configuracin de los bits COM0A1 y COM0A0 (del registro TCCR0A), la onda PWM puede ser
invertida o no invertida.
Si los bits COM0A1:0 valen 0b10 se establece una onda no-invertida, esto es, el pin OC0A
se setea cuando TCNT0 llega al tope y se limpia cuando TCNT0 coincide con el registro
OCR0A.
Si los bits COM0A1:0 valen 0b11 se establece una onda invertida, esto es, el pin OC0A se
limpia cuando TCNT0 llega al tope y se setea cuando TCNT0 coincide con el registro
OCR0A.
Puesto que el Timer0 siempre cuenta en todo su rango de 0 a 255, se deduce que el periodo, y por
ende la frecuencia, de la onda PWM tambin sern constantes. Esa es la limitacin del modo PWM
de los Timers de 8 bits. Por otro lado, s es posible modificar el valor del registro OCR0A, lo cual
nos permitir controlar el duty cycle de la onda PWM.
En la siguiente imagen se indican las frmulas para calcular el periodo y el duty cycle de una onda
Fast PWM no-invertida. Como siempre, F_CPU es la frecuencia del procesador y N es el factor del
prescaler. Recuerda que N tiene ms posibles valores en el Timer 2 que en el Timer0. Para ms
detalles puedes revisar la seccin relojes del Timer0 y del Timer2.

Periodo y Duty cycle de una onda Fast PWM no-invertida.
La frecuencia de la onda Fast PWM se obtiene invirtiendo la frmula del periodo:

Y la frmula que nos da el duty cycle expresado en porcentaje la obtenemos dividiendo las
frmulas del duty cycle y del periodo:

En esta frmula podemos observar que si el registro OCR0A toma su valor mximo de 255,
entonces el duty cycle ser del 100%, lo cual significa que el estado del pin OC0A ser de 1 lgico
constante. En cambio, no hay ningn para el registro OCR0A que nos d un duty cycle del 0%. Si el
registro OCR0A vale 0 la salida ser de unos pequeos picos que representan un duty cycle
cercano al 0.4%. sa es la caracterstica que diferencia al modo Fast PWM de los dems modos
PWM.
Timer0 en modo PWM de Fase Correcta
El modo PWM de Fase Correcta se conoce tambin como PWM de doble pendiente porque el
registro TCNT0 cuenta en sube y baja, es decir, primero avanza desde 0 hasta un valor TOPE (255)
y despus regresa de 255 hasta 0. Este proceso se repite cclicamente y si lo graficamos, la curva
resulta siendo efectivamente una escalera de doble pendiente, como se ve abajo.

Como se indica en la figura, la onda PWM de Fase Correcta es generada por la conmutacin del pin
OC0A cada vez que el registro TCNT0 coincide con el registro OCR0A. En la grfica las coincidencias
se sealan con pequeas lneas rojas horizontales sobre la escalera. Segn la configuracin de los
bits COM0A1 y COM0A0 (del registro TCCR0A), la onda PWM puede ser invertida o no invertida.
Si los bits COM0A1:0 valen 0b10 se establece una onda no-invertida, esto es, el pin OC0A
se setea cuando TCNT0 coincide con el registro OCR0A en su conteo descendente, y se
limpia cuando TCNT0 coincide con el registro OCR0A en su conteo ascendente.
Si los bits COM0A1:0 valen 0b11 se establece una onda invertida, esto es, el pin OC0A se
setea cuando TCNT0 coincide con el registro OCR0A en su conteo ascendente, y se limpia
cuando TCNT0 coincide con el registro OCR0A en su conteo descendente.
Puesto que el Timer0 siempre cuenta en todo su rango de 0 a 255, se deduce que el periodo, y por
ende la frecuencia, de la onda PWM tambin sern constantes. Esa es la limitacin del modo PWM
de los Timers de 8 bits. Por otro lado, s es posible modificar el valor del registro OCR0A, lo cual
nos permitir controlar el duty cycle de la onda PWM.
En la siguiente imagen se indican las frmulas para calcular el periodo y el duty cycle de una onda
PWM de Fase Correcta no-invertida. Como siempre, F_CPU es la frecuencia del procesador y N es
el factor del prescaler. Recuerda que N tiene ms posibles valores en el Timer 2 que en el Timer0.
Para ms detalles puedes revisar la seccin relojes del Timer0 y del Timer2.

Periodo y Duty cycle de una onda PWM de Fase Correcta no-invertida.
La frecuencia de la onda PWM de Fase Correcta se obtiene invirtiendo la frmula del periodo.
Observa que la doble pendiente de este modo hace que la mxima frecuencia obtenida sea la
mitad de la frecuencia mxima que brinda el modo Fast PWM.

Y la frmula que nos da el duty cycle expresado en porcentaje la obtenemos dividiendo las
frmulas del duty cycle y del periodo:

A diferencia del modo Fast PWM en esta frmula podemos observar que el duty cycle puede
abarcar todo su rango desde 0% (con OCR0A = 0) hasta el 100% (con OCR0A = 255). El 0% significa
que la salida ser un constante 0 lgico y un 100%, que la salida ser un estado alto constante. sa
es la razn por la que se denomina de fase correcta.

Modos de Operacin del Timer0 y Timer2
En general existen 3 modos en que pueden trabajar los Timers:
Modo Normal
Modo CTC
Modo PWM
Cada modo tendr sus variantes dependiendo del Timer. Por ejemplo, en el Timer1 existen
hasta 12 modos PWM, pero bueno, de eso nos ocuparemos en su momento.

Diagrama de bloques del Timer0.
La figura nos resalta que esta vez vamos a trabajar con los bits WGM. Su nombre viene de
Waveform Generation Mode porque estos bits pre-establecen el tipo de onda que podr
generar el Timer0 por los pines OC0A y OC0B. En la prctica es raro utilizar otras formas
de onda que no sean de tipo PWM, as que el nombre no parece muy apropiado.
En la figura tambin se aprecia que los GENERADORES DE ONDA tambin dependen de
los bits COM (de Compare Output Mode). Estos bits establecen el modo en que finalmente
saldrn las ondas por los pines OC0A y OC0B, es decir, pueden salir normales, invertidas,
o pueden simplemente no salir y dejar los pines OC0x libres para otras tareas. A lo que
quiero llegar es que al menos en cursomicros los bits COM solo se usan en modo PWM. En
los modos Normal y CTC nos olvidamos de ellos.
Tabla Modos de Operacin de Timer0
WGM02 WGM01 WGM00 Modo de Operacin de Timer0 Inicio del Conteo Tope del Conteo
0 0 0 Normal 0x00 0xFF
Tabla Modos de Operacin de Timer0
WGM02 WGM01 WGM00 Modo de Operacin de Timer0 Inicio del Conteo Tope del Conteo
0 0 1 PWM de Fase Correcta 0x00 0xFF
0 1 0 CTC 0x00 OCR0A
0 1 1 Fast PWM 0x00 0xFF
1 0 0 Reservado 0x00 ---
1 0 1 PWM de Fase Correcta 0x00 OCR0A
1 1 0 Reservado 0x00 ---
1 1 1 Fast PWM 0x00 OCR0A
Los bits WGM estn distribuidos en los dos registros de control del Timer0, TCCR0A y
TCCR0B. El hecho de que el bit WFG02 est en TCCR0B y no junto con sus pares en
TCCR0A habiendo espacios vacos all se debe a cuestiones de compatibilidad con otros
AVR.
Registro TCCR0A
TCCR0A COM0A1 COM0A0 COM0B1 COM0B0 --- --- WGM01 WGM00
Registro TCCR0B
TCCR0B FOC0A FOC0B --- --- WGM02 CS02 CS01 CS00

You might also like