Problem: when using MAX31855 for temperature measurement in furnaces or kilns with a heating coil exposed to air, once the temperature reaches around 900-1000C, MAX31855 starts reporting fault codes 2, 4 , 6 (thermocouple shorted to ground, VCC or both), while the actual temperature readings continue to be accurate. Some Arduino libraries for MAX31855 do not report the temperature value when one or more fault conditions are present, and the temperature is then reported as NaN.
Why this is happening: As the air heats up to about 1000C and above, it becomes slightly electrically conductive. A leakage path is then introduced from the exposed heating coil through the thermocouple to the common ground. MAX31855 detects this leakage current as a fault. MAX31855 needs just 50 microamps of leakage current to report a fault. To test this condition, connect a 9V battery via a 150k resistor between the thermocouple and the ground plug on the power cord of your kiln. MAX31855 will immediately report a fault. A similar leakage current develops from the exposed heating coil to the thermocouple when the air heats up to around a 1000C.
What to do about it: There is no easy solution for getting rid of the underlying problem of having this leakage current. The following options can all be considered:
- 1. Do nothing. Just ignore the fault codes 2, 4 and 6 (but not 1, which is open circuit) when the temperature is above, say, 700C. MAX31855 will still be reporting the accurate temperature readings alongside the fault bits. Some trivial code modifications in the MAX31855 library may be required. Since the leakage current here is on the order of 50 microamps, this is like 100 times less than the 5 mA tripping threshold of a typical GFCI breaker, and so the operation presumably remains safe. I went with this solution for my muffle furnace.
- 2. Command the heating coil off for approx.. 150-200 ms before taking the temperature reading from MAX31855. Assuming your heating coil is at neutral / ground potential when turned off (as it should be), there will be no leakage current while MAX31855 is performing the measurement (and most importantly, while it is performing fault detection, which is a separate step), and hence there will be no faults reported. I have tested this approach and it did work as described. However, the leakage current will still be there when the heating coil is energized, it will just not be reported to you. Also, if the heating coil is powered from 2 hot wires (like for example, the 220V setup in the US), it should then be disconnected from both sides. Otherwise, it will remain at a high potential from the ground, and the leakage will still be there. Also, with this approach one is losing like 20% of power, assuming a 1 second PID controller cycle, where there is now a 200ms forced power-off step.
- 3. Power your furnace from the isolation transformer. Given the typical power levels involved (>1kW) the transformer will certainly not be cheap.
- 4. Galvanically isolate your MAX31855 sub-system from the mains ground. This will require an isolated power supply for your Arduino, combined with an isolated solution for the serial communication transport to your PC. You can quickly test this approach by powering your Arduino from a battery, and also disconnecting it from the PC. The fault codes should disappear. They will reappear the moment you connect your battery-powered sketch to the PC (unless the PC is a battery-powered laptop) with a serial/USB cable. This is because the PC ground is the same as mains ground, hence you’ve just lost your galvanic isolation.