PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperatursensor bis 150°C gesucht



bnitram
20.09.2015, 10:37
Hallo zusammen,
ich bin derzeit auf der Suche nach einem Temperatursensor der bis zu 150°C messen kann. In der späteren Anwendung wird er hauptsächlich Temperaturen zwischen 70-140°C messen werden.
Ich würde am liebsten einen Digitalen Sensor nehmen, um mir die Rechnerei zu ersparen, aber ich habe kaum bzw. keinen gefunden der diesen Bereich abdeckt.
Wenn ich einen NTC nehmen würde, was macht dann mehr Sinn? Eine Konstantstromquelle oder einfach nur einen 2. Widerstand in Reihe schalten?
Die Genauigkeit kann ruhig 2-3° betragen. So genau muss es nicht sein. Welchen Mikrocontroller ich verwende steht noch nicht ganz fest, aber es wird ein Atmel sein.
Oder habt Ihr eine ganz andere Idee? Bin für jeden Vorschlag offen.

Ich hoffe Ihr könnt mir da weiter helfen :)

MfG
Martin

PICture
20.09.2015, 10:46
Hallo!


Wenn ich einen NTC nehmen würde, was macht dann mehr Sinn? Eine Konstantstromquelle oder einfach nur einen 2. Widerstand in Reihe schalten?

Bei einem unlinearem NTC ist es egal. Sonst ist ein 2. Widerstand einfacher. ;)

White_Fox
20.09.2015, 11:41
Hm...ich würde lieber eine Konstantstromquelle spendieren und den Widerling mit Vierleitermessung ausmessen.

Und soviel Rechnerei ist das doch gar nicht...ohmsches Gesetz, wenn du die Kennlinie zu unlinear wird läuft das ganze vielleicht auf eine Funktion 2. Grades hinaus. Sorgen um die Rechnerei würde ich mir erst dann machen, wenn du in ASM programmieren mußt UND dir die ganzen mathematischen Funktionen noch programmieren mußt (wobei es dazu bereits im Netz genug Quellcode gibt der mit K+E übernommen werden kann), also selbst das wäre kein Hexenwerk. Deinen Anforderungen nach scheint ja eine 8-Bit-Auflösung locker auszureichen.


Oder habt Ihr eine ganz andere Idee? Bin für jeden Vorschlag offen.
Wie lautet denn die Aufgabe?

bnitram
20.09.2015, 13:16
Hallo zusammen,
danke erstmal für die schnellen Antworten!
Ich programmiere in Bascom. Da macht rechnen eher wenig Spaß. Ich dachte bisher immer das ein NTC bzw. ein PTC nie linear verläuft. Gibt es etwa lineare?
Ich hab das mal ne runde gegoogelt und man ließt immer nur das die "linearen" ebenfalls exponentiell verlaufen.
Ja, ein Widerstand ist um Welten einfacher. Wenn ich damit mein Ziel(70-140°C mit 2-3° Genauigkeit) erreichen kann, wäre das natürlich schon eine Ideale bzw preiswerte Lösung.


Wie lautet denn die Aufgabe?
Die Aufgabe lautet: Eine Temperatur zwischen 70-140°C messen können und den Sensor mittels Atmel auslesen können ;)

Das ganze soll später bei meinem Modellbau Verbrennungsmotor die Temperatur überwachen und gegeben falls eine Art Notlauf auslösen.

Was für eine art von Sensor würdet Ihr denn nehmen ?

MfG
Martin

PICture
20.09.2015, 13:32
Ich würde dir bis 150 °C den linearen LM35 empfehlen: http://www.datasheetcatalog.com/datasheets_pdf/L/M/3/5/LM35.shtml .

White_Fox
20.09.2015, 16:53
Wirklich lineare Widerstandskennlinien gibt es nicht. Nur solche, die innerhalb eines gewissen Bereichs annähernd linear sind.


Ich programmiere in Bascom. Da macht rechnen eher wenig Spaß.
Wieso? Ausdrücke wie b*(a*a)+c*a sollte doch selbst Bascom verarbeiten können. Oder nicht?

bnitram
20.09.2015, 17:37
Hallo nochmal,
danke für den Tipp mit dem LM35. Ich denke der wirds werden. Kompakt, aber trotzdem schon mit einem gescheitem Ausgang! So muss das sein. Zudem hat der Sensor selbst bei 140°C noch eine gute Genauigkeit.


Wieso? Ausdrücke wie b*(a*a)+c*a sollte doch selbst Bascom (http://www.rn-wissen.de/index.php/Bascom) verarbeiten können. Oder nicht?
Nicht direkt. Man muss jeden Schritt in einer neuen Zeile rechnen. Das heißt man braucht jede Menge zwischen Variablen und muss selbst beachten wann was zuerst usw. gerechnet werden muss. Ist also nicht ganz so einfach...

Ich wollte ja schonmal auf C umsteigen, war mir aber damals zu komplex. Vielleicht kommt das ja aber auch noch mal irgendwann.

MfG
Martin

- - - Aktualisiert - - -

Ok... Auf der Suche nach dem LM35 hat sich ein kleines Problemchen ergeben.
Man findet in der Regel nur den LM35DZ. Dieser geht jedoch nur bis 110°C. Die einigen die bis 150°C gehen, sind in einem Metallgehäuse eingefasst und sind leider zu groß, als das ich diese in der nähe des Zylinderkopfes montieren könnte. Demnach wider alles auf Anfang und eine alternative suchen / finden.

LG

WL
20.09.2015, 19:52
http://www.reichelt.de/?;ACTION=3;LA=2;GROUP=B6;GROUPID=3190;ARTICLE=8232 6;START=96;SORT=artnr;OFFSET=16;SID=25zs3KsqwQARkA AGnc1zsf7eb82d455ddfea6a6521db4cd99c484

White_Fox
20.09.2015, 20:11
Ich wollte ja schonmal auf C umsteigen, war mir aber damals zu komplex. Vielleicht kommt das ja aber auch noch mal irgendwann.

C sieht nur komplex aus wegen den geschweiften Klammern. Bascom verschint dich nur mit den richtigen Registerbezeichnungen, die stehen aber alle im Datenblatt, probiers mal aus.

BMS
21.09.2015, 18:08
Hallo,
hier gibt es noch etwas Lesestoff, das für die Auswahl hilfreich sein könnte:
https://www.mikrocontroller.net/articles/Temperatursensor
Grüße, Bernhard

Tomy83
21.09.2015, 19:24
Bist du dir sicher das 140°C ausreichen werden? an meinen Verbrenner hab ich schon gut über 200°C gemessen. Und meistens läuft der mit 140-160°C.
Gemessen wird da am Zylinderkopf in den Kühlrippen, mit einen NTC und an der Funke angezeigt (Telemetrie). Obwohl ich die Messung der Glühkerze per Infrarot aussagekräftiger finde.

Falls du nicht rechnen willst, wie wäre es mit einer Tabelle? 70-140 sind ja nur 70 Werte, 256 sind ja problemlos möglich.

P.S. den Umstieg von Bascom auf C habe ich auch wegen der rechnerrei gemacht, und nie bereut. So schlimm fand ich das auch nicht, mit der Einarbeitungszeit.

Crazy Harry
21.09.2015, 20:09
NTC mit Parallel- und, je nach Widerstandsbereich, Reihenwiderstand. Messbrücke, OP und an den ADC des uC.
Oder einen PT1000 .... ebenfalls Brücke und OP.

Gruss
Harry

bnitram
21.09.2015, 20:24
Danke nochmals für die ganzen Antworten :)

hier gibt es noch etwas Lesestoff
die Seite habe ich mir gefühlt schon 100 mal angeschaut und gelesen. Trotzdem Danke.
Leider sind nur recht wenig Sensoren mit einer so hohen Temperatur dabei...

Ich seh schon.. Ich sollte wohl eher früher als später auf C umsteigen.


Bist du dir sicher das 140°C ausreichen werden?
Nur als gegenfrage: Hasst du ein Auto mit Verbrenner? Ich besitze nämlich ein Flugzeug. Ich glaube da gibt es große Temperatur Unterschiede. Schließlich hat man ja nicht nur den Fahrt bzw Flugwind sondern auch noch einen riesen Rotor der ordentlich für Durchzug sorgt.
Im Internet habe ich öfters gelesen das die Temperatur die 130-140°C nicht überschreiten sollte.

Ich habe mir deshalb die Idee in den Kopf gesetzt die Temperatur zu messen, da ich derzeit dabei bin meinen Nitro Motor auf Benzin-Öl Gemisch umzubauen und da öfters drüber geschrieben wird, das es anschließend Thermische Probleme gibt. Bei Flugzeugmotoren ließt man aber eher selten davon und in der Regel gibt es viele Leute die von einem Jahrelangen Benzin Betrieb berichten können.

Wie müsste ich dann diese Tabelle bestimmen? Einfach die Widerstandswerte berechen, die bei den Temperaturen auftreten und diese nur noch einem ADC Wert zu ordnen?

MfG
Martin

Tomy83
22.09.2015, 11:14
Ja habe ein Auto, da hab ich das mit dem Flugzeug wohl überlesen.

Tabelle ist ganz einfach. Es wird jeden ADC wert eine Temperatur zugeordnet. Ich glaube bei bascom sind 255 Werte möglich. Da war irgendwas mit looktab oder ähnlich...

Läuft der Motor dann mit Zünd- oder Glüh-Kerze? Bei ersterer könnte man ja den Wiederstand der Kerze messen. Der Wiederstand sollte sich ja mit der Temperatur ändern. Ob das geht weiß ich aber nicht.

Willst du einen elektronischen Vergaser bauen, der bei zu hoher Temperatur das Gemisch einfettet?

bnitram
22.09.2015, 11:52
Hallo Tomy83,
naja, mit dem Flugzeug das stand ja bisher nirgendwo. Bisher hatte ich ja nur geschrieben das es sich um einen Modellbau Motor handelt.
Ah ok. Ja, mit lookup habe ich schon mal gearbeitet. Dann werde ich mir mal einen "schönen" NTC heraussuchen.

Der Motor wird nach dem Umbau mittels Zündkerze betrieben. Benzin und Glühkerze würde nicht funktionieren. Es gibt aber extra für kleine Motoren und für Motoren die man umbauen möchte, Zündkerzen mit dem selben Gewinde wie bei den Glühkerzen. Die Zündanlage bekommt dann vorne an der Kurbelwelle noch einen Sensor um den Zündzeitpunkt zu bestimmen. Der Vorteil von Benzin mit Zündung: Der Motor läuft ruhiger wegen dem exakten Zündzeitpunkt und der Automatischen Zündzeitpunktverstellung je nach Drehzahl und der Motor braucht etwa nur noch die halbe Menge an Sprit. Zudem ist ein Benzin-Öl Gemisch wesentlich preiswerter als Nitro Suppe.
Janein. Ich werde einfach nur das Gas Servo über den Controller laufen lassen. Also ehr in Richtung, wenn zu Heiß, dann weniger Gas. Ein elektronischer Vergaser wäre natürlich Top, aber dann müsste ich vermutlich auch die Luftmasse messen, da sich diese im Flug oder je nach Flugplatz ändert.

MfG
Martin
PS: Solltest du weitere Infos über den umbau haben wollen, kann ich dir diese per PN geben. Hier gehts ja eigentlich um die Temperaturmessung ;)

Tomy83
22.09.2015, 13:04
Danke für dein Angebot, aber ich befürchte mir würde die Zeit zum Umbau fehlen. Dann lieber gleich Brushles, macht im Car mehr Sinn.
Könnte man die Luftmenge den nicht auch aus Kückenstellung und Drezahl bestimmen? Diese Werte hast du ja schon. O.K. Ist offtopic.

bnitram
22.09.2015, 19:52
Allesklar.
Ich glaube nicht das das funktioniert. Wenn das Drosselkücken ja verstellt wird, dann ändert sich ja nicht nur der Luftdurchsatz sondern auch die Benzinzufuhr. Das würde bedeuten das bei einer geringeren Luftmasse das Gemisch sofort anfettet.
Der Luftmassenmesser misst ja eigentlich nur die Luftmasse bzw. früher einfach den Luftdurchsatz und stellt dann die Drosselklappe bzw. die Nadelstellung nach, so das bei jeder Luftmasse immer das gleiche Luft Benzin Gemisch angesaugt werden kann.
Wenn man das umsetzten könnte wäre das natürlich optimal, da man dann nicht mehr so viel "ausprobieren" müsste, da sich das Gemisch je nach Flughöhe immer etwas verändert.

Ich habe mittlerweile auch ein schönes Tool zum erstellen der Tabelle gefunden:
http://www.preis-ing.de/index.php/de/extras/alle-berechnungen/automatisches-erzeugen-einer-ntc-tabelle?points=256&unit=1&resolution=8+Bit&circuit=pullup&resistor=10000&r25=10000&beta=3480&tmin=0&tmax=200
Ist zwar für C aber die Tabelle bleibt ja gleich.
Einzige Frage, wie groß lege ich den Widerstand aus. Ich hab mal von dem halben Ohm-Wert des NTCs im Messbereich gelesen. Also den Widerstand den der Sensor bei mir bei etwa 100°C hätte. Stimmt die Tabelle dann noch oder muss ich etwa doch selber arbeiten ? ;)

MfG
Martin

Tomy83
22.09.2015, 20:17
schönes Tool.
Wenn ich daml mit den Werten ein bischen rumspiele, dann würde ich lieber einen wesentlich größeren Wiederstand nehmen(z.B. 5x). Das erhöt die Auflösung.

Ich würde trotz aller Mathematik den Sensor nochmal abgleichen. Im Eiswasser sind ja immer 0°C, das sollte dann auch stimmen.

Den Fall Drahbruch/Kurzschluß im Programm zu berücksichtigen wäre vielleicht keine schlechte Idee. Nicht das der µC das Gas zu macht, obwohl nur der Sensor spinnt.

OT: das mit dem Gemisch einstellen hat mich schlußendlich zu den Brushless-Motoren getrieben(Zweitwagen). Das macht dann mehr Spaß als Frust ;-)

bnitram
23.09.2015, 18:41
Ich glaube aber auch das das Tool die Widerstände bei 25°C verwendet.
für mich macht es glaube ich mehr Sinn den 2. Widerstand so zu wählen, das er in der Richtung von dem NTC bei etwa 100° liegt. Somit müsste ich im Umfeld von 100° doch relativ genau sin oder ?
Temperaturen unter 70° sind ja nicht wichtig, da diese nur am Anfang auftreten.

Die Idee mit dem Drahtbruch und dem Kurzschluss ist echt gut ! Werde ich mit einbauen. Danke :)

MfG
Martin

schorsch_76
23.09.2015, 19:08
Ich hab bei meiner Heizungssteuerung genau diese Aufgabe so gelöst:

Hier lasse ich genau 0.88mA durch den KTY-81 und kann damit exakt sagen, nach Tabelle, welcher Widerstand anliegt. Der µC hat im EEPROM eine Stützpunkttabelle welche R auf Temperatur abbildet (aus dem Datenblatt abgetippt). Liegt die Spannung zwischen 2 Stützpunkten wird linear interpoliert. So komme ich mit einem MAX1270 (ok, teuer *hust* aber 12 Bit) auf unter 1°C Genauigkeit. Mit dem eingebauten ADC geht das ganze auch aber die Auflösung ist etwas schlechter.

30708



const sensorvalues_flash t_kt81_110[] PROGMEM =
{ // r t
{ 490, -55},
{ 515, -50},
{ 567, -40},
{ 624, -30},
{ 684, -20},
{ 747, -10},
{ 815, 0},
{ 886, 10},
{ 961, 20},
{ 1000, 25},
{ 1040, 30},
{ 1122, 40},
{ 1209, 50},
{ 1299, 60},
{ 1392, 70},
{ 1490, 80},
{ 1591, 90},
{ 1696, 100},
{ 1805, 110},
{ 1915, 120},
{ 2023, 130},
{ 2124, 140},
{ 2211, 150},
};

const sensorvalues_flash t_kt81_210[] PROGMEM =
{ // r t
{ 1383, -20},
{ 1408, -18},
{ 1434, -16},
{ 1459, -14},
{ 1485, -12},
{ 1511, -10},
{ 1537, -8},
{ 1563, -6},
{ 1590, -4},
{ 1617, -2},
{ 1644, 0},
{ 1671, 2},
{ 1699, 4},
{ 1727, 6},
{ 1755, 8},
{ 1783, 10},
{ 1812, 12},
{ 1840, 14},
{ 1869, 16},
{ 1898, 18},
{ 1928, 20},
{ 2002, 25},
{ 2078, 30},
{ 2155, 35},
{ 2234, 40},
{ 2314, 45},
{ 2395, 50},
{ 2478, 55},
{ 2563, 60},
{ 2648, 65},
{ 2735, 70},
{ 2824, 75},
{ 2914, 80},
{ 3005, 85},
{ 3098, 90},
{ 3192, 95},
{ 3287, 100},
};



Um den langsammen Zugriff auf den Flash zu reduzieren, nutze ich eine binäre Suche, so brauche ich nur log(n)/log(2) zugriffe statt n:
Das bedeutet, statt 37 Versuchen beim kt81_210 brauche ich nur log(37)/log(2) = 6.


avr::units::temperature
convert(sensor_t s, avr::units::resistor r)
{
sensorvalues t1, t2;

const sensorvalues_flash* current = &t_kt81_210[0];
switch (s)
{
case kt81_210: current = &t_kt81_210[0]; break;
case kt81_110: current = &t_kt81_110[0]; break;
}

// binary search without recursion
unsigned char st = 0;
unsigned char en;
unsigned char m;
switch (s)
{
case kt81_210: en = sizeof(t_kt81_210)/sizeof(sensorvalues_flash)-2; break;
case kt81_110: en = sizeof(t_kt81_110)/sizeof(sensorvalues_flash)-2; break;
default:
return 0.0_celcius;
}

sensorvalues_flash tmp;
while (en-st>1)
{
m = st + (en-st)/2;
memcpy_P(&tmp, &current[m], sizeof(sensorvalues_flash)); t1 = tmp;
if (r > t1.r) // if we use at sometime a NTC, we need to adjust this
{
// right side
st = m;
}
else
{
// left side
en = m;
}
}

// read the best matching lines
memcpy_P(&tmp, &current[st+0], sizeof(sensorvalues_flash)); t1 = tmp;
memcpy_P(&tmp, &current[st+1], sizeof(sensorvalues_flash)); t2 = tmp;

// interpolate
resistor dr = t2.r-t1.r;

float f = static_cast<float>((r-t1.r)/dr);
return t1.t+(t2.t-t1.t)*f;
}

Hier wird eingelesen. vom ADC wird dann in Volt gewandelt. Über R=V/I wird dann R berechnet, welcher dann über die obige convert Funktion in Temperatur umgewandelt wird.
sys.configuration.adc_constant_current[avr::free_7-active_adc] enthält den exakt gemessenen Konstantstrom welcher über das Menü angepasst werden kann. (Messung per Scopemeter)



tmp = (uint16_t(in[0]) << 8) | uint16_t(in[1]);
tmp = tmp >> 4; // shift the last 4 zero bits out
sys.max1270_select.on();

// fill the sensor structure
sys.sensor.dt = sys.dt;

using namespace avr::units;
voltage v((float(tmp)/(1<<12))*5.0f);
resistor r = v/sys.configuration.adc_constant_current[avr::free_7-active_adc];

// prevent short spikes

if (abs(tmp-sys.sensor.raw[avr::free_7-active_adc]) < 10 || first[active_adc])
{
first[active_adc] = false;
sys.sensor.raw[avr::free_7-active_adc] = tmp;
sys.sensor.temperature[avr::free_7-active_adc] =
convert(sys.configuration.adc_sensor_type[avr::free_7-active_adc],r);
}