Páginas

quarta-feira, 14 de abril de 2010

Back to Live...

Depois de um hiato de quase 1 ano sem postar, vai aqui algo produtivo:

O DIMER ELETRONICO MICRO-PROCESSADO

Com ele é possível controlar quanta potência elétrica desejamos entregar a determinada carga.

A idéia foi tirada de um experimento de laboratório da diciplina de Arquitetura de Processadores Digitais que cursei em 2009, e utilizava o microcontrolador 8051. Este experimento tem por base um exemplo do livro "Microcontroladores -Programação e projetos com a família 8051" - Mendonça/Zelenovsky
De lá pra cá, eu fiz diversas alterações no projeto original, a principal delas foi a mudança do 8051 para o PIC que é bem melhor de se trabalhar.

Síntese:
O projeto consiste em duas placas de circuito uma de controle e outra de potência para o acionamento da carga. Na placa de controle existem 3 'blocos' principais: O circuito de detecção de passagem por zero (cross-zero), O microcontrolador e o bloco da interface. O circuito de detecção por zero é extemamente simples e exatamente como descrito no livro, seu coração é um acoplamento optico 4N25, sem muitos detalhes o que ele faz é enviar um pulso para um pino do microcontrolador toda vez que a tensão senoidal da rede doméstica passa por zero. (no final das contas o sinal é um trem de pulsos com frequencia de 120Hz sincronizado com a rede) O microcontrolador detecta essa passagem por zero dispara um contador. No final da contagem ele dá um pulso num outro pino que dispara o circuito de potencia, o valor guardado no contador determina a potencia entregue a carga (maior valor, menor potencia). A interface consiste em um botão de ajuste da potencia e 8 leds que indicam essa potencia.

A placa de potencia também é muito simples e exatamente como mostrada no livro. Consiste em um num foto-triac MOC3020 que recebe o pulso vindo do PIC e transmite para o gate de um TRIAC de potencia (BTA-16 600B). A razão do foto-triac é desacoplar eletricamente o circuito de comando do circuito de potencia e seus ruidos, principalmente aqueles oriundo do BTA-16. Repare que R4 no circuito representa a CARGA, ou seja, o que você deseja controlar (ex.: lâmpada, resistencia, etc...)


O programa foi escrito em C e bastou algumas linhas apenas. O conceito básico como falei é utilizar as interrupções. A interrupção por mudança de estado no pino RB0 esta ligada ao cross-zero, ela ativa/carrega o contador timer1 = (65535-SETPOINT) e também ativa a interrupção deste contador. Quando o timer estoura, (atinge 65536) a rotina de interrupção é chamada que apena cria um pulso positivo no pino RB1 (RB1=0; RB1=1; delay x micro-segundos; RB1=0), é esse pulso que dispara o triac no estagio de potencia, em seguida pára o timer1. Durante todo o tempo o programa fica apenas aguardando uma interrupção ou a outra, além de monitorar quando o botão é pressionado. Cada vez que o botão é pressionado um valor diferente é carregado na variável SETPOINT que só assume 8 valores distintos, cada valor corresponde a uma intensidade de potencia ou nível (0 a 100%), o nível atual é indicado pelos LEDs, além disso o valor do ultimo nível utilizado é sempre salvo na EEPROM, assim ao se religar o aparelho ele voltará ao ultimo estado.


As imagens a seguir são simulações feitas no proteus.


O traço amarelo (canal A), está ligado a rede 220V ele mostra a tensão senoidal disponível e esta ai apenas para fins de comparaçã, passando esse sinal pelo transformador (para abaixar a tensão pra uns 6V ) e depois pelos diodos, obtem-se o sinal correspondente ao traço azul (canal B) e ele que é aplicado na entrada do acoplamento optico (4n25), o traço vermelho (canal C) é o pulso transmitido do 4n25 ao PIC, note que ele acontece toda vez que a senoide da rede (traço amarelo) cruza a linha do zero. Por fim o traço verde (canal D) é o pulso gerado pelo PIC e que vai para a placa de potencia. Neste caso ele acontece quase no final de cada semi-ciclo, e equivale ao nível de potencia mais baixo, quando se aumenta a potencia, esse pulso se desloca para a esquerda do gráfico. Abaixo o pulso para uma potencia ajustada em aproximadamente 50%.




Abaixo uma imagem que eu acho muito legal, é um modelo 3D da placa gerada pelo software ARES, onde é feito o layout de circuito impresso. Repare que o transformador não vai na placa, as conexão a ele e a placa de potencia são feitas pelos conectores tipo KRE.



Agora umas fotos do protótipo em funcionamento: Testei tanto para carga resistiva (lâmpada) quando indutiva (motor). Para a lâmpada o pulso de disparo pode ocorrer basicamente a qualquer momento do semi-ciclo (isso determina a intensidade com que a mesma acende). Porém para o motor isso não é possível, nos meus testes eu verifiquei que o pulso de disparo não pode acontecer antes do ponto de máximo/minimo da senoide, caso contrário o motor fica travado ou batendo (tentando girar para um lado e para ao outro), isso acontece porque para conseguirmos controlar um motor de indução devemos variar tanto a frequencia quanto a tensão fornecida o que não acontece neste circuito.








Ficha técnica:

Processador: PIC(R) 16f628A - microchip(TM)
Esquemático, simulação, layout PCI: Proteus 7.6-sp4 (ISIS + ARES)

IDE programação, gravação: MPLAB 8 (http://www.microchip.com/)

compilador C: CCS

Programador: ICD-2 - MultiPROG

A versão anterior deste projeto era um pouco mais elaborada, nela eu utilizava um PIC16F877A e um display de LCD que informava: "POTENCIA: XXX%". além disso havia 2 botões, um de incremento e outro de decremento da potencia. Nele era possível ajustar qualquer valor de 0 a 100% e não apenas 8 posições distintas como é o caso. O código fonte foi todo escrito em assembly e deu várias e várias linhas de código... além de alguns bugs não resolvidos.