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
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.
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.
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.
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.
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
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.
> 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
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
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
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.
@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
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.
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
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.