Página 1 de 4
Controle de temperatura por PWM

Enviado:
18 Mar 2011 17:10
por itamar
caros amigos,
estou com um pequeno problema para controlar o aquecimento 3 resistencias de utilizando um PIC 16f877a, pois o tal micro só possui 2 módulos PWM.
já pensei em implementar por software utilizando uma interrupção de TIMER entretanto, e eu preciso que enquanto ele controle as resistências possa ler quase que em tempo real sensores ligados aos PORT's, ou seja, as resistências devem funcionar praticamente todo o tempo a menos que o PIC detecte algo errado.
Ps.: a última idéia desesperada que me ocorreu foi utilizar um 555 com uma espécie de enable ligado ao PIC para controlar a terceira resistência.
Alguma sugestão??

Enviado:
18 Mar 2011 18:40
por Djalma Toledo Rodrigues
Veja bem se vc fala em Resistência para aquecimento presupõem alta inércia térmica, a Capacidade Térmica.
E um µC qualquer executa milhões de Instruções por segundo.
DJ
Re: Controle de temperatura por PWM

Enviado:
18 Mar 2011 20:33
por andre_luis
itamar,
O aquecimento dessas 3 resistencias possue alguma relação de dependencia linear ?
( tipo, uma proporcionalidade entre as temperaturas ? )
Ou tem um funcionamento completamente independente ?
+++

Enviado:
18 Mar 2011 21:37
por itamar
não há depêndencia entre as resistências, o controle delas não precisa ser linear(não irá operar com rampa de temperatua logo, não precisa de um PID - controlador proporcional-integral-derivativo) as temperaturas devem ser independentes e permanecer fixas após a estabilização da corrente. O ciclo ativo do pwm é dado com base na conversão do canal AD onde tenho potênciometros e a frequência pode(ou deve) ser fixa.
o problema é como controlar as 3.
no aguardo.

Enviado:
18 Mar 2011 21:40
por itamar
Djalma Toledo Rodrigues escreveu:Veja bem se vc fala em Resistência para aquecimento presupõem alta inércia térmica, a Capacidade Térmica.
E um µC qualquer executa milhões de Instruções por segundo.
DJ
na verdade são filamentos com alto calor específico(que é a "inércia térmica") e baixa capacidade térmica pois, tem pequenas massas.

Enviado:
18 Mar 2011 22:11
por andre_luis
Me referi ao fato de que se houvesse uma dependencia linear entre as temperaturas, poderíamos cogitar a possibilidade de controlar as 3 resistencias atuando em 2 resistencias - estando a 3a acoplada ás 1a e 2a resistencias, mas foi uma viagem.
Se pudesse optar por outros uC, teria solução mais fácil ( CY8C4xxx da Cypress ), mas suponho que não seja o seu caso.
Voce não poderia comutar a conexão das resistencias na saída PWM por uma chave ?
Assim, uma das saídas PWM seria compartilhada por 2 resistencias.
+++

Enviado:
19 Mar 2011 08:07
por itamar
eu até poderia comutar o PWM porém perderia tempo pois a comutação deveria ocorrer de tempos em tempos e ocuparia o PIC logo, ele passaria mais tempo monitorando a comutação que os sensores.
Quanto ao caso de mudar de micro não dá... teria que mudar o compilador comprar outro gravador etc... mas valew.
aguardo sugestões

