PWM timer1 AVR Fase correcta


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn1

Anterior PWM AVR modulación por ancho de pulso

PWM timer1 AVR fase correcta, con el timer1 del microcontrolador AVR se pueden generar 3 tipos de señales PWM, PWM en modo rápido, PWM en modo fase correcta y PWM en modo fase y frecuencia correcta, en este caso se comentará como obtener la señal PWM modo fase correcta; es muy importante entender el temporizador contador timer1 AVR tema que ya se ha tratado aquí, de no ser así se recomienda antes de continuar visitar el enlace indicado.  Será necesario tener la hoja de datos del microcontrolador AVR utilizado, en este caso se utilizará como modelo el ATmega88 del cual se puede ver y descargar su hoja de datos desde aquí.

Una señal PWM es una onda rectangular de periodo fijo y como la frecuencia es la inversa del periodo entonces también será de frecuencia fija, lo que si se cambiará o modificará normalmente en una señal PWM es el tiempo en alto que estará su valor máximo Vmáx, a este tiempo en alto se le llama ancho de pulso, por lo que en una señal PWM se modificará su ancho pulso.

PWM timer0 AVR

Si el ancho de pulso de la señal PWM se representa en forma de porcentaje se le suele llamar ciclo de trabajo, el ciclo de trabajo se obtienen mediante la siguiente relación:

Ciclo de trabajo=(Talto/T)*100%

El ciclo de trabajo puede ser desde un 0% cuando el Talto=0, hasta un 100% cuando el Talto es igual al periodo de la señal PWM Talto=T, si el tiempo en alto es igual a la mitad del periodo  entonces el ciclo de trabajo será del 50%.

Al proceso de cambiar o modificar el tiempo en alto de la señal PWM es lo que se llama modificación por ancho de pulso, y por sus siglas del inglés se le llama PWM, ahora se  verá como lograr señales PWM con el módulo PWM modo fase correcta timer1 AVR.

PWM timer1 AVR fase correcta

El temporizador timer1 es de 16 bits, el registro TCNT1 es el que en  si es el temporizador, en el uso del timer1 en la generación de señales PWM el microcontrolador AVR ofrece 3 opciones, utilizar 8 bits del timer1, utilizar 9 bits del timer1 o utilizar 10bits del timer1, a la cantidad de bits que se utilizan se le llama resolución, entonces se dice el módulo PWM timer1 AVR fase correcta 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 timer1 AVR fase correcta.

En el PWM timer1 AVR fase correcta, el registro TCNT1 irá aumentando sus valores de 0 a hasta un valor máximo y luego de su valor máximo retornará a 0.

  • Si la resolución es de  8 bits entonces el máximo será 255 y el registro TCNT1 aumentará sus valores de 0 a 255 y luego disminuirá de 255 a 0, al ser utilizado en el modo PWM timer1 AVR fase correcta.
  • Si la resolución es de  9 bits entonces el máximo será 511 y el registro TCNT1 aumentará sus valores de 0 a 511 y luego disminuirá de 511 a0, al ser utilizado en el modo PWM timer1 AVR fase correcta.
  • Si la resolución es de 10 bits entonces el máximo será 1023 y el registro TCNT1 aumentará sus valores de 0 a 1023 y luego  disminuirá de 1023 a 0, al ser utilizado en el modo PWM timer1 AVR fase correcta.

 😉 En adelante se dirá máximo para referirse a cualesquiera de las 3 posibilidades de resolución indicadas.

El aumento de sus valores en una unidad del registro TCNT1 puede ser con cada ciclo de trabajo del microcontrolador AVR, o si se utilizan los prescaler del timer1 el aumento en una unidad de sus valores tardará mas, dependiendo del prescaler utilizado.

En el PWM timer1 AVR fase correcta el registro TCNT1 irá de 0 hasta el máximo elegido y luego disminuirá desde su máximo hasta 0, luego se reiniciará a 0 para volver hasta su máximo y luego de su máximo otra vez de 0 y así continuará en el modo fase correcta; a este ir de 0 a su máximo y luego volver de su máximo a 0 le tomará un tiempo que dependerá del prescaler utilizado para el timer1, y ese tiempo que le tome al registro 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, al registro TCNT1 se lo puede imaginar como si estuviese generando una onda triangular en el transcurso del tiempo.

