Hallo! Ich möchte mit einem ATmega8 und einem NTC Temperaturmessungen durchführen. Den Chip programmiere ich in c mit Codevision. Der NTC ist in Serie mit einem Festwiderstand geschaltet. Nun muss ich ihn linearisieren. Ich habe jetzt mal die Spannungswerte ausgerechnet und ein Polynom and die Kurve angefittet. Ist dies ein empfehlenswerter Ansatz, das ganze kostet halt sehr viel Programmspeicher, und ich weiß noch nicht wie es mit der Performance ausschaut, wobei diese eigentlich eine untergeordnete Rolle spielt. Welche Möglichkeiten gibt gibt es als Alternative.
Hi Stephan, in welchem Bereich willst Du den den NTC einsetzen!? Wenn Du z.B.: den 44006 von Omega nimmst liegst Du im bereich von 0 - 50Grad bei +- 1Grad Error mit(10K)! Wenn Du z.B. etwas um die 55k nimmst! dann ist es ein Fehler um den 0,3Grad bereich!! Mußt Du dann echt noch eine lin. machen!? LG Tassilo
Du kannst einen KTY oder PT100 nehmen. Der ist schon sehr linear. Oder NTCs neuerer Bauart sind auch schon linearisiert. Du brauchst aber auf alle Fälle mal ein Datenblatt mit der Temperatur/Widerstandskennlinie. Grundsätzlich sorgt dein Widerstand bereits für eine gewisse Lin. Die besten Ergebnisse erntest du mit einer Konstantstromquelle (zB 1mA)mit der du den NTC versorgst. Am schnellsten gehts natürlich mit dem LM35 mit linearer Ausgangsspannung / Grad C. Aber es fehlen noch viele Details in deinen Angaben sodaß man nicht viel sagen kann (Genaugikeit, Messbereich usw.) SG Josef
Also die Vorgaben lauten: Temperaturbereich -20 bis 60°C und die Genauigkeit sollte im bereich von 1°C liegen. Wegen diesem recht großen Temperaturbereich reicht eben eine linearisierung mit dem Serieneiderstand nicht aus. Und das ganze soll so wenig wie möglich kosten. Da scheidet der PT gleich mal aus, weniger wegen dem Preis eines PT1000, aber der Aufwand wird zu groß,(OP Schaltung, Präzisionswiderstände).
TMP100 von TI. Kostet auch nicht die Welt und ist bequem per I2C auszulesen. Und präzise genug ist er locker (irgendwas um 0,25°C Genauigkeit IIRC). Da sparst du dir den ganzen Analog-Kram ...
Hi Stephan, die Aussage des Verbrauchs von viel Programmspeicher kann ich nicht nachvollziehen. Ich setzte einen KTY ein. Die Kalibrierung habe ich mit einem quadratischen polynom durchgeführt, entspricht den Angaben im Datenblatt. Zur Berechnung der Temperatur sind 3 Zeilen notwendign (Bascom-Basic, denke in C ist`s nicht bedeutend mehr. @Tassilo Vorsicht mit Erhöhung des Widerstands, gleichzeitig verschlechtert sich das SignalRausch-Verhältnis. Der Digits-Bereich bei gleichem Temp-Bereich wird kleiner! Gruß Messfux
Von -20 ... 60°C nimm den DS18B20, einfacher gehts nicht. Die ganze umständliche Rechnerei hat Dir dann nämlich schon Maxim abgenommen. Peter
apropos DS1820: hier im forum gab's vor einiger Zeit eine Diskussion, nun muss ich auch berichten: der weicht bei mir plötzlich auch um 3° von der tatsächlichen Temperatur, genau wie auch früher erwähnt; es handelt sich um die neue Serie von Maxim, habe ihn noch nie nass gemacht... irgendwie verwirrend, gute technik mit immer wiederkehrenden makeln
Das ist kein Makel, das ist Leseschwäche der Benutzer. ;-) In den Appnotes steht, dass man das Ding trocken lagern soll und vor dem Einlöten in die End-Schaltung bei 150°C soundsolange backen soll, damit alle Feuchtigkeit entweicht. Macht in der Realität natürlich keiner, aber nachher wundern sie sich alle, wieso der Sensor wohl in silica gel eingepackt war ...
@Sebastian, "Das ist kein Makel, das ist Leseschwäche der Benutzer." Ich habe bisher auch nichts derartiges gefunden. Kannst Du mal bitte sagen, welche Appnote das ist ? Ich hätte eigentlich erwartet, daß dieses Problem inzwischen behoben sein sollte. Peter
ja, ja, ich habe auch auf behebung des problems gehofft, deswegen habe ich ja verschiedene samples der neuen serie bestellt; was mir komisch vorkommt: 2 davon habe ich in metalgehäuse gesteckt und mit silikon vergossen; sie funktionieren im auto ( unter dem motor) schon seit 2 monaten fehlerfrei. der dritte hat eben nie meinen schreibtisch verlassen; und ausgerechnet er zeigt jetzt 3 grad zu viel... so nass ist es bei mir zu hause also wieder mal nicht :-)) das mit dem backen habe ich hier in forum gelesen; obwohl es mir absurd erscheint, habe ich ihn so 10 min gebacken, keine ahnung bei wieviel grad, meine frau hat dabei kuchen gebacken :-)) danach habe ich leider keine verbesserung festgestellt.. und übrigens, die werden gar nicht in silica gel geliefert, zumindest bei mir nicht und noch was: daimt behaupte ich nicht, das alle DSxxxx unbedingt schief gehen; ich habe hier insgesamt 8 stück , und davon hat nur einer bis jetzt das problem... und seltsamerweise hat bei mir noch nie ein i2c DS1621 etwas falsh gezeigt, nur die 1-wire devices... und mal ehrlich: wer will eigentlich sensoren vor dem löten "backen"? und wenn sie mal gebacken sind, dann werden sie doch im laufe der zeit wieder nass, oder? oder verpackt jemand seine sensoren luft/wasserdicht auch für in-door anwendungen?? da steige ich doch lieber auf lm75 um, die stehen ja auf jeder motherboard, sind deutlich billiger als leden dsxxxx und habe noch nie von derartigen problemen mit ihren gehört...
Mit Codevision würd ich nen Dallas one wire Sensor nehmen, die Routinen dafür sind im Codevision schon mit dabei. Wenn zwei Sensoren ausreichen, bekommt man die sogar geschenkt (als Muster bei www.maxim-ic.com bestellen)
Hallo! Leider liegt meine Vorgabe bei nem NTC. Und ich sollte mich daran halten! Ich hab jetzt mal ein Polynom 6. Ordnung mit Exel erzeugt, ich muss da demnächst noch Matlab anwerfen. Auf jeden Fall schluckt das ganze schon Resourcen. bin gerade bei 30% des Programmspeichers.
Wie wärs mit einer einfachen Geradeninterpolation ? Du legst Dir eine Tabelle mit z.B. 10 Geradenstücken an, die jeweils Bereichswert, Startwert und Faktor enthält. Dann klapperst Du die Tabelle ab, bis der ADC-Wert über dem Bereichswert liegt, addierst Startwert und multiplizierst den Faktor. Je nach gewünschter Genauigkeit kann mann auch weniger oder mehr Tabelleneinträge benutzen. Die Geradenstücke kann man z.B grafisch ermitteln. Einfach einen Toleranzschlauch (z.B. +/-1°C) um die Funktion legen und dann mit möglichst wenig Geraden den Toleranzschlauch durchfahren. D.h. jede Gerade beginnt und endet an der äußeren Toleranzgrenze und berührt die innere Toleranzgrenze. Peter
...hm, und was ist mit einer tabelle, die einfach jedem grad celsius einen adc-wert gegenüberstellt; z.b. für 100 werte (also 100°C) benötigt man nur noch 200 bytes, es ist auch keine aufwendige mathematik notwendig (die berechnung vorher in exel durchführen, dann nur die fertigen werte ins flash...) und eine genauigkeit won weniger als +-1°C ist mit einem ntc+polynom sowieso nur schwer zu erreichen
@Messfux, ja da hast Du recht! Aber an den Endbereichen, da wo die kennlinie an einen Knick macht kannst Du mit einem PGA das Signal das Pushen! Natülih ist zwischen NTC und dem PGA ein RC einzubauen. LG Tassilo
Ich habe hier 5 NTC 10k, die sind von vornherein so unterschiedlich, dass ein Polynom anzufitten wohl übertrieben wäre, da müßte ich jeden vorher ausmessen, und wer schonmal Temperaturkennlinien aufgenommen hat... Erster Ansatz ist eine lineare Funktion, das geht zwischen 0 und 45°C mit 1.5% oder so. Nächster Schritt wird die Festlegung von Geradenabschnitten sein, dann Interpolation, wie Peter es vorschlägt. Alles Aufwändigere ist für einen NTC zu schade... mein ich. Sven
@ Sven es gibt die Sensoren in verschiedenen Güteklassen, d.h. die Schwankungsbreite der Widerstände ist je nach Güteklasse unterschiedlich. Nimm die höchste Güteklasse und ein Polynom ist ok! Gruß Messfux
Hallo! Ja ich bin gezwungen NTC mit der Toleranz von 1% zu benutzen, das ist zur zeit das genaueste was es in diesem Bereich gibt. Allerdings sind die dinger nicht leicht aufzutreiben, und die 1% Toleranz gelten nur bei 25°C Warum ich NTCs benötige liegt eben einfach daran dass diese eine Reaktionszeit von wenigen Sekunden haben, und ein Halbleiter leider so ca 1,5min Einschwingzeit benötigt.
hm, würde sagen, dass meine ds1820 jede 2 sekunden einen neuen wert liefern, wenn ich mich mehr bemühe, komme ich vielleicht auch auf 1.5sec
Hallo! Ja natürlich liefern die alle 1,5s einen neuen wert, allerdings ist die Frage ob es genau dieser an der Chip Oberfläche ist. Ich habe bei Maxim und National schon nach diesen Werten, die bei NTC und PT100 in jedem Datenblatt vorkommen nachgefragt, und es kam nur als antwort dass diese Werte nicht spezifiziert sind. Aus nem alten Ti Datenblatt habe ich dann Werte herausgefunden, die lagen halt im bereich von 1,5min und das bauteil war ein kleiner SMD Sensor (LM 75 Verschnitt)!
@Stephan Hunger
>>Warum ich NTCs benötige liegt eben einfach daran dass diese eine
Reaktionszeit von wenigen Sekunden haben, und ein Halbleiter leider so
ca 1,5min Einschwingzeit benötigt.
Yo mei, dann nimm halt einen PT1000, gibt es ganz klein beim großen C,
sind ausreichend schnell und wenn Du die mit der besseren Klasse
willst, lohnt sich sogar ein Polynom. Aber NTC für -20°C ist schlecht
weil da unten die Kennlinie wegknickt. Mein ich.
Sven
Servus! Mit nem PT1000 hab ich das Problem dass ich eigentlich für den 10 Bit ADC im AVR noch ne verstärkerschaltung benötige. Und das treibt den aufwand nach oben. Und ein 12 Bit ADC extern ranhängen will ich net. Da hätte man sich den OPV sparen können.
@Stephan Also, wir fassen zusammen: Du willst den NTC einsetzen, nix anderes. Du brauchst einen Messbereich von -20°C bis 60°C mit einer Genauigkeit von 1K. Du hast einen 10bit-ADC. Wenn ich von der mir bekannten Kennlinie ausgehe, knickt die unter 0°C weg, ist zwischen 0 und 45°C recht gut linear und knickt darüber wieder weg. Damit scheint mir ein Polynom x-ten Grades nicht gut geeignet, weil Du mit wenigen Graden nicht rankommst und es mit vielen Graden eine übelste Rechnerei wird. Also würde ich den Vorschlag von Peter aufgreifen und Geradenstücke ansetzen. Systembedingt (weil da die Widerstandsänderung im Verhältnis zum Referenzwiderstand nicht mehr so hoch ist) kann man bei niedrigen Temperaturen von einer schlechteren Genauigkeit ausgehen. Um die 1K Genauigkeit zu erreichen, musst Du wahrscheinlich jeden Fühler außerdem an 2 oder 3 Punkten kalibrieren. Ich gehe dabei davon aus, dass Du mit dem Fühler und einen Serienwiderstand einfach einen Spannungsteiler aufbaust, ohne weitere Kompensation: GND-NTC10k-ADCin-R10k-Vcc. Hast Du eine Angabe zu der Dir vorliegenden Kennlinie (Quelle)? Sven
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.