Forum: Mikrocontroller und Digitale Elektronik Linearisierung NTC


von Stephan Hunger (Gast)


Lesenswert?

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.

von Tassilo (Gast)


Lesenswert?

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

von Josef (Gast)


Lesenswert?

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

von Stephan Hunger (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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

von Messfux (Gast)


Lesenswert?

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 Peter D. (peda)


Lesenswert?

Von -20 ... 60°C nimm den DS18B20, einfacher gehts nicht.

Die ganze umständliche Rechnerei hat Dir dann nämlich schon Maxim
abgenommen.


Peter

von emil (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

@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

von emil (Gast)


Lesenswert?

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

von smartie (Gast)


Lesenswert?

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)

von Stephan Hunger (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von emil (Gast)


Lesenswert?

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

von Tassilo (Gast)


Lesenswert?

@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

von Sven (Gast)


Lesenswert?

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

von Messfux (Gast)


Lesenswert?

@ 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

von Stephan Hunger (Gast)


Lesenswert?

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.

von emil (Gast)


Lesenswert?

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

von Stephan Hunger (Gast)


Lesenswert?

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)!

von Sven (Gast)


Lesenswert?

@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

von Stephan Hunger (Gast)


Lesenswert?

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.

von Sven (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.