Alguém já conseguiu disparar um triac com arduino? fazer um dimmer por exemplo!
Tags:
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);
}
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...
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por