Páginas

Mostrando postagens com marcador termômetro. Mostrar todas as postagens
Mostrando postagens com marcador termômetro. Mostrar todas as postagens

domingo, 25 de março de 2012

Termômetro tipo Bargraph com PIC

Este é mais um pequeno projeto utilizando PIC. Trata-se de um termômetro, na verdade um indicador de temperatura, por faixas, através de um arranjo de LEDs, tipo Bargraph. Este circuito pode ser útil para se medir variações de temperatura, e evitar sobreaquecimento ou congelamento de equipamentos, motores, ambientes, etc. Na verdade, este projeto é bem flexível, os leitores podem e devem altera-lo conforme as suas necessidades. A base do circuito é o PIC 16F268A, mas pode ser implementado em qualquer microcontrolador da família 16F que possua os módulos de tensão de referência e comparador analógico.


A sonda utilizada é do tipo NTC, mas qualquer outro tipo de transdutor de temperatura (PTC, PT100, LM35X, termopar, ...)  pode ser utilizado com pequenas alterações no código fonte.

Funcionamento: Basicamente o programa compara a tensão nos terminais do sensor (Vin-) com uma tensão gerada pelo módulo de referencia de tensão (Vref) do PIC, que pode gerar até 32 tensões distintas. O comparador analógico produz a saída: setando ou limpando o bit C2OUT, sendo assim, C2OUT=1 quando Vref >Vin- , ou C2OUT=0 quando Vref < Vin-.

Esquema módulo de comparação analógica do PIC utilizando também a tensão de referência interna.

Funcionamento do comparador. As áreas pretas indicam a faixa  de incerteza na saída.

COMPARAÇÃO: Considerando a lógica do NTC,  carregamos o maior valor possível no módulo de tensão de referência. Assim, se Vin > Vref(x) significa que a temperatura da sonda está acima da faixa, neste caso o processador vai acender o led da primeira faixa e depois mudar a Vref(x) para um valor mais baixo Vref(x-1). Depois compara novamente a entrada com a referência, sempre que Vin > Vref(x) um led acende e Vref(x) diminui para um valor menor até chegar a ultima faixa, quando todos os leds terão acendido. Se numa determinada faixa Vin < Vref(x) o processador vai apagar todos os leds correspondentes as faixas inferiores ao Vref(x) atual e manter os leds correspondentes as faixas superiores acessos.

Observe a tabela abaixo, ela evidencia o comportamento não linear do NTC, a curva exponencial porém, pode ser linearizada colocando-se um resistor de 10k em série, fazendo um divisor de tensão. a terceira coluna mostra isso. (plote os gráficos temperatura vs. resistência do NTC e temperatura vs. tensão no divisor).
Resposta do NTC e tensão de saída do divisor utilizando um resistor de 10k


Deve-se fazer ajustes no programa fonte para que ele funcione de acordo com a sua aplicação e faixa de monitoramento pretendida. Como exemplo de monitoramento da temperatura do motor do carro, pode-se selecionar alguns valores na faixa de 40 à 110°C.

Pode-se eventualmente incluir um sinal de saída, programar um pino de I/O do PIC para mudar de estado (alto/baixo) quando determinada faixa for atingida. Esse sinal pode ser utilizado para acionar (através de um relê ou SSR) um ventilador, resistência ou compressor para aumentar/diminuir a temperatura do equipamento que estamos monitorando ou simplesmente desligar a carga. Uma típica aplicação seria colocar a sonda junto ao bloco do motor do carro e quando o mesmo atingir determinada temperatura, o programa aciona a ventoinha do radiador automaticamente, forçando a redução da temperatura. Isso é muito útil em alguns veículos que não tem sensor de temperatura (apenas aquela luz que acende depois que o carro já ferveu!).

O bargraph utilizado foi do tipo catôdo comum, isto é: acende quando colocamos nível alto no pino de I/O e apaga quando colocamos nível baixo. Essa lógica pode ser facilmente invertida no código fonte caso o display disponível seja do tipo anôdo comum, ou invertendo os componentes caso seja utilizados LEDs discretos.  O número de Leds no arranjo é limitado apenas pela quantidade de pinos do microcontrolador, caso seja necessário, pode-se utilizar um processador com mais pinos ou alterar a programação para acionar decodificadores de 3 para 8.

Encorajo fortemente a inclusão de filtros, para reduzir os ruídos e evitar variações espúrias, principalmente quando se trabalha em algum nível próximo da faixa de incerteza do comparador.


Por enquanto vou ficar devendo o leiaute da placa de circuito. Ela não é difícil de rotear, uma vez que são poucos os componentes utilizados. Os conectores J1 e J2 mostrados no esquema, servem justamente para a conexão da fonte e do sensor, que não ficarão na placa e precisam aparecer no ARES quando geramos a leiaute da placa.


Ficha técnica:
Processador: PIC(R) 16F628A - microchip(TM)
Esquemático, simulação: Proteus 7.8 (ISIS + ARES)
IDE programação, gravação: MPLAB 8 (http://www.microchip.com/)
compilador C: CCS
Programador: ICD-2 - MultiPROG
As figuras 02 e 03 foram retiradas do datasheet do PIC

Arquivos:
Código fonte, esquemas, hex, etc..
-Termobar (escrito em assembly)
-Termobar_C (escrito em C)