Páginas

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)