Una cosa a tener en cuenta es que al pasar el registro TCNT1 de 0 a su máximo y luego de su máximo a 0, al disminuir del máximo a 0 y al llegar a 0 se dispara la bandera de interrupción por desborde, por lo que se puede habilitar el uso de la interrupción por desborde del  timer1.

pwm timer1 avr fase correcta tcnt1

Normalmente si no se usa prescaler en el PWM timer1 AVR fase correcta, el registro TCNT1 irá aumentando su conteo con cada ciclo de reloj del microcontrolador, si se usa por ejemplo una frecuencia de trabajo (lo que se conoce como FCPU) de 1Mhz entonces el registro TCNT1 aumentará en una unidad cada microsegundo, y dependiendo de la resolución utilizada, en un primer momento este registro aumentará desde un mínimo de 0 que es su valor BOTTOM, hasta un máximo que es su valor TOP, al ir de 0 a su máximo habrá transcurrido un tiempo, en un segundo momento el registro disminuirá desde su máximo hasta 0, al ir de su máximo a 0 habrá transcurrido un tiempo similar al anterior caso, la suma de estos dos tiempos  será el periodo de la señal PWM timer1 AVR fase correcta.

Si por ejemplo se elige la resolución de 10bits,  entonces su máximo será 1023, luego al ir el registro TCNT1 desde 0 hasta 1023 habrán transcurrido 1023us, luego al disminuir de 1023 a 0 transcurrirán otros 1023us, por lo que en ir de 0 a 1023 y luego de 1023 a 0 han pasado 2046us, que vendría a ser el periodo de la señal PWM timer1 AVR fase correcta Tpwmpc cuando la FCPU es de 1Mhz, no siempre se utiliza una FCPU de 1Mhz esto puede variar, y como consecuencia variará el tiempo que pase para que el registro TCNT1 aumente su vaya de 0 a 1023 y luego de 1023 vuelva a 0 en este caso.

El tiempo que trascurre para que el registro TCNT1 aumente su valor desde 0 a hasta su máximo y luego de su máximo a 0 se puede modificar también mediante el uso de los prescaler, la siguiente es la tabla para la elección de los prescaler para el timer1 mediante las combinaciones de los bits 2, 1, y 0 del registro TCCR1B.

temporizador contador avr prescaler

Si por ejemplo se elige un prescaler de 8 y la FCPU=1Mhz, entonces el registro TCNT1 aumentará en una unidad cada 8/FCPU lo que es cada 8 microsegundos, y si el registro TCNT1 va de 0 hasta su máximo y luego vuelve de su máximo a 0 para completar un periodo de la señal PWM timer1 AVR fase correcta Tpwmpc, habrá realizado el conteo de dos veces el valor máximo, por lo que habrán transcurrido ((2*máximo)*8)/FCPU microsegundos.

Para cualquier otro prescaler que se utilice el periodo de la señal PWM timer1 AVR fase correcta tendrá la siguiente forma:

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

Si en lugar del periodo se quiere utilizar la frecuencia de la señal PWM timer1 AVR fase correcta, solo hay que invertir la ecuación anterior y se obtendrá:

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

PWM timer1 AVR fase correcta obtención de la señal PWM

La señal PWM timer1 AVR fase correcta se genera cuando el valor del  registro TCNT1 el que se encuentra incrementándose de unidad en unidad se iguala al valor almacenado en el registro OCR1A o en el registro OCR1B, “el valor almacenado en el registro OCR1A o en el registro OCR1B tendrá que ser a lo mucho igual al máximo utilizado para el registro TCNT1“; cuando se utilizó el timer1 en modo comparación al ocurrir esta igualdad el registro TCNT1 se reiniciaba a 0, en el modo PWM el registro TCNT1 no se reiniciará tras ocurrir la igualdad sino que seguirá aumentando sus valores hasta llegar a su máximo, que dependerá de la resolución elegida o disminuyendo hasta llegar a 0, la señal PWM timer1 AVR fase correcta generada se obtendrá en cualesquiera de los pines OC1A o OC1B del ATmega88, 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.

Una cosa a tener en cuenta es que al ocurrir la igualdad entre el registro TCNT1 y el registro OCR1A, se puede habilitar el uso de la interrupción por comparación del  timer1.

La señal PWM timer1 AVR fase correcta obtenida en el pin OC1x puede ser en forma no invertida o en forma invertida, estos pines deben ser declarados como salidas digitales mediante sus registros DDRnx respectivos.

  • Para la forma no invertida por el pin OC1x se obtendrá un alto mientras el valor del registro TCNT1 este aumentando de 0 a su máximo y sea menor al valor almacenado en el registro OCR1x, al ocurrir la igualdad entre los registros TCNT1 y OCR1x el estado del pin OC1x cambiará a un bajo y se mantendrá así hasta que cuando el registro TCNT1, al disminuir de su máximo a 0 se haga igual nuevamente al valor almacenado en registro OCR1x, momento en el cual el estado del pin OC1x cambiará nuevamente a un alto, el registro TCNT1 seguirá disminuyendo hacia 0, luego volverá a incrementase hacia su máximo y cuando nuevamente se haga igual al valor almacenado en el registro OCR1x nuevamente por el pin OC1x se obtendrá un bajo y el ciclo se repetirá.
  • Para la forma invertida por el pin OC1x se obtendrá un bajo mientras el valor del registro TCNT1 este aumentando de 0 a su máximo y sea menor al valor almacenado en el registro OCR1x, al ocurrir la igualdad entre los registros TCNT1 y OCR1x el estado del pin OC1x cambiará a un alto y se mantendrá así hasta que cuando el registro TCNT1, al disminuir de su máximo a 0 se haga igual nuevamente al valor almacenado en registro OCR1x, momento en el cual el estado del pin OC1x cambiará nuevamente a un bajo, el registro TCNT1 seguirá disminuyendo hacia 0, luego volverá a incrementase hacia su máximo y cuando nuevamente se haga igual al valor almacenado en el registro OCR1x nuevamente por el pin OC1x se obtendrá un alto y el ciclo se repetirá.

pwm timer1 avr fase correcta generación

Para modificar el ancho de pulso de la señal PWM timer1 AVR fase correcta 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, por ejemplo  si se toma como referencia la imagen anterior para el nivel del registro OCR1x, cambiando su nivel se obtendrá la señal PWM timer1 AVR fase correcta con un ancho de pulso modificado pero manteniendo constante su periodo, esto se puede ver en la siguiente imagen.

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, esto es si TCNT1 se ha estado incrementando o decrementando y en ese momento se modifica el valor a cargar en OCR1x, este no se modificará inmediatamente, sino que la modificación se realizará cuando TCNT1 llegue a su máximo.

pwm timer1 avr fase correcta generación 2

Una observación a tener muy en cuenta y es lo que diferencia al modo 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 timer1 AVR 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 siguiente imagen.

pwm timer1 avr fase correcta cambio ancho de pulso

PWM timer1 AVR fase correcta Programación

Para programar el módulo PWM timer1 AVR fase correcta en el ATmega88, se utilizan 2 registros los que son el registro TCCR1A y el registro TCCR1B.

El registro TCCR1A

timer1 avr tccr1a

Los bits 7 y 6 son para elegir que la obtención de la señal PWM timer1 AVR fase correcta será por el pin OC1A y si será en forma no invertida o en forma invertida, mediante las combinaciones de estos bits.

Los bits 5 y 4 son para elegir que la obtención de la señal PWM timer1 AVR fase correcta será por el pin OC1B 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.

pwm timer1 avr fase correcta OC1A u OC1B

Si las combinaciones de los bits 7 y 6 son 10 la señal PWM obtenida por el pin OC1A será no invetida, si las combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC1A será invetida.

Si las combinaciones de los bits 5 y 4 son 10 la señal PWM obtenida por el pin OC1B será no invetida, si las combinaciones de estos bits son 11 la señal PWM obtenida por el pin OC1B será invetida.

Los bits 3 y 2 no se utilizan por lo que se les pone a 0.

 😀 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, según se indica en la siguiente tabla.

pwm timer1 avr fase correcta selección PWM

