Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

sábado, 18 de maio de 2013

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte III

IMPORTANTE: como o segundo circuito abaixo taca gerando muita confusão, troquei-o para um desenho mais simples.

No primeiro post a respeito desse assunto, escrevi sobre a teoria por trás do controle de potência em corrente alternada. No segundo post, mostrei o circuito e o programa responsáveis pela indicação de zero na onda senóide de CA.

Agora vamos ver o circuito para controle de uma carga 110 ou 220V. Para fazer isso, usaremos um circuito baseado em TRIAC. O software que roda no Arduino conta com um mecanismo de interrupção semelhante ao descrito no outro post, que monitora a passagem por zero no ciclo. Dentro da rotina que é executada a cada zero, o sistema liga o TRIAC em instantes distintos, de acordo com tensão que deseja-se enviar à carga. O TRIAC se desliga sozinho na próxima passagem pelo zero.



Acima, fritzing dos dois circuitos, o de zero (esquerda) e o de controle (direita).

Lista de componentes:
CI MOC3020
TRIAC BTA12-600
CI H11AA1
Resistores de 180, 2,4k, 10k, 33k.
Capacitor de 0,01 uF, 400 V, de poliéster ou outro material. Não pode ser eletrolítico.

ATUALIZAÇÃO: esse CI, o H11AA1, funciona como um "sensor de zero de onda completa". Ele tem dois diodos, ligados em contraparalelo, que conseguem captar a passagem da corrente por zero nos dois sentidos. Aqui no datasheet vc pode ver como funciona.

Acontece que esse CI não é muito fácil de se achar. Como alternativa, segue abaixo outro circuito que usa como opto o 4N25 (pode ser usado tb o 4N35). Esse CI é mais fácil de ser encontrado (datasheet). Por outro lado, ele é de meia-onda, ou seja, para que vc monitore as duas passagens por zero de um ciclo é necessário o uso de uma ponte retificadora antes do 4N. Abaixo, esquema do circuito com o 4N35, incluindo a ponte. A ponte tb é bem fácil de ser encontrada, e é bem barata.


Nesse circuito, a saída que informa a passagem por zero é a Zerocrossing signal output, que deve ser conectada ao pino 2 digital do Arduino. Já a entrada do sinal de disparo do dimmer, dimmer signal in, deve ser conectada ao pino 4, para ficar compatível com o código abaixo. O circuito funcionará também para 110 V.

Esse LED que tem na entrada de sinal do dimmer pode ser excluído (nesse caso, claro, vc deve conectar a entrada direto no positivo da entrada do MOC). Se vc usá-lo e a sua lâmpada e/ou ele ficarem piscando, tire fora.

Na figura:

T1 - TRIAC TIC206 ou BR136 (ou algum outro equivalente)
BR1 - ponte retificadora 400V, ou então vc pode montar uma ponte com 4 1N4004 ou equivalentes. Dê um Google e vc acha como fazer uma, caso não ache a ponte pronta. Aqui tem algo sobre.


Agora, o código:

#define loadR 4    

volatile int power = 100;  

void zero_crosss_int()  
{
  // Cálculo do ângulo de disparo: 60Hz-> 8.33ms (1/2 ciclo)
  // (8333us - 8.33us) / 256 = 32 (aprox)
  int powertime = (32*(256-power));      
  // Mantém o circuito desligado por powertime microssegundos 
  delayMicroseconds(powertime);   
  // Envia sinal ao TRIAC para que ele passe a conduzir 
  digitalWrite(loadR, HIGH);  
  // Espera alguns microssegundos para que o TRIAC perceba o pulso
  delayMicroseconds(8.33);      
  // Desliga o pulso
  digitalWrite(loadR, LOW);   
}

void setup()
{
  Serial.begin(9600);
  pinMode(loadR, OUTPUT);
  // Inicializa interrupção. O número zero indica a porta 2 do Arduino,
  // zero_crosss_int é a função que será chamada toda vez que o pino 2
  // "subir" (RISING) de valor de 0 para 1.  
  attachInterrupt(0, zero_crosss_int, RISING);  
}

void loop()
{
  // Seta a potência para diferentes níveis. Se o sistema estiver conectado a uma lâmpada,
  // esta vai variar de brilho.
  power=10;
  delay(10000);
  power=60;
  delay(10000);
  power=120;
  delay(10000);
  power=180;
  delay(10000);
  power=240;
  delay(10000);
}




Abaixo, vídeo do circuito funcionando, onde vcs podem ver a variação da onda no osciloscópio, com a correspondente variação no brilho da lâmpada.