lape
  LAPE e-log  ELOG logo
Message ID: 111     Entry time: Thu Sep 5 11:42:04 2013
Author: Saullo 
Type: Routine 
Category: Hardware 
Subject: PT100, analise, funcionamento e tudo mais 

Após uma nova análise do PT100 concluímos que a resolução de leitura do Arduino era muito baixa, logo ao medir a resistencia acabavamos tendo uma temperatura errada quando a temperatura variava pouco.

Para solucionar o problema montamos um circuito de amplificador operacional nao-reversível para amplificar o sinal do PT100 e assim contornar o problema de resolucao, o amplificador usdo foi o OP37 cujo datasheet se encontra em anexo.

O circuito montado foi o seguinte (o codigo de simulacao no multisim esta em anexo, apenas verifique o icone que deveria ser o PT100 pois ele nao funciona como um pt100, apesar de estar fazendo "sabe-se la oque" pelo circuito):

esquema_montagem.png

O circuito Real:

2013-09-05_10.54.20.jpg

 

As contas necessarias para calculo de voltagem e etc, se encontram aqui:

2013-09-04_19.12.05.jpg

 

 

O código para leitura pelo software do Arduíno esta em anexo.

Abaixo podemos ver o resultado no serial monitor:

Na ordem, voltagem de entrada (fornecida arduino)(V), voltagem amplificada (V), voltagem real do pt100 (mV), resistencia calculada (Ohm) e temperatura calculada (*C)

teste.png

 

 

Attachment 1: pt100_arduino.ino  1 kB  | Hide | Hide all
// Programa para ler temperatura do PT100
// Autor: Saullo Cardoso E. R.
// E-mail: scardosoer@gmail.com
// (05/09/2013)

float volt = 5.030; // (V) voltagem maxima de referencia fornecida pelo arduino
float Raf = 100700.00; // (Ohm) resistencias usadas no amplificador
float Ra1 = 980.0; // (Ohm) idem
float R1 = 10070.00; // (Ohm) Resistencia em paralelo ao pt100
    
float calcula_temp(float Rpt){ // valido apenas para temperaturas entre (0 e 850)C
  
  float R0 = 100.00; // (Ohm) resistencia a zero graus
  float A = +3.9083E-03;
  float B = -5.775E-07;
  float C = -4.183E-12;
    
  //float Tp = (- A + pow((A*A-4*B),0.5))/(2*A);
  //float Tn = (- A - pow((A*A-4*B),0.5))/(2*A);
  float T = (Rpt - R0)/(A*R0); // como B e C sao pequenos, boa aproximacao ela ser linear...
  return (T);
  
}

void setup() {
 Serial.begin(9600);
}

void loop(){
  
     float leitura_porta1 = analogRead(A1);// voltagem de entrada
     float leitura_porta2 = analogRead(A2);// voltagem pt100 amplificado
     float leitura_porta3 = analogRead(A3);// voltagem realdo pt100

     float voltagem1 = leitura_porta1 * (volt / 1023);// voltagem entrada
     float voltagem2 = leitura_porta2 * (volt / 1023);//voltagem amplificada
     //float voltagem3r = leitura_porta3 * (volt / 1023);//voltagem real do pt100

     float voltagem3 = voltagem2/(1+Raf/Ra1);//voltagem real do pt100
     float Rpt = voltagem3*R1/(voltagem1 - voltagem3);

     float T_medido = calcula_temp(Rpt);

     Serial.print("Ve(V)= ");
     Serial.print(voltagem1);
     Serial.print("\t\t");
     Serial.print("Vamp(V)= ");
     Serial.print(voltagem2);
     Serial.print("\t\t");
     Serial.print("Vpt100(mV)= ");
     Serial.print(voltagem3*1000);
     Serial.print("\t\t"); 
     Serial.print("Rpt100(Ohm)= ");
     Serial.print(Rpt);
     //Serial.print("\t\t");     
     //Serial.print(corrente*1000);
     Serial.print("\t\t");     
     Serial.print("T(0C)= ");
     Serial.println(T_medido);
     
     delay(1000);
  
}
Attachment 5: amplifier_op37_datasheet.pdf  574 kB
Attachment 6: esquema_montagem.png  21 kB  Uploaded Tue Sep 10 19:45:17 2013  | Hide | Hide all
esquema_montagem.png
Attachment 7: esquema_simulacao.ms12  75 kB  Uploaded Tue Sep 10 19:57:00 2013
ELOG V2.9.2-2455