Documente Academic
Documente Profesional
Documente Cultură
ONDAS Y PWM
GERSON ABDIEL PEREZ VILLARROEL
MODULACIÓN POR ANCHO DE PULSO
PINES ASOCIADOS A LA MODILACIÓN POR ANCHO DE PULSO
28 pin
OC0A
Timer0 (PCINT14/RESET) PC6 1 28 PC5 (ADC5/SCL/PCINT13)
OC0B (PCINT16/RXD) PD0 2 27 PC4 (ADC4/SDA/PCINT12)
(PCINT17/TXD) PD1 3 26 PC3 (ADC3/PCINT11)
4 MEGA328
OC1A (PCINT18/INT0) PD2 25 PC2 (ADC2/PCINT10)
Timer1 (PCINT19/OC2B/INT1) PD3 5 24 PC1 (ADC1/PCINT9)
OC1B (PCINT20/XCK/T0) PD4 6 23 PC0 (ADC0/PCINT8)
VCC 7 22 GND
OC2A GND 8 21 AREF
Timer2
OC2B (PCINT6/XTAL1/TOSC1) PB6 9 20 AVCC
(PCINT7/XTAL2/TOSC2) PB7 10 19 PB5 (SCK/PCINT5)
(PCINT21/OC0B) PD5 11 18 PB4 (MISO/PCINT4)
(PCINT22/OC0A/AIN0) PD6 12 17 PB3 (MOSI/OC2A/PCINT3)
(PCINT23/AIN1) PD7 13 16 PB2 (SS/OC1B/PCINT2)
(PCINT0/CLKO/ICP1) PB0 14 15 PB1 (OC1A/PCINT1)
PWM EN AVR
• El timer0 es un el registro de 8 bits llamado TCNT0 el cual irá aumentando su valore de 0 a 255, el aumento
de su valore en una unidad puede ser con cada ciclo de trabajo del microcontrolador AVR, si se utilizan los
prescaler el aumento en una unidad de sus valores se ralentiza, dependiendo del prescaler utilizado.
• En el PWM timer0 en modo rápido el registro TCNT0 irá de 0 a 255, luego se reiniciará a 0 para volver hasta
255 y luego otra vez de 0 a 255 y así continuará en el modo rápido; a este ir de 0 a 255 le tomará un tiempo
que dependerá del prescaler utilizado para el timer0, y ese tiempo que le tome al registro TCNT0 para ir de 0
a 255 será el periodo de la señal PWM timer0
• Una cosa a tener en cuenta es que al pasar el registro TCNT0 de 255 a 0 se desborda, por lo cual se puede
habilitar el uso de la interrupción por desborde del timer0.
• Al registro TCNT0 se lo puede imaginar como si estuviese generando una onda diente de sierra en el
transcurso del tiempo.
PWM TIMER0 AVR - EN MODO RÁPIDO
DETERMINACIÓN DEL PERIODO
• Modificando la frecuencia
de trabajo ( FCPU), y
Si se elige un prescaler de 8 y la FCPU=1Mhz, entonces el registro TCNT0 aumentará en una unidad cada
8/FCPU = 8us, y si el registro TCNT0 va de 0 a 255 y vuelve a 0 para completar un periodo de la señal PWM el
Tpwm, habrá realizado el contero de 256 unidades, por lo que habrán transcurrido (256*8)/FCPU us.
Para cualquier otro prescaler en modo rápido el PERIODO DE LA PWM tendrá la siguiente forma:
Tpwm=(256*prescaler)/FCPU
En términos de la frecuencia de la señal PWM se obtendrá:
Fpwm=FCPU/(prescaler*256)
PWM TIMER0 AVR - EN MODO RÁPIDO
DETERMINACION DEL CICLO DE TRABAJO
La señal PWM se genera cuando el valor del registro TCNT0 que se encuentra incrementándose de unidad
en unidad se iguala al valor almacenado en el registro OCR0A o en el registro OCR0B, el registro TCNT0
seguirá incrementado sus valores hasta llegar a su máximo de 255, momento en el que recién se reiniciará,
la señal PWM generada se obtendrá en cualesquiera de los pines OC0A o OC0B del ATmega328P,
dependiendo si para la comparación se utiliza el registro OCR0A o el registro OCR0B, en adelante se
utilizará OC0x para los pines y OCR0x para los registros de comparación donde x puede ser A o B.
Una cosa a tener en cuenta es que al ocurrir la igualdad entre el registro TCNT0 y el registro OCR0A, se
puede habilitar el uso de la interrupción por comparación del timer0.
La señal PWM obtenida en el pin OC0x puede ser en forma no invertida o en forma invertida, estos
pines deben ser declarados como salidas digitales mediante sus registros DDRnx respectivos.
PWM TIMER0 AVR - EN MODO RÁPIDO
DETERMINACION DEL CICLO DE TRABAJO
Forma no invertida por el pin OC0x se obtendrá un alto mientras el valor del registro
TCNT0 sea menor al valor almacenado en el registro OCR0x, al ocurrir la igualdad entre
los registros TCNT0 y OCR0x el estado del pin OC0x cambiará a un bajo y se mantendrá
así hasta que el registro TCNT0 llegue a su máximo que es 255 y vuelva 0, momento en el
cual el estado del pin OC0x cambiará nuevamente a un alto y el ciclo se repetirá.
Forma invertida por el pin OC0x se obtendrá un bajo mientras el valor del registro
TCNT0 sea menor al valor almacenado en el registro OCR0x, al ocurrir la igualdad entre
los registros TCNT0 y OCR0x el estado del pin OC0x cambiará a un alto y se mantendrá
así hasta que el registro TCNT0 llegue a su máximo que es 255 y vuelva 0, momento en el
cual el estado del pin OC0x cambiará nuevamente a un bajo y el ciclo se repetirá.
PWM TIMER0 AVR -
EN MODO RÁPIDO
DETERMINACION
DEL CICLO DE
TRABAJO
PWM TIMER0 AVR - EN MODO RÁPIDO
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A
Los bits 7 y 6 son para elegir que la obtención de la señal PWM timer0 AVR será por el pin OC0A y si será en forma
no invertida o en forma invertida, mediante las combinaciones de estos bits según se indica en la siguiente tabla.
Si las combinaciones de estos bits son 10 la señal PWM obtenida por el pin OC0A será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC0A será invertida
PWM TIMER0 AVR - EN MODO RÁPIDO
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A
Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer0 AVR será por el pin OC0B y si será en forma
no invertida o en forma invertida, mediante las combinaciones de estos bits según se indica en la siguiente tabla.
Si las combinaciones de estos bits son 10 la señal PWM obtenida por el pin OC0B será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC0B será invertida
PWM TIMER0 AVR - EN MODO RÁPIDO
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A
Los bits 1 y 0 junto con el bit3 del registro TCCR0B son con los cuales se elige el modo de obtener las señales
PWM timer0 AVR, mediante las combinaciones de estos bits según se indica en la siguiente tabla.
Los bits 7, 6, 5, y 4 no se utilizarán en la obtención de la señal PWM timer0 AVR por lo que se les pondrá a 0.
El bit3 trabaja junto con los bits 1 y 0 del registro TCCR0A tal como se comentó.
Los bits 2, 1 y 0 son para elegir el prescaler a utilizar para obtener la frecuencia de la señal PWM timer0 AVR, las
combinaciones de estos bits para los diversos prescaler del timer0 son los que se indican en la siguiente tabla:
PWM TIMER0 AVR - EN MODO RÁPIDO
CONFIGURACIÓN DE LOS REGISTROS - REGISTROS OCR0A Y OCR0B
Se usará OCR0x para referirse a cualesquiera de ellos, x será A o B, en este registro se cargará el valor
mediante el cual se controlará el ancho de pulso de la señal PWM que se obtendrá por el pin OC0x, este
valor va de 0 a 255, cuando sea 0 el ancho de pulso será 0 o del 0%, cuando sea 255 el ancho de pulso
será igual al periodo o del 100% de la señal PWM timer0 AVR, y entre ese intervalo se obtienen los
diferentes anchos de pulso de la señal PWM.
Se puede utilizar la siguiente forma para el ciclo de trabajo de la señal PWM timer0 AVR modo rápido.
Ciclo de trabajo=((OCR0x)/255)*100%
Por ejemplo si se quiere un ciclo de trabajo del 15%, se puede proceder así
15%=((OCR0x)/255)x100%
De donde al despejar OCR0x se tendrá:
OCR0x=38
PWM TIMER0 AVR - EN MODO RÁPIDO
EJEMPLOS
Generar una señal PWM con un ancho de pulso del 15% por el pin OC0B en forma no
invertida. Se utilizará una frecuencia detrabajo de 1Mhz y un prescaler de 8.
Fpwm=FCPU/(prescaler*256)
Fpwm=(1Mhz/(8*256)=488,3Hz
Se quiere una señal PWM por el pin OC0B con un ciclo de trabajo del 15%, entonces habrá que
cargar el registro OCR0B con lo que se obtenga de la ecuación del ciclo de trabajo.
15%=((OCR0B)/255)x100%
OCR0B=38
Configuración del registro TCCR0A
TCCR0A=0b00100011;//PWM por el pin OC0B, PWM modo rápido
Configuración del registro TCCR0B
TCCR0B=0b00000010;//PWM modo rápido, prescaler de 8
PWM TIMER0 AVR - EN MODO RÁPIDO
EJEMPLOS
PWM TIMER0 AVR -
EN MODO RÁPIDO
EJEMPLOS
PWM timer0 AVR
PWM timer0 AVR en FASE
CORRECTA
PWM TIMER0 AVR
PWM TIMER0 AVR EN FASE CORRECTA
• En el timer0, el registro de 8 bits TCNT0 es el que irá aumentando desde 0 a 255. El aumento de sus valores
en una unidad puede ser con cada ciclo de trabajo del microcontrolador, o si se utilizan los prescaler del timer0
el aumento en una unidad de sus valores tardará mas, dependiendo del prescaler utilizado.
• En la PWM timer0 de fase correcta el registro TCNT0 irá de 0 a 255 y luego de 255 a 0, una y otra vez, y
tomará un tiempo que dependerá del prescaler utilizado para el timer0.
• El tiempo que le toma al registro TCNT0 ir de 0 a 255 y de 255 a 0 es el periodo de la señal PWM timer0 en
fase correcta,
• El registro TCNT0 puede ser imaginado como una onda triangular en el transcurso del tiempo.
• Cuando el registro TCNT0 va de 0 a 255 y luego de 255 a 0 se dispara la bandera de interrupción por
desborde cuando el TCNT0 va de 255 a 0, por lo que se puede habilitar el uso de la interrupción por
desborde del timer0.
PWM TIMER0 AVR EN FASE CORRECTA
DETERMINACIÓN DEL PERIODO
El tiempo total para
que registro TCNT0
aumente su valor
desde 0 a 255 y
viceversa se puede
modificar mediante:
• Modificando la
frecuencia de
trabajo ( FCPU), y
• El uso de los
prescaler.
PWM TIMER0 AVR EN FASE CORRECTA
DETERMINACIÓN DEL PERIODO
Si se elige un prescaler de 8 y la FCPU=1Mhz, entonces el registro TCNT0 aumenta en una unidad cada 8/FCPU o
cada 8 us. Como TCNT0 va de 0 a 255 y de 255 a 0 para completar un periodo (Tpwmpc), realiza el contero de
510 unidades, por lo cual el periodo será: (510*8)/FCPU us.
Para cualquier otro prescaler que se utilice, el periodo de la señal PWM timer0 fase correcta será:
Tpwmpc=(510*prescaler)/FCPU
En términos de la frecuencia, la señal PWM timer0 fase correcta, será:
Fpwmpc=FCPU/(prescaler*510)
PWM TIMER0 AVR EN FASE CORRECTA
DETERMINACIÓN DEL CICLO DE TRABAJO
La señal PWM timer0 en fase correcta se genera cuando el valor del registro TCNT0 se iguala al valor almacenado en
el registro OCR0A o en el registro OCR0B, tanto cuando el registro se incrementa de 0 a 255 como cuando se
decrementa de 255 a 0.
La señal PWM timer0 en fase correcta generada se obtendrá en cualesquiera de los pines OC0A o OC0B del
ATmega328P, dependiendo si para la comparación se utiliza el registro OCR0A o el registro OCR0B.
Si así lo desea, se puede habilitar la interrupción por comparación del timer0. cuando el registro TCNT0 y el registro
OCR0A son iguales.
La señal PWM timer0 en fase correcta obtenida en el pin OC0A o OC0B puede tener la forma no invertida o en forma
invertida, estos pines deben ser declarados como salidas digitales mediante sus registros DDRnx respectivos.
PWM TIMER0 AVR
EN FASE CORRECTA
DETERMINACIÓN
DEL CICLO DE
TRABAJO
PWM TIMER0 AVR EN FASE CORRECTA
DETERMINACIÓN DEL CICLO DE TRABAJO
• Para modificar el ancho de pulso de la señal PWM timer0 fase correcta se debe
modificar el valor almacenado en el registro OCR0x. Esto provoca cambios de estado
del pin OC0x en diferentes tiempos. Si el valor del registro OCR0x, es cambiando, se
obtiene, de la señal PWM timer0 fase correcta, un ancho de pulso modificado pero
manteniendo constante su periodo.
Los bits 7 y 6 son para elegir que la obtención de la señal PWM timer0 AVR será por el pin OC0A y si será en forma
no invertida o en forma invertida, mediante las combinaciones de estos bits según se indica en la siguiente tabla.
Si las combinaciones de estos bits son 10 la señal PWM obtenida por el pin OC0A será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC0A será invertida
PWM TIMER0 AVR EN FASE CORRECTA
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A
Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer0 AVR será por el pin OC0B y si será en forma
no invertida o en forma invertida, mediante las combinaciones de estos bits según se indica en la siguiente tabla.
Si las combinaciones de estos bits son 10 la señal PWM obtenida por el pin OC0B será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC0B será invertida
PWM TIMER0 AVR EN FASE CORRECTA
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A
Los bits 1 y 0 junto con el bit3 del registro TCCR0B son con los cuales se elige el modo de obtener las señales
PWM timer0 AVR, mediante las combinaciones de estos bits según se indica en la siguiente tabla.
Los bits 7, 6, 5, y 4 no se utilizarán en la obtención de la señal PWM timer0 AVR por lo que se les pondrá a 0.
El bit3 trabaja junto con los bits 1 y 0 del registro TCCR0A tal como se comentó.
Los bits 2, 1 y 0 son para elegir el prescaler a utilizar para obtener la frecuencia de la señal PWM timer0 AVR, las
combinaciones de estos bits para los diversos prescaler del timer0 son los que se indican en la siguiente tabla:
PWM TIMER0 AVR EN FASE CORRECTA
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A
Se usará OCR0x para referirse a cualesquiera de ellos, x será A o B, en este registro se cargará el valor mediante el cual se controlará
el ancho de pulso de la señal PWM que se obtendrá por el pin OC0x, este valor va de 0 a 255.
El ancho de pulso en una señal PWM timer0 fase correcta no invertido se inicia cuando el registro TCNT0 que esta
incrementándose desde 0 a 255 se iguala al valor almacenado en el registro OCR0x, y terminará cuando el al
decrementarse el registro TCNT0 de 255 a 0 se vuelva a igualar al valor almacenado en el registro OCR0x. por tanto, el
ancho de pulso será igual a 2 veces el valor almacenado en el registro OCR0x y el periodo de la señal PWM timer0 AVR
fase correcta es 2 veces el valor máximo que puede tener el registro TCNT0 esto es 510, puesto que va de 0 a 255 y
luego vuelve de 255 a 0.
PWM TIMER0 AVR EN FASE CORRECTA
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A
Se puede utilizar la siguiente forma para el ciclo de trabajo de la señal PWM timer0 AVR fase correcta.
Ciclo de trabajo=((2*OCR0x)/510)*100%
Ciclo de trabajo=((OCR0x)/255)*100%
Cuando el valor almacenado en el registro OCR0x sea 0 el ciclo de trabajo será 0 o del 0%, cuando sea 255 el ciclo de
trabajo será del 100% de la señal PWM timer0 AVR fase correcta, y entre 0 y 255 se obtienen los diferentes ciclos de
trabajo de la señal PWM timer0 AVR fase correcta.
Por ejemplo si se quiere un ciclo de trabajo del 15%, se puede proceder así
15%=((OCR0x)/255)x100%
De donde al despejar OCR0x se tendrá:
OCR0x=38
PWM TIMER0 AVR EN FASE CORRECTA
EJEMPLOS
Generar una señal PWM timer0 AVR fase correcta con un ancho de pulso del 15% por el pin OC0B en forma no
invertida. El cual estará trabajando a una frecuencia de 8Mhz y con un prescaler de 8, entonces se tendrá:
Fpwmpc=FCPU/(prescaler*510)
Fpwmpc=(8Mhz/(8*510)=1,96KHz
En términos del periodo será:
Tpwmpc=510us
Para un ancho de pulso del 15%:
15%=((OCR0B)/255)x100%
OCR0B=38
Configuración del registro TCCR0A:
TCCR0A=0b00100001;// PWM por el pin OC0B, PWM timer0 AVR fase correcta
Configuración del registro TCCR0B:
TCCR0B=0b00000010;//PWM timer0 AVR fase correcta, prescaler de 8
PWM TIMER0 AVR EN FASE CORRECTA
EJEMPLOS
PWM TIMER0 AVR EN FASE CORRECTA
EJEMPLOS
PWM TIMER0 AVR EN FASE CORRECTA
EJEMPLOS
Generar una señal PWM timer0 AVR fase correcta con un ancho de pulso variable desde el 0% hasta el 100% por el pin
OC0A en forma no invertida. Se utilizará una frecuencia de 8Mhz, con un prescaler de 1.
Entonces se tendrá:
Fpwmpc=FCPU/(prescaler*510)
Fpwmpc=(8Mhz/(1*510)=15,7Khz
En términos del periodo:
Tpwmpc=64us
Se iniciará el ancho de pulso a un 0% por lo que el registro OCR0A se cargará en un inicio con 0, luego dentro
del ciclo del programa se hará que se incremente en 1 unidad en cada 100ms.
• El timer1 es de 16 bits.
• La generación de señales PWM con el timer1 ofrece 3 opciones: utilizar 8 bits, utilizar 9 bits o utilizar
10 bits, a la cantidad de bits que se utilizan se le llama resolución, entonces se dice el módulo PWM timer1
AVR puede tener una resolución de 8bits o de 9 bit o de 10 bits, se puede elegir por programa la resolución
que se desee en la generación de la señal PWM.
• El registro TCNT1 es el temporizador del timer1, es el que irá aumentando sus valores de 0 a hasta un valor
máximo en el proceso de temporización, que dependerá de la resolución.
o Si la resolución es de 8 bits, el máximo será 255 y el registro TCNT1 aumentará sus valores de 0 a 255.
o Si la resolución es de 9 bits, el máximo será 511 y el registro TCNT1 aumentará sus valores de 0 a 511.
o Si la resolución es de 10 bits, el máximo será 1023 y el registro TCNT1 aumentará sus valores de 0 a 1023.
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
El TCNT1 aumenta con cada ciclo de trabajo del microcontrolador AVR. Se puede usar los prescaler del timer1 para
ralentizar el aumento del TCNT1. Al registro TCNT1 se lo puede imaginar como si estuviese generando una onda
diente de sierra en el transcurso del tiempo.
Al tiempo que le tome al registro TCNT1 ir de 0 a su máximo es el periodo de la señal PWM timer1 en modo rapido
Cuando el registro TCNT1 desbordará se puede habilitar el uso de la interrupción por desborde del timer1.
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
• Forma no invertida
• Forma invertida
• Los bits 7 y 6 son para elegir que la obtención de la señal PWM timer1 AVR será por el
pin OC1A.
• Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer1 AVR será por el
pin OC1B.
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
• Si las combinaciones de los bits 7 y 6 son 10 la señal PWM obtenida por el pin OC1A será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC1A será invertida.
• Si las combinaciones de los bits 5 y 4 son 10 la señal PWM obtenida por el pin OC1B será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC1B será invertida.
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
Los bits 1 y 0 junto con los bits 4 y 3 del registro TCCR1B son con
los cuales se elige el modo de obtener las señales PWM timer1
AVR, mediante las combinaciones de estos bits se elige la resolución a
utilizar para el módulo PWM timer1 AVR,
PWM TIMER1 AVR
PWM TIMER1 AVR
EN MODO
RAPIDO
Las combinación de estos bits que se utilizaran para la generación de la señal PWM timer1 AVR modo rápido serán la quinta,
la sexta y la séptima, las que están resaltadas, dependiendo de la resolución que se quiera utilizar:
•Para una resolución de 8 bits, del registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 1, del registro TCCR1A su
bit1 se pondrá a 0 y su bit0 se pondrá a 1, la combinación será 0101.
•Para una resolución de 9 bits, del registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 1, del registro TCCR1A su
bit1 se pondrá a 1 y su bit0 se pondrá a 0, la combinación será 0110.
•Para una resolución de 10 bits, del registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 1, del registro TCCR1A su
bit1 se pondrá a 1 y su bit0 se pondrá a 1, la combinación será 0111.
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
Los bits 7, 6, y 5 no se utilizarán en la obtención de la señal PWM timer1 AVR por lo que se les pondrá a 0.
Los bit4 y 3 trabajan junto con los bits 1 y 0 del registro TCCR1A tal como se comentó.
Los bits 2, 1 y 0 son para elegir el prescaler como se indican en la siguiente tabla:
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
Ejemplo 1: Generar una señal PWM timer1 AVR con una resolución de 9, y un ancho de pulso del 30% por
el pin OC1B en forma no invertida con una frecuencia de trabajo de 1Mhz y un prescaler de 1.
SOLUCIÓN:
Fpwm=FCPU/(prescaler*(máximo+1))
Fpwm=(1Mhz/(1*512)=1953Hz=1,953Khz
Tpwm=512us,
Se quiere una señal PWM con un ciclo de trabajo del 30%,
30%=((OCR1B)/512)x100%
OCR1B=153; //valor a cargar en el registro OCR1B
TCCR1A=0b00100010; //PWM por el pin OC1B, no invertido, PWM modo rápido de 9 bits
• El timer1 es de 16 bits.
• La generación de señales PWM con el timer1 ofrece 3 opciones: utilizar 8 bits, utilizar 9 bits o utilizar
10 bits, a la cantidad de bits que se utilizan se le llama resolución, entonces se dice el módulo PWM timer1
AVR puede tener una resolución de 8bits o de 9 bit o de 10 bits, se puede elegir por programa la resolución
que se desee en la generación de la señal PWM.
• El registro TCNT1 es el temporizador del timer1, es el que irá aumentando sus valores de 0 a hasta un valor
máximo en el proceso de temporización, que dependerá de la resolución.
o Si la resolución es de 8 bits, el máximo será 255 y el registro TCNT1 aumentará sus valores de 0 a 255.
o Si la resolución es de 9 bits, el máximo será 511 y el registro TCNT1 aumentará sus valores de 0 a 511.
o Si la resolución es de 10 bits, el máximo será 1023 y el registro TCNT1 aumentará sus valores de 0 a 1023.
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA
El TCNT1 aumenta con cada ciclo de trabajo del microcontrolador AVR. Se puede usar los prescaler del timer1 para
ralentizar el aumento del TCNT1. Al registro TCNT1 se lo puede imaginar como si estuviese generando una onda
triangular en el transcurso del tiempo.
TCNT1 para ir de 0 a su máximo y luego volver de su máximo a 0 será el periodo de la señal PWM timer1 AVR fase
correcta.
Cuando el registro TCNT1 desbordará se puede habilitar el uso de la interrupción por desborde del timer1.
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA
• Forma no invertida
• Forma invertida
• Los bits 7 y 6 son para elegir que la obtención de la señal PWM timer1 AVR será por el
pin OC1A.
• Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer1 AVR será por el
pin OC1B.
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA
• Si las combinaciones de los bits 7 y 6 son 10 la señal PWM obtenida por el pin OC1A será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC1A será invertida.
• Si las combinaciones de los bits 5 y 4 son 10 la señal PWM obtenida por el pin OC1B será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC1B será invertida.
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA
Los bits 1 y 0 junto con los bits 4 y 3 del registro TCCR1B son con
los cuales se elige el modo de obtener las señales PWM timer1
AVR, mediante las combinaciones de estos bits se elige la resolución a
utilizar para el módulo PWM timer1 AVR,
PWM TIMER1 AVR
PWM TIMER1 AVR EN
FASE CORRECTA
Las combinación de estos bits que se utilizaran para la generación de la señal PWM timer1 AVR modo rápido serán la quinta,
la sexta y la séptima, las que están resaltadas, dependiendo de la resolución que se quiera utilizar:
• Para una resolución de 8 bits, del registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 0, del registro TCCR1A su
bit1 se pondrá a 0 y su bit0 se pondrá a 1, la combinación será 0001.
• Para una resolución de 9 bits, del registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 0, del registro TCCR1A su
bit1 se pondrá a 1 y su bit0 se pondrá a 0, la combinación será 0010.
• Para una resolución de 10 bits, del registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 0, del registro TCCR1A
su bit1 se pondrá a 1 y su bit0 se pondrá a 1, la combinación será 0011
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA
Los bits 7, 6, y 5 no se utilizarán en la obtención de la señal PWM timer1 AVR por lo que se les pondrá a 0.
Los bit4 y 3 trabajan junto con los bits 1 y 0 del registro TCCR1A tal como se comentó.
Los bits 2, 1 y 0 son para elegir el prescaler como se indican en la siguiente tabla:
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA
Ejemplo 1: Generará una señal PWM timer1 AVR fase correcta con una resolución de 9, y un ancho de pulso
del 30% por el pin OC1B en forma no invertida. Se utilizará una frecuencia de 8Mhz. Y un prescaler de 1.
SOLUCIÓN:
Fpwmpc=FCPU/(2*prescaler*máximo)
Fpwmpc=(8Mhz/(2*1*511)=7,8Khz
Tpwm=128us,
• Los bits 7 y 6 son para elegir que la obtención de la señal PWM timer2 AVR será por el
pin OC2A.
• Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer2 AVR será por el
pin OC2B.
PWM TIMER2 AVR
• Si las combinaciones de los bits 7 y 6 son 10 la señal PWM obtenida por el pin OC2A será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC2A será invertida.
• Si las combinaciones de los bits 5 y 4 son 10 la señal PWM obtenida por el pin OC2B será no invertida, si las
combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC2B será invertida.
PWM TIMER1 AVR
Los bits 1 y 0 junto con el bit 3 del registro TCCR2B son los que
determinan las señales PWM timer2
PWM TIMER2 AVR
Los bits 7, 6, y 5 no se utilizarán en la obtención de la señal PWM timer2 AVR por lo que se les pondrá a 0.
Los bit4 y 3 trabajan junto con los bits 1 y 0 del registro TCCR2A tal como se comentó.
Los bits 2, 1 y 0 son para elegir el prescaler como se indican en la siguiente tabla:
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
Ejemplo 1: Generar una señal PWM timer2 AVR con un ancho de pulso del 75% por el pin OC2B en forma
no invertida con una frecuencia de trabajo de 1Mhz y un prescaler de 8.
SOLUCIÓN:
Fpwm=FCPU/(prescaler*256)
Fpwm=(1Mhz/(2*256)=488,33Hz
Tpwm=2,047ms,
Se quiere una señal PWM con un ciclo de trabajo del 75%,
35%=((OCR2B)/255)x100%
OCR2B=191; //valor a cargar en el registro OCR2B
Ejemplo 2: Generará una señal PWM timer1 AVR y un ancho de pulso del 75% por el pin OC2B en forma no
invertida. Se utilizará una frecuencia de 8Mhz. Y un prescaler de 8.
SOLUCIÓN:
Fpwmpc=FCPU/(prescaler*510)
Fpwmpc=(8Mhz/(8*510)=1,96Khz
Tpwm=510us,