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.
Hi Du kannst den NTC mit einem zusätzlichen Widerstand in einem bestimmten Bereich linearisieren. MfG Spess
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
> Der LM336 eignet sich nicht als Temperatursensor (ist eine > Referenzspannungsquelle). Du meinst wohl den LM335 Oh, stimmt.
Vielen Dank für die Informationen. Ich muss mich jetzt erst einmal durchkämpfen und über meinen Fortschritt berichten.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.