Boa tarde a todos!!!! Montei recentemente um circuito dimmer para efetuar o controle PID de temperatura usando um sensor ds18b20 e uma resistência de 25w. Tive dificuldade com relação a fazer funcionar a biblioteca PID, mas com ajuda do Sr. José Gustavo consegui instalar. Agora estou tendo dificuldade em fazer de fato funcionar este projetinho. Estou tentando utilizar o codigo do colega Mauro do link AutomatoBR. Li sobre o codigo e biblioteca mas de fato não estou conseguindo entender, principalmente a parte onde pega o valor medido para aplicar os pulso e chegar até o setpoint.
Montei todo o circuito mas até agora não funcionou. O sensor ds18b20 está indicando a temperatura, mas não ha pulsos saindo da porta para chegar a temperatura setada (Não sei se o valor de set se refere a temperatura). Gostaria de ver se alguém daria uma "luz", uma ajudinha!! Ja faz tres dias que estou martelando e não saio do lugar.
Tags:
Bom dia JW
aparentemente é uma questão de tempo do disparo.
Vou tentar elaborar aqui um sketch para testarmos o tempo do disparo
relativo ao zerocross.
RV
Achei uma resposta sua sobre um circuito dimmer que usa. Estou tentando fazer testes para testar o Circuito, http://labdegaragem.com/forum/topics/acionar-triac-no-inicio-do-sem...
Clap, clap, clap!
JW,
inseri algumas linhas no sketch para "monitorar" o disparo após o zero cross.
Defini a velocidade do serial monitor para 115200.
Segue o sketch e os resultados que obtive aqui, para que vc compare com os seu resultados.
RV
Desculpe Rui minha ignorância, mas não estou conseguindo compreender. Mesmo minha saida de temperatura já tenha alcançado e até mesmo passado pelo valor de set point a saída para o triac (pin 4 ) continua disparada. Se alcançou a temperatura não deveria disparar. Não estou conseguindo intender o por que.
segue em anexo os valores
Rui, em anexo a listagem do serial. meu set point estava para 40 C (4000), e mesmo zerando output, continuou aquecendo e diag continuou a subir e estabilizar nesses 8720
Olá Rui, uma duvida: O resistor R6 é 56K? ou seria 5,6K
56K mesmo.
RV
Boa noite JW,
aquele sketch que postei anteriormente funciona bem mas é bem complexo e difícil de ser diagnosticado.
Com base nisto, resolvi escrever outro, usando o mesmo conceito de timerOne, mas um enfoque um pouco diferente.
Ele tem a vantagem de poder usar um valor manualmente de 5 a 100 para testar o disparo do TRIAC.
Se colocar 5 na linha 51, ele acende total, se colocar 70 acende pouco,
se colocar 100, fica apagada.
Desta forma você testa o zerocross e o disparo.
Se comentar esta linha, funciona no automático.
O circuito é exatamente igual ao do sketch anterior.
Segue anexo.
RV
Teoria do funcionamento do Sketch TRIAC_PID.
Vamos dividir em partes básicas
1. Zero Cross
2. Dimmer (Disparo)
3. Timer1
4. Leitura da temperatura na carga
5. PID
1. Zero Cross
A nossa rede elétrica (127/220V), é corrente alternada de 60 Hz.
É também no formato senoidal.
Cada ciclo completo dura 16.666 micros segundos (1seg/60) , e passa duas vezes pelo valor zero volts.
Então cada semiciclo dura 8.333 micro segundos.
Entre uma e o outra passada pelo valor 0 volts passam-se 8333 micros segundos.
Zero cross é o circuito que detecta que a senoide passou pelo valor de zero volt,
e é usado para definir o nosso momento zero de disparo do Triac.
Não vou me extender mais nesta teoria. Tem bastante material sobre isto na Net.
Cada vez que o valor passa pelo zero, usando o circuito do 4N25, um pulso é aplicado no port 2 (interrupt 0),
e gera um interrupt.
Uso este interrupt para zerar a variável que conta quantas vezes o timer1 chegou ao valor zero.
Ou seja incio a contagem do tempo após o zero cross.
2. Disparo.
O Triac é um dispositivo que permite a passagem da corrente elétrica de modo controlado.
Ao aplicar uma corrente no "gate", ele inicia a passagem de corrente entre os anodos A1 e A2.
Qdo a voltagem entre estes anodos fica zero, ele para de conduzir, e só inicia novamente a
condução de corrente, com uma nova corrente no "gate".
Ele conduz em ambos sentidos, de A1 para A2 ou de A2 para A1, portanto conduz no ciclo positivo e
negativo da senoide.
Qdo a voltagem da rede passa pelo zero e poucos micro segundos depois enviamos um pulso
pelo MOC2033 ao triac, ele conduz a corrente, e assim fica até ocorrer novamente o valor zero da
voltagem da rede.
Se formos controlando estes microssegundos (aumentando), o disparo será cada vez mais próximo do
novo zero, e menor tempo o triac ficará disparado, fornecendo menos tempo de corrente para a carga,
e consequentemente menor "Potencia".
3. Timer1 https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf Pag 114.
O Atmega (Arduino UNO, Mega, mini, etc) tem alguns timers.
Um deles, o Timer1 (Timer/counter1 pode incrementar de 0 até 65535, (0 até 0xFFFF),
ou decrementar de 65535 até 0.
Quando o valor no timer1 chega a 0 e é decrementado por um, ele vai para 65535
ou chega em 65535 e recebe um incremento indo para zero, ele gera um interrupt.
Ele pode receber pulsos para contagem selecionados de diversos modos. (Prescaler)
O modo que eu uso é o decremento de 1 a cada micro segundo.
Neste sketch, eu carrego o timer1 com o valor 75 (75 micros segundos).
Quando ele chega em zero, e recebe um novo decremento, ele gera um interrupt, e na rotina
chamada por este interrupt, eu incremento uma variável.
Esta variável será confrontada com um valor gerado pelo algorítimo do PID.
Quando os valores ficam iguais, é o momento de disparar o triac.
Como basta um pequeno pulso de disparo, 10 micro segundos depois do disparo, desligo o disparo.
4. Leitura da temperatura na carga
Neste sketch a leitura da temperatura da carga 'e feita usando-se um DS18B20.
Este dispositivo é muito preciso, mas antes de ler a temperatura nele, faz-se necessário enviar para ele um
comando de conversão da temperatura interna dele para valores e posterior envio pelo One wire bus.
Este processo tem um tempo muito grande.
Ele leva cerca de 95 milissegundos se for para resolução de 9 bits,
(Intervalos de 0,5 °C), e de 750 milissegundos se a resolução for de 12 bits (Intervalos de 0,0625 °C).
Optei pela resolução de 9 bits.
Mesmo assim ocorrerão 11 semiciclos da rede entre o inicio e o fim da medida de temperatura.
Como usei interrupt, tanto para detectar o zero como para disparar o triac,
o tempo de conversão e leitura da temperatura é interrompido para responder à estas atividades,
retornado ao fim das mesmas.
Desta forma, se fosse esperar cada medida para disparar o triac, não teria um bom resultado.
assim, disparando o triac a cada semiciclo com o valor de uma leitura, não temos o efeito
de cintilação na carga.
5. PID
A biblioteca do PID tem vários métodos e parâmetros para serem definidos.
Não vou entrar em detalhes nos Kp, Ki, e Kd. Sobre eles tem bastante tutorial na net.
Vamos nos basear somente em alguns parâmetros dos métodos
"PID pid(&Input, &Output, &SetPoint, kp, ki, kd, DIRECT);"
e "pid.SetOutputLimits(0, 1000);"
Neste primeiro método, forneço 2 parâmetros e recebo um calculado, (alem de Kp,Kd e Ki),
forneço "Input", (temperatura lida no DS18B20), SetPoint (3100), e recebo calculado o valor "Output".
Se o valor lido estiver abaixo de 3100, o PID deve disparar o TRIAC, para que aqueça a carga.
Ao atingir 3100, ou se estiver por qq razão acima deste valor, o TRIAC não é disparado, e a carga
deverá diminuir a temperatura.
Mas o PID faz o controle deste disparo para atenuar ao máximo variações
Uso valores decimais (float), eu multiplico a leitura de temperatura por 100,
assim, 29,35°C na realidade uso 2935.
Como o disparo é inverso e varia de 5 a 99, uso a função map para adequar estes valores.
e uso o resultado para controlar o disparo do triac.
Posso forçar disparar manualmente, cancelando o calculo do PID, para isto basta colocar valores de
5 a 99 na linha 51.
Para usar o automático, (Calculo com o PID), esta linha deverá estar comentada (//).
RV
Olá Rui, explicação perfeita!!!! Tentei fazer o teste com meu circuito mas não tive resposta. Vou montar um novo circuito. Tenho somente os h11a1 e moc 3021. Será que terei problema? Acha melhor usar o 4n25? com diodos?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por