Go Down

Topic: Öl Temperatur messen, welcher Öltemperaturgeber? (KFZ) (Read 10257 times) previous topic - next topic

farewell

Mar 22, 2013, 09:26 am Last Edit: Mar 22, 2013, 09:32 am by farewell Reason: 1
Hallo Leute,

ich bin derzeit auf der Suche nach einem Öltempgeber (M12x1,5) für mein Arduino Uno, welches dann in der Ölablassschraube befestigt wird, habe soweit im Forum bisschen gelesen, bin mir jedoch nicht sicher welchen Tempsensor ich verwenden soll. (fürs Auto)

Es geht um die Öltemperatur, Sensor soll so etwas sein: http://www.kosoeurope.com/temperatursensor-m12xp1.5-150c-schwarzer-stecker

oder so etwas: http://www.ezt-autoteile.de/VDO-Sensoren/Zubehoer/VDO-Temperaturgeber/Geber-150C-Oeltemperatur/VDO-Temperaturgeber-fuer-Oeltemperatur-M12x15::42679.html

wobei ich mich nur Frage, zumindest beim VDO steht, Nennspannung: 6 - 24V, soviel gibt das Arduino doch gar nicht her?!

hat das jmd mal gemacht?

uwefed

Nennspannug heißt der Spanungbereich bei dem der Sensor funktioniert. In diesem Fall geeignet für Motorräder, Autos und Lastwagen. Ohne Datenblatt bzw ohne zu wissen welch ein Sensor dieser Sensor ist ist es unmöglich eine korrekte Auswertung zu schreiben.
Grüße Uwe

farewell

technische Daten von VDO hab ich jetzt nur das gefunden:

http://www.temperaturgeber.de/vdo_temperaturgeber_daten.html

es muss jetzt auch nicht VDO sein, eine alternative die in die ölablassschraube reinpasst, wäre mir ja auch recht =)

michael_x

Das passt gut.

Ein Heissleiter ist nur ein Widerstand. Den verbindest du mit einem anderem Widerstand zu einem Spannungsteiler und schliesst ihn zwischen GND und 5V.

5V  -- R --+-- Geber == GND
              |
             Analog-Eingang

Im Beispiel "Öltemperatur"

60°C - 221,2 Ohm
90°C -   83,0 Ohm
120°C -   36,5 Ohm

wäre z.B. ein 100 Ohm Widerstand schön. ( Das zieht zwar ca. 30 mA aus der 5V Versorgung, gibt aber einen weiten Messbereich )
Da der Geber auch 24 V aushalten würde, macht ihm dieser Strom sicher nichts aus.
Der Widerstand sollte eine 1/4W Version sein.

Bei 90 ° misst du ca. 465  (2.27 V)
     120° sind  etwa   275  (1.34 V)
( mit dem 100 Ohm Vor-Widerstand )

uwefed

Das Problem ist daß der PTC den Widerstand nicht linear mit der Temperatur ändert.
Grüße Uwe

jurs

#5
Mar 22, 2013, 09:13 pm Last Edit: Mar 22, 2013, 10:30 pm by jurs Reason: 1

Das Problem ist daß der PTC den Widerstand nicht linear mit der Temperatur ändert.


Das ist normalerweise kein Problem, wenn er ein Multimeter mit möglichst genauem Widerstandsmessbereich hat. Und es ist ein NTC Widerstand (siehe unten).

Dann braucht er nur bei zwei möglichst genau bestimmten Temperaturen den Widerstand seiner VDO-Messschraube auszumessen und kann sich leicht die Formel ermitteln, mit deren Hilfe er dann JEDE Temperatur aus den Messungen mit seinem Arduino ausrechnen kann.

Die Kennlinie eines NTC ist zwar nicht linear, aber praktisch trotzdem durch Messung an zwei Temperaturpunkten zu ermitteln, aufwändiger ist das gar nicht, denn es besteht ein logarithmischer Zusammenhang.

VDO-Schraube in 0° kaltes Wasser hängen ==> Widerstand bei 0° messen
VDO-Schraube in kochendes Wasser hängen ==> Widerstand bei 90° bis 100° messen (je nach Höhenlage über Meeresspiegel)

Damit ist dann alles klar. Wem nicht, dem rechne ich das mal vor, wie die Kalibrierwerte für die Formel ermittelt werden, und wie man aus dem Arduino mit Mess-Vorwiderstand und der Formel dann immer die passende Temperatur ausrechnet.

