Uso de un ADC de termopar tipo K para medir una sonda tipo E

Actualmente estoy tratando de medir la temperatura de un soldador estándar. Después de darme cuenta de que el sensor de temperatura en el soldador es un termopar, pedí una placa ADC de termopar tipo K, más específicamente una placa de conexión basada en MAX6675. Si bien puedo obtener lecturas de temperatura del chip, son demasiado altas en comparación con la temperatura real. Por ejemplo: obtengo una lectura de unos 550 °C, cuando en realidad la plancha tiene una temperatura ligeramente inferior a los 300 °C.

Mirando este cuadro en Wikipedia, creo que mi hierro podría ser un termopar tipo E. https://de.wikipedia.org/wiki/Thermoelement#/media/File:Thermocouple_voltages.PNG

Ahora, para la pregunta final: ¿es posible/factible convertir/calcular la temperatura correcta (de una sonda tipo E) a partir de la lectura del ADC del termopar tipo K? ¿Alguien ha hecho esto en el pasado? Realmente no necesito una alta precisión absoluta, de todos modos habrá +-10 °C debido a la regulación PID.

Mi última solución sería pedir/probar un chip MAX31855E de maxim y luego cambiar el chip en el tablero. Realmente no quiero hacer eso, porque el MAX31855E no es tan fácil ni barato de obtener.

Información adicional: estoy usando un microcontrolador ATmega328, el firmware está escrito en C, por lo que cualquier código de ejemplo también sería muy apreciado.

el MAX6675 no es un amplificador, es un ADC
@PlasmaHH sí, lo edité

Respuestas (2)

Así es como lo veo: -

  • Tiene un TC tipo K conectado a una interfaz de medición adecuada
  • Lo anterior te dice 550 grados C
  • Su TC en su soldador le informa sobre 300 ° C cuando está conectado a su "interfaz de medición adecuada"
  • Ha llegado a la conclusión de que el TC de su plancha es del tipo E.

ingrese la descripción de la imagen aquí

Mirando el gráfico anterior, esperaría que un E TC produzca un voltaje mayor que un K TC para la misma temperatura, por lo que debe preguntarse si sus creencias son fundadas.


Sección EDITAR

Ahora parece que el OP está utilizando el TC interno conectado a un circuito de interfaz de tipo K y esto tiende a justificar que el dispositivo interno probable es un TC de tipo E. Los gráficos son bastante lineales y ambos caen entre 0 uV y 0 grados C, por lo que una aproximación de primer orden es tratar la conversión como lineal. A 1000 grados C, un tipo K produce 41 mV y un tipo E produce alrededor de 76 mV.

Si desea un polinomio más preciso, pruebe ESTA hoja de datos: -

Yo pensaría que mis creencias están fundadas. Obtengo una medida demasiado alta. Lo cual respondería exactamente a la gráfica. (¿o estoy realmente equivocado?)
Entonces, uno de mis puntos (interpretando lo que parece haber dicho que ha hecho en su pregunta) debe ser incorrecto. Trate de indicar específicamente lo que ha hecho y medido y lo que ha utilizado para esa medición. Por ejemplo, usted dice "Estoy obteniendo una medición que es demasiado alta": ¿es esto un voltaje o es una temperatura basada en ese voltaje o es algo más?
El primer punto es un poco incorrecto.
Entonces, ¿qué estás diciendo?
El chip que estoy usando no es solo un ADC sino también un convertidor integrado con compensación y todo. Está hecho específicamente para una sonda tipo K y da directamente lecturas de °C. Mi sonda no parece ser una sonda tipo K, sino una sonda tipo E. Así que ahora estoy tratando de convertir entre esas lecturas
Bien, ya veo: está colocando el termopar del soldador en un convertidor de tipo K. Si este es el caso, entonces sus creencias están fundadas y estaría de acuerdo con usted.
Sí, eso es exactamente lo que estoy haciendo :)

Ahora he encontrado una solución al problema.

double TypeEVoltageToTemperature(double voltage)
{
    return
        1.7057035 * pow(10, -2) * voltage +
        -2.3301759 * pow(10,-7) * pow(voltage, 2) +
        6.5435585 * pow(10,-12) * pow(voltage, 3) +
        -7.3562749 * pow(10,-17) * pow(voltage, 4) +
        -1.7896001 * pow(10,-21) * pow(voltage, 5) +
        8.4036165 * pow(10,-26) * pow(voltage, 6) +
        -1.3735879 * pow(10,-30) * pow(voltage, 7) +
        1.0629823 * pow(10,-35) * pow(voltage, 8);
}
double TypeKTemperatureToVoltage(double temperature)
{
    double precal = (1.185976 * pow(10,2)) * pow(2.7182818284590452 ,(-1.183432 * pow(10,-4)) * pow((temperature - 126.9686),2));

    return  (-1.7600413686 * pow(10,1))     * pow(temperature,0.0) + precal +
            ( 3.8921204975 * pow(10,1))     * pow(temperature,1.0) + precal +
            (1.8558770032 * pow(10,-2.0))   * pow(temperature,2.0) + precal +
            (-9.9457592874 * pow(10,-5.0))  * pow(temperature,3.0) + precal +
            (3.1840945719 * pow(10,-7.0))   * pow(temperature,4.0) + precal +
            (-5.6072844889 * pow(10,-10.0)) * pow(temperature,5.0) + precal +
            ( 5.6075059059 * pow(10,-13.0)) * pow(temperature,6.0) + precal +
            (-3.2020720003 * pow(10,-16.0)) * pow(temperature,7.0) + precal +
            ( 9.7151147152 * pow(10,-20.0)) * pow(temperature,8.0) + precal +
            (-1.2104721275 * pow(10,-23.0)) * pow(temperature,9.0) + precal;
}

Esta solución requiere alrededor de 80 000 ciclos en un ATmega328. (5 milisegundos por ambas llamadas).

¡Gracias a @Toble_Miner y @Andy alias por su ayuda para solucionar este problema!

Esa es una forma inusual de codificar un polinomio; esto podría ser más rápido: resultado = A0 + temperatura* (A1 + temperatura*(A2+...
@ Whit3rd es correcto: no usar la regla de Horner es motivo para una buena reprimenda. Vale la pena mencionar que su compensación de unión fría tendrá un error de aproximadamente 1 grado por cada cambio de 3 grados con respecto a la temperatura de referencia, por lo que probablemente sea un error bastante grande a medida que las uniones frías se calientan.
Solo quiero mencionar que la forma de Horner no solo es más eficiente desde el punto de vista computacional (en cuyo caso se puede decir: es lo suficientemente rápida, así que a quién le importa) sino también más precisa en virtud de que no involucra altas potencias de la variable. Por ejemplo, la temperatura máxima para un termopar tipo K es de aproximadamente 1600 °C, cuya potencia 9 es 6,9 × 10 ^ 28. Luego multiplicas esto por algo cercano a 10^-23. No sé qué tan precisa es la biblioteca de coma flotante en el ATmega328, pero no contaría con ella para lidiar con esta diferencia de 52 órdenes de magnitud con gracia.