new thermocouple interface: MAX31855

Just saw this:

Looks like Maxim has a new thermocouple interface, with support for different types of t-couples (not just K) available. At a glance it looks like the hardware interface is the same (drop-in replacement for the MAX667[45]) and you get a couple of extra bits of resolution, plus a larger measurement range.

I mention them because there seems to have been a fair amount of thermocouple discussion lately.

-j

I too just discovered that chip. Is it a drop-in replacement for the 6675.

I gather the handling of different TC types is a factory trim though and you buy different models of the chip, so you can't just stock one for all types. Not that I reckon that's a problem, you can still have one PCB just load a different chip if needed.


Rob

Not exact replacement: MAX31855 does not work @ 5V, only use with 3.3V :frowning:

I posted MAX 31855 libraries:

only use with 3.3V

Yep, I didn't spot that.

Thanks for the source code, I've grabbed it for when I start using the chip. Is it the same as the 6675 software wise?


Rob

MAX31855 can use MAX6675 routines without any changes to read TC temperature.
BTW MAX6675 routines I found can't display negative temperatures correctly, so I corrected this.

In addition MA31855 can read:

  • CJC temperature (internal to the chip)
  • Open Wire Fault
  • Short to GND Fault
  • Short to VCC Fault

I also like that they made multiple versions for different TC types - one I was using is for type J TC wire.
I will add some examples later on.

I've ordered a couple of samples each of J and K versions. Thanks very much, Andy, for the library contribution. That will make playing with the devices much easier.

Andy, Thanks for the library. Worked like a charm. I has one in the works, but it was buggy and had issues with the spi timing, yours works great. I send you a pull request on github with a example I added to the lib.

Thanks guys!

I will try to add my examples also.

I got around to breadboarding a K type MAX31855 circuit today. With the probe stuck under my tongue, I measured 93.65 degrees F. The data sheet says they do a linear fit to the actual curve so I don't know if that is an acceptable error or not.

Edit:

I tried it in boiling water and got around 205 degrees F. That's about a 3.3% error.

EmilyJane:
I got around to breadboarding a K type MAX31855 circuit today. With the probe stuck under my tongue, I measured 93.65 degrees F. The data sheet says they do a linear fit to the actual curve so I don't know if that is an acceptable error or not.

Edit:

I tried it in boiling water and got around 205 degrees F. That's about a 3.3% error.

Typical one doesn't select thermocouples for their accuracy, but rather for the high temperature range and relative lower cost compaired other temperature sensors types. Process control industry typically use RTD PT100 sensors where accuracy is important and TCs where high temp service is required like furnaces and other high temp process equipment.

The error for a standard grade K-type thermocouple is ±2.2 °C or ±0.75% of the measurement temperature.‡ Because ±0.75% of 200 °C (±1.5 °C) is less than ±2.2 °C, the error of a standard grade K-type thermocouple is ±2.2 °C.

Type J probes

recommended range: 32 to 1336
max range -310 to 1832
accuracy 1.8 to 7.9oF or 0.4% of reading above 32oF, whichever is greater

This is probably close enough then. Most of my experience is with RTDs when we were looking for accuracy, as well. This is a pretty simple - 1 chip, 1 cap - solution to high temperature measurement. It should be close enough for my meat thermometer anyway. :slight_smile:

Edit: May as well post the code I did to test the accuracy. Couldn't figure out how to use it though. :slight_smile:

/*
Function to calculate the mV out of a standard K type thermocouple given the temperature in degrees C
Range 0 - 300 degrees C
*/

double calc_mV(double T90) {

// Coeficients from NIST
const double c0 =  -0.176004136860E-01;
const double c1 =   0.389212049750E-01;
const double c2 =   0.185587700320E-04;
const double c3 =  -0.994575928740E-07;
const double c4 =   0.318409457190E-09;
const double c5 =  -0.560728448890E-12;
const double c6 =   0.560750590590E-15;
const double c7 =  -0.320207200030E-18;
const double c8 =   0.971511471520E-22;
const double c9 =  -0.121047212750E-25;

const double a0 =   0.1185976E+00;
const double a1 =  -0.1183432E-03;
const double a2 =   0.1269686E+03;

const double e =    2.71828182845904; // e as in natural logs

const double K = a0 * pow(e,(a1*(T90-a2)*(T90-a2))); //constant term for summation

// summation over n coefficients
  double  E =  c0 * pow(T90,0) + K; 
          E += c1 * pow(T90,1) + K;
          E += c2 * pow(T90,2) + K;
          E += c3 * pow(T90,3) + K;
          E += c4 * pow(T90,4) + K;
          E += c5 * pow(T90,5) + K;
          E += c6 * pow(T90,6) + K;
          E += c7 * pow(T90,7) + K;
          E += c8 * pow(T90,8) + K;
          E += c9 * pow(T90,9) + K;

return E;

}

void setup() {

  Serial.begin(57600);
  Serial.println(calc_mV(37.0), 3);

};

void loop() {
};

The uncalibrated accuracy on the MAX31855 should around +-2degC. The repeatability should be
a bit better. When I did a quick test nn my new board I was getting +-2degC and a repeatability
of around +-0.25degC. I will doing some tests over the next few weeks.

I added two channels to the board and some terminal blocks for ADC channels, I2C and SPI
ports. I also added a 5V boost converter.

I will have the schematic and documentation done in the next few weeks.
Preliminary information is at Loading...
(* jcl *)

I'm not sure how much my breadboard affects the reading. "Theoretically" since the multiple metal junction transitions are at the same temperature, they should cancel out.

I'm happy with the results so far since all I was going to use mine for is a grilling thermometer.

Hello,

I'm using MAX31855 tipe K for measuring temperature. I can get
right value if the TC wire is short only, for example 30 cm in my
case. I start getting wrong measurement if I use long wire, for
example 4 meters. What do I do wrong?

Thank you.

elektro_ub:
Hello,

I'm using MAX31855 tipe K for measuring temperature. I can get
right value if the TC wire is short only, for example 30 cm in my
case. I start getting wrong measurement if I use long wire, for
example 4 meters. What do I do wrong?

Thank you.

What are you using for extension wire? And how "wrong" are your measurements?

jluciani:
The uncalibrated accuracy on the MAX31855 should around +-2degC. The repeatability should be
a bit better. When I did a quick test nn my new board I was getting +-2degC and a repeatability
of around +-0.25degC. I will doing some tests over the next few weeks.

I added two channels to the board and some terminal blocks for ADC channels, I2C and SPI
ports. I also added a 5V boost converter.

I will have the schematic and documentation done in the next few weeks.
Preliminary information is at Loading...
(* jcl *)

Are we close to a breakout board for the Arduino yet? I've been looking at the MAX31855 as well since I need a J type thermocouple connection.

Would I be able to connect a Logic Level converter http://www.sparkfun.com/products/8745 to the Adafruit's MAX6675 breakout board (Thermocouple Amplifier MAX31855 breakout board (MAX6675 upgrade) : ID 269 : $14.95 : Adafruit Industries, Unique & fun DIY electronics and kits) in order to use the 3.3V MAX 31855?

The wiblocks ZB2 TC interface board will work with J type thermocouples
if the MAX31855 is changed to a MAX31855J and the input connectors
are changed to J-type.

(* jcl *)