Forum: Mikrocontroller und Digitale Elektronik wie aus AD-Wert die Temperatur berechnen


von Florian (Gast)


Lesenswert?

Hallo, ich messen mit einem PTC KTY 81-210 über einen Spannungsteiler 
Temperaturen oder eigentlich den Widerstand und rechne den dann in die 
Temperatur um.

Dafür benutze ich eine Polynomische Gleichung 4ten Grades. Das ist im 
"normalen" Temperaturbereich auch sehr genau. Aber ab 100 Grad wird es 
ungenau.

Ich wolle dann Interpolieren aber das scheint den Rahmen des Butterflys 
zu sprengen.
Versucht habe ich das mit sechs (für jeden Sensor einen) 16 Bit 
Array[190] (-40 bis 150 °C)
Wenn ich dann den Butterfly starte bekomme ich nur noch wirre Zeichen 
auf dem LCD.

Wie mach ihr den sowas?
Ich hätte halt gerne eine Abweichung <= 1°C

mfg
Flo

von Alexander D. (alexander_d)


Lesenswert?

Hallo Florian,

eine Abweichung von unter 1°C ist mit dem KTY81 nur durch 
Vergleichsmessung mit einem genauen Thermometer und einer Wertetabelle 
möglich. Für den KTY81-120 (den meinst du wohl, oder?) wird im 
Datenblatt für 100°C ein Messfehler von +/-5°C angegeben. Wenn du über 
den gesamten Messbereich eine hohe Genauigkeit brauchst, musst du einen 
anderen Sensor verwenden, z. B. AD590 oder Pt100 o. ä.

Gruß,
Alexander

von Florian (Gast)


Lesenswert?

Nee ich meine schon den KTY 81-210. 
'http://www.ortodoxism.ro/datasheets/philips/KTY81-251.pdf

Eine Wertetabelle habe ich erstellet und daraus eine Funktion mit der 
ich die Temperatur errechne. Aber da der Sensor  ja nicht linear ist 
passt das nicht über den ganzen Bereich.

Ich habe dann für jeden Sensor eine Wertetabelle über den ganzen Bereich 
in 1°C schritten erstellt. So müsste es ja auf jeden Fall passen. Nur 
weiß ich nicht wie ich das am besten verarbeite.
Wo soll ich das ablegen? Das sind ja 200 16bit werte mal sechs Sensoren.
Zwischen den Werten könnte man dann noch Interpolieren, so müsste es 
schon recht genau werden.

Aber wie?

von Jörg B. (manos)


Lesenswert?

Florian wrote:
> Wo soll ich das ablegen? Das sind ja 200 16bit werte mal sechs Sensoren.
> Zwischen den Werten könnte man dann noch Interpolieren, so müsste es
> schon recht genau werden.
Konstantenfelder kann man meines Wissens bei den AVRs im Flash-Speicher 
ablegen - also einfach entsprechend großen µC nehmen.

von Falk B. (falk)


Lesenswert?

@ Florian (Gast)

>Dafür benutze ich eine Polynomische Gleichung 4ten Grades. Das ist im

??
Das ist ein Polynom 4. Grades.

>Versucht habe ich das mit sechs (für jeden Sensor einen) 16 Bit
>Array[190] (-40 bis 150 °C)

Wenn das mal nicht Overkill ist. Das braucht 6x190x2=2280Byte. Wenn du 
es falsch machst landen die Im RAM, die der Butterfly wahrscheinlich gar 
nicht hat.

>Wie mach ihr den sowas?
>Ich hätte halt gerne eine Abweichung <= 1°C

Dann nimm einen digitalen Temperatursensor. Mit KTY81 so eine 
Aufwand zu betreiben ist schlicht Unsinn. Nimm ein Polynom 2., 3. oder 
4. Grades, mach damit ne 2, 3, oder 4. Kalbibrierung und gut. Dann 
kommst du vielleicht auf +/-2K Genauigkeit.

MFG
Falk

von Lutz (Gast)


Lesenswert?

Das Polynom hast Du doch aus dem Datenblatt errechnet, oder? Ob der 
Sensor dann linear oder nichtlinear ist, sollte dann egal sein, da diese 
Funktion ja die ganze "Kurve" beschreibt (außer, Du hast nur 
Stützstellen im "unteren" Temperaturbereich genommen, dann natürlich 
nicht ...).

