Forum: Mikrocontroller und Digitale Elektronik Temp. Meesung mit NTC


von thomas (Gast)


Lesenswert?

Hallo Forum,
es tut mir leid, wenn ich ein altes Thema wieder auffrische. Ich habe 
die letzte Zeit sehr viel zu diesem Thema gegoogelt, aber so richtig 
schlau bin ich nicht geworden. Ich habe folgendes Problem: Ich möchte 
mit einem AVR und einem NTC auf einfachste (also billigste) Art und 
Weise Temperaturten messen. Ich habe nun folgende Formel zur 
Linearisierung der NTC-Kennlinie gefunden, hier im Forum (A = R25 * e ^ 
(-B/T25)) wobei A der linearisierte Widerstand ist. Wie soll ich in 
Assembler die Funktio e^ programmieren? Kann mir jemand einen Tip geben?
Ich möchte unbedingt die billigen NTC's von Reichelt nehmen, da ich sehr 
viele Temperaturen messen möchte. Ich möchte auch keine 
Kostantstromquelle einbauen, einfach einen AVR nehmen 6 NTC anschliesen 
und auf der anderen Seite den PC und fertig.

Im vorraus vielen Dank

von Karl H. (kbuchegg)


Lesenswert?

thomas schrieb:

> (-B/T25)) wobei A der linearisierte Widerstand ist. Wie soll ich in
> Assembler die Funktio e^ programmieren?

Schreibs in C.
Es gibt keinen Grund aufwändigere Projekte, noch dazu wenn sie 
kompliziertere Formeln enthalten, in Assembler zu schreiben.

In C schreibst du einfach   exp( xy ), bindest die Mathe Lib ein und 
fertig. In Assembler scheisst du da elends lang rum.

von Rainer U. (r-u)


Lesenswert?

oder - wenn es einfach / Assembler sein soll, rechne die Werte vorher 
aus und leg Dir eine Tabelle an. Zwischen den Tabelleneinträgen nimmst 
Du einfach einen linearen Verlauf an. Je mehr Tabelleneinträge, je 
genauer. Ist ohnehin die Frage, ob alle NTCs gleich reagieren - 
wahrscheinlich mußt Du ohnehin kalibrieren.

von Spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Du kannst den NTC mit einem zusätzlichen Widerstand in einem bestimmten 
Bereich linearisieren.

MfG Spess

von Stefan B. (stefan) Benutzerseite


Lesenswert?

thomas schrieb:

> Wie soll ich in
> Assembler die Funktio e^ programmieren? Kann mir jemand einen Tip geben?

Du könntest nach einer einfacher zu berechnenden Ersatzfunktion suchen.

Wenn der Wertebereich für den Ausdruck (-B/T25) in -43,6 < x < 43,6 
liegt z.B. http://www.lxhp.in-berlin.de/lhputils.html#e (willkürlicher 
Treffer in Google-Suche e-funktion + Assembler)

Oder das Näherungsverfahren auf http://www.quinapalus.com/efunc.html

Ein anderer Weg wäre, eine Lookup-Tabelle mit vorberechneten Werten zu 
benutzen. Wieviele Werte du brauchst, hängt von der gewünschten 
Auflösung und dem Wertebereich ab.

von MaWin (Gast)


Lesenswert?

Das Problem beim NTC ist ein anderes als die Linearisierung.

Du nutzt den A/D-Eingang Messbereich nicht aus.

Der NTC ändert seinen Widerstand beispielsweise nur von 22.3k (bei 0 
GradC) auf 6.5k (bei 40 GradC).

Wenn du ihn zusammen mit einem 10k Widerstand als Spannungsteiler an den 
A/D-Wandler anschliesst, misst du von 403 bis 706, also nur 300 Werte 
der möglichen 1024.

Es ist (in Assembler) nun kein Problem, eine Tabelle über 300 (oder 
1024) Werte aufzunehmen mit dem PC vorausgerechnten Temperaturen für 
diese A/D-Wandler Eingangswerte, oder die Umwandlung gleich den PC 
vornehmen zu lassen.