Enviado:
19 Mar 2011 09:18
por MOR_AL
Itamar.
Acho que, para equacionar seu problema, você deveria determinar qual é a "constante de tempo térmica" do seu sistema.
Por exemplo:
Sem nenhum controle, parta da temperatura mínima (Tamb ?) e aplique a potência máxima nas resistências, ou Ton = T, ou delta = 100%.
Meça, de alguma forma, a temperatura em seu ponto de monitoração. Você deverá chegar a uma curva bem próxima a uma exponencial do tipo
Temp(t) = Temp_Inicial + Temp_Máx * [1 - Exp(-t / Tal)]
Onde:
Temp(t) é a temperatura que você está medindo, ao longo do tempo t. Por exemplo. Verifique, antes, quanto tempo leva para que a temperatura vá do seu valor inicial até aprox. 90% da final. Suponha que durou T_quase_final = 10s. Divida este tempo por aprox. 10. Então faça delta_T_amostra = T_quase_final / 10 = 1s. Esse deve ser o seu intervalo entre leituras da temperatura.
Temp_Inicial é o valor da temperatura mínima do seu sistema. Talvez seja a ambiente, não sei.
Temp_Máx é aprox. igual a T_quase_final. Na realidade é um pouco maior. No experimento anterior, deixe (se possível ... sem queimar nada) que a temperatura suba até o máximo. aí você terá o valor de Temp_Máx. Caso não seja possível fazer isso, então você poderá ir até um valor, ainda seguro, da temperatura. Aí, para obter a sua constante de tempo, o processo menos complicado poderia ser gráfico.
t são os valores dos instantes em que você deverá fazer as medições da temperatura. No exemplo: t = 0s; t = 1s; t = 2s, ..., t = 10s.
Tal é a constante de tempo do seu sistema. O que você deseja saber. Agora já no seu sistema funcionando, normalmente, dependendo da precisão desejada, bastaria medir a temperatura entre cada Tal / 10 e Tal /100. Quanto maior o valor (Tal /10) mais tempo entre as medições, o que alivia o seu PIC, porém com menos precisão. Quanto menor o valor (Tal / 100) você tem menos tempo para medir e providenciar uma correção, porém vai ter mais precisão. Há um valor ótimo a ser escolhido aí. Vamos chamá-lo de Totimo.
Faça um gráfico, Temperatura em função do tempo, e, caso não tenha o valor da temperatuara máxima, tente extrapolar a curva até o valor máximo. Siga a curva e acrescente, suavemente, sem criar desvios inapropriados. Note que há meio de fazer isso com maior precisão, mas como o valor que você precisa (Tal), vai ser usado apenas para estimar o período de amostragem (delta_T_amostra), para saber o período de seu PWM, essa aproximação é perfeitamente válida.
Você pode tirar o valor de Tal tanto por meio da equação, como por meio gráfico. Talvez o meio gráfico seja o mais apropriado para você.
Você tem que medir o tempo que levou do início de suas medidas (t = 0s), até outro instante, que é o próprio Tal. Esse instante é tal (hehe) que:
1 - Reduza toda a curva do valor Temp_Inicial. A curva vai começar em t = 0 e temperatura igual a zero.
2 - Marque uma horizontal a 63% da temperatura máxima. Onde a horizontal cortar a curva, desça com uma vertical até o instante de tempo. Esse valor será o Tal!
Seu PWM pode ser todo por software, caso haja tempo, o que normalmente acontece em casos de temperatura.
O período T do seu PWM será o valor Totimo, escolhido acima. Faça um TIMER cíclico com esse período. Note que este timer será usado nos três PWMs.
Divida esse período por 100, ou outro valor mais apropriado para que T / esse valor dê um número inteiro de us.
No programa.
A forma mais correta de controlar a temperatura seria usando um controle PID.
Já a forma mais simples de controlar a temperatura seria:
"Se a temperatura está menor que a desejada, aumente o delta do PWM, caso contrário, diminua!"
Caso cada resistência deva controlar a temperatura em um ponto, ou local, você deverá fazer isso para as tres resistências. Ou seja monitorar a temperatura em tres pontos diferentes e calcular o valor do delta de cada um dos PWMs. O TIMER é o mesmo, pois o período T dos tres PWM serão os mesmos. Isso é válido caso cada ponto tenha o mesmo Tal, ou valores próximos.
Bons projetos.
MOR_AL

Enviado:
19 Mar 2011 09:23
por andre_luis
itamar,
Acho que não expliquei direito.
O PIC16F87x possui 3 módulos de TIMER, sendo que ao menos 1 deles possui expelhamento num pino de saída da I/O : T1OSO.
Com isso, voce poderia definir uma frequencia suficiente ( suponhamos ~10Hz ) para acionar uma chave analógica, que ora colocaria a saída do PWM na resistencia 1 ou 2. A resistencia 3 teria seu PWM exclusivo.
O detalhe é que para cada metade da contagem do TIMER, voce teria de alterar as configurações do PWM, em função da entrada analógica do sensor de temperatura ( suponho que voce esteja usando controle em malha fechada para isso ).
+++

Enviado:
19 Mar 2011 11:26
por itamar
MOR_AL escreveu:Itamar.
Acho que, para equacionar seu problema, você deveria determinar qual é a "constante de tempo térmica" do seu sistema.
.
.
.
A forma mais correta de controlar a temperatura seria usando um controle PID.
Já a forma mais simples de controlar a temperatura seria:
"Se a temperatura está menor que a desejada, aumente o delta do PWM, caso contrário, diminua!"
Caso cada resistência deva controlar a temperatura em um ponto, ou local, você deverá fazer isso para as tres resistências. Ou seja monitorar a temperatura em tres pontos diferentes e calcular o valor do delta de cada um dos PWMs. O TIMER é o mesmo, pois o período T dos tres PWM serão os mesmos. Isso é válido caso cada ponto tenha o mesmo Tal, ou valores próximos.
Bons projetos.
MOR_AL
valew mesmo pelas idéias MOR_AL mas, acho que propus um problema mais complicado do realmente é. a temperatura das resistências não é crítica(é um hot stamp) e ainda tem o fato das resistências terem características físicas(resistência ôhmica e potência) diferentes e acho que a implementação da sua idéa(que particularmente achei excelente) seria muito complicada pra mim, tendo em vista meus conhecimentos nesse momento.

