En este proyecto vamos a utilizar una de las características de ATmega32A para ajustar el brillo de un LED de 1 Watt. El método que se utiliza para ajustar la velocidad del LED es PWM (Modulación de ancho de pulso). Este tutorial de PWM del microcontrolador AVR explica el concepto de PWM y la generación de PWM en detalle (también puede consultar este circuito generador de PWM simple). Considere un circuito simple como se muestra en la figura.
Ahora, si el interruptor en la figura anterior se cierra continuamente durante un período de tiempo, la bombilla se encenderá continuamente durante ese tiempo. Si el interruptor se cierra durante 8 ms y se abre durante 2 ms durante un ciclo de 10 ms, entonces la bombilla estará encendida solo en el tiempo de 8 ms. Ahora el terminal promedio en un período de 10 ms = tiempo de encendido / (tiempo de encendido + tiempo de apagado), esto se llama ciclo de trabajo y es del 80% (8 / (8 + 2)), por lo que el promedio El voltaje de salida será el 80% del voltaje de la batería.
En el segundo caso, el interruptor se cierra durante 5 ms y se abre durante 5 ms durante un período de 10 ms, por lo que el voltaje terminal promedio en la salida será el 50% del voltaje de la batería. Diga si el voltaje de la batería es de 5 V y el ciclo de trabajo es del 50%, por lo que el voltaje promedio de los terminales será de 2,5 V.
En el tercer caso, el ciclo de trabajo es del 20% y el voltaje terminal promedio es del 20% del voltaje de la batería.
En ATMEGA32A tenemos cuatro canales PWM, a saber, OC0, OC1A, OC1B y OC2. Aquí vamos a utilizar el canal OC0 PWM para variar el brillo del LED.
Componentes requeridos
Hardware:
Microcontrolador ATmega32
Fuente de alimentación (5v)
Programador AVR-ISP
Condensador 100uF, LED de 1 vatio
Transistor TIP127
Botones (2 piezas)
Condensador de 100nF (104) (2 piezas), Resistencias de 100Ω y 1kΩ (2 piezas).
Software:
Estudio Atmel 6.1
Progisp o magia flash
Diagrama de circuito y explicación de trabajo
La figura anterior muestra el diagrama del circuito del atenuador LED con microcontrolador AVR (también puede verificar este simple circuito atenuador LED).
En ATmega, para cuatro canales PWM, hemos designado cuatro pines. Solo podemos tomar la salida PWM solo en estos pines. Como estamos usando PWM0, debemos tomar la señal PWM en el pin OC0 (PORTB 3 rd PIN). Como se muestra en la figura, estamos conectando la base del transistor al pin OC0 para impulsar el LED de encendido. Aquí otra cosa es sobre cuatro canales PWM, dos son canales PWM de 8 bits. Vamos a utilizar un canal PWM de 8 bits aquí.
Un condensador está conectado a cada uno de los botones para evitar que reboten. Siempre que se presione un botón, habrá algo de ruido en el pin. Aunque este ruido se estabiliza en milisegundos. Para un controlador, los picos agudos antes de la estabilización actúan como disparadores. Este efecto puede eliminarse mediante software o hardware, para que el programa sea sencillo. Estamos usando el método de hardware agregando un condensador antirrebote.
Los condensadores anulan el efecto del rebote de los botones.
En ATMEGA hay un par de formas de generar PWM, son:
1. Fase correcta PWM
2. PWM rápido
Aquí vamos a mantener todo simple, así que usaremos el método FAST PWM para generar la señal PWM.
Primero para elegir la frecuencia de PWM, esto generalmente depende de la aplicación, para un LED cualquier frecuencia superior a 50Hz sería suficiente. Por esta razón estamos eligiendo el contador de reloj 1MHZ. Por eso no elegimos prescalar. Un prescalar es un número que se selecciona para obtener un contador de reloj menor. Por ejemplo, si el reloj del oscilador es de 8Mhz, podemos elegir un prescalar de '8' para obtener un reloj de 1MHz para el contador. El prescalar se selecciona en función de la frecuencia. Si queremos más pulsos de período de tiempo, debemos elegir un prescalar más alto.
Ahora, para obtener el FAST PWM de 50Hz de reloj de ATMEGA, necesitamos habilitar los bits apropiados en el registro “ TCCR0 ”. Este es el único registro al que debemos molestarnos para obtener FAST PWM de 8 bits.
Aquí, 1. CS00, CS01, CS02 (AMARILLO): seleccione el prescalar para elegir el reloj contador. La tabla para el prescalar apropiado se muestra en la siguiente tabla. Entonces, para preescalar uno (reloj del oscilador = reloj del contador).
entonces CS00 = 1, otros dos bits son cero.
2. WGM01 y WGM00 se modifican para elegir los modos de generación de formas de onda, según la tabla siguiente, para un PWM rápido. Tenemos WGM00 = 1 y WGM01 = 1;
3. Ahora sabemos que PWM es una señal con diferente relación de trabajo o diferentes tiempos de encendido y apagado. Hasta ahora hemos elegido frecuencia y tipo de PWM. El tema principal de este proyecto radica en esta sección. Para obtener una relación de trabajo diferente, elegiremos un valor entre 0 y 255 (2 ^ 8 debido a 8 bits). Digamos que elegimos un valor 180, ya que el contador comienza a contar desde 0 y alcanza el valor 180, la respuesta de salida puede activarse. Este disparador puede ser inverso o no. Es decir, se puede decirle a la salida que se levante al alcanzar el conteo, o se le puede decir que se levante al alcanzar el conteo.
Esta selección de subir o bajar se elige mediante los bits CM00 y CM01.
Como se muestra en la tabla, para que la salida sea alta en la comparación y la salida se mantendrá alta hasta el valor máximo (como se muestra en la figura en la parte inferior). Tenemos que elegir el modo de inversión para hacer eso, entonces COM00 = 1; COM01 = 1.
Como se muestra en la siguiente figura, OCR0 (registro de comparación de salida 0) es el byte que almacena el valor elegido por el usuario. Entonces, si cambiamos OCR0 = 180, el controlador activa el cambio (alto) cuando el contador llega a 180 desde 0.
Ahora, para variar el brillo del LED, tenemos que cambiar el DUTY RATIO de la señal PWM. Para cambiar la relación de trabajo, necesitamos cambiar el valor OCR0. Cuando cambiamos este valor de OCR0, el contador tarda un tiempo diferente en alcanzar el OCR0. Entonces, el controlador eleva la salida en diferentes momentos.
Entonces, para PWM de diferentes ciclos de trabajo, necesitamos cambiar el valor OCR0.
En circuito tenemos dos botones. Un botón es para aumentar el valor OCR0 y, por lo tanto, el DUTY RATIO de la señal PWM, el otro es para disminuir el valor OCR0 y, por lo tanto, el DUTY RATIO de la señal PWM.