Die billigsten NTC bei Reichelt kosten übrigens 33ct. Bei Pollin gäbe es 
den NTC 220650 für 15ct und den LM336Z-2.5 für 20ct und den KTY10-5 für 
50ct die auch alle als TempSensor arbeiten.

von Anja (Gast)


Lesenswert?

MaWin schrieb:
> Du nutzt den A/D-Eingang Messbereich nicht aus.

Dafür hat ein NTC normalerweise mindestens die doppelte Empfindlichkeit 
wie ein Silizium-Sensor.

MaWin schrieb:
> den LM336Z-2.5 für 20ct

Der LM336 eignet sich nicht als Temperatursensor (ist eine 
Referenzspannungsquelle). Du meinst wohl den LM335 (Temperatursensor) 
oder den LM334 (Temperaturabhängige Konstantstromquelle).

Ich würde den NTC abschnittweise linearisieren. Wählt man die 
Linearisierungsbereiche kleiner als 30 Grad so läßt sich mit einer 
Geradeninterpolation der Fehler kleiner als 0,3 Grad halten.
In der Industrie verwendet man Linearisierungskennlinien wo aus dem 
ADC-Wert dann direkt in Grad Celsius gewandelt wird. Je nach 
Temperaturmeßbereich werden 15 - 35 Stützstellen benötigt. Hierfür 
reicht Integer-Arithmetik (16 * 16 Bit signed Multiply mit 32 Bit 
Ergebnis) und 32 / 16 Bit Division locker aus wenn man entsprechend 
skaliert (z.B. in Zehntelgraden).

Gruß Anja

von MaWin (Gast)


Lesenswert?

> Der LM336 eignet sich nicht als Temperatursensor (ist eine
> Referenzspannungsquelle). Du meinst wohl den LM335

Oh, stimmt.

von thomas (Gast)


Lesenswert?

Vielen Dank für die Informationen. Ich muss mich jetzt erst einmal 
durchkämpfen und über meinen Fortschritt berichten.

von thomas (Gast)


Lesenswert?

So, ich habe jetzt die Infos mal durchstöbert. So richtig will mir dies 
nicht helfen. Der Ansatz der am meistversprechenden wäre, wäre der mit 
der vereinfachten Formel, nur kann ich den nicht ganz nachvollziehen, 
will heißen, ich kann die Formel nicht vereinfachen. Vielleicht hatt den 
jemand von Euch eine Formel auf der Hand, mit der ich einen NTC 
berechnen kann und in der nur Addition, Subtraktion, Multiplikation und 
Division vorkommen. Damit wäre mir schon sehr geholfen. Ich stelle mir 
die Sache so vor: Wenn ich den Kontroller in Betrieb nehme, wähle ich 
einen NTC aus, halte diesen erst in Eiswasser und drücke die Kalib-Taste 
und danach in Kochendes Wasser und drücke die Kalib-Taste und damit wäre 
dann die Sache getan. Alles andere übernimmt der Prozessor selbst. So 
eine Lösung versuche ich zu verwirklichen, alles andere mit Tabellen 
usw. ist so nicht ganz mein Ding, einfach zu aufwendig. Ich benötige 
mehrer solcher Bausteine, und wenn ich für jeden NTC so viel Aufwand 
treiben muß, ist das einfach nicht mein Ding.

von Olaf (Gast)


Lesenswert?

> will heißen, ich kann die Formel nicht vereinfachen.

Tip doch bei Google mal e Funktion und Reihenentwicklung ein.

Und dann machst du einen neuen Thread auf weil du nicht weisst wie du 
die Fakultaet in Assembler berechnest. :-)

Oder maehe doch bei deinen Nachbarn fuer 5Euro/h den Rasen. Vermutlich 
kannst du dir dann in kurzer Zeit sechs der LMxxx Sensoren leisten.

Olaf

von Anja (Gast)


Lesenswert?

thomas schrieb:
> Ich benötige
> mehrer solcher Bausteine, und wenn ich für jeden NTC so viel Aufwand
> treiben muß, ist das einfach nicht mein Ding.

Wenn Du einen Bereich von 0..100 Grad überstreichen willst hast Du 3 
Möglichkeiten:
1. Du kannst entweder eine Linearisierungskurve verwenden und mit dem 
Restfehler von ca 3 Grad leben (ganz ohne Abgleich)

2. Du verwendest einen Digitalen Sensor wie den DS18S20 und hast 0,5 
Grad Genauigkeit. (ganz ohne Abgleich)

3. Du nimmst einen Analogen Sensor wie den LM335 oder LM35 und eine 
Präzisionsreferenzspannung und lebst entweder mit 3 Grad Abweichung oder 
machst deinen Abgleich mit Eiswasser und kochendem Wasser bei 
definiertem Luftdruck.

Gruß Anja

von Charly B. (charly)


Lesenswert?

moin moin Thomas,

in welchem bereich (von x° - y°C) willst du denn messen ?,
und mit welcher aufloesung und genauigkeit ?,
und wieviele von den Geraeten brauchst du ?

vlg
Charly

von thomas (Gast)


Lesenswert?

also 1. Im Bereich von ca. -20 C bis ca. 100 C
Die Anzahl ist noch unbestimmt, aber ersten Schätzungen benötige ich 
mindestens 30 Stück.
Ich kann mir im Moment nicht vorstellen, daß es so schwierig ist mit 
einem NTC und einem Mikrokontroller Temperaturen von ca 0,5 C 
Genauigkeit zu messen. Die Praxis scheint da wirklich etwas anders zu 
sein als ich es mir vorstelle.

von Charly B. (charly)


Lesenswert?

@thomas

wenn i das richtig gesehn hab dann haben die NTC's eine toleranz
von 5%, wie willst du da 0,5°C genauigkeit ohne individuelles
eichen hinbekommen; darf i fragen dein wievieltes Projekt mit
Mikrocontroller das ist ?

vlg
Charly

von thomas (Gast)


Lesenswert?

Habe schon meherer kleinere Projekte. Dieses sollte eigentlich auch ein 
kleineres Projekt werden. So wie es aussieht, wird die ganze Sache 
langsam ein ausgewachesenes Projekt.
Wie schon gesagt, ich suche eine Formel mit der ich relativ einfach 
einen NTC linearisieren kann.

@wie willst du da 0,5°C genauigkeit ohne individuelles
eichen.

Ich schrieb in einer Pos,t s.o.
Wenn ich den Kontroller in Betrieb nehme, wähle ich
einen NTC aus, halte diesen erst in Eiswasser und drücke die Kalib-Taste
und danach in Kochendes Wasser und drücke die Kalib-Taste und damit wäre
dann die Sache getan.

von Charly B. (charly)


Lesenswert?

thomas schrieb:
>Wenn ich den Kontroller in Betrieb nehme, wähle ich
>einen NTC aus, halte diesen erst in Eiswasser und drücke die Kalib-Taste
>und danach in Kochendes Wasser und drücke die Kalib-Taste und damit wäre
>dann die Sache getan.

ist halt nur sehr zeitintensiv, das waehren 180 NTC zu kalibrieren,
ist das gerechtfertigt ?

ich arbeite auch mit NTC habe aber eine genauigkeit von cca 3°,
das reicht mir

warum brauchst du 0.5° ?, und ueber den gesammten bereich ?

vlg
Charly

von Thomas (Gast)


Lesenswert?

0,5 Grad bräuchte ich nur zwischen -10 und 35 Grad. Wir kommen aber 
etwas vom Thema ab. Wenn ich die Formel berechnen kann, dann kann ich 
auch in der Kalibrierung alle sechs Sensoren aufg einmal bei 0 C und bei 
100 C einstellen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.