[Edit] Was rede ich eigentlich vom Messen, die Werte für den 150°-VDO-Öltemperaturgeber stehen im Internet, so dass man damit sofort losrechnen könnte:
http://www.temperaturgeber.de/vdo_temperaturgeber_daten.html

Und das mit dem Rechnen mache ich dann auch gleich mal.
Falls Du einen Standard-Sketch für Messungen mit NTCs verwendest, der die NTC Materialkonstante "B" erfordert, hier die Berechnung des Datenblattwerts "B" anhand der Öltemperatur-Sensordaten auf der Webseite (absolute Temperaturen in Kelvin von mir ergänzt):
60°C ==> 333,15K ==> 221,2 Ohm
120°C ==> 393,15K ==>  36,5 Ohm

Formel für die Konstante B
B= (T1 * T2)/ (T2-T1) * ln(R1/R2)

Einsetzen (mit absoluten Temperaturen in Kelvin):
B= (393,15*333,15)/(393,15-333,15)* ln(221,2/36,5) = 3933

Damit hast Du als Datenblattwerte für den VDO-Sensor zum Einsetzen in einschlägige Berechnungsformeln (wie sie z.B. in den Datenblättern beliebiger NTC-Widerstände genannt werden):
T1 = 333,15 K
R1 = 221,2 Ohm
B = 3933
Die Berechnungsformeln selbst können aus jedem beliebigen Datenblatt eines beliebigen Herstellers von NTC-Widerständen entnommen werden, den Formeln ist es nämlich egal, wenn man in den Formeln die Konstanten eines anderen NTC von einem Fremdhersteller einsetzt.

Wenn das Rechnen das Problem ist, kann ich natürlich noch weiterrechnen und ein paar Zeilen Code dazu schreiben.

Scherheinz

#6
Mar 24, 2013, 03:54 pm Last Edit: Mar 24, 2013, 04:24 pm by Scherheinz Reason: 1
Hallo!
Ich verstehe nicht ganz wie man aus 2 Punkten eine Kurve berechnet, kannst du deine Rechnung in einem Diagramm oder einer Excel Tabelle zeigen?

Ich hab den Sensor seit zwei Jahren im Auto zur Öltemperatursensor, nutze ihn aber bisher nur als Grenzwertüberwachung. Hatte auch hin und her gerechnet und auch nur die Kurve durch den Spannungsteiler etwas strecken können. So hatte ich einen Messbereich von 70 - 130C° aber immer noch mit einer Toleranz von +/- 2,5C°.


Gruß

Heinz

jurs

#7
Mar 24, 2013, 05:00 pm Last Edit: Oct 22, 2013, 07:42 pm by jurs Reason: 1

Ich verstehe nicht ganz wie man aus 2 Punkten eine Kurve berechnet, kannst du deine Rechnung in einem Diagramm oder einer Excel Tabelle zeigen?


Tja, wo man doch aus der Mathematik weiß, dass zwei Punkte mal eben so eine Gerade exakt bestimmen können, ist das vielleicht schwer verständlich.

Vielleicht wird es verständlicher, wenn Du folgende Zusatzbedingung hinzumimmst:
Die Widerstandskurve eines NTC-Widerstands verläuft logarithmisch

Und wenn Du diese Zusatzbedingung als bekannt annimmst, kannst Du die Widerstandskurve eines NTC-Widerstands tatsächlich aus nur zwei Punkten der Kurve ermitteln.

Sobald Du zu jeder Temperatur den Widerstand des NTC ("Temperaturfühler") kennst, dann kannst Du aus den Daten der Schaltung für Vorwiderstand, Betriebsspannung und gemessene Spannung jederzeit den aktuellen Widerstand des NTC ermitteln und von diesem widerum mit hoher Genauigkeit auf die aktuelle Temperatur zurückschließen.


kannst du deine Rechnung in einem Diagramm oder einer Excel Tabelle zeigen?


Sorry, Diagramm oder Excel-Tabelle, sowas kann ich nicht.

Wenn es Dir reicht, kann ich Dir die noch zusätzlich notwendigen Formeln herleiten, so daß Du am Ende aus den Schaltungsdaten (NTC-Konstante B wie oben vorgerechnet, Vorwiderstand, Betriebsspannung) und dem Meßwert (analogRead am Pin) die Temperatur ausrechnen kannst, direkt in Arduino-Code.

Soll ich mal versuchen, das verständlich zusammenzuschreiben?

Scherheinz

Das wäre super! Ich versuche mir halt immer über Excel was herzuleiten, aber selbst wenn das klappt ist es noch schwierig das Ganze in den Arduino zu bekommen  ;)

Hab gerade noch was gefunden....

http://e30-talk.com/attachments/elektrik/141061d1352352184-zusatzinstrumente-durchmessen-vergleichen-vdo-temp-geber_kennlinien.pdf

maeckes

#9
Mar 24, 2013, 05:14 pm Last Edit: Mar 24, 2013, 05:21 pm by maeckes Reason: 1
Tach!

Ich mache zur Zeit genau das Gleiche wie Du.

Also die Temp.-Sensoren von Koso sind 10k NTC's.

Ich kann Dir gerne meinen Code zur Verfügung stellen, dann kannst Du mit dem NTC + Spannungsteileraufbau einfach Deine Temperatur errechnen.
Zum Spannungsteileraufbau:
http://www.nextit.de/2011/07/thermometer-mit-arduino/

Hier kannst Du mein Projekt sehen:
http://arduino.cc/forum/index.php/topic,148346.0.html
Am Ende gibts auch nen kleines Video zum Ist-Stand.

Scherheinz

Also mein VDO ist ein 1K NTC. Bin gerade dabei mir die Widerstandstabelle anzuschauen

jurs

#11
Mar 24, 2013, 09:42 pm Last Edit: Oct 07, 2013, 10:29 am by jurs Reason: 1

Das wäre super! Ich versuche mir halt immer über Excel was herzuleiten, aber selbst wenn das klappt ist es noch schwierig das Ganze in den Arduino zu bekommen  ;)


So hier zunächst mal die Herleitung der Formeln. Um weitgehend konform mit den Datenblättern der NTC-Hersteller zu sein, bezeichne ich im folgenden die Nenntemperatur des NTC als T0, den Nennwiderstand als R0 (also etwas abweichend wie oben bei der Herleitung der Materialkonstanten B).

Die Schaltung: Temperatur-Messschaltung mit NTC/Thermistor

[font=Courier]VB -----<Vorwiderstand>-----<NTC-Messwiderstand>----- Ground 0V
5V            RV         |        RN
                        |      
                        |      
                       VA
                   Analogeingang
                     am Arduino
[/font]
mit
VB = Betriebsspannung des Arduino (irgendwo bei ca. 5V)
RV = Vorwiderstand
RN = Widerstand des NTC (temperaturabhängig!)
VA = Spannung am Arduino-Messeingang

Es gelte die vereinfachte Annahme, dass der Analogeingang des Arduino so hochohmig sei,
dass dort kein Strom hindurchfließt, sondern der Strom rein von VB über den Vorwiderstand,
und den NTC-Widerstand nach Ground fließe.

Dann gilt jeweils das Ohmsche Gesetz (U=R*I):

VA = RN*I
VB = (RV+RN)*I             |Gleichungen dividieren

VA/VB= (RN*I)/((RV+RN)*I)  |I kürzen

VA/VB= RN/(RV+RN)          |*(RV+RN)

VA/VB*(RV+RN)= RN          |weiter umformen

RV*VA/VB + RN* VA/VB = RN

RV*VA/VB = RN - RN*VA/VB

RV*VA/VB = RN(1-VA/VB)

RN= RV*VA/VB / (1-VA/VB) ==> Formel für den Widerstand des NTC-Widerstands!

Weiter geht's mit einer Formel aus dem NTC-Datenblatt eines beliebigen Herstellers von NTC-Widerständen
T = T0 * B / (B + T0 * ln(RN / R0))

Falls die Materialkonstante B aus einem Datenblatt bekannt ist, kann man diese zur Berechnung verwenden. Und falls man nur zwei Wertepaare aus Temperatur und Widerstand hat, kann die Konstante selbst berechnet werden. Ich habe deshalb mal zwei Funktionen gemacht, und zwar zur Verwendung bei bekannter Materialkonstante B aus einem Datenblatt:
float temperature_NTCB(float T0, float R0, float B, float RV, float VA_VB)

Und falls man die Materialkonstante B nicht hat, aber dafür zwei Wertepaare für Temperatur und Widerstand:
float temperature_NTC(float T0, float R0, float T1, float R1, float RV, float VA_VB)

Die einzelnen Parameter sind im Code nochmal erklärt. Die Variable "VA_VB" bezeichnet das Verhältnis aus Spannung am NTC geteilt durch die Betriebsspannung. Praktischerweise ermittelt der Aruino genau dieses Verhältnis in 1024 Schritten, so daß man an der Stelle einfach den Messwert des Analogpins geteilt durch den Maximalwert 1023.0 (das .0 damit es eine Float-Variable wird) übergeben kann.

Vielleicht mag mal jemand den Code testen. Ich habe gar keinen NTC hier.
Code: [Select]

// NTC temperature calculation by "jurs" for German Arduino forum
#define ABSZERO 273.15
#define MAXANALOGREAD 1023.0

float temperature_NTCB(float T0, float R0, float B, float RV, float VA_VB)
// Ermittlung der Temperatur mittels NTC-Widerstand
// Version der Funktion bei gegebener Materialkonstante B
// Erklärung der Parameter:
// T0           : Nenntemperatur des NTC-Widerstands in °C
// R0           : Nennwiderstand des NTC-Sensors in Ohm
// B            : Materialkonstante B
// Vorwiderstand: Vorwiderstand in Ohm  
// VA_VB        : Spannungsverhältnis "Spannung am NTC zu Betriebsspannung"
// Rückgabewert : Temperatur
{
 T0+=ABSZERO;  // umwandeln Celsius in absolute Temperatur
 float RN=RV*VA_VB / (1-VA_VB); // aktueller Widerstand des NTC
 return T0 * B / (B + T0 * log(RN / R0))-ABSZERO;
}


float temperature_NTC(float T0, float R0, float T1, float R1, float RV, float VA_VB)
// Ermittlung der Temperatur mittels NTC-Widerstand
// Version der Funktion bei unbekannter Materialkonstante B
// Erklärung der Parameter:
// T0           : Nenntemperatur des NTC-Widerstands in °C
// R0           : Nennwiderstand des NTC-Sensors in Ohm
// T1           : erhöhte Temperatur des NTC-Widerstands in °C
// R1           : Widerstand des NTC-Sensors bei erhöhter Temperatur in Ohm
// Vorwiderstand: Vorwiderstand in Ohm  
// VA_VB        : Spannungsverhältnis "Spannung am NTC zu Betriebsspannung"
// Rückgabewert : Temperatur
{
 T0+=ABSZERO;  // umwandeln Celsius in absolute Temperatur
 T1+=ABSZERO;  // umwandeln Celsius in absolute Temperatur
 float B= (T0 * T1)/ (T1-T0) * log(R0/R1); // Materialkonstante B
 float RN=RV*VA_VB / (1-VA_VB); // aktueller Widerstand des NTC
 return T0 * B / (B + T0 * log(RN / R0))-ABSZERO;
}


void setup()
{
 Serial.begin(9600);
}


#define ANALOGPIN A2

void loop()
{
 float T0=60;    // Nenntemperatur des NTC-Widerstands in °C
 float R0=221.2; // Nennwiderstand des NTC-Sensors in Ohm
 float T1=120;   // erhöhte Temperatur des NTC-Widerstands in °C
 float R1=36.5;  // Widerstand des NTC-Sensors bei erhöhter Temperatur in Ohm
 float Vorwiderstand=100; // Vorwiderstand in Ohm  
 float temp;    
 int aValue=analogRead(ANALOGPIN);
 
 // Berechnen bei unbekannter Materialkonstante
 temp=temperature_NTC(T0, R0, T1, R1, Vorwiderstand, aValue/MAXANALOGREAD);
 Serial.print("NTC : ");Serial.print(temp);Serial.println(" C");
 // Berechnen bei bekannter Materialkonstante B=3933;
 temp=temperature_NTCB(T0, R0, 3933, Vorwiderstand, aValue/MAXANALOGREAD);
 Serial.print("NTCB: ");Serial.print(temp);Serial.println(" C");
 delay(1000);
}

Eaglebiker

Ich mache das folgender maßen

5V--------2k7 1%----------KTY81/110---------GND

Zwischen dem 2k7 und dem KTY gehe ich zum Analogeingang
da das KFZ Bordnetz Störungen verursacht würde ich noch eine Schutzschaltung für den Analog eingang empfehlen

siehe anhang

michael_x

Quote
da das KFZ Bordnetz Störungen verursacht würde ich noch eine Schutzschaltung für den Analog eingang empfehlen


Mal abgesehen davon, dass Schutzschaltungen nie schaden,
verstehe ich das so, dass die Schaltung von den 5V des Arduino gespeist wird ( die auch als Aref verwendet werden kann / sollte ).

Zu meinem Versändnis:
Wie kommen da Störungen zustande, vor denen die Zusatz-Schaltung schützen soll ?
(Woher man saubere 5V her kriegt, ist eine andere Frage)

Eaglebiker

Störungen können zb über die masseleitung kommen
zb von der Zündanlage Zündspulen etc auch die Lichtmaschine kann Störungen im Bordnetz verursachen
wie du saubere 5V bekommst kannst du hier sehen


Go Up