Las combinación de estos bits que se utilizaran para la generación de la señal PWM timer1 AVR fase correcta serán la primera, la segunda y la terera, 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.

El registro TCCR1B

temporizador contador avr tccr1b

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 a utilizar para obtener la frecuencia de la señal PWM timer1 AVR, las combinaciones de estos bits para los diversos prescaler del timer1 son los que se indican en la siguiente tabla:

temporizador contador avr prescaler

Los registros OCR1A y OCR1B

Se usará OCR1x 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 OC1x, este valor va de 0 al máximo elegido mediante la resolución.

El ancho de pulso en una señal PWM timer1 AVR fase correcta no invertido se inicia cuando el registro TCNT1 que esta incrementándose desde 0 al máximo se iguala al valor almacenado en el registro OCR1x, y terminará cuando el al decrementarse el registro TCNT1 del máximo a 0 se vuelva a igualar al valor almacenado en el registro OCR1x, por lo que el ancho de pulso  será igual a 2 veces el valor almacenado en el registro OCR01x, el periodo de la señal PWM timer1 AVR fase correcta es 2 veces el valor máximo que puede tener el registro TCNT1 esto es 2*máximo, ya que va de 0 al máximo y luego vuelve del máximo a 0.

Se puede utilizar la siguiente forma para el ciclo de trabajo de la señal PWM timer1 AVR fase correcta.

Ciclo de trabajo=((2*OCR1x)/(2*máximo))*100%

Ciclo de trabajo=((OCR1x)/máximo)*100%

Cuando el valor almacenado en el registro OCR1x sea 0 el ciclo de trabajo será 0 o del 0%, cuando sea el máximo el ciclo de trabajo será del 100% de la señal PWM timer1 AVR fase correcta, y entre 0 y el máximo se obtienen los diferentes ciclos de trabajo de la señal PWM timer1 AVR fase correcta.

Por ejemplo si se quiere un ciclo de trabajo del 30% y se usa la resolución de 9, en este caso el máximo será 511, se puede proceder así

30%=((OCR1x)/511)x100%

De donde al despejar OCR1x se tendrá:

OCR1x=153

Esto indica que si se quiere un ciclo de trabajo del 30% de la señal PWM timer1 AVR fase correcta en el registro OCR1x se tendrá que cargar el valor de 153 y esto será lo que se haga en el primer ejemplo.

Normalmente lo que se quiere es controlar todo el ancho de pulso de la señal PWM, por lo que de alguna forma se hace variar el valor de OCR1x, se verán algunos ejemplo de como realizar esto.

Si se utilizan ambos pines OC1A y OC1B, la frecuencia de las señales PWM obtenidas en ambos pines serán las mismas, ya que ambas utilizan el mismo registro TCNT1, que es con el que decide la frecuencia o su inversa que es periodo de la señal PWM.

PWM timer1 AVR fase correcta Ejemplos

Ejemplo 1 En este primer ejemplo se 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á el ATmega88 el cual estará trabajando a una frecuencia de 8Mhz.

Se puede escoger la frecuencia de la señal PWM Fpwmpc, con la ecuación que se vio en la que la Fpwmpc depende de la FCPU y del prescaler a utilizar para el registro TCNT1, se puede elegir entre 1, 8, 64, 256  y 1024, según la tabla vista para el registro TCCR1B.

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

Si por ejemplo se elige el prescaler de 1, y como la resolución será de 9, entonces el valor de máximo al que llegará el registro TCNT1 será de 511, entonces se tendrá

