MAX31865 + ESP32 + PT1000 leading to inaccurate temperatures

Hi all,

The issue: The temperature log displays temperatures which are a few degrees to high. For example boiling water has around 103 °C, cooled water with ice cubes around 6 °C, room temperature around 28 °C instead of 24 °C. So it is pretty close, but somewhat a few degrees too high.

I have tested another PT1000 from a different vendor, same issue.

Any ideas what is wrong here?

The log looks like this:

RTD value: 8460
Ratio = 0.25817871
Resistance = 1110.16845703
Temperature = 28.31

I am using:

Connection:
ESP32 --> MAX31865
GND --> GND
3V3 --> 3V3
G5 --> CS
G18 --> CLK
G19 --> SDO
G23 --> SDI

I use this code:

/*************************************************** 
  This is a library for the Adafruit PT100/P1000 RTD Sensor w/MAX31865

  Designed specifically to work with the Adafruit RTD Sensor
  ----> https://www.adafruit.com/products/3328

  This sensor uses SPI to communicate, 4 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Adafruit_MAX31865.h>

// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 thermo = Adafruit_MAX31865(5, 23, 19, 18);
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10, 11, 12, 13);
//Adafruit_MAX31865 max = Adafruit_MAX31865(5, 23, 19, 18);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);

// The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
#define RREF      4300.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  1000.0

void setup() {
  Serial.begin(115200);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");

  thermo.begin(MAX31865_4WIRE);  // set to 2WIRE or 4WIRE as necessary
}


void loop() {
  uint16_t rtd = thermo.readRTD();

  Serial.print("RTD value: "); Serial.println(rtd);
  float ratio = rtd;
  ratio /= 32768;
  Serial.print("Ratio = "); Serial.println(ratio,8);
  Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
  Serial.print("Temperature = "); Serial.println(thermo.temperature(RNOMINAL, RREF));

  // Check and print any faults
  uint8_t fault = thermo.readFault();
  if (fault) {
    Serial.print("Fault 0x"); Serial.println(fault, HEX);
    if (fault & MAX31865_FAULT_HIGHTHRESH) {
      Serial.println("RTD High Threshold"); 
    }
    if (fault & MAX31865_FAULT_LOWTHRESH) {
      Serial.println("RTD Low Threshold"); 
    }
    if (fault & MAX31865_FAULT_REFINLOW) {
      Serial.println("REFIN- > 0.85 x Bias"); 
    }
    if (fault & MAX31865_FAULT_REFINHIGH) {
      Serial.println("REFIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_RTDINLOW) {
      Serial.println("RTDIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_OVUV) {
      Serial.println("Under/Over voltage"); 
    }
    thermo.clearFault();
  }
  Serial.println();
  delay(1000);
}

I have added some pictures as well.



How did you calibrate it? I am not familiar with your module. The probe should be much closer.

I would power that module from 5volt, for a cleaner supply for the MAX chip.
So a link between 5V of the ESP and Vin of the module (not the 3.3volt pin).

I see you use a clone, with a 5% tolerance Rref resistor (Adafruit uses 1%).

Is that tine trace between 2/4 still there (needed for 4-wire sensors), or did you cut it.
Leo..

In general PT1000 sensors are accurate to the sub 1°C range.

Three things to consider:

  1. Your conversion calculations are directly related to RREF. So if RREF is off, your results will be off.
  2. The Max example uses 400 for a 100 ohm RTD while you are using a 1000 ohm RTD. I did not dig into the datasheet enough to know the effects of various RREF's nor how to pick an optimum one but I'm sure its in there somewhere

did some more reading....

A reference resistor equal to four times the RTD’s 0NC resistance is
optimum for a platinum RTD. Therefore, a PT100 uses
a 400I reference resistor, and a PT1000 uses a 4kI
reference resistor.

You might have a counterfeit MAX31865 module, and/or sensor. The Adafruit modules and sensors (for example) are guaranteed to be genuine, and meet data sheet specifications.

Please post links to the seller's web pages.

I tried this one right now, unfortunately nothing improved. Still a few degrees offset (~ 3-5 degrees of Celcius).

Where did you spot this? As far as I know adafruit does also use a 432 labeled SMD resistor, don't they? But yeah reading into adafruit I saw also the 1 % mentioned quite a lot. For my module I do not have any real documentary (will try to get it though).

Three or four digit resistor markings. Three digits = 5%, four digits = 1%.
Leo..

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.