Vous êtes sur la page 1sur 81

ENTRADA DE CAPTURA, GENERACIÓN DE

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

La PWM en AVR pueden ser generadas de 2 tipos


distintos.

• PWM en modo rápido y,


• PWM en modo fase correcta
PWM timer0 AVR
PWM em modo RAPIDO
PWM TIMER0 AVR
PWM TIMER0 AVR EN MODO RÁPIDO

• 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

El tiempo total para que


registro TCNT0 aumente su
valor desde 0 a 255 se puede
modificar mediante:

• Modificando la frecuencia
de trabajo ( FCPU), y

• El uso de los prescaler.


PWM TIMER0 AVR - EN MODO RÁPIDO
DETERMINACION DEL PERIODO (EJEMPLO)

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.

La combinación de estos bits que se


utilizara para la generación de la señal
PWM timer0 AVR modo rápido será la
tercera, la que está resaltada, esto es el
bit 3 del registro TCCR0B se pondrá a 0
y los bits 1 y 0 del registro TCCR0A se
pondrán a 1.será invertida
PWM TIMER0 AVR - EN MODO RÁPIDO
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0B

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.

• El cambio en el valor almacenado en el registro OCR0x, se hará efectivo cuando el


registro TCNT0 llegue a su máximo valor no antes, esto es si TCNT0 se ha estado
incrementando o decrementando y en ese momento se modifica el valor a cargar en
OCR0x, este no se modificará inmediatamente, sino que la modificación se realizará
cuando TCNT0 llegue a su máximo que es 255.
PWM TIMER0 AVR
EN FASE CORRECTA
DETERMINACIÓN
DEL CICLO DE
TRABAJO
PWM TIMER0 AVR
EN FASE CORRECTA
DETERMINACIÓN
DEL CICLO DE
TRABAJO
PWM TIMER0 AVR
EN FASE CORRECTA
DETERMINACIÓN
DEL CICLO DE
TRABAJO
La diferencia entre el PWM rápido con el modo
fase correcta, es que si se toma el centro de los
anchos de pulso de la señal PWM timer0 fase
correcta y se hace un cambio en el ancho del pulso,
el centro del ancho de pulso no se moverá, no
cambiará de lugar, se dice que la fase del ancho de
pulso no se modifica, o que la fase es correcta, esto
se puede ver en la imagen.
PWM TIMER0 AVR EN FASE CORRECTA
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 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.

La combinación de estos bits que se


utilizara para la generación de la señal
PWM timer0 AVR modo fase correcta
será la opción uno. Esto es el bit 3 del
registro TCCR0B se pondrá a 0 y los bits
1 y 0 del registro TCCR0A se pondrán a
0 y 1 respectivamente.
PWM TIMER0 AVR EN FASE CORRECTA
CONFIGURACIÓN DE LOS REGISTROS EL REGISTRO TCCR0A

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.

OCR0A=0;//Ancho de pulso inicial de 0

Configuración del registro TCCR0A:


TCCR0A=0b10000001;// PWM por el pin OC0A, PWM timer0 AVR fase correcta
Configuración del registro TCCR0B:
TCCR0B=0b00000001;//PWM timer0 AVR fase correcta, prescaler de 1
PWM TIMER0 AVR EN FASE CORRECTA
EJEMPLOS
PWM timer1 AVR
PWM timer1 AVR en MODO
RAPIDO
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO

• 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.

El TCNT1 irá de 0 hasta el


máximo elegido, luego se
reiniciará a 0 para volver
hasta su máximo una y
otra vez.

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

Tpwm = ( (máximo+1) * prescaler) /FCPU

Fpwm = FCPU/(prescaler * (máximo+1) )


PWM TIMER1 AVR
PWM TIMER1 AVR EN
MODO RAPIDO
La señal PWM se genera cuando el valor del registro
TCNT1 se iguala al valor almacenado en el registro OCR1A
o en el registro OCR1B. La señal PWM generada se
obtendrá en cualesquiera de los pines OC1A o OC1B del
ATmega328P, dependiendo si para la comparación se utiliza
el registro OCR1A o el registro OCR1B, en adelante se
utilizará OC1x para los pines y OCR1x para los registros de
comparación donde x puede ser A o B.
PWM TIMER1 AVR
PWM TIMER1 AVR EN
MODO RAPIDO

Tcd = ( (OCR1x) * prescaler) /FCPU

La señal PWM timer1 AVR obtenida en el


pin OC1x puede ser:

• Forma no invertida
• Forma invertida

Los pines OC1A y OC1B deben ser


configurados como salidas digitales.
PWM TIMER1 AVR
PWM TIMER1 AVR EN
MODO RAPIDO
Para modificar el ancho de pulso de la señal PWM timer1
AVR modo rápido solo hay que modificar el valor
almacenado en el registro OCR1x, con esto se logra que los
cambios de estado del pin OC1x sean en diferentes tiempos,