Fpwmpc=(8Mhz/(2*1*511)

de donde Fpwm=7,8Khz, por lo que Tpwm=128us, en este ejemplo lo que se busca es que el ancho de pulso de la señal PWM sea del 30% de momento da igual la frecuencia Fpwmpc, se puede elegir otra si así se desea.

Se quiere una señal PWM por el pin OC1B con un ciclo de trabajo del 30%, entonces habrá que cargar el registro OCR1B con lo que se obtenga de la ecuación del ciclo de trabajo.

30%=((OCR1B)/511)x100%

De donde al despejar OCR1B se obtiene el  valor a cargar en el registro OCR1B

OCR1B=153;//valor a cargar en el registro OCR1B

Configuración del registro TCCR1A para el ejemplo 1

Como se obtendrá la señal PWM timer1 AVR fase correcta en forma no invertida por el pin OC1B su bit5 se pondrá a 1 y su bit4 se pondrá a 0, sus bit1 se pondrá a 1 y su bit0 se pondrá a 0 ya que se utilizará el modo PWM fase correcta con una resolución de 9 bits, sus demás bits se pondrán a 0 ya que no se usarán.

TCCR1A=0b00100010;//PWM por el pin OC1B, no invertido, PWM fase correcta de 9 bits

Configuración del registro TCCR1B para el ejemplo 1

Su bit4 se pondrá a 0 y su bit3 se pondrá a 0 para utilizar el modo PWM fase correcta con una resolución de 9 bits, y como se usará un prescaler de 1 la combinación de sus bits 2, 1 y 0 será 001, todos sus demás bits se pondrán a 0 ya que no se usarán.

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

El circuito utilizado es el siguiente:

pwm timer1 avr ejemplo1 circuito

El código para el ejemplo 1 del uso del módulo PWM timer1 AVR fase correcta, hecho en el ATMEL STUDIO es el siguiente:

La siguiente es una imagen de la señal PWM timer1 AVR modo rápido, con un ancho de pulso o ciclo de trabajo del 30% vista en el osciloscopio.

pwm timer1 avr fase correcta ejemplo 1 imagen

Se comprueba que el ancho de pulso o el ciclo de trabajo es de un 30%, y la frecuencia de la señal es de Fpwm=7,88Khz.

Ejemplo 2 En este segundo ejemplo se generará una señal PWM timer1 AVR fase correcta con un ancho de pulso variable y con una resolución de 10 bits, el ancho de pulso variará desde el 0% hasta el 100%, la señal PWM se obtendrá por el pin OC1A en forma no invertida.  Se utilizará el ATmega88 el cual estará trabajando a una frecuencia de 8Mhz.

El prescaler elegido para el registro TCNT1 será de 1, se puede elegir otro si así se desea.

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

Como la resolución será de 10, entonces el valor máximo al que llegará el  registro TCNT1 será de 1023, entonces se tendrá

Fpwm=(8Mhz/(2*1*1023)

de donde Fpwm=3,9KHz, por lo que Tpwm=256us, se iniciará el ancho de pulso a un 0% por lo que el registro OCR1A se cargará en un inicio con 0, luego dentro del ciclo del programa se hará que se incremente en 1 unidad en cada 50ms.

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

El registro OCR1A irá entonces desde 0 para el 0% hasta 1023 como máximo para el 100% del ancho de pulso, el registro OCR1A no tendrá que ser mayor al máximo utilizado de acuerdo a la resolución elegida; cuando el registro OCR1A llega a 1023 hay que reiniciarlo a 0 ya que no puede ser mayor a este valor, para que nuevamente vuelva a incrementarse en 1 unidad dentro del ciclo del programa cada 20ms y así continuará, en este ejemplo lo que interesa es ver como se logra la variación del ancho de pulso de una señal PWM timer1 AVR fase correcta.

Configuración del registro TCCR1A para el ejemplo 2

Como se obtendrá la señal PWM timer1 AVR fase correcta en forma no invertida por el pin OC1A su bit7 se pondrá a 1 y su bit6 se pondrá a 0, sus bit1 se pondrá a 1 y su bit0 se pondrá a 1 ya que se utilizará el modo PWM fase correcta con una resolución de 10 bits, sus demás bits se pondrán a 0 ya que no se usarán.

TCCR1A=0b10000011;//PWM por el pin OC1A, no invertido, PWM fase correcta de 10 bits

Configuración del registro TCCR1B para el ejemplo 2

Su bit4 se pondrá a 0 y su bit3 se pondrá a 0 para utilizar el modo PWM fase correcta con una resolución de 10 bits, y como se usará un prescaler de 1 la combinación de sus bits 2, 1 y 0 será 001, todos sus demás bits se pondrán a 0 ya que no se usarán.

TCCR1B=0b00000001;//PWM modo fase correcta resolución de 10 bits, prescaler de 1

El circuito utilizado es el siguiente:

pwm timer1 avr ejemplo2 circuito

El código para el ejemplo 2 del uso del módulo PWM timer1 AVR fase correcta, hecho en el ATMEL STUDIO es el siguiente:

La siguiente es una imagen del lo que se ve en el osciloscopio para el ejemplo2, el ancho de pulso está variando, la imagen a sido captada cuando el ancho de pulso era del 62,7%, se puede ver también que el periodo de la señal PWM es Tpwn=254us y su frecuencia es de Fpwm 3,94KHz.

pwm timer1 avr fase correcta ejemplo 2 imagen

Ejemplo 3 En este tercer ejemplo se generará una señal PWM timer1 AVR fases correcta con un ancho de pulso variable y con una resolución de 10 bits, la señal PWM se obtendrá por el pin OC1A en forma no invertida, es el mismo ejemplo que el caso anterior pero esta vez se utilizarán dos pulsadores para  controlar el  ancho de pulso, un pulsador estará conectado al pin PB0 y será para incrementar o aumentar el ancho de pulso, el otro pulsador estará conectado en el pin PD7 y será para decrementar o disminuir el ancho de pulso. Se utilizará el ATmega88 el cual estará trabajando a una frecuencia de 8Mhz.

El prescaler elegido para el registro TCNT1 será de 1, se puede elegir otro si así se desea.

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

Como la resolución será de 10, entonces el valor máximo al que llegará el  registro TCNT1 será de 1023, entonces se tendrá

Fpwm=(8Mhz/(2*1*1023)

de donde Fpwm=3,9KHz, por lo que Tpwm=256us, se iniciará el ancho de pulso a un 0% por lo que el registro OCR1A se cargará en un inicio con 0.

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

Mediante el pulsador conectado al pin PB0 cada vez que este sea pulsado se incrementarán los valores  del registro OCR1A en 5 unidades, se ha elegido 5 para que se aprecien pronto los cambios en el ancho del pulso, puede ser cualquier otro incremento, por precaución se limitará que el valor del registro OCR1A no sea mayor a 255, del pin PB0 se aprovechara su resistencia pull up interna.

Mediante el pulsador conectado al pin PD7 cada vez que este sea pulsado se decrementarán los valores  del registro OCR1A en 5 unidades, se ha elegido 5 para que se aprecien pronto los cambios en el ancho del pulso, puede ser cualquier otro decremento, por precaución se limitará que el valor del registro OCR1A no sea menor a 0, del pin PD7 se aprovechara su resistencia pull up interna.

Se controlará el ancho de pulso de la señal PWM timer1 AVR fase correcta mediante incrementos o decrementos en el valor del registro OCR1A dentro del ciclo del programa.

Configuración del registro TCCR1A para el ejemplo 3

Como se obtendrá la señal PWM timer1 AVR fase correcta en forma no invertida por el pin OC1A su bit7 se pondrá a 1 y su bit6 se pondrá a 0, su bit1 se pondrá a 1 y su bit0 se pondrá a 1 ya que se utilizará el modo PWM fase correcta con una resolución de 10 bits, sus demás bits se pondrán a 0 ya que no se usarán.

TCCR1A=0b10000011;//PWM por el pin OC1A, no invertido, PWM fase correcta de 10 bits

Configuración del registro TCCR1B para el ejemplo 3

Su bit4 se pondrá a 0 y su bit3 se pondrá a 0 para utilizar el modo PWM fase correcta con una resolución de 10 bits, y como se usará un prescaler de 1 la combinación de sus bits 2, 1 y 0 será 001, todos sus demás bits se pondrán a 0 ya que no se usarán.

TCCR1B=0b00000001;//PWM modo fase correcta resolución de 10 bits, prescaler de 1

El circuito utilizado es el siguiente:

pwm timer1 avr ejemplo 3 circuito

El código para el ejemplo 3 del uso del módulo PWM timer1 AVR fase correcta, hecho en el ATMEL STUDIO es el siguiente:

Si he logrado ayudarte en cuanto a la utilización del módulo PWM timer1 AVR fase correcta con el microcontrolador AVR, comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias.

Atte: MrElberni.

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn1