Neste projeto vamos usar um dos recursos do ATmega32A para ajustar o brilho do LED de 1 Watt. O método usado para ajustar a velocidade do LED é PWM (Modulação por largura de pulso). Este tutorial de PWM do microcontrolador AVR explica o conceito de PWM e a geração de PWM em detalhes (você também pode verificar este circuito gerador de PWM simples). Considere um circuito simples como mostrado na figura.
Agora, se o interruptor na figura acima for fechado continuamente por um período de tempo, a lâmpada ficará continuamente acesa durante esse tempo. Se o interruptor for fechado por 8ms e aberto por 2ms em um ciclo de 10ms, então a lâmpada acenderá apenas no tempo de 8ms. Agora, a média do terminal ao longo de um período de 10 ms = tempo de ligar / (tempo de ligar + tempo de desligar), isso é chamado de ciclo de trabalho e é de 80% (8 / (8 + 2)), então a média a tensão de saída será 80% da tensão da bateria.
No segundo caso, a chave é fechada por 5ms e aberta por 5ms por um período de 10ms, de modo que a tensão média do terminal na saída será 50% da tensão da bateria. Diga se a tensão da bateria é 5 V e o ciclo de trabalho é 50% e, portanto, a tensão média do terminal será 2,5 V.
No terceiro caso, o ciclo de trabalho é de 20% e a tensão média do terminal é de 20% da tensão da bateria.
Em ATMEGA32A, temos quatro canais PWM, nomeadamente OC0, OC1A, OC1B e OC2. Aqui, usaremos o canal OC0 PWM para variar o brilho do LED.
Componentes necessários
Hardware:
Microcontrolador ATmega32
Fonte de alimentação (5v)
Programador AVR-ISP
Capacitor 100uF, LED de 1 Watt
Transistor TIP127
Botões (2 peças)
Capacitor 100nF (104) (2 peças), Resistores de 100Ω e 1kΩ (2 peças).
Programas:
Atmel studio 6.1
Progisp ou magia flash
Diagrama de circuito e explicação de trabalho
A figura acima mostra o diagrama de circuito do dimmer de LED com microcontrolador AVR (você também pode verificar este circuito de dimmer de LED simples).
No ATmega, para quatro canais PWM, designamos quatro pinos. Podemos obter saída PWM apenas nesses pinos. Como estamos usando PWM0, devemos receber o sinal PWM no pino OC0 (PORTB 3º PIN). Conforme mostrado na figura, estamos conectando a base do transistor ao pino OC0 para acionar o LED de alimentação. Aqui, outra coisa são quatro canais PWM, dois são canais PWM de 8 bits. Vamos usar um canal PWM de 8 bits aqui.
Um capacitor é conectado a cada um dos botões para evitar saltos. Sempre que um botão é pressionado, haverá algum ruído no pino. Embora esse ruído se estabilize em milissegundos. Para um controlador, os picos agudos antes da estabilização atuam como gatilhos. Este efeito pode ser eliminado por software ou hardware, para que o programa seja simples. Estamos usando o método de hardware, adicionando capacitor de debouncing.
Os capacitores anulam o efeito do salto dos botões.
No ATMEGA, existem algumas maneiras de gerar PWM, são elas:
1. PWM correto de fase
2. PWM rápido
Aqui vamos manter tudo simples, então vamos usar o método FAST PWM para gerar o sinal PWM.
Primeiro, escolha a frequência do PWM. Isso geralmente depende da aplicação, para um LED, qualquer frequência maior que 50 Hz serviria. Por esta razão, estamos escolhendo o contador de 1MHZ. Portanto, não estamos escolhendo nenhum pré-escalar. Um pré-escalar é um número selecionado para obter um contador de tempo menor. Por exemplo, se o relógio do oscilador é de 8 MHz, podemos escolher um pré-escalar de '8' para obter um relógio de 1 MHz como contador. O pré-escalar é selecionado com base na frequência. Se quisermos mais pulsos de período de tempo, temos que escolher um pré-escalar mais alto.
Agora, para obter o FAST PWM do clock de 50 Hz do ATMEGA, precisamos habilitar os bits apropriados no registro “ TCCR0 ”. Este é o único registro que precisamos nos preocupar, para obter 8 bits FAST PWM.
Aqui, 1. CS00, CS01, CS02 (AMARELO) - selecione o pré-escala para escolher o relógio do contador. A tabela para o pré-escalar apropriado é mostrada na tabela abaixo. Portanto, para pré-escalar um (relógio do oscilador = relógio do contador).
então CS00 = 1, outros dois bits são zero.
2. WGM01 e WGM00 são alterados para escolher os modos de geração de forma de onda, com base na tabela abaixo, para PWM rápido. Temos WGM00 = 1 e WGM01 = 1;
3. Agora sabemos que PWM é um sinal com relação de trabalho diferente ou diferentes tempos de liga e desliga. Até agora, escolhemos a frequência e o tipo de PWM. O tema principal deste projeto encontra-se nesta seção. Para obter uma relação de trabalho diferente, vamos escolher um valor entre 0 e 255 (2 ^ 8 por causa de 8 bits). Digamos que escolhemos um valor 180, quando o contador começa a contar a partir de 0 e atinge o valor 180, a resposta de saída pode ser disparada. Este gatilho pode ser invertido ou não invertido. Ou seja, a saída pode ser puxada para cima ao atingir a contagem ou pode ser puxada para baixo ao atingir a contagem.
Esta seleção de puxar para cima ou para baixo é escolhida pelos bits CM00 e CM01.
Conforme mostrado na tabela, para que a saída vá alta na comparação, a saída permanecerá alta até o valor máximo (conforme mostrado na figura abaixo). Temos que escolher o modo de inversão para fazer isso, então COM00 = 1; COM01 = 1.
Conforme mostrado na figura abaixo, OCR0 (Output Compare Register 0) é o byte que armazena o valor escolhido pelo usuário. Portanto, se alterarmos OCR0 = 180, o controlador acionará a alteração (alta) quando o contador chegar a 180 de 0.
Agora, para variar o brilho do LED, temos que mudar a DUTY RATIO do sinal PWM. Para alterar a taxa de serviço, precisamos alterar o valor OCR0. Quando alteramos este valor de OCR0, o contador leva um tempo diferente para chegar ao OCR0. Portanto, o controlador aumenta a saída em momentos diferentes.
Portanto, para PWM de diferentes ciclos de trabalho, precisamos alterar o valor de OCR0.
No circuito, temos dois botões. Um botão é para aumentar o valor de OCR0 e então a DUTY RATIO do sinal PWM, o outro é para diminuir o valor de OCR0 e então a DUTY RATIO do sinal PWM.