Controle de temperatura por PWM

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Controle de temperatura por PWM

Mensagempor itamar » 18 Mar 2011 17:10

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??
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor Djalma Toledo Rodrigues » 18 Mar 2011 18:40

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
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Re: Controle de temperatura por PWM

Mensagempor andre_luis » 18 Mar 2011 20:33

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 ?

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor itamar » 18 Mar 2011 21:37

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.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor itamar » 18 Mar 2011 21:40

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.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor andre_luis » 18 Mar 2011 22:11

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.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor itamar » 19 Mar 2011 08:07

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
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor MOR_AL » 19 Mar 2011 09:18

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
Editado pela última vez por MOR_AL em 19 Mar 2011 09:24, em um total de 1 vez.
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor andre_luis » 19 Mar 2011 09:23

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 ).


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor itamar » 19 Mar 2011 11:26

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.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor itamar » 19 Mar 2011 11:34

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.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Mensagempor andre_luis » 19 Mar 2011 12:19

...Ó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.pdf
Estas chaves são comumente usadas em circuitos digitais.
Imagem

...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.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor _blackmore_ » 19 Mar 2011 15:42

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?
Ouça mais classic rock
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor DEJANO » 19 Mar 2011 16:45

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
DEJANO
Bit
 
Mensagens: 38
Registrado em: 05 Jun 2007 22:42

Mensagempor itamar » 19 Mar 2011 17:54

_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.
Editado pela última vez por itamar em 19 Mar 2011 18:08, em um total de 1 vez.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x