Alguém já conseguiu disparar um triac com arduino? fazer um dimmer por exemplo!

Exibições: 15500

Responder esta

Respostas a este tópico

Olá Tiago,

Uma opção para o seu caso talvez seria usar um CI expansor de porta como por exemplo o PCF8574, aqui no LDG tem um bom tutorial sobre ele link aqui. Um registrador de deslocamento também pode servir para aumentar pinos de saída.  

Outra alternativa, muito comum quando se trata de PIC mas não no mundo do arduino seria compartilhar um mesmo pino hora como entrada, hora como saída.

Funciona da seguinte forma:

O pino trabalha 90% a 99% do tempo como uma saída e ciclicamente muda para entrada quando então é feita a varredura do estado do botão.

Um pino é setado como saída e normalmente é ligado a um com LED e um resistor para indicação de estado. O teclado é formado por um botão tactil e mais dois resistores ligados ao mesmo pino do LED.

Dentro de uma rotina de interrupção chamada por um dos Timers do controlador o estado da saída (on ou off) é salvo, em seguida este pino é setado como entrada, o estado do pino é lido e salvo em uma variável. Em seguida o pino é novamente setado como saída e então o estado inicial é restaurado (on ou off). 

Este recurso serve bem para conjugar um  LED de indicação com uma chave ou botão em um mesmo pino, mas pode não ser apropriado para ligar relés, devido ao chaveamento da saída. O circuito básico é mostrado na figura abaixo, foi retirado do livro Conectando o PIC. 

Já usei este recurso várias vezes com PIC, mas no arduino ainda não.

Abraço.

Obrigado desde já pela ajuda!

Abraços

Tiago.

Você não precisa usar exatamente portas PWM para acionar os TRIACs. Pode usar portas digitais comuns para isso.

Veja aí as dicas do grande mestre e guru Mauro que lá no Blog dele está tudo "esmiuçadinho...esmiuçadinho..."...

E boa sorte.

Obrigado pela Ajuda Euclides, vou ler as matérias aqui indicadas!

Abraços

tiago, o mauro assis esta correto, voce precisa apenas de uma interrupção, desde que todos os dimmer estejam na mesma fase aonde o captador de zerocross esteja.

obs: para acionar o triac voce nao utiliza PWM, use uma saida high normalmente como voce faz para acionar um rele, porem use uma unica vez em uma faixa de 500us depois leve a nivel baixo, ja era, vai conduzir ate chegar no zerocross novamente, apos o zero a corrente na carga nao existe e voce precisa dar outro pulso para conduzir denovo neste semiciclo

Olá Tiago

O fotoacoplador que vc esta usando é suficiente para vc conseguir o q deseja.

Porém sem um meio de atrasar o sinal de disparo do triac em relação a passagem pelo zero da senóide (zero Crossing) não é possível a dimerização.

Isto é feito sincronizando o processamento com a rede elétrica (60HZ) e controlando via firmware o tempo deste atraso.

Link já postado pelos colegas com código fonte e esquema.

http://efloyola.wordpress.com/2011/10/02/controle-triac-com-arduino...

Acredito que no blog do colega Mauro Assis tb haja informações precisas.

Abços

Tiago,

A diferença entre o meu algoritmo e o do Edu é que o dele usar interrupção de Timer, no controle, e o Arduino só tem duas. No meu caso eu uso só a de zero em um pino então dá para controlar mais de um dimmer. 

[],

Hummm, com apenas um pedido de interrupção então eu conseguiria utilizar alguns Dimmers isso?

Galera agradeço mesmo desde já a ajuda!

Sou programador e estou me aventurando com o Arduíno fazendo uns controles aqui em casa :D

Sim, vc conseguiria controlar mais de um dimmer. Como vc é programador, vou dar mais detalhes. A "diversão" vai ser dentro da rotina que é disparada a cada passagem por zero:

void zero_crosss_int() 
{
// Cálculo do ângulo de disparo: 60Hz-> 8.33ms (1/2 ciclo)
// (8333us - 8.33us) / 256 = 32 (aprox).
// Ou seja, cada 1 unidade em power corresponde a 32 microssegundos
// na onda de meio ciclo.
  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);  
}
Observe que a instrução chave é o delayMicroseconds(powerTime). Vc teria que ter mais de um powerTime (um prá cada dimmer), e ir disparando um a cada devido tempo. No caso de 10 dimmers vai ser um exercício interessante. Como o TRIAC desliga automaticamente na próxima passagem por zero, vc poderia desligar todos os pinos juntos, ao final do loop, porque a ideia é fazê-los iguais a zero na próxima passagem.
Ou seja... diversão garantida!
Vá postando as suas pesquisas aqui e a gente vai cimentando.

Areiando e apedrejando tambem...rsrsrsrsss...

Quanto tempo será que demora uns 10 blocos de instruções assim para serem executados hein???

Tendo alguns osciloscópios, acredito que seja possível ver o "andamento" diferenciado da senoide em cada canal.

Euclides, eu acho que a demora não é significativa, ainda mais que o nosso amigo Tiago é do ramo. O semi-ciclo dura 8.33ms, e o clock do Arduino é 16MHz, ou seja, temos 133 ciclos de clock por passagem da rotina.

Mas a sua preocupação vale: Thiago, o que quer que vc faça dentro dessa rotina tem que caber em uns 100 ciclos de clock, ou seja, é prá ser rapidim...

Um outro jeito é "não ficar esperando" o processamento de um bloco enquanto ainda não se chega ao bloco seguinte. Dependendo da utilidade de controle sobre os 10 TRIACs é necessário criar uma etapa de controle e ordenação de disparo, para que seja colocado na sequência com que cada um vai ser disparado independente da ordem física (dispara primeiro o que precisa ser disparado e não em uma sequência determinada de TRIACs), assim dependendo de outros fatores a posição dos disparos (e dos intervalos entre eles) pode ser mudada. Um exemplo seria um conversor em que se entra 2 fases que tem que se tornar 3, dependendo da "posição" de cada "onda" os disparos podem ocorrer em sequências diferentes, de forma a manter a defasagem entre as fases.

Isso é interessante...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço