Posts
Maxim 31855 chips are cheap and simple to use K-type thermocouple amplifiers. They’re equipped with a digital SPI interface with libraries available for both Raspberry Pi and Arduino boards. MAX31855 breakout boards are available from Adafruit.
The datasheet specifies the accuracy of ±2°C within the temperature range from -200°C to +700°C. However, close to the lower bound of this range, the accuracy of reported temperature is affected by linearized volt-to-degree conversion. Maxim 31855 uses a conversion factor of 0.041276 mV/K to calculate the difference between temperatures of the reference junction and the thermocouple. This known conversion factor can be used to recalculate the voltage and recalibrate the temperature via NIST formulations to achieve a better accuracy when measuring thermocouples used at liquid nitrogen temperatures.
This adafruit forum thread contains all the necessary information and code for Arduino-compatible boards. A simple python implementation of the recalibration routine is as follows:
import numpy as np
def nist_tc(tc, cj): # tc - thermocouple, cj - cold junction
dV = (tc - cj) * 0.041276
if -5.891 < dV <= 0:
d = [0.0000000E+00, 2.5173462E+01, -1.1662878E+00, -1.0833638E+00,
-8.9773540E-01, -3.7342377E-01, -8.6632643E-02, -1.0450598E-02,
-5.1920577E-04, 0.0000000E+00]
elif 0 < dV <= 20.644:
d = [0.000000E+00, 2.508355E+01, 7.860106E-02, -2.503131E-01,
8.315270E-02, -1.228034E-02, 9.804036E-04, -4.413030E-05,
1.057734E-06, -1.052755E-08]
elif 20.644 < dV < 54.886:
d = [-1.318058E+02, 4.830222E+01, -1.646031E+00, 5.464731E-02,
-9.650715E-04, 8.802193E-06, -3.110810E-08, 0.000000E+00,
0.000000E+00, 0.000000E+00]
else:
raise ValueError('TC voltage must be in range (-5.891mV, 54.886mV)')
dt = np.poly1d(d[::-1])(dV)
return cj + dt
The errors of linear temperature conversions are tolerable down to ~0°C: