Fehler bei Temperaturmessung mit MAX31865 un PT1000

Guten Abend zusammen,

ich versuche als blutiger Anfänger mit Hilfe eines PT1000 Temperatursensors und dem MAX31865 die Temperatur zu messen.

Folgende Komponente benutze ich:
MAX31865
PT1000 Sensor von Honeywell ( Honeywell AIDC HEL-705-U-0-12-00 Temperatursensor -200 bis +260 °C 1000 Ω). Leider kann ich als neuer Nutzer nichts in den Anhang packen und auch nicht mehr als zwei Links verwenden.

Ich habe den ESP32 mit dem MAX31865 nach dieser Anleitung verbunden. Da die Anleitung für einen Arduino ist, habe ich die Pins gegen die SPI Pins des ESP32 ausgetauscht. und komme zu folgender Pin Belegung:

SDI --> 23 (MOSI)
SDO --> 19 (MISO)
CLK --> 18 (SCK)
CS --> 5

Nachdem ich den Beispielcode auf das Board geladen habe erhalte ich definitiv Flasche Temperaturen, die folgendermaßen aussehen:
16:48:53.628 -> RTD value: 0
16:48:53.628 -> Ratio = 0.00000000
16:48:53.628 -> Resistance = 0.00000000
16:48:53.628 -> Temperature = -242.02
16:48:53.697 -> Fault 0x4
16:48:53.697 -> Under/Over voltage
16:48:53.697 ->
16:48:54.773 -> RTD value: 0
16:48:54.773 -> Ratio = 0.00000000
16:48:54.773 -> Resistance = 0.00000000
16:48:54.773 -> Temperature = -242.02
16:48:54.876 -> Fault 0x4
16:48:54.876 -> Under/Over voltage

Nach der Suche in diversen Foren habe folgende Dinge schon ausprobiert und kontrolliert:

-Sensor ist ein PT1000. Das habe ich mit dem Multimeter gemessen und erhalte bei Raumtemperatur einen Widerstand von 1000 Ohm

  • Wenn ich einen festen 1000 Ohm Widerstand an den MAX31865 anschließe erhalte ich die gleichen Werte
  • Auf dem MAX31865 habe ich einen Referenzwiderstand von 4300 Ohm.
  • Mit dem Pin für die CS habe ich auch schon rumgespielt und die selben Ergebnisse erhalten

So langsam bin ich mit meinen Copy und paste Programmierkenntnissen am Ende. Ich bin für jegliche Art von Tipps dankbar.

Der Beispielcode des MAX31865:

/*************************************************** 
  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);
// 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_2WIRE);  // 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);
}
1 Like

Das gelesen und gemacht?

Das hab ich wohl gekonnt überlesen. Vielen dank für die schnelle Rückmeldung.
Ich komme nun auf plausible Temperatur Werte. :laughing:

2 Likes

Ich möchte Dir gratulieren da Du alles in Deinem Zustand als New User möglichen Umfang alle relevanten Daten und Infos sofort uns zur Verfügung gestellt hast.
Perfekt wäre noch der Link zum Sensor und ein Verdrahtungsfoto gewesen aber in den ersten Posts bist Du einfach etwas eingeschränkt ( Spamverhinderung ) .
Grüße Uwe

1 Like