Incorrect Readings from a RTD PT100 Sensor using Adafruit Max31865 Amplifier

Hello, I am new to using Arduino Uno and RTDs. I have a PT100 RTD sensor that is attached to a 4-wire Micro M12 Female signal/power connector, which is then attached to an Adafruit Max 31865 amplifier connected to an Arduino. I've connected every wire similar to the instructions on Adafruit Max31865 procedurehttps://learn.adafruit.com/adafruit-max31865-rtd-pt100-amplifier/arduino-code, using 4-Wire settings, and changing their code such as RREF to 430.0 and RNOMINAL to 100.0 to match 4-wire. I am still getting an incorrect an inconsistent reading from my current set up (See image).

I'm sure the error has to do with how I am arranging the wires coming from the M12 female connector but no matter how I arrange them, either I get fault errors (RTD LOW/HIGH Threshold), inconsistent alternating readings, or an incorrect consistent reading of -230 C. I am not familiar with identifying which wire would be F-, RTD-, RTD+, F+ and not having a red/blue color coding on my female M12 connector doesn't help. Using a multimeter, the resistance between the brown and black wire is 109.8 Ohms but for some reason, my multimeter cannot measure the resistance of the other wires (maybe because their resistance is below 1 Ohms). Also, here are the signal outputs for each of the 4-wire coming from my RTD sensor but I don't know what this means or if I am using the right chart since there are two (here's the pdf of the signal outputs page 15: chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.wika.com/media/Operating-instructions/Operating-instructions/Temperature/Resistance-thermometers/oi_tr33_en_de_fr_es.pdf
)

  1. Brown => Signal: L+, 10...30 V
  2. White => Signal: VQ, not connected
  3. Blue => Signal: L-, 10....30 V
  4. Black => Signal: C, not connected

Lastly, I'll post the code and my current set up that I am using in the comments but it is the same code that Adafruit provides for the max31865.

Thank you for your time and sorry for the long post. Any help is greatly appreciate!

Here is the link for the M12 Female signal/power connector

https://www.mcmaster.com/6897K14/

Here is my current set up:

Full Set Up:

Lastly, here is the code that Adafruit provides for their Max31865 amplifier:

/*************************************************** 
  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(10, 11, 12, 13);
// 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      430.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL  100.0

void setup() {
  Serial.begin(9600);
  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);
}

Did you carefully go through Adafruit's setup guide?

Do you understand the purpose of each of the four sensor wires? From the data sheet, you should have no problem telling which is which. Check the ordering information of the sensor, as advised by the sensor data sheet:

From the posted photo, the soldering on the sensor board pins looks a bit flaky, and should be touched up.

1 Like

@jremington From what I understand, 4-wire is used in pairs so that the resistance between each pair can be deducted from the additional external resistance from the cable. It seems that the pairs should have a resistance of 2 Ohms, and the resistance from one pair to another is 110 Ohms. As I said before, I'm fairly new to this and don't have a deep understanding of this and may be interpreting this incorrectly. I tried following tutorials on YouTube but can't seem to find one that answers my question.

Hi,

Can you post the code that you have changed to work with RTD?

Have you measured the resistance of your RTD with a DMM at the end of your leads?

Thanks.. Tom... :smiley: :+1: :coffee: :australia:

As per the Adafruit instructions, you should be able to get it working if you just connect the inner two sensor wires to the appropriate input terminals on the amplifier, and set the jumpers correctly.

But if your solder connections are not perfect, it won't work well or at all! You are dealing with very low voltages and currents.

1 Like

Hi,
Have you identified the leads of your RTD with DMM?

Thanks.. Tom.. :smiley: :+1: :coffee: :australia:

1 Like

@TomGeorge Hi Tom, the code above include the changes, but the only major difference is that I changed this line of code:

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

Originally the code had "_3WIRE"

and I was also playing around with the line of code near the top regarding which SPI I would use. They both seem to give the same results.

@jremington Thank you!, I will try that out and see if that fixes the problem. As for the signal that is being outputted by the sensor:

  1. Brown => Signal: L+, 10...30 V
  2. White => Signal: VQ, not connected
  3. Blue => Signal: L-, 10....30 V
  4. Black => Signal: C, not connected

can you explain what this means?

Yes, I used a DMM but the only resistance reading I was able to obtain was from the brown and black wires on my connector, which read 109.8 Ohms. As with the rest of the wires, my DMM couldn't pick up their resistance. Maybe because they were below 1 Ohms but do you have any recommendations or ideas why this may be the case?

No, that make no sense to me for the PT100 probe itself. See the diagram I posted in post # 6 above.

These signals would be output by the company's proprietary probe amplifier.


    Brown => Signal: L+, 10...30 V
    White => Signal: VQ, not connected
    Blue => Signal: L-, 10....30 V
    Black => Signal: C, not connected

Hi,

If you look at the image in my previous post, you are supposed to measure nearly zero ohms between two pairs.
What pairs do you measure near zero Ohms?

Thanks.. Tom... :smiley: :+1: :coffee: :australia:

I'm not sure what negative effect it has but the Arduino Uno is 5V and the MAX31865 is 4v max according to Maxim.

The Adafruit board has a 5V t0 3.3V regulator but I don' know how it deals with the I/O pins.

The connectors on the board you posted are twisted CW from the "normal" position, could there be an intermittent connection?

I would try a resistor in place of the RTD, anything from 50 to 300 ohms should be within the board's range.

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