Wenn Du nun ALLE Stützstellen zur Erzeugung einer Funktionsgleichung 
nimmst (also von -50 bis 150 Grad Celsius), kommt bestimmt eine recht 
unhandlebare Funktionsgleichung raus. Also erzeuge Dir für mehrere 
Temperaturbereiche anhand der Stützstellen quasi eigene Funktionen, die 
sind dann für den Meßbereich besser und (wahrscheinlich) auch nicht so 
hochgradig, also z.B.
- wenn (ADCW <= 250) nimm Funktionsgleichung 1 (entspricht z.B. 
Meßbereich -50 bis -10 Grad Celsius)
- wenn (ADCW > 250 && ADCW <= 500) nimm Funktionsgleichung 2 (entspricht 
Meßbereich -9 bis 30 Grad Celsius etc.

(Genauigkeits)Probleme wird es aber im Übergangsbereich der Meßbereiche 
geben, z.B. also mal die eine und mal die andere Funktionsgleichung 
genommen wird.

Warum also überhaupt Wertetabelle abspeichern? Laß das Käferchen doch 
ruhig Dein Polynom durchrechnen; die Wenigsten brauchen wirklich jeden 
Takt, "à la zeitkritisch".

von crazy horse (Gast)


Lesenswert?

in der einfachen Spannungsteiler-Schaltung hast du sowieso nur einen 
begrenzten A/D-Wandlerbereich.
(-40 bis 150 °C) bekommst du in 1 Byte als Funktionswert (Offset z.B. 
-50, also Tabellenwerte zwischen -90 und 100), Lesen der Tabelle in eine 
int-Variable und wieder 50 addieren.
Dann schaust du noch, welcher Wandlerbereich überhaupt genutzt wird in 
diesem Temperaturbereich, und nur für den brauchst du dann die Tabelle. 
Under/Overflow natürlich abfangen, macht also geschätzte 400Byte für die 
Tabelle.

von Branko G. (branko)


Angehängte Dateien:

Lesenswert?

1
Florian Wrote: 
2
3
Hallo, ich messen mit einem PTC KTY 81-210 über einen Spannungsteiler
4
Temperaturen oder eigentlich den Widerstand und rechne den dann in die
5
Temperatur um.
6
7
Dafür benutze ich eine Polynomische Gleichung 4ten Grades.

Also meine Meinung nah ist die KTY einfachste und billigste 
Temperatursensor für Temperaturerfassung mittel einen µC mit ADC.
Entwicklung solche Sensoren stammt aus ende 70. Jahren und damals war 
keine Rede von Mikrocontollern und Linearisierung durch Polynomische
Gleichung  X-ten Grades.
Ich erinnere mich noch an ELV Temperaturmessmoduln auf Basis von 
ICL7106/7 als  Digital-Millivoltmeter für Temperaturbereich von
-10 bis 110°C , natürlich ohne µC.
KTY81-110  ist so konzipiert dass in Kombination mit einem 2k7 oder 3k 
(6k für 81-210) Widerstand in weiteren Temperaturbereich von-10 bis 
110°C einen  nahezu lineares Temperatur-Spannung verlauf hat(siehe 
Anhang).
Umständliche Umrechnung ADCwert-> Widerstandwert->Temperatur ist einfach 
falscher Einsatz.
Das eine Linearisierung von KTY mit gut dimensioniertem Widerstand nicht 
notwendig ist, ist leider nicht  bekannt oder mit dem Zeit verloren 
gegangen ist.
KTY in Kombination mit dem  Widerstand als Spannungsteiler ist linear,
oder besser gesagt Linearisierungsfehler ist um Größeordnung kleiner
als von Hersteller eingegebene Messgenauigkeit.

MFG
Branko

von Florian (Gast)


Lesenswert?

Hi,

@Lutz:
Ich habe das Polynom erst aus dem Datenblatt erstellt aber das war nicht 
sehr genau, habe dann die Werte selber gemessen. Damit ist es schon 
recht genau jetzt +-1°C im bereich von -20 bis 110 °C aber nie mehr als 
+-2,5°C abweichung.

Das mit mehreren Formeln ist eine Idee. Da bin ich nicht drauf gekommen, 
werde ich mal testen.

@crazy horse:
Tut mir leid, aber das habe ich nicht verstanden.

Danke an alle für die Antworten.

Mfg
Florian

von Florian (Gast)


Lesenswert?

Mein Spannungsteiler besteht ja auch aus 3K3 und KTY und damit habe ich 
dann die Wertetabelle gemessen und das Polynom erstellt.

von Lutz (Gast)


Lesenswert?

@ Florian:
Ähm ....
Hab ich das jetzt richtig verstanden: Du hast die Widerstandswerte bei 
unterschiedlichen Temperaturen selbst gemessen, also z.B. bei 25 Grad
2008 Ohm, bei 26 Grad 2025 Ohm etc?
Wenn dem so ist, bin ich seeeeehr erstaunt. Dann hättest Du neben einem 
gut kalbrierten Referenzthermometer auch ein gutes Multimeter für die 
Widerstandsmessung (na gut, der Offset wäre vermutlich konstant in dem 
kleinen Meßbereich) benötigt, was eher unwahrscheinlich ist. Mit welcher 
Methode hast Du denn das Polynom aus dem Datenblatt errechnet? 
Newtonsches Interpolationspolynom? In welchem Meßbereich und mit wieviel 
Stützstellen? Da würde ich mich schon sehr wundern, wenn Deine Meßreihen 
besser sind als die des Herstellers. Aber das würde heute bei mir schon 
gut reinpassen ...

@ Branko:
Was mich so ein bischen wundert: Die Widerstandsgerade ist ja nicht so 
traumhaft gerade in dem Temperaturbereich (zumindest nicht im 
Datenblatt). Nach Deiner Tabelle sind das aber nahezu perfekte Werte. 
Die Meßschaltung ist ja daneben zu sehen, das ist gut. Ist der 
Vorwiderstand von den Temperaturänderungen auch betroffen oder ist er 
außerhalb der Temperaturänderungen untergebracht?

von Andi (Gast)


Lesenswert?

Also meiner Meinung nach solltest du die Idee mit der Tabelle weiter 
führen.
Deine Werte auf dem Display waren ohne den Code zu kennen warscheinlch 
in der Form falsch das der Controller sich Daten hinter dem Array geholt 
hat. Dies passiert wenn dein Messwert nicht mit der Tabelle abgeglichen 
wird.
-Tabelle erstellen in Excel mit der im Datenblatt gegebenen Funktion
-Umrechnen bei welchem Digit welche Temperatur gemessen wird
-den Relevanten Bereich herausfiltern ( z.B. µC kann von 0-1024 Digits 
relevant ist aber nur der Bereich von 280-780 dann mußt du von deinem 
Messwert 500 abziehen da das Array ja bei 0 beginnt)
-das array als const deklarieren und mit den Werten aus der Excel 
tabelle füllen.


Vorteil: extrem schnell, sehr genau, und einfach einfach
Nachteil: Bischen Speicher im ROM verloren

von Branko G. (branko)


Lesenswert?

@Lutz
Offensichtlich has du mich nicht verstanden.
Ich habe von linearen Temperatur-Spannung verlauf geredet, nicht über
Temperatur-Widerstand, diese bleibt leicht Parabolisch wie in Datenblatt 
steht.
Widerstand-Spannung verlauf eines Spannungsteiler ist 
Hyperbolisch(Uadc=Uavcc*(Rt/Rt+R) und benimm sich wie Umkehrfunktion für 
Parabolisches Kennlinie-Verlauf eines KTY:
T-R(KTY, Parabolisch) * R-U(Spannungsteiler R/Rkty, Hyperbolisch)
=T-U(nahezu Linear).
Das ist kein Zufall sonder ist die KTY-Kennlinie   so ausgewählt das in 
Kombination mit einem Widerstand von 2k4 bis 3k einen linearen
Temperatur-Spannung  verlauf hat und
dadurch war möglich mit einfachem Voltmeter(damals ICL7106/07) 
Temperatur zu messen ohne etwas "per Software" linearisieren zu müssen.
Vor mehr als 20 Jahren habe ich selbst so ein Thermometer gebastelt
(ELV Projekt). Diese Tatsache ist leider mit dem Zeit
verlorengegangen.
1
Andi Wrote:
2
Also meiner Meinung nach solltest du die Idee mit der Tabelle weiter
3
führen.

Das ist natürlich Unsinn(sieche Erklärung oben).

von Falk B. (falk)


Lesenswert?

@ Branko Golubovic (branko)

>Das ist natürlich Unsinn(sieche Erklärung oben).

Meine Rede. Was man früher (tm) mit einem einfachen Spannungsteiler 
gemacht hat und eine praktisch vollkommen ausreichende Genauigkeit 
ergab, muss heute mit SuperHightec perfektioniert werden, koste es was 
es wolle. ;-)

MfG
Falk

von Lutz (Gast)


Lesenswert?

@ Branko:

>Offensichtlich has du mich nicht verstanden.

Nicht so ganz, aber ich war auf dem richtigen Weg.

>Widerstand-Spannung verlauf eines Spannungsteiler ist
>Hyperbolisch(Uadc=Uavcc*(Rt/Rt+R) und benimm sich wie Umkehrfunktion für
>Parabolisches Kennlinie-Verlauf eines KTY:
>T-R(KTY, Parabolisch) * R-U(Spannungsteiler R/Rkty, Hyperbolisch)
>=T-U(nahezu Linear).

Jetzt glaube ich zu verstehen, wie Du es gemeint hast: Die 
"Linearitätsfehler" von Widerstand und KTY sind entgegengesetzt sowie 
gleich groß und heben sich daher gegenseitig auf.
Deswegen fragte ich auch
>Ist der Vorwiderstand von den Temperaturänderungen auch betroffen oder ist >er 
außerhalb der Temperaturänderungen untergebracht?

Wenn ich das Prinzip nun richtig vertanden habe, sehe ich aber den 
Nachteil, das der Widerstand die gleiche Temperatur wie der KTY haben 
muß; er muß also mit ins Meßfeld. Das kann, abhängig von der konkreten 
Anwendung, ein Nachteil sein. So braucht man dann 3 Adern statt 2 zum 
Meßfeld (AVCC, ADC-IN und AGND). Wenn das egal ist: Super Meßprinzip!

von Matthias (Gast)


Lesenswert?

Servus,

also ich hab den 220er genommen mit den 3,3k Vorwiderstand.
Leider passt der Wert überhaupt nicht mit den Werten im Datenblatt 
überein.

klugscheissmodus an
Warum weils keine konstanten 1mA über den Sensor laufen.
Also ist deine Spannung am Sensor nicht nur von der Temp, sondern auch 
von dem Strom abhängig.
Ich werd am WE dann eine Konstantstromquelle dazusetzten, damit ich die 
Werte aus dem Datenblatt nehmen kann.
klugscheissmodus aus

Bin mal gespannt obs dann stimmt das ganze. Wenn ich drandenk schreib 
ich mal nochwas dazu. Wenns so ist kann ich dir ja mal den Schaltplan 
von mir geben.

Nur so als Tipp für die Berechnung.
Du kannst ja ausrechnen wie "Fein" der AD Wandler arbeitet. Ich glaub 
ein Schritt war so um die 0.005V dann kannst du dir ja ausrechnen 
wieviel Spannung bei -55 Grad am Sensor anliegt bzw. 0 Grad dann kannst 
du ja einfach drauf losrechnen.
Ich glaub...hab die unterlagen net da...das so um die 360 Werte vom AD 
Wandler sind. Umgerechnet auf die 205 Grad bereich kannst dirs 
Rausrechnen welche Temp du hast.

MfG
Matthias

von Branko G. (branko)


Lesenswert?

Lutz Wrote:
1
Wenn ich das Prinzip nun richtig vertanden habe, sehe ich aber den
2
Nachteil, das der Widerstand die gleiche Temperatur wie der KTY haben
3
muß;

Warum ? Das ist ein Fixwiderstand!
Fixwiderstand soll  einen Fixwert haben wie i Excel Tabelle steht.
Das hat mit Temperatur nicht zu tun  sofern Widerstand ein kleiner 
Temperatur-Koeffizient  hat.
Also sein Platz ist auf Platine.

MfG
Branko

von Lutz (Gast)


Lesenswert?

In der Tat, ich hab mal eine eigene Exceltabelle mit U_ADC = f(R) mit R 
aus dem Datenblatt des KTY erstellt: Von 0 bis 100 Grad super linear, 
hätte ich nie gedacht. Das ganze noch irgendwie kalbrieren (z.B. per 
Software mit Offset für ADCW) und gut is. Das muß ich mir noch mal in 
Ruhe zu Gemüte führen, da gibt´s bestimmt was pfiffiges. Daß das ganze 
so einfach ist, praktisch ohne Rechenleistung ... .

>Das eine Linearisierung von KTY mit gut dimensioniertem Widerstand nicht
>notwendig ist, ist leider nicht  bekannt oder mit dem Zeit verloren
>gegangen ist.

Wirklich schade. Heute versucht man tatsächlich mehr Lösungen mit 
Software als mit elektrotechnischem Wissen zu finden, und das mit allen 
sich daraus ergebenden Konsequenzen.

von Branko G. (branko)


Lesenswert?

@Lutz

Vielleicht hilft dir das weiter:
Beitrag "Re: KTY81 am mega128 berechnen"
Besser daraus ist das die Messung unabhängig von Versorgungsspannung 
ist.

MfG
Branko

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.