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.
Así es como lo veo: -
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: -
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!
PlasmaHH
Tobias Madel