Brilho do Led controlado com microcontrolador 8051(89c51,89c52)
Roberto Magalhães
Controlar o brilho do LED ou desbotar um LED usando o microcontrolador 8051(89c51,89c52) não é uma tarefa fácil. É necessário um conhecimento profundo dos temporizadores do microcontrolador 8051 e seus registros para atenuar ou controlar o brilho do LED com o microcontrolador 89c51. Então neste projeto/tutorial vou te ensinar como fazer fade de um led com microcontrolador 89c51?
Como controlar o brilho do LED?
Para desbotar e controlar o brilho do LED, temos que fornecer diferentes níveis de sinal de tensão para o LED. Cada nível de tensão brilha de acordo com o valor da tensão. Por exemplo, você tem um LED cuja classificação é de 5 volts. Para desvanecer temos que fornecer tensão variando de 0,1 a 5 volts. Com 5 volts, o LED de entrada brilhará com brilho máximo. Diminuir a tensão de 5 diminuirá o brilho do LED. Se acelerarmos o ciclo de brilho, o LED mostrará um efeito de desbotamento.
Método típico de controle de brilho do LED
Um resistor variável pode facilmente desbotar um led variando a resistência, se o led estiver conectado em série com ele. A variação da resistência aumenta ou diminui a tensão de saída. Da mesma forma que giramos o potenciômetro/resistor variável do ventilador para acelerar ou diminuir a velocidade de rotação do ventilador de teto doméstico. Com resistor/potenciômetro variável é fácil controlar o brilho do led. Mas quando precisamos controlar o brilho com o microcontrolador, parece ser uma tarefa difícil, pois não há funcionalidade de resistor variável no microcontrolador.
Como desbotar o led usando microcontroladores?
A melhor maneira de desbotar o LED usando microcontroladores é usar a técnica PWM (modulação por largura de pulso). Na modulação por largura de pulso, o ciclo de trabalho do sinal é variado. O ciclo de trabalho é a proporção entre o período ativo e o período não ativo. Para cada ciclo de trabalho, a tensão de saída é diferente. O ciclo de trabalho de 100% fornece tensão máxima. Quando o ciclo de trabalho diminui de 100%, a tensão de saída também diminui. Aqui está uma imagem simples que esclarece o jogo do ciclo de trabalho.
Ciclos de trabalho PWM
Diagrama de circuito de desvanecimento do LED 89c51
Conectei o led ao pino nº 0 da porta 1 do microcontrolador 89c51. O LED está conectado em série a um resistor de 510 ohms. O cristal de 11,0592 MHz é usado para fornecer clock ao microcontrolador 8051. O Crystal é conectado ao microcontrolador 8051 em paralelo a dois capacitores de 22pf. O diagrama do circuito do projeto é fornecido abaixo.
Fading led usando técnica PWM com microcontrolador 89c51
Geração de sinal PWM (modulação por largura de pulso) usando temporizadores de microcontrolador 89c51
Para gerar PWM usando microcontrolador é necessário utilizar seu temporizador. No código abaixo usei temporizadores para gerar PWM. Os microcontroladores da série 8051 possuem dois temporizadores integrados. Você pode usá-los como 16 ou 8 bits. Visto que 8051 é um microcontrolador de 8 bits, como poderíamos usar o temporizador no modo de 16 bits. Existem dois registros de 8 bits dedicados para temporizadores. Você pode combiná-los para usar o temporizador no modo de 16 bits. Esses registradores são THx e TLx. Para saber mais sobre os temporizadores 8051, os registros associados a eles e como usar os temporizadores basta seguir um pequeno tutorial. Como usar temporizadores internos do microcontrolador 8051(89c51,89c52)?
Estou usando o Timer-0 do microcontrolador 89c51 no modo de 16 bits. São duas variáveis mais importantes no meu código. Eles são alto-baixo e h1-l1. alto-baixo está associado ao período alto do sinal e h1-l1 está associado ao período baixo do sinal. high e h1 estão associados ao registro TH0 de 89c51. Estou gerando 20 ondas diferentes para atingir o PWM. 20 ondas diferentes significam 20 ciclos de trabalho diferentes. No código, um loop for é executado 20 vezes, a lógica do ciclo de trabalho é colocada nesse loop for. Inicialmente, o ciclo de trabalho é baixo por um pequeno período e depois aumenta cada vez mais até 100%. Na verdade, os temporizadores são carregados com 20 valores diferentes e funcionam com 20 valores diferentes, mas ao mesmo tempo o temporizador funciona com um único valor.
No código inicialmente TH0 é carregado com 0xFF(alto) e TL0 com 0xFF(baixo), esta combinação é para sinal alto. O temporizador funciona com esta combinação 100 vezes e ao mesmo tempo para sinal baixo TH0 é carregado com 0xEB(h1) e TL0 0xFF(l1). TH0 é carregado com 0xEB porque inicialmente queremos sinal baixo por um longo período. Agora, quando este loop for executado, o sinal para ondas altas aumenta e o sinal para ondas baixas diminui. Devido ao qual recebemos um sinal PWM como saída no pino e podemos ver o desbotamento do LED e o brilho aumentando e diminuindo continuamente.
Observação: 0xEB fornece uma lacuna de 0xFF-0xEB(hexadecimal)=20(decimal). Portanto, estamos aumentando e diminuindo nossos níveis de sinal igualmente em ambos os lados (alto e baixo). h1 aumenta de 0xEB e vai para 0xFF após 20 incrementos e high diminui de 0xFF para 0xEB após 20 decrementos. Você pode aumentar a frequência PWM usando um cristal de alto valor.
Baixe o código do projeto e o arquivo HEx. O código é escrito em linguagem C e o compilador keil é usado para compilar o código. A pasta também contém a simulação do projeto. A simulação é feita no Proteaus 8.0. Por favor, dê-nos o seu feedback sobre o projeto.