Neste artigo, os autores descrevem duas técnicas para controle de potência em Sistemas Monofásicos A .C., através do uso de tiristores para Corrente Alternada (Triacs), partindo de Microcontroladores PIC.
De fato, o uso de microcontrolador no controle do disparo dos triacs é assunto discutido com interesse e pouca literatura tem sido escrita a respeito, porque tal envolve temporizações precisas no controle do ângulo de disparo dos semicondutores.
O primeiro método descreve o controle angular da senóide e faz uso do timer do Microcontrolador e de rotinas de interrupção escritas em Linguagem C.
Este método é também chamado PPM ( Modulação por Posição de Pulso ).
O segundo método envolve o conceito de ciclos completos de onda e é baseado no Algoritmo de Bresenham visando a equipartição da Energia dentro de um período de tempo pré-fixado.
Ambas as técnicas foram testadas pelo autor em laboratório e os códigos gravados no microcontrolador foram escritos em linguagem C, utilizando-se o compilador PCWH fabricado pela CCS.
Sistemas de filtros (snubber, LC ) são também discutidos como necessidade a ser implementada devido à emissão de harmônicas e EMI ocasionadas pelo rápido chaveamento dos triacs.
1. PPM
É uma sigla que significa Pulse Position Modulation, ou Modulação por Posição de Pulso. É a forma de modulação de sinal na qual os M bits de uma mensagem são codificados transmitindo-se um único pulso em uma das 2^M trocas de tempo possíveis. Isto é repetido a cada T segundos, tal que a taxa de bits transmitidos seja M/T bits por segundo. A característica de um sistema do tipo PPM é que dentro de um período de tempo T, apenas um pulso é gerado. O que muda é o instante no qual tal pulso é produzido.
O sistema PPM foi o adotado nesse Controlador porque o elemento resistivo de aquecimento funciona diretamente na rede AC de 127 volts.
Como necessita-se controlar tensão alternada, a escolha recaiu sobre um TRIAC do tipo TIC263 D.
Os Triacs (Tiristores para Corrente Alternada) e os SCR (Retificadores Controlados de Silício), uma vez que recebem um pulso de disparo no seu terminal G (gate) permanecem na condição de "disparo" (conduzindo a corrente) até que a senóide da rede cruze novamente o zero.
Assim, basta apenas um breve pulso de disparo no gate do TRIAC para que este comece a conduzir, só desligando ao final de um ciclo da senóide.
A figura abaixo ilustra o uso do PPM para controle do ângulo de disparo do TRIAC em
função da senóide de 60 Hz (período aproximado de 16,666 ms ):
2. Detetor de Passagem pelo Zero (Zero-Crossing)
A função desta etapa do circuito é produzir uma onda retangular a cada vez que a senóide da rede passar pelo zero, para proporcionar o adequado sincronismo no disparo do Triac. Fornece uma amostra da senóide da rede para que o Microcontrolador decida o momento adequado de iniciar o timer que controlará o PPM.
A solução encontrada, levando-se em conta a segurança no isolamento do circuito do controlador da rede de energia, faz uso de um acoplador óptico do tipo TIL111 da National Semiconductors, conforme mostrada no esquema abaixo
É importante frisar que existe isolamento galvânico entre a rede de 127 volts e o circuito digital, observando que os terras de um lado e de outro do opto-acoplador são diferentes. Tal isolamento torna o sistema seguro e robusto com relação aos picos de energia que eventualmente podem ser originados a partir da rede.
O circuito acima produz uma onda muito próxima de retangular nos instantes exatos em que a senóide da rede atravessa o zero, servindo como ótima referência para o momento de disparo do Triac.
3. Microcontrolador
A escolha recaiu para o modelo PIC18F4550 do fabricante Microchip (www.microchip.com) por ser um dispositivo de tecnologia RISC de última geração na data em que este trabalho foi desenvolvido.
Algumas características deste dispositivo são:
- 40 pinos em encapsulamento DIP, com 35 I/Os (entradas/saídas);
- Alta Performance, com tecnologia Nanowatt (r) para baixo consumo de energia;
- Hardware preparado para comunicação USB 2.0
- Memória Flash avançada, com mais de 100.000 ciclos de leitura e apagamento;
- Arquitetura otimizada para compilador C;
- 32 Kbytes de Memória de programa interna;
- 2048 bytes de memória RAM embutida;
- 256 bytes de memória para dados não voláteis;
- clock máximo de até 48 MHz, com velocidade de até 12 MIPs;
- Conversor AD interno com resolução de 8 ou 10 bits, multiplexado com até 13 canais de leitura;
- WatchDogTimer, 2 canais de PWM por hardware, 3 timers independentes;
Existem muitos pinos que possuem funções múltiplas (compartilhadas).
Por exemplo: os pinos 23 e 24, além de serem pinos normais de I/O (entrada ou saida) também são os pinos D+ e D- para conexão ao conector USB, caso se desejasse fazer este tipo de comunicação serial.
A foto abaixo ilustra o aspecto físico deste Microcontrolador, que pode ser encontrado em encapsulamento dip, facilitando a construção de protótipos artesanais:
Aspecto Físico
Este micrococontrolador admite várias opções de clock. Nessa implementação, foi escolhido um oscilador interno com cristal de quartzo externo de frequência 20 MHz, com a opção PLL habilitada, o que faz com que o clock interno deste microcontrolador seja de 48 MHz.
4. Acionamento do Triac e módulo de Potência
Para controlar a resistência de aquecimento AC foi implementado um controle digital do ângulo de disparo do TRIAC, entre 0 e 180 graus.
O momento do disparo é determinado pelo microcontrolador PIC.
O circuito de acionamento da parte de potência é mostrado abaixo:
Foi utilizado no protótipo um triac modelo TIC263-D, capaz de suportar correntes de até 25 ampéres e tensões de até 600 volts.
5. Controle da Potência na carga AC
O circuito com o tiristor TIC263D entrega à carga uma senóide "recortada", que ao osciloscópio se assemelha à figura abaixo:
A potência instantânea fornecida pelo Triac à resistência do aquecedor, cuja unidade é o watt (W), é dada pelo produto da tensão aplicada pela corrente que flui no aquecedor:
onde v(t) e i(t) são respectivamente a tensão e a intensidade de corrente no instante t.
A potência instântanea pode também ser escrita como:
Definindo-se a Função X(t) como:
E lembrando-se da definição de Potência Média ao longo de um semi-ciclo de período pi:
Onde w = 2 .pi .F é a frequência angular da senóide, dada em radianos/segundo
A Potência Média entregue à carga pode ser calculada, no intervalo entre 0 e To, por :
no domínio do tempo.
Por outro lado, a tensão instantânea v(t) pode ser expressa por:
Onde :
A: amplitude da senóide em volts (V) e
que resulta, substituindo na Eq. 5:
- EQ 07
Usando-se a identidade trigonométrica:
Substituindo na Eq. 7 e resolvendo a integral para o intervalo To< t
A Eq. 9 dá a Potência Média por semi-ciclo da senóide, em função do tempo de acionamento Ta , que é a variável de saída do controlador proposto.
6 - Firmware de Controle
O Microcontrolador determina o momento de disparo do optoisolador MOC3020 (trata-se na verdade de um opto-diac, próprio para acionamento de triacs) através do seguinte algoritmo:
1 - detecta o momento de passagem da senóide da rede pelo zero (zero-crossing); Neste momento, o fluxo do programa desvia para a rotina de interrupção INT_EXT no código fonte do programa;
2 - dispara o Timer3 do PIC, de modo a determinar um tempo entre 0 e 8,33 ms, que corresponde a meio-ciclo da senóide (0 até 180 graus);
3 - Os flags de interrupção INT0IF e TMR3IF são limpos manualmente pelo software;
4 - após o tempo determinado pelo TMR3, ocorre o disparo do triac, através do nível lógico aplicado ao led do opto-isolador.
Essa rotina foi implementada usando-se a interrupção gerada pelos pulsos do detector de zero-crossing e foi selecionado o modo rápido (FAST) de atendimento da interrupção, para evitar atrasos no tratamento e chamada dessa rotina.
O trecho do código-fonte que efetua o controle do ângulo de disparo do Triac é mostrado abaixo, escrito para o compilador PCHW da CCS (Ref. 1):
#INT_EXT FAST
void TRATA_ZC (void ) {
//caso seja interrupção no pino RB0, interrupção de Zero_Cross
if (INT0IF==1)
{ INT0IF=0; // limpa Flag da interrupção
Pstate=0;
output_low(PWM); // inibe o triac
set_timer3(65535 - T_Low); // define o angulo de disparo do TRIAC
TMR3ON =1; // Habilita a contagem do TIMER_3
}
else
{
if(TMR3IF==1)
{ TMR3IF=0; // limpa o flag de interrupção do TIMER3
if (Pstate==1)
{ Pstate=0;
TMR3ON=0; // desliga a contagem do TMR3
}
else
{ output_high(PWM);
Pstate=1;
set_timer3(65535-pulso); // define a largura do pulso
// do disparo
}
}
} } //TRATA_ZC
Com o triac, sendo o ângulo de disparo igual nos dois semi-ciclos, a forma de onda da tensão na carga é simétrica e portanto seu valor médio é nulo.
Conforme demonstrado anteriormente (e simplificando-se a equação), a tensão eficaz aplicada à resistência em função do ângulo "alfa" de disparo é, para rede de 127 volts, dada por:
Pela Equação (2), a potência eficaz aplicada na resistência será:
onde R é o valor da resistência de carga em ?.
7 - Filtro "Snubber"
Como melhoria adicional a este circuito, recomenda-se acrescentar um resistor de 100 ? em série com um capacitor de 10 nF em paralelo com os terminais T1 e T2 do Triac, com a finalidade de se reduzir a emissão de harmônicas na rede de energia, conforme é também mostrado na figura acima. Este filtro RC série é conhecido na literatura como "snubber" e tem por função atenuar harmônicas e deformações na senóide da rede, provocadas pelas rápidas comutações do triac.
8 - Filtro contra EMI (Eletromagnetic Interference) :
Em aplicações onde uma carga indutiva necessite ser controlada pelo triac, é necessário proteger o circuito e a rede de energia dos surtos de tensão gerados pela rápida comutação do triac, os quais podem causar interferências em frequências de rádio de ondas médias e baixas, tipicamente entre 100 KHz e 5 MHz.
Um filtro LC mais elaborado pode ser implementado com esta finalidade, como mostrado na figura abaixo:
São utilizados um indutor de 200 uH (com fator de mérito Q > 100) e um capacitor de 100 nF com isolação mínima de 400 volts.
As equações que descrevem o filtro acima sugerido, onde "fo" é a frequência central de sintonia, são :
Este filtro tem um pólo duplo na frequência de 35 kHz, que é suficientemente mais alto do que a frequência da rede AC (60 Hz) para prevenir algum desvio de fase adicional ou alguma atenuação da tensão da linha.
9 - Outra forma de controle de Potência:
Uma outra maneira para prevenir distorções na senóide da linha de energia AC é usar pacotes de ondas. Ao invés de se disparar o triac continuamente em ângulo de fase variável, entrega-se à carga semi-ciclos inteiros de senóide.
Este método tem a desvantangem de produzir um controle nada suave de energia na carga: uma lâmpada, por exemplo, ao invés de ter sua luminosidade variando continuamente, passaria a piscar. Entretanto, este efeito é irrelevante se a finalidade desejada for apenas o controle da temperatura de uma resistência, como no caso em estudo.
Por exemplo: Deseja-se um Controle de 30% da Potencia Total; estipula-se um periodo de controle total de 20 segundos, e uma resolução de Controle de 0,2 seg (200 ms).
Assim, para que tenhamos 30% da Potência total na carga, mantemos o triac disparado durante 30 x 0,2 = 6 segundos a cada 20 segundos, repetindo-se sempre este ciclo. Para evitar um acionamento "aos trancos" da carga (distribuição desigual da potência no tempo) poder-se-ia utilizar o Algoritmo de Bresenham para distribuir igualmente estes 6 segundos dentro do período total de 20 segundos (por exemplo).
10 - Algoritmo de Bresenham:
Embora originalmente desenvolvido para aplicações em Computação Gráfica (trata-se de um algoritmo matemático que foi originalmente desenvolvido para otimizar o traçado de retas em diagonais e otimizar desenhos de texturas), este algoritmo, quando aplicado ao programa do Microcontrolador, permite distribuir N ciclos de senóide igualmente dentro de um periodo M de tempo de maneira a equiparticionar a energia (Ref. 16).
Se a potência for ajustada para 50% do total, a cada 20 segundos não ocorrerá primeiro 10 segundos de condução do triac (ON) e 10 segundos desligado (OFF) depois.
Pelo contrário, este algoritmo possibilitará um controle de 0.2 Seg ON, 0.2 Seg OFF, 0.2 Seg ON, 0.2 Seg. OFF e assim por diante.
Para testar este algoritmo, foi escrito uma rotina no PC utilizando-se o compilador DevC++, a qual é listada abaixo:
#include
#include
int main(int argc, char *argv[])
{
int M,N,E,I,D ;
while (1)
{
printf("\n Algoritmo de Bresenham - distribui igualmente N ciclos dentro de M segundos");
printf("\n ");
printf("\n Enter M: ");
scanf("%d",&M);
printf(" Enter N: ");
scanf("%d",&N);
printf("\n ");
E= 2*N - M;
for(I=0 ; I
{
if (E>=0)
{
E=E + 2*(N-M);
printf("1 ");
}
else
{
E=E + 2*N;
printf("0 ");
}
}
printf("\n ");
}
// system("PARADO");
return 0;
}
Alguns testes foram feitos com o Algoritmo de Bresenham e com esta forma de Controle do Triac.
Entretanto, optou-se aqui neste projeto pela forma de controle de ângulo de disparo proposta anteriormente, por possibilitar um controle mais preciso e mais suave da potência aplicada na carga. Essa segunda idéia é melhor quando se deseja menor produção de harmônicos na rede.
11 - Circuito monitor de falhas no Triac:
Ainda como outra idéia interessante a ser acrescentada, sugere-se o uso de um LED (diodo emissor de luz) em paralelo com o triac, com a finalidade de indicar a queima deste componente.
Quando o triac é danificado irremediavelmente, geralmente tal dano manifesta-se por um curto-circuito definitivo entre seus terminais T1 e T2.
Um triac em curto provocará um aquecimento exagerado da resistência de aquecimento, sem controle.
Para monitorar este eventual curto-circuito no triac, sugere-se acrescentar o seguinte circuito:
No circuito da figura acima, o LED1 acenderá em diversas intensidades enquanto o triac estiver operando normalmente, ainda que acenda com pouco brilho.
Entretanto, em caso de queima do triac por curto-circuito, este led irá se apagar definitivamente, porquanto não existirá diferença de potencial entre os terminais do resistor R1 e do diodo D2.
A função dos diodos D1 e D2 é proteger o próprio led contra tensões reversas da rede AC e os resistores R1 e R2 limitam as correntes que circulam pelos diodos a um valor seguro.
R3 e C1 compõe o circuito de filtro "snubber" já discutido acima.
O filtro LC não é mostrado nesta figura, por uma questão de simplicidade no entendimento.
12 - CONCLUSÃO:
Os dois métodos estudados são efetivos no Controle do disparo de triacs usando-se
microcontrolador.
O primeiro método, que faz uso do sistema PPM, é recomendado para cargas que exigem linearidade no controle, tais como motores AC monofásicos e lâmpadas de iluminação incandescentes.
O segundo método, baseado no controle de pacotes de períodos completos da senóide e no algoritmo de Bresenham tem a vantagem de produzir menor quantidade de harmonicas e EMI, mas tem a desvantagem de ser pouco linear no que se refere ao controle da carga. Esse segundo método é recomendável apenas para resistências de aquecimento.
Destarte, ambos os métodos são válidos e é a aplicação e o elemento a ser controlado que definem qual será o escolhido.
APÊNDICE 1 - FIRMWARE PARA O CONTROLE DO TIPO PPM
//--------------------------------------------------
//
// CONTROLE DE DISPARO DO TRIAC
// PROGRAMA TESTE ESCRITO EM 10/5/2009
// vers. 2.0
//-----------------------------------------------
#include <18F4550.h>
#DEVICE ADC=10
#include <regs_18fxx2.h>
#DEVICE HIGH_INTS=TRUE // Use this option for
// high or low priority interrupts on the PIC18.
#DEVICE *=16
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN, nomclr
#use delay(clock=48000000)
//------------------------------------------------
#define limpa_display lcd_escreve('\f');
#define bt1 pin_D1
#define bt2 pin_D0
#define bt3 pin_D2
#define PWM pin_c2
//-------------------------------------------------
//-------------------------------------------------
// Variaveis Globais
int16 T_Low=0; //angulo de disparo do TRIAC em us
int16 pulso=0;
short int Pstate=0, led=0;
int16 x=0;
float alfa; // angulo de disparo do triac, em graus
float alfa_rad; // angulo de disp triac em readianos
float PN; //informa o valor da Potencia normalizada
float A10, A11, A12, A13, A14, A15;
//---------------------------------------------------------------
#include <lcd_unisal.c>
#include <math.h>
//-----------------------------------------
#INT_EXT FAST
void TRATA_ZC(void ){
//caso seja interrupção no pino RB0, interrupção de Zero_Cross
if (INT0IF==1)
{ INT0IF=0; // limpa Flag da interrupção
Pstate=0;
output_low(PWM); // inibe o triac
set_timer3(65535-T_Low); //define o angulo de disparo do TRIAC
TMR3ON =1; //Habilita a contagem do TIMER_3
}
else
{
if(TMR3IF==1)
{ TMR3IF=0; //limpa o flag de interrupção do TIMER3
if (Pstate==1)
{ Pstate=0;
TMR3ON=0; //desliga a contagem do TMR3
}
else
{ output_high(PWM);
Pstate=1;
set_timer3(65535-pulso); //define a largura do pulso
// do disparo
}
}
}
} //TRATA_ZC
//--------------------------------------------------------
void main(void) {
SETUP_TIMER_3( T3_INTERNAL| T3_DIV_BY_8 );
SET_TIMER3(65535-T_Low);
EXT_INT_EDGE( L_TO_H );
//Inicializa o LCD e mostra as telas de apresentação no LCD
lcd_ini( );
delay_ms(300);
ENABLE_INTERRUPTS(INT_EXT );
ENABLE_INTERRUPTS( INT_TIMER3 );
ENABLE_INTERRUPTS ( GLOBAL );
pulso =500;
// limites para T_Low:
// max: 12300 min:200
// 6150 = metade do ciclo
T_Low =6150; // tempo em que a saida do PWM fica nivel baixo
X=6150;
limpa_display ;
lcd_pos_xy(1,1);
printf(lcd_escreve,"V=%05lu ",X) ;
lcd_pos_xy(1,2);
printf(lcd_escreve,"Ajuste Manual ") ;
//----------------------------
// LOOP PRINCIPAL
while(TRUE){
led=!led ;
OUTPUT_BIT(PIN_B7, led); //APAGA O led
//calculo do angulo de disparo do TRIAC:
alfa = (float) (0.007438*(x-200)); //alfa é dado em GRAUS)
//calculo da Potência Normalizada, de 0 até 100%
// 1- tranforma a Potencia para radianos
alfa_rad = (float) (3.1416*alfa)/180 ;
// 2- calcula a Potência Normalizada e entrega o resultado entre 0 e 100%
A10 = (float) 2*alfa_rad ;
A11 = (float) sin( A10 ) ;
A12 = (float) A11 / 12.5664 ;
A13 = (float) alfa_rad/2;
A14 = (float) ( 0.5 - A13 + A12 ) ;
A15 = (float) sqrt( A14) ;
PN = (float) 115.66 * A15 ;
//PN = (float) 141.42* sqrt( 0.5 - (alfa_rad/2) + (sin(2*alfa_rad)/12.566));
if (!input(bt1)) { if(x>200) x=x-10 ;
lcd_pos_xy(1,1);
printf(lcd_escreve,"V=%05lu ",X) ;
lcd_pos_xy(9,1);
printf(lcd_escreve,"A=%2.2F ",alfa) ;
lcd_pos_xy(1,2);
printf(lcd_escreve,"Power=%2.2F",PN) ;
lcd_pos_xy(12,2);
lcd_escreve(37) ; // imprime caractere % no final da linha
lcd_pos_xy(13,2);
printf(lcd_escreve," ");
delay_ms(50);
}
if (!input(bt2)) { if(x<12300) x=x+10 ;
lcd_pos_xy(1,1);
printf(lcd_escreve,"V=%05lu ",x) ;
lcd_pos_xy(9,1);
printf(lcd_escreve,"A=%2.2F ",alfa) ;
lcd_pos_xy(1,2);
printf(lcd_escreve,"Power=%2.2F",PN) ;
lcd_pos_xy(12,2);
lcd_escreve(37) ; // imprime caractere % no final da linha
lcd_pos_xy(13,2);
printf(lcd_escreve," ");
delay_ms(50); }
if (!input(bt3)) {delay_us(10); }
T_Low = x;
delay_ms(50);
}//while(true)
}
REFERÊNCIAS BIBLBIOGRÁFICAS:
1 - CCS PIC C C COMPILER - Manual de Referência do Compilador, www.ccsinfo.com
2 - BURIAN JR, Yaro: (1997): Circuitos Elétricos, Editora da Unicamp.
3- CARVALHO, J. L. Martins (2000): Sistemas de Controle Automático, Editora LTC, cap. 1.
4 - CASTRO, TANAKA, Carlos A., Márcia (1994) : Circuitos de Corrente Alternada - um curso introdutório, Editora da Unicamp.
5 - DESBOROUGH, L.; NORDH, P.N e MILLER, R. (2001): Control System Reliability - Process Out of Control. In Tech with Industrial Computing, August.
6 - FAMBRINI, Francisco (2006): Uma Solução por Software para implementar pwm em qualquer microcontrolador PIC, Revista Saber Eletrônica n. 402, pp.17,18,19.
7 - LJUNG, L. (1987): System Identification, Theory for the User. New Jersey. Prentice Hall.
8 - MICROCHIP Semiconductores (2008) : Datasheet do Microcontrolador PIC18F4550, site do fabricante.
9 - MOHAN, Undeland and Robins (1994) : Power Electronics: Converters, Applications and Desing, 2a Edição, John Wiley.
10 - NATIONAL Semiconductores (1992): Datasheet do componente MOC3020, opto-isolador para disparo de triac;
11 - PEREIRA, Fabio (2001): Microcontroladores PIC - Linguagem C, Ed. Érica, 2a Edição.
12 - PHILLIPS, C. L. e NÄGLE, H. T. (1995): Digital Control System Analysis and Design, 3rd Edition, Prenctice-Hall.
13 - S. BUSO (1995): Digital Control of Power Converters, FEEC, Editora da Unicamp.
14 - SILVESTRE, Fernando (2008): Notas de Aula da Disciplina "Identificação de Sistemas" , Unisal, Campinas.
15 - RASHID, M. H. (1993): Power Electronics, Circuits, Devices and Applications, 2a Edição, Prentice-Hall, 1993.
16 - Zero-error 1 second Timer - www.romanblack.com/one_sec.htm, site na internet;