Ich habe eine Rauchgas-Temperaturmessung für meinen Ofen gebaut, welche Temperaturen von 20° bis ca 250° messen soll. Die Messung findet alle 10 Sekunden statt und die Werte werden mittels HTTP Post an mein Webserver geschickt.
Funktioniert bis ca 150° C sehr zuverlässig. Darüber können die Werte aber nicht mehr zuverlässig vom Sensor ausgelesen werden. Erst wechseln sich Fehler "Fault 0x4 Under/Over voltage" und erfolgreiches Auslesen ab. Irgendwann nur noch "Fault 0x4 Under/Over voltage".
Ich habe bereits ein stärkeres Netzteil versucht, so wie die Speisung des MAX31865 mit 3.3 und 5 V getestet. Alles hat keine Besserung gebracht.
Den PT1000 habe ich mit einem Messgerät überprüft und erhalte die richtigen Widerstandswerte nach Kennlinientabelle.
Das Problem muss zwischen MAX31865 und Arduino liegen. Ich komme aber nicht dahinter.
mein Setup:
Arduino Mega mit Ethernetshield
Adafruit MAX31865
PT1000 1/3DIN
Library: Adafruit MAX31865
Die Verdrahtung ist 4-Draht wie hier beschrieben
Auszug aus meinem Code:
Setup:
// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 thermo = Adafruit_MAX31865(9, 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 4300.0
// The 'nominal' 0-degrees-C resistance of the sensor
// 100.0 for PT100, 1000.0 for PT1000
#define RNOMINAL 1000.0
thermo.begin(MAX31865_4WIRE); // set to 2WIRE or 4WIRE as necessary
Auslesen:
uint8_t fault = thermo.readFault();
if (fault) {
Serial.println(F("Fehler beim Auslesen des PT1000 Sensors"));
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();
} else{
strPTTemperatur = thermo.temperature(RNOMINAL, RREF);
// strPTTemperatur wird anschliessend in HTTP Post verschickt
}
Warum machst du so einen Unsinn mit einem PT1000? Das ist und bleibt ein Halbleiter
Für diese Temperaturen würde ich ein Typ K Thermoelement nehmen mit max6675.
Dazu würde ich mir aber einen zuverlässigen Typ K fühler bei Sensor24 besorgen.
Den China scheiß kannste vergessen, das ist Müll. Typ K funktioniert bei diesen Temp zuverlässig.
Das sind Verkäufer, keine Techniker die wissen was sie tun und warum.
Für diesen Tempbereich bietet sich Typ K oder J an, aber kein Halbleiter.
Setze selber Typ K im Rauchgaskasten meines Pelletofen ein.
War Sensorshop24.de.
In meinem Fall konnte ich aber durch die Widerstandsmessung den PT1000 als Fehlerquelle ausschliessen. Dann meinst du mit China-Shit den Adafruit MAX31865 ?
Grundsätzlich müsste die Messung aber auch mit meinem PT1000 funktionieren. Ich möchte jetzt nicht als erste Option meine gesamte Investition in die Tonne schmeissen, abgesehen vom Aufwand der Verkabelung (Ofen <> Steuerung ca 5m mühsame Leitungsführung).
Der PT1000 liefert korrekte Widerstandswerte. Was ich bisher noch nicht rausgekriegt habe, ob der MAX31865 mit diesen Werten (bis ca 1900 Ohm) klar kommt.
Hallo,
dann würde ich mal mit ein paar unterschiedlichen Widerständen anstelle des PT1000 versuchen. Die kannst Du dann mit einem Ohmmeter ausmessen und anhand der Kennlinie die angezeigte Temperatur in etwa überprüfen. die müssen ja auch nicht genau sein irgendwas was Du da hast 1K, 1,5K 2,2K
Ich habe das DataSheet mal studiert: der MAX31865 scheint keine Einschränkung im meinem Messbereich aufzuweisen. Ich gehe davon aus, dass die Implementation von Adafruit somit ebenfalls keine Einschränung im Bereich 200-300° C hat.
Der Sinn des Tests mit den verschiedene Wiederstände verstehe ich nicht. Ich habe ja diese bereits beim PT1000 bei unterschiedlichen Temperaturen gemessen und mit der Kennlinientabelle verglichen. Diese stimmen. Der Ofen besitzt eine eigene Temperaturmessung mit Anzeige, somit kann ich das vergleichen.
Der ausgelesene Fehler heisst "Under/Over voltage" und tritt erst ab ca 150° zuerst vereinzelt und bei höheren dann permanent auf. Somit vermute ich den Fehler ehr bei Adafruit MAX 31865 oder auf dem Mega
hast Du Dir mal die Fehlerregister in der Doku angesehen.?
Jetzt mal die Frage , wie weit ist er Max .. vom Mega weg, bzw. wie lang ist das Kabel vom I2C Bus dazu. Ansonsten kannst Du meiner Meinung nach den Mega ausschließen daran liegt es nicht.
Damit bleiben zwei Komponenten, der PT1000 der könnte bei hohen Temperaturen eine "Wachelkontakt " haben, oder der Max hat ein Problem mit dem "Messbereich". Was nun ist das bekommst Du eventuell mit dem von mir vorgeschlagene Vorgehen heraus. Es ist halt nur ein Vorschlag, irgendwie musst Du ja jetzt mal nach einem Ausschlussverfahren vorgehen. Laut Datenblatt ist der Temperaturbereich an sich ja in Ordnung. Die Tabelle 9 gibt ja zumindest für einen PT100 einen Messbereich von -200 - 550°C der vom Wandler abgedeckt wird. Ich habe auch für einen PT1000 keine Einschränkung gefunden.
Nachtrag
Welche Temperatur bekommst Du denn angezeigt wenn Du den Fehler mal nicht auswertest ?
Du versorgst doch bestimmt den Max über den Arduino 5V oder 3,3V. Geb dem mal eine eigene Spannungsversorgung. Könnte sein das der zuviel Strom zieht am Arduino.
Vom Sensor bis MAX31865 sind es ca 5m mit 4 x 0.25 Draht. Die Verbindung vom MAX31865 sind allerdings nur ca 20cm
So hatte jetzt endlich die Gelegenheit die Steuerung anzupassen und den Ofen damit durchlaufen zu lassen. Die Temperatur im Fehlerfall bleibt auf dem Wert der letzten erfolgreichen Messung stehen, bis die Messung bei sinkender Temperatur wieder funktioniert.
Ich habe sowohl mit 3.3 V als auch mit 5 V versucht. Direkt ab Arduino. Macht keinen Unterschied. Desweiteren habe ich das Netzteil gewechselt (0.66 A -> 5 A).
Mit separater Speisung habe ich nicht versucht. Gibt es damit nicht Probleme, wenn 2 verschiedene Quellen speisen?
Ich versorg den Mega und/oder Uno mit 9V Netzteil und zweige am Spannungseingang die 9V ab für einen Stepdownregler. Damit versorge ich alle Module. Bei Versorgung mit 5V über die Eingangsbuchse hast du weniger als die 5V zur Verfügung. Mess mal nach. Zur Not kannst du mal die 5V vom Netzteil abzweigen und auf den Max geben.
Ich hätte da noch ein 5V Netzteil rumliegen.
Wie müsste ich das anschliessen? + / - Pol direkt an MAX31865 und dann noch den - Pol mit GND vom Arduino koppeln?
Bin da recht unsicher, nicht dass mir die Steuerung in Rauch aufgeht