Für eine einfache Temperaturmessung mit einem PT1000 sind die angefügte
Schaltung und das Programm gedacht. Durch einen präzisen
Referenzwiderstand 1000 Ohm 0,1% kommt man ohne Abgleich aus, sofern
Genauigkeit bzw. Auflösung > 1 °C liegen dürfen. Da mit ratiometrischer
Messung gearbeitet wird, ist ein stabiler Wert der Referenzspannung
nicht erforderlich.
Um einen Meßfehler durch Eigenerwärmung des PT1000 zu vermeiden, wird
die Spannung an Vref nur bei Bedarf eingeschaltet; im einfachsten Fall
schaltet der µC Vref am entsprechenden Pin ein. Selbst bei Belastung mit
15 mA, was für insgesamt sechs PT1000 reichen würde, liegt die Spannung
noch bei Vcc-0,2 V. (PROFI_VERSION :-)
Wem das nicht geheuer ist, kann auch einen separaten Pin (hier PB.0) als
Vref-Spannungsquelle verwenden.
Bei längeren Zuleitungen muß auch deren Widerstand beachtet werden;
R_ZULEITUNG sollte von derzeit 0 auf den entsprechenden Wert korrigiert
werden.
Auch wenn hier nur ein Kanal gezeigt wird, bei einem ATmega88/328 im
DIL-28 Gehäuse können bis zu sechs PT1000 angeschlossen und ausgewertet
werden: ADC0 – ADC5.
Die Schaltung läßt sich auch auf andere µC übertragen, bei denen Vref
als separater Anschluß verfügbar ist. Andernfalls muß noch ein FET als
zusätzlicher, niederohmiger Schalter ergänzt werden.
Wer eine bessere Auflösung benötigt, sollte einen ADC mit >= 12 Bit
verwenden. Für größere Temperaturmeßbereiche ist es ferner ratsam,
PT_FAKTOR anzupassen. Der hier verwendete Wert von 0,00385*1000 ist für
–20 bis 100 °C brauchbar.
Nähere Kommentare befinden sich am Anfang des Programms; die eigentliche
Messung/Auswertung findet sich ganz unten in main(). Ich hoffe, die
Berechnung ist verständlich und stimmt auch ;-)
Für Freunde der schnellen Programmierkunst noch die sehr übersichtliche
Programmversion für einen Arduino Uno. Fast könnte man das gesamte
Programm in einer Zeile schreiben, die Meßroutine ist aber als eigene
Funktion formuliert, sodaß die Auswertung mehrerer Kanäle transparent
ergänzt werden kann.
Über den 'Serial Monitor' können die Meßwerte direkt auf dem PC
angezeigt werden.
M. N. schrieb:> Nähere Kommentare befinden sich am Anfang des Programms;
Auch, daß die Schaltung nicht funktioniert ?
Der VRef-Ausgang des AVR ist keineswegs mit 2k belastbar, ohne daß die
Spannung ERHEBLICH einbricht, also eine erhebliche Differenz zwischen
der internen Referenzspannung (auch wenn das 5V sein sollten) und der
aussen an dem 1k Widerstand anliegenden Spannung und damit Messfehler.
Wenn man das so macht, MUSS an den Ausgang ein OpAmp als
Spannungsbuffer, dann kann man auch die interne Referenz von 2.5 oder
1.1V verwenden, insbesondere 1.1V der moderneren AVRs hätte einen später
genannten Vorteil.
Besser geht es, wenn man 5V an AVCC anlegt und als Ref verwendet, aber
dann liegen 2.5V am Pt1000 und damit eine hohe Verlustleitung die zu
DEUTLICHEN Messwertabweichungen führt weil der Sensor einige Grad wärmer
wird als die Umgebung.
Und wenn man dann 10k als Vorwiderstand verwendet, um die Spannung am
Pt1000 im Rahmen zu halten, ruiniert einem das wieder die Auflösung, die
eh schon nicht besonders gut ist.
Die Schaltung taugt so also nichts, selbst wenn die Grundidee,
ratiometrisch mit Referenzwiderstand, ein bekannt guter Ansatz ist.
MaWin schrieb:> Der VRef-Ausgang des AVR ist keineswegs mit 2k belastbar, ohne daß die> Spannung ERHEBLICH einbricht,
Ach, das stimmt doch garnicht.
Wie geschrieben 'bricht' die Spannung an Vref bei Belastung mit 330 Ohm
( ca. 15 mA) um lediglich 0,2 V ein. Völlig UNERHEBLICH!
Die Schaltung ist einfach genial und absolute Spitze, eben nur nicht von
Dir ;-)
m.n. schrieb:> Ach, das stimmt doch garnicht.> Wie geschrieben 'bricht' die Spannung an Vref bei Belastung mit 330 Ohm> ( ca. 15 mA) um lediglich 0,2 V ein. Völlig UNERHEBLICH!
Bei welcher Vref denn? Bei 5V oder vi 1,1V?
Bei 5 V. Daher die 15 mA über 330 Ohm.
Wegen der Mawinesen und brunnenden Falken nebst Gefolge hatte ich ja
darauf hingewiesen, daß man auch einen Portpin als Spanungsquelle nehmen
kann. Oder man nimmt einen ext. FET, der die Vref schaltet.
Steht alles oben!
m.n. schrieb:> Wie geschrieben 'bricht' die Spannung an Vref bei Belastung mit 330 Ohm> ( ca. 15 mA) um lediglich 0,2 V ein. Völlig UNERHEBLICH!
Ich habe noch einmal etwas genauer gemessen:
bei 15 mA sind es rund 100 mV.
Böse, wie ich bin, und auf die Gefahr hin, eines Tages im Jenseits
völlig ohne Jungfrau auskommen zu müssen, habe ich den Lastwiderstand
bei 5 V auf 100 Ohm gesenkt. Die Spannung an Vref bricht um 0,6 V ein.
Bei den verbleibenden 4,4 V an 100 Ohm ergibt sich ein Strom von 44 mA,
woraus der Ausgangswiderstand von Vref mit rund 14 Ohm abgeleitet werden
kann.
Es gibt folglich keinen Grund, auf die oben gezeigte Sparschaltung zu
verzichten, zumal dort nur 2,5 mA 'Laststrom' auftreten.
Das Einbrechen von Vref macht aber das Messen auf anderen Kanälen
unmöglich, da jegliche Kalibrierungen für den A**** sind.
Wenn man nur den PT1000 auslesen will, kann man die Schaltung
wahrscheinlich verwenden.
Julian Baugatz schrieb:> Das Einbrechen von Vref macht aber das Messen auf anderen Kanälen> unmöglich, da jegliche Kalibrierungen für den A**** sind.
Wenn man dort ebenfalls ratiometrisch mißt, geht es durchaus.
Wie gesagt, an einen ATmega328 passen 6 x PT1000.
m.n. schrieb:> Ich habe noch einmal etwas genauer gemessen:> bei 15 mA sind es rund 100 mV.
Mal ist es ein kleiner m.n. mal ein Grosser, typisch wenn man mit seinen
dutzenden Aliasnamen durcheinander kommt unter denen man hier schreibt.
Ein Pt1000 hat bei 0 GradC 1000 Ohm, bei 1 GradC 1003.9 Ohm. Am
Spannungsteiler 5V mit 1k bilden sich 2.5 bzw. 2.505V, der D/A-Wandler
kann das 1 GradC auflösen (0.00488V/Bit bei 5V Vref).
Wenn die Gesamtversorgungssspannung des Spannungsteilers jedoch schon um
0.2V oder 0.1V von der positiven internen ARef des D/A-Wandlers
abweicht, liegt die gemessene Temperatur bei -10 GradC.
Der Fehler ist also 10 mal grösser als die Auflösung, ein Messergebnis
ist um 10 oder 20 GradC verfälscht, je nach aktueller Laune des
Bahnwiderstandes des AVR zum ARef Ausgang.
Habt ihr alle in Rechnen in der Schule nicht aufgepasst ?
Ich wollte mal wissen, wie groß die Werte des A/D Wandlers dann
tatsächlich sind. Um 1 bis 2 digit wollen wir uns mal nicht streiten.
5V und 5V-100mV
0 Grad, 1 Grad, 20 Grad
Vorausgesetzt, das driftet nicht noch all zu sehr und man schränkt sich
so in etwa auf diesen Bereich ein (weiss ja nicht, wofür "M. N. (msx)"
es nutzen will), kann man den A/D Wert doch um die ca. "10" korrigieren
und gut ists. Ist halt die "preisgünstig/dirty" Lösung.
MaWin schrieb:> Habt ihr alle in Rechnen in der Schule nicht aufgepasst ?
Glücklicherweise habe ich in der Schule nicht nur Rechnen sondern auch
Denken gelernt. Daher scheitert Deine Berechnung schon an der
Plausibilitätsprüfung.
Herbert K. schrieb:> Ich wollte mal wissen, wie groß die Werte des A/D Wandlers dann> tatsächlich sind. Um 1 bis 2 digit wollen wir uns mal nicht streiten.> 5V und 5V-100mV> 0 Grad, 1 Grad, 20 Grad
Ich weiß nicht, was Deine Berechnung soll. Siehe: ratiometrische
Messung.
m.n. schrieb:> Ich weiß nicht, was Deine Berechnung soll.
Irgendwie war das zu erwarten, du weisst ja auch nicht, wo das Problem
bei deinem Bauvorschlag liegt.
Selbst wenn Herbert dir deine 10 GradC Temperaturabweichung vorrechnet.
MaWin schrieb:> m.n. schrieb:>> Ich weiß nicht, was Deine Berechnung soll.>> Irgendwie war das zu erwarten, du weisst ja auch nicht, wo das Problem> bei deinem Bauvorschlag liegt.>> Selbst wenn Herbert dir deine 10 GradC Temperaturabweichung vorrechnet.
Ich schrieb doch: nicht Rechnen sondern Denken!
10 Grad hab ich nicht geschrieben. Ich hab geschrieben, Wert "10" vom
A/D Wandler.
Ich hab aber auch einen Fehler drin:
Bei (5V-100mV) ergeben sich Schritte von ca. 0,004785 V/Bit für den A/D
Wandler.
Wenn ich keinen Denkfehler drin habe, ergibt sich für eine Temp.
Änderung von 0 auf +20 GradC eine Wertänderung vom A/D Wandler von ca.
"20".
Das wäre eine Auflösung von 1°C pro Bit. Ich denke, für so eine grobe
Auflösung ist das ganze doch ok. Vorteil: Minimale Bauteilanzahl.
Ich denke, der Trick ist, die 1K/0,1% ins Verhältnis zum PT1000 zu
setzen.
Der Spannungsteiler muß nur die gleiche VRef bekommen wie der A/D
Wandler.
Wie hoch die tatsächlich ist, ist fast egal.
"rx = R_REF * wert / (ADC_MAX-wert); // Widerstand ausrechnen"
Im Kopf vom C-SourceCode stehts ja im Prinzip drin. Muß man nur mal
lesen und verstehen.
m.n. schrieb:> Ich schrieb doch: nicht Rechnen sondern Denken!
Du meinst, du denkst, deine Schaltung würde funktionieren?
Herbert K. schrieb:> Ich denke, der Trick ist, die 1K/0,1% ins Verhältnis zum PT1000 zu> setzen.
Aref Ausgang ebenfalls messen, liegt ja unter ARef intern, und damit die
ca. 10 korrigieren. Könnte helfen, bleibt die Eigenerwärmung bei
625-facher Überlast als vorgesehen.
Will man einen PT1000 ordentlich auswerten, dann kommt man um eine
temperaturstabile Konstanstromquelle und eine Verstärkung (Anpassung)
der Messpannung - je nach Messbereich - nicht herum.
Soll es nur "halbwegs genau" werden, ist der KTY - Fühler viel besser
geeignet, weil er eine größere Widerstandsänderung hat.
Kennlinie berechnen und Kalibrieren muss man dann eh',
den teuren PT1000 - Fühler kann man sich dann auch sparen.
Vergesst das mit meiner Berechnung was ich 7 Beiträge hoch geschrieben
habe. Leider kann ich es nicht mehr editieren / löschen. Auch das mit
dem Wert "10" korrigieren.
siehe 3 Beiträge hoch: ... der Trick ist das reine
Widerstandsverhältnis.
@MaWin: Ob es einen Einfluß von ARef Intern/Extern direkt auf ARef vom
A/D Wandler gibt, müsste man mal ermitteln.... vielleicht gibt es gar
keinen, denn man kann ja auch ARef extern anschließen und diese
"Leitung" müßte ja intern direkt auf den A/D Wandler gehen. Ein evt.
Innenwiderstand kommt vielleicht aus der internen VRef
Stabilisierungschaltung Schaltung und dem internen MUXer für VRef. Ist
aber nur eine Vermutung von mir.
Herbert K. schrieb:> Ich hab aber auch einen Fehler drin:> Bei (5V-100mV) ergeben sich Schritte von ca. 0,004785 V/Bit für den A/D> Wandler.
Genau, dann stimmt das Verhältnis wieder!
> Wenn ich keinen Denkfehler drin habe, ergibt sich für eine Temp.> Änderung von 0 auf +20 GradC eine Wertänderung vom A/D Wandler von ca.> "20".> Das wäre eine Auflösung von 1°C pro Bit. Ich denke, für so eine grobe> Auflösung ist das ganze doch ok. Vorteil: Minimale Bauteilanzahl.
Mehr wurde nicht versprochen, eher etwas weniger.
Andere Sensoren liefern zwar feinere Auflösungen, bekommen aber ihr
Probleme bei sehr hohen Temperaturen und müssen in der Regel abgeglichen
werden.
> Ich denke, der Trick ist, die 1K/0,1% ins Verhältnis zum PT1000 zu> setzen.> Der Spannungsteiler muß nur die gleiche VRef bekommen wie der A/D> Wandler.> Wie hoch die tatsächlich ist, ist fast egal.>> "rx = R_REF * wert / (ADC_MAX-wert); // Widerstand ausrechnen">> Im Kopf vom C-SourceCode stehts ja im Prinzip drin. Muß man nur mal> lesen und verstehen.
Danke, daß Du es gemacht hast ;-)
Mit dem Teiler 1 k und PT1000 messe ich hier eine Raumtemperatur von
21°C. Belaste ich Vref mit zusätzlichen 330 Ohm steigt der Strom aus
Vref von 2,5 auf 17,5 mA. Die errechnete Temperatur sinkt auf 20°C, ohne
daß auf die GND-Leitung auf dem Board geachtet wurde. Das Ergebnis ist
voll im Rahmen von Auflösung und Genauigkeit.
Atmel: "Note that VREF is a high impedance source, and only a capacitive
load should be connected in a system."
Vielleicht sollte man einfach vref per RR-Opamp puffern. Wobei dann die
Frage bleibt: wie schalt ich den Meßstrom aus? Besonders bei mehreren
Kanälen.
Bastler schrieb:> Wobei dann die> Frage bleibt: wie schalt ich den Meßstrom aus? Besonders bei mehreren> Kanälen.
Sieh Dir die Schaltung ganz oben an: PB0 ist im Programm schon als
Option dafür vorgesehen.
Abschließend noch ein Programm, welches einen PT1000 Widerstand im
Bereich –100 -> +850 °C auswertet. Die Berechnung findet hier nicht mehr
mit einem konstanten Faktor statt, sondern anhand von zwei Tabellen.
Eine Tabelle rx_tab[] enthält die Widerstandswerte und die andere
grad_tab[] den dazugehörigen Temperaturwert im Abstand von typ. 50 K.
Wiederum ist es eine .ino-Datei (läßt sich mit Arduino IDE oder einem
Texteditor öffnen), bei der die lineare Interpolation hoffentlich gut
nachvollziehbar ist.
Der eff. Meßbereich ist gerade bei hohen Temperaturen vom Aufbau und vom
verwendeten Sensor abhängig. Ein kostengünstiger Sensor (< 2 Euro) ist
z.B. hier zu finden:
http://www.reichelt.de/PCA-1-1505-10/3/index.html?&ACTION=3&LA=446&ARTICLE=85054&artnr=PCA+1.1505+10&SEARCH=platin
Zur Abwechselung wird hier PortB.0 als Spannungsquelle von VREF
geschaltet.
Wie erwähnt würde ein 12-Bit ADC eine bessere Auflösung bieten.
Vielleicht benutzt Jemand ATXmega, die intern 12-Bit ADCs aufweisen, und
stellt sein Programm hier zur Verfügung.
Westawegen ich hier gelesen hab (google).
Kann man an die Vref 2x470 (von)ohm nach unten in Reihe gegen GND
anschliessen, um am ADC0 halbe Vref "abzugreifen"?
Axel R. schrieb:> Ich hätte auch gern einen ADC mit 1024 "BIT" Auflösung :)> Sprecht bitte von Digits, es sind nur 10 Bits.
Du machst mich neugierig. Wo steht das?
Axel R. schrieb:> Westawegen ich hier gelesen hab (google).> Kann man an die Vref 2x470 (von)ohm nach unten in Reihe gegen GND> anschliessen, um am ADC0 halbe Vref "abzugreifen"?
Wenn man den PT1000 nicht an Masse- sondern an Vcc-Potential hängt
könnte man durch herabsetzen der Vref auf VCC halte durchaus einen
offset erzeugen. Leider bringt einem das nicht viel weil der
Wertebereich dann nur verschoben aber noch nicht ausgedehnt (verstärkt)
ist.
Was bei der Messung in solchen Temperaturbereichen auch interessant ist:
Wie verbindet man den Sensor dann am geschicktesten mit der Schaltung?
Löten fällt weg, das schmilzt nur. Also Crimptechnik, nur welche
Quetschverbinder nimmt man? Und welche Litzen die entsprechend bis
200..300..500° Temperaturfest sind? (Wohl etwas mit einer Ummantelung
aus Glasfasergewebe?)
Paul H. schrieb:> Wie verbindet man den Sensor dann am geschicktesten mit der Schaltung?> Löten fällt weg, das schmilzt nur.
Löten geht, wenn man den Anschlußdraht auf voller Länge beibehält. Die
Drähte sind dünn und die übertragene Ernergie reicht nicht mehr aus, die
Lötstellen zum schmelzen zu bringen.
Wenn es richtig gut sein soll, wird man wohl einen fertig
konfektionierten, gekapselten Sensor verwenden müssen.
Aus Jux habe ich habe ich einen Sensor über ein brennendes Streichholz
gehalten. > 600 °C war die Anzeige, habe das 'böse' Spiel aber gleich
wieder beendet. Danach wurden wieder 22 °C Raumtemperatur angezeigt:
keine Hysterese!
Anders herum habe ich ihn mit Kältespray besprüht: -53 °C war das
Minimum; hätte nicht gedacht, daß es so kalt wird. Ein KTY81 kam nur
leicht unter -20 °C und braucht deutlich länger zum Abkühlen.
Offensichtlich führen die Zuleitungen zuviel Wärme über die
Anschlußdrähte nach.
Hallo,
ich muss leider nochmal diesen alten Thread rausholen und zwar wie
berechne ich den Faktor bei meinem Sensor (-40 bis 250 Grad) wenn ich
einen Arbeitsbereich von 10-250 Grad(um genauer zu werden) haben möchte?
Meinst Du PT_FAKTOR im allerersten Programm? Das ist eine Konstante des
Sensors. Alternativ kannst Du den Temperaturwert über eine Tabelle
errechnen, wie es hier gemacht wurde.
Um eine höhere Auflösung im eingegrenzten Bereich zu bekommen, muß man
einen OPV verwenden, der das Signal so skaliert, daß der ADC optimal
genutzt wird. (Irgendwo hatte ich ein Beispiel dafür; müßte ich mal
suchen).
Gefunden.
Anbei die Schaltung und eine Exel-Vorlage zur Berechnung der
Widerstände.
Die Schaltung wollte ich noch mal mit einem neueren ATtiny402 aufbauen,
wobei die Temperatur per IIC/TWI abgefragt werden kann. Mal sehen.
MaWins gibt es hier ja wie Sand am Meer.
Ich kann nichts dafür, daß Dein Kindergarten heute geschlossen hat.
Wenn Du mal erwachsen bist, kannst Du vielleicht lesen und dann die
Zusammenhänge verstehen.
m.n. schrieb:> Wenn Du mal erwachsen bist, kannst Du vielleicht lesen und dann die> Zusammenhänge verstehen
Ich sehe, dass du selbst nach 5 Jahren deine eigenen massiven Fehler
nicht erkennst, also dumm bleibst weil vollkommen lernresistent und
selbstüberheblich.
Schade um die vertane Zeit dir was beibringen zu wollen, aber damit
wenigstens andere Leute nicht auf deinen abstrusen Humbug (von denen es
mehr gibt, wie LEDs ohne Vorwiderstand direkt an IC Ausgänge die keine
Konstantstromquellen sind) reinfallen:
http://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.32