Es importante señalar que el cambio en el valor almacenado


en el registro OCR1x, el microcontrolador AVR lo hará
cuando el registro TCNT1 llegue a su máximo valor no antes
PWM TIMER1 AVR
PWM TIMER1 AVR EN
MODO RAPIDO
Para modificar el ancho de pulso de la señal PWM timer1
AVR modo rápido solo hay que modificar el valor
almacenado en el registro OCR1x, con esto se logra que los
cambios de estado del pin OC1x sean en diferentes tiempos,

Es importante señalar que el cambio en el valor almacenado


en el registro OCR1x, el microcontrolador AVR lo hará
cuando el registro TCNT1 llegue a su máximo valor no antes
PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO

• 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

TCCR1B=0b00001001; //PWM modo rápido resolución de 9 bits, prescaler de 1


PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
PWM timer1 AVR
PWM timer1 AVR en FASE
CORRECTA
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA

• 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.

El TCNT1 irá de 0 hasta el


máximo elegido y luego
disminuirá desde su
máximo hasta 0, una y
otra vez.

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

Tpwm = ( 2(máximo) * prescaler) /FCPU

Fpwm = FCPU/(prescaler *2*máximo)


PWM TIMER1 AVR
PWM TIMER1 AVR EN
FASE CORRECTA
La señal PWM se genera cuando el valor del registro
TCNT1 se iguala al valor almacenado en el registro
OCR1A o en el registro OCR1B. La señal PWM generada
se obtendrá en cualesquiera de los pines OC1A o OC1B
del ATmega328P, dependiendo si para la comparación se
utiliza el registro OCR1A o el registro OCR1B, en adelante
se utilizará OC1x para los pines y OCR1x para los
registros de comparación donde x puede ser A o B.
PWM TIMER1 AVR
PWM TIMER1 AVR EN
FASE CORRECTA

Tcd = ( 2(OCR1x) * prescaler) /FCPU

La señal PWM timer1 AVR obtenida en el


pin OC1x puede ser:

• Forma no invertida
• Forma invertida

Los pines OC1A y OC1B deben ser


configurados como salidas digitales.
PWM TIMER1 AVR
PWM TIMER1 AVR EN
FASE CORRECTA
Para modificar el ancho de pulso de la señal PWM
timer1 AVR modo rápido solo hay que modificar el valor
almacenado en el registro OCR1x, con esto se logra
que los cambios de estado del pin OC1x sean en
diferentes tiempos,

Es importante señalar que el cambio en el valor


almacenado en el registro OCR1x, el microcontrolador
AVR lo hará cuando el registro TCNT1 llegue a su
máximo valor no antes
PWM TIMER1 AVR
PWM TIMER1 AVR EN
FASE CORRECTA
Para modificar el ancho de pulso de la señal PWM
timer1 AVR modo rápido solo hay que modificar el valor
almacenado en el registro OCR1x, con esto se logra
que los cambios de estado del pin OC1x sean en
diferentes tiempos,

Es importante señalar que el cambio en el valor


almacenado en el registro OCR1x, el microcontrolador
AVR lo hará cuando el registro TCNT1 llegue a su
máximo valor no antes
PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA

• 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,

Se busca es que el ancho de pulso de la señal PWM sea del 30%


30%=((OCR1B)/511)x100%
OCR1B=153;//valor a cargar en el registro OCR1B
.
TCCR1A=0b00100010; //PWM por el pin OC1B, no invertido, PWM fase correcta de 9 bits

TCCR1B=0b00000001; //PWM timer1 AVR fase correcta resolución de 9 bits, prescaler de 1


PWM TIMER1 AVR
PWM TIMER1 AVR EN FASE CORRECTA
PWM timer2 AVR
PWM timer2 AVR, Con el timer2 del microcontrolador AVR se pueden generar 2 tipos
de señales PWM, PWM en modo rápido y PWM en modo fase correcta.
PWM TIMER2 AVR

• 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

PWM timer2 AVR fase


correcta

PWM timer2 AVR


modo rápido
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

TCCR2A=0b00100011; //PWM por el pin OC2B, PWM modo rápido

TCCR2B=0b00000010; //PWM modo rápido, prescaler de 8


PWM TIMER1 AVR
PWM TIMER1 AVR EN MODO RAPIDO
PWM TIMER2 AVR

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,

Se busca es que el ancho de pulso de la señal PWM sea del 75%


75%=((OCR2B)/255)x100%
OCR1B=191;//valor a cargar en el registro OCR2B
.
TCCR2A=0b00100001; // PWM por el pin OC2B, PWM timer2 AVR fase correcta

TCCR2B=0b00000010; //PWM timer2 AVR fase correcta, prescaler de 8


PWM TIMER2 AVR

Vous aimerez peut-être aussi