Enviado:
19 Mar 2011 11:34
por itamar
andre_teprom escreveu:itamar,
Acho que não expliquei direito.
O PIC16F87x possui 3 módulos de TIMER, sendo que ao menos 1 deles possui expelhamento num pino de saída da I/O : T1OSO.
+++
Ótima ideia, mas como faço a comutação física?
seria necessário uma porta lógica(and ou nand para selecionar a resistência correta) com um pino ligado ao PWM e o outro ao pino de controle(com a saida ligada à um MOSFET, mas nesse caso haveria a necessidade de mais um CI externo ao PIC, e é o que quero evitar)?
e outra coisa... como seria o código fonte? teria que tratar como uma interrupção certo? e nesse caso como ficam as leituras dos sensores e a exibição das menssagens no LCD?
valew andre_teprom.

Enviado:
19 Mar 2011 12:19
por andre_luis
...Ótima ideia, mas como faço a comutação física?...
itamar,
Esse componente pode ser uma chave analógica comum, cuja especificação sugira por exemplo "relay replacement", como esta abaixo :
http://datasheets.maxim-ic.com/en/ds/MA ... AX4660.pdfEstas chaves são comumente usadas em circuitos digitais.

...como seria o código fonte? teria que tratar como uma interrupção certo? e nesse caso como ficam as leituras dos sensores e a exibição das menssagens no LCD?...
No caso, vai depender de como foi implementado.
De qualquer modo, como boa prática de programação, a estrutura do código deve ser implementada em camadas, e essa abstração permite que o restante do programa seja indiferente á essa função de chaveamento.
+++

Enviado:
19 Mar 2011 15:42
por _blackmore_
itamar
eu não sei o quão preciso teu sistema deve ser ... mas em muitos casos um simples on-off resolve o problema.
Vc utiliza 3 ad´s do pic para ler as temperaturas, e comparando com o valor setado ligar ou desligar a resistencia através de reles de estado solido por exemplo logicamente acionados por 3 saidas comuns do pic.
Se vc precisar mesmo de controlar por pwm, vc pode fazer um multplex com 1 saída pwm em períodos curtos .. a cada 100ms mudar o valor do pwm para a resistencia a ser controlada.
Será que vale o esforço?

Enviado:
19 Mar 2011 16:45
por DEJANO
Ola Itamar!!
Voce nao disse qual a potencia dessas resistencias> Se elas forem de alta potencia, esquece o que eu vou dizer. Mas pelo visto nos posts anteriores acho que é de baixa.
Sendo assim, uma saida até viavel, seria esquecer os PWM e controlar tudo por potenciometros digitais. Eu nao sei se voce conhece isso, mas eles funcionam assim. Voce aliementa os terminas com uma voltagem e ele solta no que seria o terminal central uma voltagem que se refere a essa alimentacao e um numero que voce envia do processador. Se esse numero varia de 0 a 255 a tensao vai de zero até o maximo. Voce gastaria o mesmo tempo que voce gastaria para corrigir o pwm.
Voce entao aplica essa tensao em um amplificador de corrente e aplica nos filamentos que voce quer controlar.
De uma olhada na net em modelos de potenciomentros digitais e boa sorte
Dejano

Enviado:
19 Mar 2011 17:54
por itamar
_blackmore_ escreveu:itamar
eu não sei o quão preciso teu sistema deve ser ... mas em muitos casos um simples on-off resolve o problema.
.
.
.
Será que vale o esforço?
como eu já disse a precisão não é o problema; é um sistema em malha aberta.
Porém o PIC não pode ficar dedicadosimplesmente a gerar o PWM para a resistência 3 ( como no caso de usar uma interrupção de TIMER para o on/off).
O PWM, deve ser ajustado(por um potenciometro ligado ao AD) a cada inicialização deve permanecer funcionando "independentemente" da intervenção do PIC que irá cuidar de outras tarefas mais complexas e gerenciar os sensores.
O PIC só irá modificar o PWM quando houver alteração nos potenciômetros.
Essa parte de deixar o PWM funcionando e PIC gerenciar os sensores e o LCD já esta feita, compilada e testada no hardware porém, necessito fazer um terceiro PWM para outra resistência sem modificar muita coisa.