Overview

The MAX31865 is a high-precision 15-bit resistance-to-digital converter manufactured by Maxim Integrated (Analog Devices). Designed specifically to interface with Platinum Resistance Temperature Detectors (PT100 and PT1000 RTDs), it replaces complex analog instrumentation op-amp circuits with a single digital SPI IC.

Supporting 2-wire, 3-wire, and 4-wire RTD configurations, the MAX31865 achieves an ultra-fine resolution of 0.03125C0.03125^\circ\text{C} (0.0009765625 Ω0.0009765625\ \Omega per LSB) across extreme temperature ranges (200C-200^\circ\text{C} to +850C+850^\circ\text{C}). It incorporates built-in fault detection (detecting open RTD elements, short circuits to ground/VCCV_{CC}, and over-range temperatures).

Quick reference

Operating voltage (VIN)3.3 V to 5.0 V DC (breakout includes 3.3V LDO regulator)
IC supply voltage (VDD)3.0 V to 3.6 V DC (3.3 V nominal)
InterfaceSPI (Mode 1 or Mode 3, up to 5 MHz)
Supported RTD typesPT100 (100 Ω100\ \Omega nominal at 0C0^\circ\text{C}) & PT1000 (1000 Ω1000\ \Omega nominal at 0C0^\circ\text{C})
Wiring modes2-Wire, 3-Wire, and 4-Wire RTD probe connections
ADC resolution15-bit Delta-Sigma ADC (0.03125C0.03125^\circ\text{C} LSB)
Temperature accuracy±0.5C\pm 0.5^\circ\text{C} total accuracy (over full 200C+850C-200^\circ\text{C} \dots +850^\circ\text{C} range)
Fault detectionDetects open RTD wire, short to GND, short to VCC, and out-of-range thresholds
Reference resistor (RREFR_{REF})400 Ω400\ \Omega or 430 Ω430\ \Omega for PT100 (4000 Ω4000\ \Omega or 4300 Ω4300\ \Omega for PT1000)

Pinout

Breakout module header & Terminal Block:

PinNameTypeDescription
1VINPowerSupply power input (+3.3 V to +5.0 V DC)
2GNDPowerGround reference (0 V)
33V3Power OutputRegulated 3.3V power output pin
4SDO / MISODigital OutputSPI Master Input Slave Output
5SDI / MOSIDigital InputSPI Master Output Slave Input
6CSDigital InputActive-Low SPI Chip Select
7CLK / SCLKDigital InputSPI Serial Clock
8RDYDigital OutputActive-Low Data Ready interrupt output pin

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply Voltage (Module)VVINV_{VIN}3.33.3 / 5.05.5VPower rail with LDO
Active CurrentICCI_{CC}2.03.5mAActive conversion mode
Shutdown CurrentIsdI_{sd}1.010.0µASoftware shutdown
ADC ResolutionResADCRes_{ADC}15bits2's complement 15-bit word
Nominal Resistance (PT100)R0R_0100ΩResistance at 0C0^\circ\text{C}
Reference Resistor (PT100)RREFR_{REF}400430430ΩPrecision 0.1%0.1\% reference resistor
Conversion Timetconvt_{conv}215262ms50 Hz / 60 Hz rejection mode

RTD Resistance & Temperature Calculation Math

  1. Calculate RTD Resistance (RRTDR_{RTD}):

RRTD=(15-bit Raw ADC Register Value32768)×RREFR_{RTD} = \left( \frac{\text{15-bit Raw ADC Register Value}}{32768} \right) \times R_{REF}

  1. Callendar-Van Dusen Equation (T0CT \ge 0^\circ\text{C}):

RRTD(T)=R0(1+AT+BT2)R_{RTD}(T) = R_0 \cdot \left( 1 + A \cdot T + B \cdot T^2 \right)

Where A=3.9083×103 C1A = 3.9083 \times 10^{-3}\ ^\circ\text{C}^{-1} and B=5.775×107 C2B = -5.775 \times 10^{-7}\ ^\circ\text{C}^{-2}.

T(C)=A+A24B(1RRTDR0)2BT (^\circ\text{C}) = \frac{-A + \sqrt{A^2 - 4B \left( 1 - \frac{R_{RTD}}{R_0} \right)}}{2B}

Wiring (3-Wire PT100 Probe)

MAX31865 PinArduino / MCUESP32Notes
VIN5V / 3.3V3.3VPower rail
GNDGNDGNDSystem ground
CSDigital D10GPIO 5SPI Chip Select
SDI (MOSI)Digital D11GPIO 23SPI MOSI
SDO (MISO)Digital D12GPIO 19SPI MISO
CLK (SCLK)Digital D13GPIO 18SPI Clock
Important

Solder Jumper Configuration (2-Wire / 3-Wire / 4-Wire):

  • 3-Wire RTD Probe (Most Common): Cut the thin trace between the 24 solder pads, solder the 3 pad closed, and solder the 2/3 Wire jumper pad closed. Connect 2 matching wires to RTD+/F+ and 1 wire to RTD-.
  • 2-Wire RTD Probe: Solder the 24 jumper pad closed and short terminal F+ to RTD+ and F- to RTD-.

Example (Adafruit_MAX31865 Library)

cpp
#include <Adafruit_MAX31865.h>

// Use hardware SPI with CS pin 10
Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);

// Set Reference Resistor (430 ohms for PT100)
#define RREF 430.0
// Set Nominal 0°C Resistance (100 ohms for PT100)
#define RNOMINAL 100.0

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

  thermo.begin(MAX31865_3WIRE); // Configured for 3-wire PT100
}

void loop() {
  uint16_t rtd = thermo.readRTD();
  float ratio = rtd / 32768.0;
  float resistance = RREF * ratio;
  float temp = thermo.temperature(RNOMINAL, RREF);

  Serial.print("RTD Raw ADC: "); Serial.print(rtd);
  Serial.print(" | Resistance: "); Serial.print(resistance); Serial.print(" Ω");
  Serial.print(" | Temperature: "); Serial.print(temp); Serial.println(" °C");

  // Check for faults
  uint8_t fault = thermo.readFault();
  if (fault) {
    Serial.print("Fault 0x"); Serial.println(fault, HEX);
    thermo.clearFault();
  }

  delay(1000);
}

Common mistakes

  • Mismatched RREFR_{REF} value in software: Standard Adafruit/generic breakout boards use a 430 Ω430\ \Omega reference resistor (RREF=430.0R_{REF}=430.0) for PT100. Setting RREF=400.0R_{REF}=400.0 in code introduces a +7C+7^\circ\text{C} measurement error.
  • Selecting wrong wire jumpers: Failing to configure 2-wire / 3-wire PCB solder jumpers to match the connected physical PT100 probe triggers constant RTD INLOW or RTD INHIGH fault flags.

Notes

  • MAX31865 vs MAX31855: MAX31865 interfaces with RTDs (PT100/PT1000); MAX31855 interfaces with Thermocouples (K-Type).

Assets & downloads