ENTRADA DE CAPTURA, ENTRADA CAPTURA, GENERACIÓN DE ONDAS OND AS Y PWM GERSON ABDIEL PEREZ VILLARROEL
MODULACIÓN MODULA CIÓN POR ANCHO DE PULSO
PINES ASOCIADOS A LA MODILA MODILACIÓN CIÓN POR ANCHO DE PULSO 28 pin
Timer0 Timer1 Timer2
OC0A
(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)
OC1A
(PCINT18/INT0) PD2
4 MEGA328 25 5 24
PC2 (ADC2/PCINT10)
OC1B
(PCINT19/OC2B/INT1) PD3
PC1 (ADC1/PCINT9)
(PCINT20/XCK/T0) PD4
6
23
PC0 (ADC0/PCINT8)
VCC
7
22
GND
OC2A
GND
8
21
AREF
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 AVR
La PWM en AVR pueden ser generadas de 2 tipos distintos. •
•
PWM en modo rápido y, PWM en modo fase correcta
PWM PW M tim timer er00 AVR PWM em modo RAPIDO
PWM TIMER0 TIMER 0 AVR AVR PWM TIMER0 AVR 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 cad a ciclo de trabajo del microcontrolador AVR, si se utilizan los prescaler el aumento en una unidad de sus sus valores se ralentiza, dependiendo del prescaler prescaler utilizado. En el PWM timer0 en modo rápido el registro TCNT0 irá de 0 a 255, 25 5, 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 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 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 DETERMINA CIÓN DEL PERIODO El tiempo total para que registro TCNT0 aumente aum ente su 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 DETERMINA CION DEL PERIODO (EJEMPLO)
Si se elige un prescaler prescaler de 8 y la FCPU=1Mhz, entonces el registr registroo TCNT0 aumentará aumentará en una unidad unidad cada 8/FCPU = 8us, y si el registro TCNT0 va de 0 a 255 y vuelve v uelve 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 DETERMINA CION DEL CICLO DE TRABAJO La seña señall PWM PWM se gene genera ra cuan cuanddo el val valor del del regis egistr troo TCNT0 CNT0 qu quee se encu encuen entr traa incr increm emen entá tánd ndos osee de un uniidad dad en unidad se iguala al valor alm almacen cenado en el regi egistro OCR0A o en el regis gistro tro OCR0B, el registr stro TCNT0 seg seguir uirá increment entado sus val valores hasta llegar a su máximo de 255, momento en el que recién se reinic niciará, 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 util tilizar zará OC0x para los pines nes y OCR0x para los regi egistr stros de comparació ción donde x pued uede 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 pued uede hab habilitar tar el uso de la interrupción po porr comp compar arac ació iónn del del time timer0 r0.. La señal PWM obtenida en el pin OC0x puede ser en forma no inv estoss inverti rtida o en forma invertid rtidaa, esto pine piness debe deben n ser ser decl declar arad ados os como como sali salida dass digi digita tale less medi median ante te sus sus regi regist strros DDRn DDRnxx respectivos.
PWM TIMER0 AVR - EN MODO RÁPIDO DETERMINACION DETERMINA CION DEL CICLO DE TRABAJO Forma no invertida por el pin OC0x se obtendrá un alto mientras el valor del registro registro TCNT0 sea menor al valor almacenado en el registro OCR0x, al ocurrir la igualdad entre los registros 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á. obtendrá un bajo mientras el valor del registro registro Forma invertida por el pin OC0x se obtendrá TCNT0 sea menor al valor almacenado en el registro OCR0x, al ocurrir la igualdad entre los registros registros TCNT0 y OCR0x el estado del pin OC0x cambiará 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 OC0x cambiará nuevamente nuevamente a un bajo y el ciclo se repetirá. repetirá.
PWM TIMER0 AVR AVR EN MODO RÁPIDO DETERMINACION DEL CICLO DE TRABAJO
PWM TIMER0 AVR - EN MODO RÁPIDO CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
que la obte btención de la señal PWM tim timer0 AVR será por por el pin pin OC0A y si será en forma Los bits 7 y 6 son para elegir que no inve invert rtid idaa o en form formaa inv inverti ertida da,, medi median ante te las las comb combin inac acio ione ness de esto estoss bits bits segú segúnn se indi indica ca en la sigu siguie ient ntee tabl tabla. a.
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 invertida
PWM TIMER0 AVR - EN MODO RÁPIDO CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
pin OC0B y si será en forma Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer0 AVR será por el pin no inve invert rtid idaa o en form formaa inv inverti ertida da,, medi median ante te las las comb combin inac acio ione ness de esto estoss bits bits segú segúnn se indi indica ca en la sigu siguie ient ntee tabl tabla. a.
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 invertida
PWM TIMER0 AVR - EN MODO RÁPIDO CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
tener las señales Los bits 1 y 0 junto con el bit3 del registro TCCR0B son con los cuales se elige el modo de obten PWM PWM time timer0 r0 AVR, VR, medi median ante te las las comb combin inac acio ione ness de esto estoss bits bits segú segúnn se indi indica ca en la sigu siguie ient ntee tabl tabla. a.
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 pond pondrrán a 1.será invertida
PWM TIMER0 AVR - EN MODO RÁPIDO CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0B
AVR por lo que se les pondrá a 0. Los bits 7, 6, 5, y 4 no se utilizarán en la obtención de la señal PWM timer0 AVR El bit3 trabaja junto con los bits 1 y 0 del registro registro TCCR0A tal como se comentó. t imer0 AVR, las Los bits 2, 1 y 0 son para elegir el prescaler a utilizar para obtener la frecuencia de la señal PWM timer0 combinaciones de estos bits para los diversos diversos prescaler prescaler del timer0 son los que se indican en la siguiente tabla:
PWM TIMER TIMER00 AVR AVR - EN MODO RÁPIDO REGIST ISTROS ROS OCR0A Y OCR0 OCR0B B CONFIGURACIÓN DE LOS REGISTROS - REG
Se usará OCR0x para referirse referirse a cualesquier cualesquiera a de ellos, x será A o B, en este registro registro se cargará el valor 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 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 PW M 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á:
PWM TIMER0 AVR - EN MODO RÁPIDO EJEMPLOS Gene Generrar un una a seña señall PWM PWM con con un anch ancho o de puls pulso o de dell 15 15% % por por el pin pin OC0B OC0B en form forma a no invertida. Se utilizará una frecuencia detrabajo 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 AVR EN MOD ODO O RÁPID IDO O EJEMPLOS
PWM PW M titimer mer00 AVR PWM tim timer0 er0 AVR en FASE CORRECTA
PWM TIMER0 TIMER 0 AVR AVR PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A •
•
•
•
•
En el timer0, timer0 , el registro de 8 bits TCNT0 es el que irá aumentando aumentando desde desde 0 a 255. El aumento de sus sus valores valores en una unidad puede ser con cada ciclo de trabajo del microcontrolador, microcontrolador, o si se utilizan los prescaler del timer0 el aumento en una unidad de sus valores tardará tardará mas, dependiendo del prescaler utilizado. En la PWM timer0 de fase f ase correcta el registro registro TCNT0 irá de 0 a 255 y luego de 255 a 0, una y otra vez, y tomará tomará un tiempo que dependerá dependerá del prescale prescalerr utilizado utilizado para el timer0. timer0. El tiempo que le toma al registro 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 registro TCNT0 puede ser imaginado como como una onda triangular en el transcurso del del tiempo. Cuando el registro 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 AVR EN FASE CORRE CORRECT CTA A DETERMINACIÓN DETERMINA CIÓ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 AVR EN FASE CORRE CORRECT CTA A DETERMINACIÓN DETERMINA CIÓN DEL PERIODO
Si se elige un prescale prescalerr de 8 y la FCPU=1Mhz, FCPU=1Mhz, entonces entonces el registr registroo TCNT0 aumenta aumenta en una unidad cada 8/FCPU 8/FCPU o cada 8 us. Como TCNT0 va de 0 a 255 y de 255 2 55 a 0 para pa ra completar un periodo ( Tpwmpc), realiza el contero de 510 unidades, por lo cual el periodo será: (510*8)/FCPU us. Para cualquier otro 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, f recuencia, la señal PWM timer0 fase correcta, será: Fpwmpc=FCPU/(prescaler*510)
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A DETERMINACIÓN DETERMINA CIÓN DEL CICLO DE TRABAJO La señal PWM timer0 en fase correcta se genera cuando el valor del registro 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, Tmega328P, dependiendo si para la comparación se utiliza el registro registro OCR0A o el registro registro OCR0B. Si así lo desea, se puede habilitar la interrupción por comparación del timer0. cuando el registro registro TCNT0 y el registro 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 registros DDRnx respectivos. respectivos.
PWM TIMER0 AVR EN FASE CORRECTA DETERMINACIÓN DEL CICLO DE TRABAJO
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A DETERMINACIÓN DETERMINA CIÓN DEL CICLO DE TRABAJO •
•
Para modificar el ancho de de pulso de la señal PWM timer0 fase correcta correcta se debe modificar el valor almacenado en el registro OCR0x. Esto provoca provoca cambios de estado del pin OC0x en diferentes tiempos. tiem pos. 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 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 correct correcta, a, es que si se toma el centro centro de los anchos de pulso de la señal PWM timer0 fase f ase 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 AVR EN FASE CORRE CORRECT CTA A CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
que la obte btención de la señal PWM tim timer0 AVR será por por el pin pin OC0A y si será en forma Los bits 7 y 6 son para elegir que no inve invert rtid idaa o en form formaa inv inverti ertida da,, medi median ante te las las comb combin inac acio ione ness de esto estoss bits bits segú segúnn se indi indica ca en la sigu siguie ient ntee tabl tabla. a.
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 invertida
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
pin OC0B y si será en forma Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer0 AVR será por el pin no inve invert rtid idaa o en form formaa inv inverti ertida da,, medi median ante te las las comb combin inac acio ione ness de esto estoss bits bits segú segúnn se indi indica ca en la sigu siguie ient ntee tabl tabla. a.
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 invertida
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
tener las señales Los bits 1 y 0 junto con el bit3 del registro TCCR0B son con los cuales se elige el modo de obten PWM PWM time timer0 r0 AVR, VR, medi median ante te las las comb combin inac acio ione ness de esto estoss bits bits segú segúnn se indi indica ca en la sigu siguie ient ntee tabl tabla. a.
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 respe espect ctiv ivam amen ente te..
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
AVR por lo que se les pondrá a 0. Los bits 7, 6, 5, y 4 no se utilizarán en la obtención de la señal PWM timer0 AVR El bit3 trabaja junto con los bits 1 y 0 del registro TCCR0A tal como se comentó. t imer0 AVR, las Los bits 2, 1 y 0 son para elegir el prescaler a utilizar para obtener la frecuencia de la señal PWM timer0 combinaciones de estos bits para los diversos diversos prescaler prescaler del timer0 son los que se indican en la siguiente tabla:
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS EL REGISTRO TCCR0A
Se usar usaráá OCR0x CR0x para para refer eferiirse rse a cual cuales esqu quiiera era de ell ellos,x ser será A o B, en este este regi egistr stro se carg cargar aráá el valo alor med mediant iantee el cual cual se cont contrrolar lará 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 f ase correcta no invertido se inicia cuando el registro 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 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 AVR EN FASE CORRE CORRECT CTA A CONFIGURACIÓN CONFIGURA CIÓN DE LOS REGISTR REGIST ROS 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) trabajo=((2*OCR0x)/510)*100% *100% Ciclo de trabajo=((OCR0x)/255)*100% Cuando el valor almacenado en el registro 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 t imer0 AVR fase correcta, y entre 0 y 255 se obtienen los diferentes ciclos de trabajo trabajo de la señal PWM timer0 timer0 AVR fase correcta. correcta. Por ejemplo si se quiere un ciclo de trabajo del 15%, se puede proceder así 15%=((OCR0x)/255)x100%
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A EJEMPLOS Generar una señal PWM timer0 AVR 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érm términ inos os del del peri period odoo será será:: Tpwmpc=510us Para un ancho de pul pulso del 15% 15%: 15%=((OCR0B)/255)x100% OCR0B=38 Configuración del registro registro TCCR0A: TCCR0A=0b00100001;// PWM por el pin OC0B, PWM timer0 AVR fase correcta Configuración del registro registro TCCR0B: TCCR0B=0b00000010;//PWM timer0 AVR fase correcta, prescaler de 8
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A EJEMPLOS
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A EJEMPLOS
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A 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. 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 u n 0% por lo que el registro OCR0A se cargará en un inicio con 0, luego dentro dentro del ciclo del programa programa se hará que se incremente en 1 unidad en cada 100ms.
OCR0A=0;//Ancho de pulso inicial de 0 Configuración del registro registro TCCR0A: TCCR0A=0b10000001 ;// PWM por el pin OC0A, PWM timer0 AVR fase correcta Configuración del registro registro TCCR0B:
PWM TIMER0 AVR AVR EN FASE CORRE CORRECT CTA A EJEMPLOS
PWM PW M titimer mer11 AVR PWM timer1 AVR en MODO RAPIDO
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO •
•
•
El timer1 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 resolución, entonces se dice el módulo PWM timer1 10 bits, a la cantidad de bits que se utilizan se le llama resolución, 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 p roceso de temporización, que dependerá de la resolución. o o o
Si la resolución es de 8 bits, el máximo será 255 y el registro registro TCNT1 aumentará sus valores de 0 a 255. Si la resolución es de 9 bits, el máximo será 511 y el registro registro TCNT1 aumentará sus valores de 0 a 511. Si la resolución es de 10 bits, el máximo será 1023 y el registro registro TCNT1 aumentará sus valores de 0 a 1023.
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO El TCNT TCNT11 aume aument ntaa con con cada cada cicl cicloo de trab trabaj ajoo del del micr microc ocoontr ntrolad oladoor AVR. VR. Se pue puede usar sar los los pre prescale calerr del del time timer1 r1 para para ralentizar el aum aumento del TCNT1. Al registro TCNT1 se lo puede imag maginar como si estuviese generando una una onda dien diente te de sier sierra ra en el tran transc scur urso so del del tiem tiempo po..
El TCNT1 irá de 0 hasta el máximo elegido, luego se reiniciará a 0 para volver hasta su máximo una y otra otra vez. vez.
Al tiempo que le tome al registro registro TCNT1 ir de 0 a su máximo es el periodo de la señal PWM timer1 en modo rapido
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO
Tpwm = ( (máxi (máximo mo+1 +1)) * presc aler) /FCP /FCPU U Fpwm = FCPU FCPU/( /(
escaler * (máximo+1) (máxim o+1) )
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN MODO RAPIDO La señal PWM se genera cuando el el valor del registro TCNT1 se iguala al valor almacenado en el registro r egistro OCR1A o en el registro OCR1B. La señal PWM generada se obtendrá en cualesquiera de los pines OC1A o OC1B del ATmega328P 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 l os registros de comparación donde x puede ser A o B.
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN MODO RAPIDO
Tcd = ( (OCR1x) (OCR1x) * pres caler ) /FCPU /FCPU La señal PWM timer1 AVR obtenida ida en el pin pin OC1x OC1x pued puedee ser: ser: •
Forma no invertida
•
Forma invertida
Los pines OC1A y OC1B deben ser config configura urado doss como como salida salidass digita digitales les..
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN MODO RAPIDO Para modificar el ancho de pulso de la señal PWM ti mer1 AVR 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, OC R1x, el microcontrolador AVR AVR lo hará cuando el registro TCNT1 llegue a su máximo valor no antes
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN MODO RAPIDO Para modificar el ancho de pulso de la señal PWM ti mer1 AVR 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, OC R1x, el microcontrolador AVR AVR lo hará cuando el registro TCNT1 llegue a su máximo valor no antes
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR 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 obtención de la señal señal PWM timer1 AVR será por el pin OC1B.
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR 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. 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
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO
Los bits 1 y 0 junto con los bits 4 y 3 del registr registro o 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 resolución a utilizar para el módulo PWM timer1 AVR, AVR,
PWM TIMER1 AVR PWM TIMER1 TIME R1 AVR AVR EN MODO RAPIDO
Las Las comb combin inac aciión de esto stos bits bits que que se uti utiliza lizarran par para la gene genera raci ción ón de la seña señall PWM PWM time timerr1 AVR modo odo rápi ápido serán erán la quin quintta, la sext sextaa y la sépt séptim ima, a, las las que que está estánn resal esalta tada das, s, depe depend ndie iend ndoo de la resol esoluc ució iónn que que se quie quiera ra util utiliz izar: ar: 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 bit0 se pondrá a 1, la combinación será 0101 101. 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 ndrá a 1 y su bit0 bit0 se pondrá a 0, la combinación será 0110 110. Para una resolución de 10 bit bits del registro TCCR1B su bit4 se pondr ndrá a 0 y su bit3 se pondrá a 1 del registro tro TCCR1A su •
•
•
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO
AVR por lo que se les pondrá a 0. Los bits 7, 6, y 5 no se utilizarán en la obtención de la señal PWM timer1 AVR c omo se comentó. Los Los bit4 bit4 y 3 trabajan junto con los bits 1 y 0 del registro TCCR1A tal como el prescaler como se indican en la la siguiente tabla: Los bits 2, 1 y 0 son para elegir el
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO AVR con una resolución r esolución de 9, y un ancho de pulso del 30% por Ejemplo 1: Generar una señal PWM timer1 AVR 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, OC1B, no invertido, invertido, PWM modo rápido de 9 bits
TCCR1B=0b00001001;
//PWM modo modo rápido rápido resolució resoluciónn de 9 bits, bits, prescaler prescaler de 1
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO
PWM PW M titimer mer11 AVR PWM tim timer1 er1 AVR en FASE CORRECTA
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A •
•
•
El timer1 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 resolución, entonces se dice el módulo PWM timer1 10 bits, a la cantidad de bits que se utilizan se le llama resolución, 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 p roceso de temporización, que dependerá de la resolución. o o o
Si la resolución es de 8 bits, el máximo será 255 y el registro registro TCNT1 aumentará sus valores de 0 a 255. Si la resolución es de 9 bits, el máximo será 511 y el registro registro TCNT1 aumentará sus valores de 0 a 511. Si la resolución es de 10 bits, el máximo será 1023 y el registro registro TCNT1 aumentará sus valores de 0 a 1023.
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A El TCNT TCNT11 aume aument ntaa con con cada cada cicl cicloo de trab trabaj ajoo del del micr microc ocoontr ntrolad oladoor AVR. VR. Se pue puede usar sar los los pre prescale calerr del del time timer1 r1 para para ralentizar el aum aumento del TCNT1. Al registro TCNT1 se lo puede imag maginar como si estuviese generando una una onda tria triang ngul ular ar en el trans transcur curso so del del tiem tiempo po..
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 AVR fase correcta.
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A
Tpwm = ( 2(máxim 2(máxim o) * presc aler) /FCP /FCPU U Fpwm = FCPU FCPU/( /(
escaler *2*máxim o)
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN FASE CORRECTA La señal PWM se genera cuando el 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 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 AVR EN FASE CORRECTA
Tcd = ( 2(OCR1x) 2(OCR1x) * pres caler ) /FCPU La señal PWM timer1 AVR obtenida ida en el pin pin OC1x OC1x pued puedee ser: ser: •
Forma no invertida
•
Forma invertida
Los pines OC1A y OC1B deben ser config configura urado doss como como salida salidass digita digitales les..
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN FASE CORRECTA Para modificar el ancho de pulso de la señal PWM timer1 AVR 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, OC R1x, el microcontrolador AVR AVR lo hará cuando el registro TCNT1 llegue llegue a su máximo valor no antes
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN FASE CORRECTA Para modificar el ancho de pulso de la señal PWM timer1 AVR 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, OC R1x, el microcontrolador AVR AVR lo hará cuando el registro TCNT1 llegue llegue a su máximo valor no antes
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A
•
•
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 obtención de la señal señal PWM timer1 AVR será por el pin OC1B.
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A
•
•
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. 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
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A
Los bits 1 y 0 junto con los bits 4 y 3 del registr registro o 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 resolución a utilizar para el módulo PWM timer1 AVR, AVR,
PWM TIMER1 AVR PWM TIMER1 AVR AVR EN FASE CORRECT COR RECTA A
Las Las comb combin inac aciión de esto stos bits bits que que se uti utiliza lizarran par para la gene genera raci ción ón de la seña señall PWM PWM time timerr1 AVR modo odo rápi ápido serán erán la quin quintta, la sext sextaa y la sépt séptim ima, a, las las que que está estánn resal esalta tada das, s, depe depend ndie iend ndoo de la resol esoluc ució iónn que que se quie quiera ra util utiliz izar: ar: Para una resolución de 8 bits, del registro registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 0, del registro 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 registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 0, del registro 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 registro TCCR1B su bit4 se pondrá a 0 y su bit3 se pondrá a 0, del registro registro TCCR1A •
•
•
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A
AVR por lo que se les pondrá a 0. Los bits 7, 6, y 5 no se utilizarán en la obtención de la señal PWM timer1 AVR c omo se comentó. Los Los bit4 bit4 y 3 trabajan junto con los bits 1 y 0 del registro TCCR1A tal como el prescaler como se indican en la la siguiente tabla: Los bits 2, 1 y 0 son para elegir el
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A AVR fase correcta con una resolución de 9, y un ancho de pulso Ejemplo 1: Generará una señal PWM timer1 AVR del 30% por el pin OC1B en forma no invertida. Se utilizará una frecuencia 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 s eñal PWM sea del 30% 30%=((OCR1B)/511)x100% OCR1B=153;//valor a cargar en el registro OCR1B . //PWM por por el pin OC1B, OC1B, no invertido, invertido, PWM PWM fase correcta correcta de 9 bits TCCR1A=0b00100010; TCCR1B=0b00000001;
//PWM timer1 AVR fase fase correcta correcta resolución resolución de 9 bits, bits, prescaler prescaler de 1
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN FASE CORRE CORRECT CTA A
PWM PW M tim timer er22 AVR
PWM timer2 AVR, Con el timer2 del microcontrolador AVR se pueden generar 2 tipos t ipos de señales PWM, PWM en modo rápido y PWM en modo fase correcta.
PWM TIMER2 TIMER 2 AVR 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 obtención de la señal señal PWM timer2 AVR será por por el pin OC2B.
PWM TIMER2 TIMER 2 AVR 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. 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
PWM TIMER1 TIMER 1 AVR AVR
Los bits 1 y 0 junto con el bit bit 3 del del regis egistr tro o TCCR TCCR2B 2B son los que determinan determinan las señales señales PWM timer2 timer2
PWM TIMER2 TIMER 2 AVR AVR
PWM timer2 AVR fase correcta P WM timer2 timer2 AVR AVR modo rápido
PWM TIMER2 TIMER 2 AVR AVR
AVR por lo que se les pondrá a 0. Los bits 7, 6, y 5 no se utilizarán en la obtención de la señal PWM timer2 AVR c omo se comentó. Los Los bit4 bit4 y 3 trabajan junto con los bits 1 y 0 del registro TCCR2A tal como el prescaler como se indican en la la siguiente tabla: Los bits 2, 1 y 0 son para elegir el
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO AVR con un ancho anc ho de pulso del 75% por el pin OC2B en forma Ejemplo 1: Generar una señal PWM timer2 AVR no invertida con una 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 modo rápido, rápido, prescaler prescaler de 8
PWM TIMER1 TIMER 1 AVR AVR PWM TIMER1 AVR AVR EN MODO RAPIDO
PWM TIMER2 TIMER 2 AVR AVR AVR y un ancho de pulso del 75% por el pin OC2B en forma no Ejemplo 2: Generará una señal PWM timer1 AVR 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 s eñal PWM sea del 75% 75%=((OCR2B)/255)x100% OCR1B=191;//valor a cargar en el registro OCR2B . // PWM por el pin OC2B, PWM timer2 AVR AVR fase correcta TCCR2A=0b00100001; TCCR2B=0b00000010;
//PWM timer2 AVR fase fase correcta, prescaler de 8
PWM TIMER2 TIMER 2 AVR AVR