Lectura de termopar diferente a Commercial Datalogger cuando se usa Arduino

2

Un termopar de tipo K está conectado a una placa de ruptura de termopar que emite 1.2V a 8.8V que cubre la totalidad de -260C - 1380 ° C de termopar tipo K. Esta salida se divide entonces por 2 usando un divisor potencial hecho de dos resistencias de 10k ohm 1 / 4W 5%, que se alimenta a un pin analógico A0 de un Arduino Mega. El termopar tipo K no está en contacto con nada, esencialmente mide la temperatura ambiente.

Problema:AlusarelesquemadeArduinoacontinuación,Arduinomidelatemperaturadeaproximadamente10.6gradoscentígrados.Sinembargo,alusarunregistradordedatosdetemperaturacomercialOmegaHH309A,lamediciónesde26.7gradoscentígrados.

Lamedicióndelasalidadelaplacaderupturadeltermoparconunmultímetroda2.19V.

¿Cuálpodríaserlarazóndeestadiferenciasignificativaenlamedición?

Sketch

voidsetup(){pinMode(tcPin,INPUT);Serial.begin(9600);}voidloop(){//TaketheaverageofmultiplereadingstempSum=0;for(inti=0;i<tempSamples;i++){tc1=analogRead(tcPin);voltage=tc1/1024.0*5000*2;//inmVaftercorrectingforV_dividertempSum+=(voltage-2.05)*0.005;delay(100);}temp=tempSum/tempSamples;Serial.print("tc1: ");
  Serial.println(tc1);

  Serial.print("voltage: ");
  Serial.println(voltage);

  Serial.print("temp: ");
  Serial.println(temp);

  delay(1000);
}

Salida del monitor serie

tc1: 218
voltage: 2128.91
temp: 10.62
-
tc1: 217
voltage: 2119.14
temp: 10.60
-
tc1: 218
voltage: 2128.91
temp: 10.61
-
tc1: 218
voltage: 2128.91
temp: 10.63
-

Arduino Sketch actualizado

void loop() {

  // Take the average of multiple readings
  tc1Sum = 0;
  for(int i = 0; i < tcSamples; i++) {
    tc1 = analogRead(tcPin);
    tc1Sum += tc1;
    delay(100);
  }
  tc1Average = tc1Sum / tcSamples;
  // Arduino ADC has 1024 steps
  // 10V max output from TC breakout board halved to 5000 mV before Arduino reads it
  voltage = tc1Average * 5.0 * 2.0 / 1024.0;  // in V after correcting for V_divider
  temp = (voltage - 2.05) * 0.005;

  Serial.print("tc1Average: ");
  Serial.println(tc1Average);

  Serial.print("voltage: ");
  Serial.println(voltage);

  Serial.print("temp: ");
  Serial.println(temp);
  Serial.println("-");

}

Output

-
tc1Average: 218.20
voltage: 2.13
temp: 0.00
-
tc1Average: 218.40
voltage: 2.13
temp: 0.00
-
tc1Average: 218.20
voltage: 2.13
temp: 0.00
-
tc1Average: 218.40
voltage: 2.13
temp: 0.00
-
    
pregunta Nyxynyx

4 respuestas

2

La fórmula que está utilizando en su programa no está de acuerdo con lo que se indica en las especificaciones de su placa de termopar. Hay un desplazamiento de 2.05 voltios y un factor de escala de 5 milivoltios / grados centígrados. Por lo tanto, para convertir el voltaje de salida de la placa a grados C, se debe hacer lo siguiente:

  deg C = (voltage - 2.05)/.005

Por lo tanto, si el voltaje de la placa es de 2.19 voltios, la temperatura se calcula a 28 grados C, cerca de su otro dispositivo de medición de temperatura. En tu programa estás multiplicando por .005 en lugar de dividir. Es por eso que en su impresión de muestra, obtiene una temperatura de 0.00 para 2.13 voltios en lugar del valor correcto de 16 grados C.

    
respondido por el Barry
2

Un cambio de diez grados induciría 50 milivoltios de cambio en la salida de la placa del termopar (o 25 mvolts después de su divisor). Este es un número relativamente pequeño. Sospecho que hay varias cosas que pueden causar errores de este tamaño

La primera apuesta sería la falta de coincidencia de resistencia. Si sus resistencias 210kohm no coinciden perfectamente, ¿cuál sería el voltaje de salida? Comience suponiendo que una resistencia es perfecta, y la otra es el peor de los casos. Si esas son resistencias de tolerancia del 5%, suponga que una está a 210Kohms, y la otra a 220kohms (para un error de aproximadamente el 5%), y determine cuál es el resultado real de su divisor. Los cálculos de miniaturas muestran que si estás midiendo a través de los 220Kohm, una entrada de 5 voltios te dará 2.558 voltios, ¡y ahí están tus 50 mvolts!

A continuación, es posible que tenga problemas de impedancia de entrada en su entrada A / D. Tiene una fuente de impedancia relativamente alta (> 100kOhms) que entra en un A / D barato con una impedancia de entrada modesta. Su A / D podría muy bien estar cargando su divisor de voltaje.

La medición de precisión en este caso requiere técnicas de precisión. Si construye un circuito de amplificador operacional (estos tienen una impedancia de salida baja) con un amplificador que tiene un voltaje de compensación de entrada muy bajo, déle una ganancia de 0.5 (sí, tendrá que invertir para obtener una ganancia inferior a 1.0) , y usa potes para recortar todas las resistencias y tal vez compensaciones, lo harás mejor.

Si aún desea hacer las cosas de esta manera, intente usar resistencias con una tolerancia del 1% (o mejor) de un valor mucho más bajo, tal vez 5kOhms.

Como última posibilidad, quizás haya un desplazamiento en algún lugar de la placa de termopares sobre el que tenga poco control. Los termopares pueden ser difíciles de usar correctamente, y tal vez su compensación de unión fría no sea lo que debería ser.

Además, aprenderá más acerca de su error si realmente lo traza en un rango temporal en lugar de en un solo punto. Recomiendo una transición lenta entre una mezcla de hielo y agua a 0 grados, al agua caliente del grifo a aproximadamente 40.

    
respondido por el Scott Seidman
2
voltage = tc1Average * 5.0 * 2.0 / 1024.0;  // in V after correcting for V_divider

Sus cálculos suponen que su tablero (y, por tanto, su Vref) es exactamente 5V. Es muy poco probable que este sea el caso, especialmente si está ejecutando desde un USB. Sugiero obtener un DMM y medir el voltaje exacto del riel de 5 V del Arduino y usarlo en sus cálculos.

En segundo lugar, debes dividir por 1023, no 1024.

Esto, junto con los otros problemas indicados en las otras respuestas, podría explicar la cantidad de desviación.

    
respondido por el Majenko
1

Existe la posibilidad de que la interfaz de acoplamiento termo también proporcione una salida para la compensación de la unión fría. Tengo la sospecha de que esto también debería alimentar una entrada analógica del arduino y que es posible que necesite agregar las dos lecturas juntas en el software.

En caso de que no se sepa, se necesita una compuerta fría para compensar el potencial eléctrico que se produce cuando los cables del par térmico están conectados a las pistas de cobre de la PCB. Esto se denomina unión fría y genera un error de voltaje que debe tenerse en cuenta.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas