Top Banner

of 14

Control PWM Atmega8

Oct 11, 2015

Download

Documents

Carlos Armando
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

Control PWM Atmega8 (frecuencia, polaridad, ciclo de trabajo) tutorial con el programa de ejemploPublicado el03 de diciembre 2010

Si vas all de bsqueda en Internet supone que ya sabe lo que es PWM y dnde se puede utilizar, por lo que en este artculo slo voy a explicar cmo utilizar 8 bits de temporizador Atmega8 para generar la seal PWM y control de frecuencia, la polaridad y el deber ciclo.PWM se puede generar a partir de 16-bit Timer/Counter1 u 8 bits Timer/Counter2 pero esta vez slo voy a explicarde 8 bits Timer/Counter2 PWM de modo rpido.

En este cuadro se explica en la documentacin Atmega8 modo PWM rpido.Contador (8 bits) cuenta desde 0 00 a 0xFF y reinicia desde 0 00.En el modo de no invertir OC2 se borra cuando el valor del contador en partido OCR2 registro y se fij en 0 00.En OC2 modo de inversin se establece cuando el valor del contador en partido OCR2 registro y borra a 0 00.De todo esto resulta que el ciclo de trabajo PWM depende OCR2 registro.En el ciclo de trabajo de modo que no inversora = OCR2/256 * 100% y es 50% si OCR2 es 0 80 (medio entre 0 00 - 0xFF).En cada ficha periodo PWM debe contar 256 pasos, por lo que la frecuencia de la seal es 256 veces inferior al contador de reloj de prescaler.Frecuencia PWM = ATmega frecuencia de reloj / temporizador prescaler (1,8,32,64,128,256) / 256.Con 4 mximo cristal MHz (sin prescaler) Frecuencia PWM es el 15 de 625Hz.Registro de configuracinPor ejemplo 15 625 Hz, ciclo de trabajo 50%, el modo de no inversin generacin de la seal PWM.1.OCR2 = 0 80 (128) Como se ha mencionado antes el ciclo de trabajo = OCR2/256 * 100%2.TCCR2 = 0 69;

3.DDRB = 0 08: la seal PWM se emite por nivel de PORTB pin 3 alternar.

DDRB establece como salida.Todos juntos:#include int main( void ){DDRB=0x08;OCR2=0x80;TCCR2=0x69;while (1) {};}Resultado:

~ Ciclo de trabajo del 10%, 61 Hz.#include int main( void ){DDRB=0x08;OCR2=0x1A; // 256/10=25,6 26 in hex = 1A;TCCR2=0x6E; // 256 prescalerwhile (1) {};}Resultado:

Y no hay programa de demostracin y *. Hex de PWM Demo visto en video.

TEORA DE FUNCIONAMIENTO:

Figura 1: ATmega168/328 pines PWM

Cuando usted toma una onda cuadrada, est en un momento y por un tiempo.Si dividimos el sobre por el descuento y lo multiplicamos por 100% obtendremos lo que se llama un ciclo de trabajo.Duty_Cycle = [on_time / (on_time + OFF_time)] * 100 As que si estamos de 1 ms y se apaga durante 1 ms que va a terminar con un ciclo de trabajo del 50%, si estamos en de 1 ms y apagado durante 3 ms nos encontramos con un ciclo de trabajo del 25%.Output_Voltage =Duty_Cycle * Input_Voltage Ahora bien, si nos tomamos nuestro ciclo de trabajo y multiplicamos por nuestra tensin obtendremos la tensin de salida.As que si tenemos una fuente de alimentacin de 5V y activamos un PWM con un ciclo de trabajo del 25% haremos un dispositivo analgico comportarse como si estuviera recibiendo una seal de 1.25V.Enfriar eh? Al igual que las funciones de contador PWM puede ser simulado en software sin embargo, se prefiere la versin de hardware, ya que slo una especie de hace lo suyo y, con muy poco cdigo se puede obtener una onda cuadrada constante ir. Recuerda el Precontador?bien la espalda en el PWM.Y al igual que en el contador, su rol consiste en retrasar las cosas.Esto es bueno porque nos permite ejecutar el PWM a diferentes frecuencias.Esto es importante debido a que algunos dispositivos son sensibles a la velocidad de PWM.Un motor, por ejemplo, se calentar si la forma de onda PWM es muy rpido, y la voluntad jitter si el PWM es demasiado lento.Puesto que ya plant la pregunta en su cabeza, la respuesta se inicia en 10 kHz.Diferentes motores como diferentes frecuencias de 10 kHz, pero se conseguir en el parque de pelota. El ATmega168/328 tiene 6 (!) Salidas PWM, 2 se encuentran en cada temporizador / contador. Como siempre, el pin de salida tiene las mismas limitaciones que cualquier salida (ver elcaptulo de salida digitalpara ms detalles).

