Ir ao conteúdo
  • Cadastre-se

Sensor de Temperatura


Rjmp

Posts recomendados

Feito:

Circuito:

sensortemperatura4canai.png

Código para 1 sensor. Se for utilizar os 4, apenas repita o 1º no codigo:

#include <16F877A.h>             //O PIC utilizado, obigatório!
#device adc=10 //Habilitar ADC de 10 bits, obrigatório. Pode
//ser utilizado de 8 bits também.
#FUSES NOWDT //Sem Watch dog, evitando reset
#FUSES XT //Crystal de oscilação igual a 4mhz
#FUSES PUT //Tempo de início do PIC
#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000) //Meu clock
#include <LCD.C> //Rotina de LCD modo 4 vias. Obrigatório!

void main() {

int16 q; //Vaeriável inteira de 16 bits: 0 a 65535
float p, temp; //Variável com vírgula, para poder fazer cáclulos.


setup_adc_ports(AN0); //Configura canal 0 analógico
setup_adc(ADC_CLOCK_INTERNAL); //De acordo com relógio interno.

lcd_init(); //Inicia LCD, obrigatório!

for (; //Para sempre.
{
/*===========================================================================
A resolução do conversor AD segue a seguinte equação:
1LSB=(Vref-)+{[(Vref+)-(Vref-)]/1024}
E nesse caso (Vref+)=Vdd e (Vref-)=Vss então a resolução é:
1LSB=5/1024=4,8mV
Por exemplo, se a leitura no canal analógico for de 512, a tensão
analógica será:
Vin=512*(5/1024)=512*4,8mV=2,4576V
===========================================================================*/

set_adc_channel(0); //Habilita canal 0
delay_us(20); //Espera um pouco, obrigatório!
q = read_adc(); //Lê canal 0
p = 5.0 * q / 1024.0; //Conversão para tensão.
temp=(p*100)/3.413; //Temperatura convertida de acordo com o
//amplificador utilizado.
printf(lcd_putc, "\fADC = %4ld", q); //Mostre a leitura ADC
printf(lcd_putc, "\nTemp=%01.1f C", temp);//Mostre a temperatura.

delay_ms(1000);
}
}

Dúvidas? Pergunte.

Falou

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

muito bom. mas que tal implementar também uma rotina de ajuste? algo como gravar na eeprom o "ganho" da conversão ad. assim ficaria mais preciso. ai invés de

temp=(p*100)/3.413;

faça

temp=(p*100)/variavel;

onde variavel seria lida da eeprom (e escrita na rotina de calibação) cujo valor é único pra cada sensor.

talvez também seria interessante (porém não obrigatório) implementar um offset

bom, a intenção foi dar um ganho no teu programa que já está bom.

sucessos!

Link para o comentário
Compartilhar em outros sites

O comentário postado pelo colega josedasilva0 é muito válido. Uma excelente ideia. No entanto, esse meu código já estava pronto e não reparei que utiliza esse pedaço que usa amplificador. Se a aplicação não exigir muita precisão, utilizo sem amplificador mesmo. Dessa forma, não é necessário dividir pelo ganho.

Respondendo duas perguntas:

P: Teria como fazer com pic 16F628A?

R: NÃO! O 16F628A não possui conversor AD.

P: A alimentaçao é 5v?

R: SIM! Na maioria das aplicações envolvendo uC usa-se VCC=5V.

P: como funicona um display de lcd?

R: Reformule sua pergunta pois está muito genérica.

Falou

Link para o comentário
Compartilhar em outros sites

P: Teria como fazer com pic 16F628A?

R: NÃO! O 16F628A não possui conversor AD.

discordo, da pra fazer e perfeitamente, usando um A/D de baixo custo como o ADC0804, datasheet aqui:

http://www.datasheetcatalog.com/datasheets_pdf/A/D/C/0/ADC0804.shtml

O que seria um conversor AD ?

O assunto é extenso, mas para microcontroladores, entenda esse como um módulo dotado de uma lógica especial capaz de receber em sua entrada um valor de tensão e entregar na sua saida um numero que é proporcional a tensão lida, a faixa de valores esta limitada a resolução do conversor.(0 a 255 se for 8bits)

Minha sugestão fica para o circuito, de dotar um amplificador operacional de modo a casar a impedancia de saida do LM35 com a entrada do A/D.

Abs.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
discordo, da pra fazer e perfeitamente, usando um A/D de baixo custo como o ADC0804, datasheet aqui:

http://www.datasheetcatalog.com/datasheets_pdf/A/D/C/0/ADC0804.shtml

discordo da discordância sem gerar discórdias. tal adc não é tão baixo custo e tende a ser obsoleto. poderia fazer com comparador e ampop LMxxx mas creio que não vale a pena. melhor usar MC com ad tipo PIC16F819

abç

Link para o comentário
Compartilhar em outros sites

melhor usar MC com ad tipo PIC16F819

Também, aliás o mais interessante seria um com A/D built-in, apenas sugeri a opção com A/D externo pois nosso amigo pergunto se dava para fazer com o 628 que pode ser o modelo que tenha em mãos, então por que não dar uma opção a mais não é mesmo?

quanto a preço, o ADC0804 esta cerca de 7,00 na farnell:

http://www.e-farnellnewark.com.br/ciconversorad20pwsoic,product,41K1429,1123.aspx

Abs.

Link para o comentário
Compartilhar em outros sites

Boa alternativa é usar sensores de temperatura com outras interfaces ( I2C,1-wire...).São mais caros, porém possuem a vantagem de não exigir módulos A/D dos MCU´s, podendo então usar MCU´s mais baratos. basta ter dois pinos ( I2C ) ou 1 pino ( 1 -wire ) disponivel. MCU´s sem interface I2C ou 1-wire imbutidas podem ser facilmente implementadas via software. (Há varias bibliotecas prontas na net) Algus CI´s medidores de temperatura bem precisos:

DS18B20 - interface 1-wire; alarme programável; ótima resolução programável

DS1621 - termometro e tesmostato; interface I2C;

MCP980x - interface 2-wire( I2C, compatível com SMbus);

datasheets -http://www.alldatasheet.com

abrass!

Link para o comentário
Compartilhar em outros sites

Sobre o AD externo, nao indiquei de cara pois prefiro fazer soluções simplistas e nesse caso acho mais vantagem comprar um PIC que tenha AD doq usar um externo. Ainda mais para uma apliacação simples de medir temperatura.

Já que estamos tirando dúvidas aqui, tenho uma em relação ao LM35.

O colega Felipe disse no página anterior que precisa usar um aplificador para casar a impedância com a do PIC.

O problema que nunca usei o LM35 aplificado. Sempre jogo direto no AD do PIC.

Quais as complicações podem occorrer disso? Sempre ouvi falar em casamento de imdepãncia, mas nao sei ao certo o que seja.

Falou

Link para o comentário
Compartilhar em outros sites

O colega Felipe disse no página anterior que precisa usar um aplificador para casar a impedância com a do PIC.

O problema que nunca usei o LM35 aplificado. Sempre jogo direto no AD do PIC.

Quais as complicações podem occorrer disso? Sempre ouvi falar em casamento de imdepãncia, mas nao sei ao certo o que seja.

Não seja por isso, explico pra você,é pra isso q estamos aqui,

de um modo geral, toda fonte de tensão (incluindo um sensor) possui uma resistencia externa que chamamos de impedancia de saida, logo se colocarmos qualquer carga na saida de um sensor (exemplo o pino do A/D do PIC) este sempre vai formar um divisor resistivo com essa resistencia interna, porém se esse valor for muito próximo ou menor do que a resistencia de saida da fonte, menor será a tensão capturada pelo A/D ja que uma parte fica na resistência externa.

Exemplo, se nosso LM35 nos der uma saida de 0,5V e ligarmos direto no PINO do PIC, provavelmente jamais teremos os 0,5V no pino do PIC, mas sim algo em torno de 0,35V, 0,4V e se a impedancia de entrada do A/D for menor, menor sera a tensão, logo perdemos linearidade e acabamos por mascarar a medida.

A propria microchip recomenda que a impedancia de saida da fonte de tensão analógica seja de 2,5KOhms.

O que fazer então? utilizar um dispositivo em que sua impedancia de entrada é elevadissima mantendo praticamente toda a tensão do sensor sobre seus terminais, e impedancia de saida nula, para que o nivel de tensão apareça praticamente todo no terminal de I/O analógico do MCU.

Ai entra o amplificador operacional, duas de suas caracteristicas são:

- Elevada impedancia de entrada (mas muito elevada mesmo);

- Impedancia de saida quase nula (da ordem de unidades de ohms);

com isso um método classico de casamento é um seguidor de tensão, entre seu sensor e a entrada analógica.

Nesse caso toda a tensão de saida do sensor vai para a entrada de um operacional, e como a impedancia dele é elevadissima (>10MOhms) tornamos a resistencia de saida do sensor praticamente desprezivel.

do outro lado, na saida do operacional temos uma impedancia de saida quase nula, ou seja muito inferior a 2,5K recomendados pela microchip, logo a resistencia de saida do operacional também é praticamente desprezivel, fazendo que tenhamos efetivamente praticamente toda a tensão de saida do sensor em seus terminais.

Bom essa explanação esta simplista, mas um bom livro de amp op poderá esclarecer mais, nos mais espero que ajude.

duvidas, perguntem ok!?

Abs.

Link para o comentário
Compartilhar em outros sites

Opa Felipe.

A explicação está excelente. Deu p entender sim.

Resumindo numa condição ideal:

Fonte com impedancia muito baixa e carga com impedancia muito alta para que a tensão seja transferida de forma eficiente. É isso?

Sempre achei que no casamento, as impedancias deviam ser iguais...

Falou

Link para o comentário
Compartilhar em outros sites

Caro colega Rjmp, sim o digital é 1 ou 0 e a combinação dos mesmos. O sistema de numeração que você está acostumado é o decimal que contém 10 algarismos.

No binário só tem o 1 e o 0, no entanto você consegue escrever outros numeros.

Exemplo:

0  --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101

E assim por diante. você pode somar, subtrair, multiplicar e dividir em binário também.

O esquema é o mesmo. Só muda a base, que nesse caso é o binário.

Falou

Link para o comentário
Compartilhar em outros sites

Hum... vou tentar te explicar. Mas minha didática não é das melhores...

Seguinte, antes de mais nada, você precisa saber o que é resolução. Pegue por exemplo o AD do PIC.

O PIC aceita de tensão analógica máxima de entrada um valor de 5V. Sabendo que o AD do PIC tem uma resolução de 10bits, ou seja, 2^10=1024 (2 elevado a 10). Dessa forma o PIC consegue "pegar" 1024 níveis analógicos e amazenar de forma digital. Ou seja, temos uma resolução de 5V/1024=4.8mV (milivolts).

Dessa forma, a cada incremento de 4.8mV na entrada do conversor analógico do PIC, teremos 1 valor binário até 1024.

Exemplo:

http://upload.wikimedia.org/wikipedia/en/5/52/ADC_voltage_resolution.svg

Veja no eixo dos X é a entrada analógica e no eixo dos Y é o resultado da conversao em binário.

Deu p entender?

Consegue perceber o que tem de ruim num conversor analógico-digital?

Se não, espere algum outro membro aparecer para explicar melhor.... :D

Falou

Link para o comentário
Compartilhar em outros sites

Sim esse negoso dos 1024 eu sakei, o que queria saber é ki o pic nao le apenas 1 bit e sim 10bits para formar os 1024 combinaçoes.

então nao quer dizer que ele ler um tem de pulso gerado pelo sensor ?

exemplo: o sensor manda 0v o pic grava 0000000000 (10 zeros) o sensor manda 5v o pic grava (1111111111 ( 10 um)) e se ele manda 2,5v o pic vai grava 512. Certo ?

Resumindo ele pega uma tensão e transforma em um trem de pulso para saber a temp?

Link para o comentário
Compartilhar em outros sites

Sempre achei que no casamento, as impedancias deviam ser iguais...

depende do caso, no caso de amplificadores de audio por exemplo, as impedancias devem sempre ser iguais de modo que haja máxima transferencia de potência a carga, porém no caso de medição apenas nos interessam nivel de tensão e não de corrente por isso a carga tem que ter uma impedancia beem mais elevada.

Abs.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...