Ich möchte einen PT1000 verwenden und mich würde vorab interessieren, ob ich bei dem einfachsten Anschluss, Spannungsteiler mit einem 1k 0,1% Widerstand an A0 im Bereich von 10 - 60°C eine Genauigkeit von 1°C, idealerweise 0,5°C erreichen kann.
Was ich zumindest herausgefunden habe, kann ich den Leitungswiderstand vernachlässigen, da er nur 0,04°C/m beträgt und die Leitung sogar unter 1m ist.
Ich habe mir beim Cinesen des Vertrauens dieses "Detektormodul" gekauft, ist baugleich mit dem von Adafruit, aber mit dem Beispielcode der Adafruit-Bibliothek bekomme ich nur unidentifizierbare Zeichen auf den seriellen Monitor. Angeschlossen wie in der Adafruit-Anleitung, im Code auf 2Wire und den PT1000 ausgebessert.
Auf der kleinen Platine sind auch die richtigen Brücken gelötet.
DS18B20 kann ich für diese eine Messstelle nicht nehmen, da der PT1000, den ich habe, einen Durchmesser von nur 3mm hat (Edelstahl) und deshalb für mich ideal ist, der DS wäre mir zu dick (d = 6mm). DS habe ich an anderen Stellen in OneWire angeschlossen, das funktioniert gut.
ich habe keine Erfahrung mit Platinsensoren, aber einfach in ein Spannungsteiler klemmen dürfte nicht funktionieren.
Achte auf den erlaubten Strom (Selbsterwärmung), viele dürfen nur im Bereich von 0,1mA und 1mA betrieben werden.
Wenn Du nichts gekapseltes brauchst, kämen noch genaue NTCs in frage, die gibt es auch in klein, und sind über die Steinhart-Hart Gleichung gut zu händeln. Ich habe hier testweise einen TS-NTC-103A von B+B Sensors am laufen.
Nein.
Du kannst keine PT1000 mittels Spannungsteiler auslesen. Dazu sind die Widerstandsänderungen in Funktion der Temperatur zu gering. Du hast eine Widerstandsänderung von 1000 Ohm bei 0°C zu 1232,4 Ohm bei 60°C.
Du brauchst eine Auswertungsschaltung wie zB den MAX31865. Wobei RREF 4kOhm sein sollte.
Ok, danke.
Der Sketch ist als Beispiel in der Bibliothek:
[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 max = Adafruit_MAX31865(10, 11, 12, 13);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 max = 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!");
max.begin(MAX31865_2WIRE); // set to 2WIRE or 4WIRE as necessary
}
void loop() {
uint16_t rtd = max.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(max.temperature(RNOMINAL, RREF));
// Check and print any faults
uint8_t fault = max.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");
}
max.clearFault();
}
Serial.println();
delay(1000);
}
Es werden bei mir am seriellen Monitor, wie gesagt, nur irgendwelche unlesbare Zeichen, hauptsächlich leere Vierecke, ausgegeben. Und das in einer Reihe, anscheinend nicht mal das Serial.println der vorletzten Zeile, delay passt.
Wenn Du umlötest dann besorg Dir einen genauen Widerstand ( der genaue Wert ist nicht so wichtig, wichtig ist die Tolleranz). Adafruit montiert auf ihren Platinen einen 4300 Ohm mit 0,1%.
Was ist, wenn ich statt dem 4k3 Festwiderstand einen 5k Spindeltrimmer einbaue? Kann ich dann die angezeigte Temperatur (in kleinem) Rahmen justieren? Ich habe mir aus einem Haufen DS18B20 3 Stück ausgesucht, die exakt die selbe Temperatur anzeigen und wenn ich dann den PT1000 auch genau darauf einstellen könnte, wäre das perfekt!
Falls diese Idee Sinn macht und nicht völliger Humbug ist, soll ich dann die Justage ca. in der Mitte des von mir gewünschten Temperaturbereichs durchführen oder genügt die Raumtemperatur?
Ist nicht notwendig weil Du sowieso ein Verhältnis der beiden Widerstände erhälst und diese über einen Faktor umrechnen mußt. Ein 0,1% Festwiderstand hat bessere Eigenschaften bezüglich Langzeitstabilität als ein Spindeltrimmer.
Grüße Uwe
Du kannst Dir bei Deinen DS18B20 auch 'merken', wie viel Diese 'falsch' gehen - Das kann man in den User-Bytes speichern, sind eigentlich für Alarm-Temperaturen gedacht, wenn man Die aber nicht benötigt, kann man Sich Da eigene Daten rein packen.
(ID, Abweichung vom 'Normal' oder so Zeug).