Temporizador PWM del AVR es capaz de funcionar en 3 modos diferentes: Fast PWM, Fase Corregido PWM y Fase y Fase Frecuencia Corregido PWM.

El modo PWM rpido: Fast PWM funciona de la misma manera que el contador normal. La lgica de control recibe la seal e incrementa el registro TCNTn.Cuando se detecta una coincidencia la bandera OCFnx se establece y la seal es enviar al generador de forma de onda.El generador de forma de onda a continuacin, cambia el estado de la clavija de OCnx (el estado se determina por el modo seleccionado).Cuando el registro TCNTn pasa el valor de TOP (0xFF o OCRnA) sino que simplemente se desborda (o excesos) a 0, al mismo tiempo, se establece el indicador OCFnx.La bandera OCFnx puede ser configurado para desencadenar una interrupcin.La bandera OCFnx puede borrar software, pero como siempre se borra automticamente cuando se activa una solicitud de interrupcin. Debido a la alta frecuencia de este modo se utiliza mejor para la regulacin de DAC, los LED de desvanecimiento, rectificacin y Poder. La frecuencia de la PWM rpido se puede calcular mediante la siguiente ecuacin.PWM_fequency = clock_speed / [Prescaller_value * (1 + TOP_Value)]

Fase Corregido el modo PWM: La fase corregida modo es un poco extrao, cuenta hasta que llegue al valor de TOP (FIJA, OCRnA o ICRN), entonces comienza la cuenta atrs hasta que llega a la parte inferior (0).La lgica de control recibe la seal y aumenta el registro TCNTn .Cuando se detecta una coincidencia la bandera OCFnx se establece y la seal es enviar al generador de forma de onda.El generador de forma de onda a continuacin, cambia el estado de la clavija de OCnx (el estado se determina por el modo seleccionado).Cuando el registro TCNTn golpea el valor TOP (FIJA, OCRnA o ICRN) se establece el indicador OCFnx.La bandera OCFnx puede ser configurado para desencadenar una interrupcin.La bandera OCF1x puede borrar software, pero como siempre se borra automticamente cuando se activa una solicitud de interrupcin. Este modo puede ser invertida o no invertida. En el modo no inversora, el pasador OCn es BAJO (GND) en la Comparar coincidencia entre TCNTn y OCRnx mientras que hasta el conteo, y HIGH (VCC) en el partido de comparacin, mientras que hacia abajo-contando .En el modo de inversin, el pasador OCn es HIGH (VCC) en el partido de comparacin entre TCNTn y OCRnx mientras que hasta el conteo, y LOW (GND) en el partido de comparacin, mientras que abajo contando. Este modo se recomienda para el control del motor. La frecuencia de la fase de Corregido PWM se puede calcular mediante la siguiente ecuacin.PWM_frequency = clock_speed / (2 * Prescaller_value * TOP_value)Fase y frecuencia corregida modo PWM: Fase corregida y Fase y Frecuencia Corregido modos PWM funcionan de la misma manera si no estamos pensando en cambiar nuestro valor TOP vez que se inicia el modo PWM.La nica diferencia que pude ver en la hoja de datos es que la fase y frecuencia corregida actualizaciones modo su valor superior cuando se toca fondo, mientras que la Fase Corregido actualizaciones modo su valor superior cuando se golpea la parte superior. Si alguien sabe algo ms (o si me equivoco) sobre estos 2 modos, por favor hgamelo saber. Este modo se recomienda para el control del motor. La frecuencia de la fase y corregidos en frecuencia PWM se puede calcular mediante la siguiente ecuacin.PWM_frequency = clock_speed / (2 * Prescaller_value * TOP_value)

TIMER0 (8 BITS PWM):

Figura 2: ATmega328 Timer0 (8 bits)

Timer/Contador0 tiene 2 salidas, OC0A y OC0B.Dado que ambas salidas de salirse de la misma temporizador y generadores de forma de onda tanto OC0A y OC0B estn sincronizados, esto hace que el reloj perfecto para hacer robots tanque (me encantan los robots de tanque). Timer/Contador0 no tiene un Devision 32 o 128 en su pre-escalador.Debido a esto, es un poco limitado a las frecuencias que se podra producir.Si usted necesita una frecuencia especfica en el uso Timer/Counter2 PWM que tiene todos sus valores prescaler. Timer/Contador0 es capaz de ejecutar en 4 modos de la PWM rpido con un TOP mx (0xFF), un modo PWM rpido con una variable de TOP (OCR0A), una fase corregida modo PWM con un TOP mx (0xFF) y una fase Corregido PWM modo con un TOP variables (OCR0A).Cada uno de estos modos puede ser invertida o no invertida. 7 bits6 bits5 bits4 bits3 bits2 bits1 bit0 bit

TCCR0ACOM0A1COM0A0COM0B1COM0B0--WGM01WGM00

Timer / Control Contadores de registro 0 ACOM0A1COM0A0DESCRIPCIN

00OC0A desactivado

01WGM02 = 0: Funcionamiento normal Puerto, OC0A DisconnectedWGM02 = 1: OC0A Toggle en comparacin Partido

10Modo Ninguno invertida (HIGH en el fondo, LOW Match)

11Modo invertido (LOW, en el fondo en lo alto de partido)

Slo se aplica a los modos PWMCOM0B1COM0B0DESCRIPCIN

00OC0B desactivado

01Reservado

10Modo Ninguno invertida (HIGH en el fondo, LOW Match)

11Modo invertido (LOW, en el fondo en lo alto de partido)

Slo se aplica a los modos PWM7 bits6 bits5 bits4 bits3 bits2 bits1 bit0 bit

TCCR0BFOC0AFOC0B--WGM02CS02CS01CS00

Timer / Control Contadores de registro 0 ACS02CS01CS00DESCRIPCIN

000Disabled Timer/Counter2

001No preescala

010Reloj / 8

011Reloj / 64

100Reloj / 256

101Reloj / 1024

CS trozosMODOWGM02WGM01WGM00TOPDESCRIPCIN

0000Normal

10010xFFPWM de fase corregida

2010OCRACTC

30110xFFFast PWM

4100-Reservado

5101OCR0APWM de fase corregida

6110-Reservado

7111OCR0AFast PWM

Forma de onda del generador bits de modo7 bits6 bits5 bits4 bits3 bits2 bits1 bit0 bit

TIMSK0-----OCIE0BOIE0ATOIE0

Timer / Contador registro de mscara de interrupcin

7 bits6 bits5 bits4 bits3 bits2 bits1 bit0 bit

TIFR0-----OCF0BOCF0ATOV0

Timer / Contador Flag Registro de interrupcin7 bits6 bits5 bits4 bits3 bits2 bits1 bit0 bit

TCNT0

Timer / Contador Register (almacena el valor del contador)7 bits6 bits5 bits4 bits3 bits2 bits1 bit0 bit

OCR0A

Output Compare Registro A (almacena el valor de comparacin)

7 bits6 bits5 bits4 bits3 bits2 bits1 bit0 bit

OCR0B

Output Compare Register B (almacena el valor de comparacin)ATmega168/328 Cdigo:/ / Este cdigo establece counter0 para un rpido 8 kHz PWM wave @ reloj 16Mhz

# include

int main (void){ DDRD | = (1