Forum: Mikrocontroller und Digitale Elektronik Erneut PT100 an MCP6004T und 12-Bit ADC


von Burak S. (buraks)


Angehängte Dateien:

Lesenswert?

Hi,

leider erneut ein Beitrag wie Tausend andere zum Thema Temperaturmessung 
mit PT100 an einen Operationsverstärker. Ich versuche seit Tagen weiter 
zu kommen, aber es klappt nicht. Ich hab drei E-Techniker gefragt und 
alle können mir warum auch immer nicht weiterhelfen...

2 PT100 Sensoren sind an einen MCP6004T OpAmp angeschlossen, welcher 
wiederum an den integrierten 12bit ADC von einem SAME70 MCU 
angeschlossen ist. Der ADC kann von 0V bis VREF (hier 3,3V) konvertieren 
und stellt den analogen Input linear auf diesen Bereich dar ("The 
conversion is performed on a full range between 0V and the reference 
voltage carried on pin VREFP. Analog inputs between these voltages 
convert to values based on a linear conversion").

Ich hab das folgende Schaltnetz und was auch schon auf 2 Platinen zum 
Testen bestückt ist. Derjenige, der das entworfen hat, ist nicht mehr da 
und ich quäle mich durch den Code und was sich dabei gedacht wurde. Im 
Code wird der digitale Wert, welcher der ADC ausgibt, wie folgt 
berechnet. Die Multiplikation mit 10 ist zum Darstellen von der ersten 
Nachkommastelle als Integerzahl. 140, 170 und 14 sind magisch rein 
gewürfelt. Dazu ist mir beim Testen aufgefallen, dass adc_val2 und 
adc_val1 eine Differenz haben, obwohl die Sensoren nebeneinander stehen 
und der Wert dann identisch sein sollte. Der Offset ist auf beiden auf 
512 laut ADC eingestellt. Auch wenn man die Sensoren austauscht, ändert 
sich nichts an den Werten.
1
uint16_t t1 = (read_adc(ch1) - 140) / 14 * 10
2
uint16_t t2 = (read_adc(ch2) - 170) / 14 * 10

Ich bin mithilfe der Forenbeiträge und vor allem dieser Seite 
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.32 auch schon 
weiter gekommen, aber ich schaffe es trotzdem nicht. Der Schaltplan in 
Figure 4 von https://www.ti.com/lit/pdf/slyt442 entspricht auch meinem 
vorliegenden, bis dass R5 nicht vorhanden ist und der Verstärkerausgang 
nicht zurück an den nicht-invertierenden Eingang gekoppelt ist. Ich habe 
diese Excel Tabelle RTD_Linearization_v7 auch gefunden, würde mir aber 
ehrlich gesagt nur weiterbringen wenn man eine neue Platine bestückt.

Was für eine Output-Range hat jetzt der OpAmp und wie hoch ist der 
Verstärkungsfaktor? Ich bin schon längst am verzweifeln....

von Ove M. (Firma: ;-) gibt es auch) (hasenstall)


Lesenswert?

Schau dir mal genau deinen Schaltplan an.
Dann zeichne ihn noch einmal, direkt mit einem PT100 als veränderlichen 
Widerstand. Dann erkennst du dein Problem. Löse auch deinen Käfer in 
Schaltzeichen auf.
Dann sehen wir weiter.

von Harald W. (wilhelms)


Lesenswert?

Burak S. schrieb:

> pt100_mcp6004t.jpg

Warum nennst Du Deine PT100 NTC? Das sind eher PTCs.

von Peter D. (peda)


Lesenswert?

Burak S. schrieb:
> Die Multiplikation mit 10 ist zum Darstellen von der ersten
> Nachkommastelle als Integerzahl.

Dann muß diese zuerst erfolgen. Was einmal an Auflösung weg ist, bleibt 
weg. Oder rechne alles in float.
Gibt doch erstmal die ADC-Rohwerte aus und rechne sie z.B. in Excel um.

: Bearbeitet durch User
von Burak S. (buraks)


Lesenswert?

Harald W. schrieb:
> Burak S. schrieb:
>
>> pt100_mcp6004t.jpg
>
> Warum nennst Du Deine PT100 NTC? Das sind eher PTCs.

Ja, der Schaltplan ist nicht von mir, wie gesagt. Es werden aber PT100 
Sensoren benutzt.

Ove M. schrieb:
> Schau dir mal genau deinen Schaltplan an.
> Dann zeichne ihn noch einmal, direkt mit einem PT100 als veränderlichen
> Widerstand. Dann erkennst du dein Problem. Löse auch deinen Käfer in
> Schaltzeichen auf.
> Dann sehen wir weiter.

Meinst du, die fehlende Verbindung zwischen NTC1 und 1IN+ vom OpAmp? Die 
Linie ist nicht eingezeichnet.

Peter D. schrieb:
> Burak S. schrieb:
>> Die Multiplikation mit 10 ist zum Darstellen von der ersten
>> Nachkommastelle als Integerzahl.
>
> Dann muß diese zuerst erfolgen. Was einmal an Auflösung weg ist, bleibt
> weg. Oder rechne alles in float.
> Gibt doch erstmal die ADC-Rohwerte aus und rechne sie z.B. in Excel um.

Ja, das stimmt, danke. Die ADC Rohwerte habe ich mir auch mal 
ausgegeben, aber kann nur schwer damit was anfangen. Bei 25-26° 
Raumtemperatur sind die Rohwerte ca. 420 und 470. Richtung 0° Grad geht 
es dann auf ein Wert von ca. 100, bei 35° Richtung 700.

Ich bin jetzt eben auf den nicht invertierenden Verstärker mit Offset 
gestoßen, was ja genau meine Abbildung entspricht 
(https://www.mikrocontroller.net/articles/Operationsverst%C3%A4rker-Grundschaltungen#Nichtinvertierender_Verst%C3%A4rker_mit_Offset). 
Ich habe das mal auf die schnelle ausgerechnet mit Beispielwerten für 
den PT bei 0 Grad und 100 Grad (100 Ohm und 138,51 Ohm) und komme auf 
eine Ausgangsspannung von -161,612V für 100 Ohm und -160,359V bei 138,51 
Ohm. Das hört sich aber bisschen extrem an...Die Verstärkung wäre 
51,999:

Die Offsetspannung U_o wäre
Die Ausgangsspannung bei U_e = 0,0648V (für 100 Ohm):


Irgendetwas mache ich doch falsch?

von B. P. (skorpionx)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Es gibt auch ADCs, die haben alles schon fertig intern für PT100 
Messung. Nur den Referenzwiderstand muß man extern anschließen. Z.B. 
AD7793:

https://www.mouser.de/ProductDetail/Analog-Devices/AD7793BRUZ-REEL?qs=%2FtpEQrCGXCz8h9X4YMmkkw%3D%3D

von Burak S. (buraks)


Lesenswert?

Ich habe es gelöst :-) :-) :-)

Ich habe die Offsetspannung in meiner Beispielrechnung falsch berechnet 
bzw. den falschen Widestand eingesetzt:

Die Offsetspannung U_o wäre

Somit kommt für
 raus bei 100 Ohm für 0 Grad und
 bei 138,51 Ohm für 100 Grad. In einer Excel Tabelle alles automatisch 
berechnen lassen, somit komme ich auf ein ADC Wert von
 bei 100 Ohm und
 bei 138,51 Ohm.

Als ungefähre lineare Funktion
, die ich dann auf meinen ausgelesenen ADC Werte anwenden kann und somit 
habe ich die Temperatur.

Allerdings musste ich noch im ADC Register die Offsets anpassen, warum 
das entstanden ist, kann ich nicht sagen...

Ich bin zufrieden :) :) :)

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Burak S. schrieb:
> read_adc(ch1)

Von welchem Type ist der Rückgabewert dieser Funktion?

von Uuu B. (hansdampf2)


Lesenswert?

Burak S. schrieb:
> bei 138,51 Ohm für 100 Grad. In einer Excel Tabelle alles automatisch
> berechnen lassen, somit komme ich auf ein ADC Wert vonADC0=87ADC_{0} =
> 87 bei 100 Ohm undADC138=1655ADC_{138} = 1655 bei 138,51 Ohm.

Willst Du keine negativen Temperaturen messen? Ansonsten müßtest Du bei 
der gewählten Schaltung noch ca. 80 Ohm in Reihe zum PT100 schalten und 
alles neu berechnen. Alternativ auch R6/R18 verkleinern. Der OPV ist 
zwar rail to rail, ich würde aber nicht unbedingt am Anschlag arbeiten, 
es sei denn es geht ausschließlich um Messungen ab Zimmertemperatur. 
Viel Erfolg noch!

von Achim H. (pluto25)


Lesenswert?

Uuu B. schrieb:
> ich würde aber nicht unbedingt am Anschlag arbeiten,

Ob der Ersteller die unlinearität im unteren Bereich genutzt hat den 
"Bauch" aus der PT Kennlinie zu ziehen?
Nach meinen Berechnungen (ohne Offset und linearen OP) gibt Adc-Wert 
*100/156 genaue zehntel Grad von 0-30° aus. Darüber wird's zu wenig (bei 
100° fehlen 1,7° und bei 220 Grad fehlen schon 10°)

von Burak S. (buraks)


Lesenswert?

Uuu B. schrieb:
> Willst Du keine negativen Temperaturen messen? Ansonsten müßtest Du bei
> der gewählten Schaltung noch ca. 80 Ohm in Reihe zum PT100 schalten und
> alles neu berechnen. Alternativ auch R6/R18 verkleinern. Der OPV ist
> zwar rail to rail, ich würde aber nicht unbedingt am Anschlag arbeiten,
> es sei denn es geht ausschließlich um Messungen ab Zimmertemperatur.
> Viel Erfolg noch!

Vielen Dank! Nein, negative Temperaturen brauchen wir nicht. Eigentlich 
reicht sogar der Bereich zwischen 0°C und 50°C. Die 80 Ohm wären 
zusätzlich zu den 4k9 vor PT oder nach PT? Das wäre dann aber für 
negative Temperaturen?

Da nur bis 50°C relevant sind und auch 100°C noch ca. bei 1,3V sind, 
arbeitet der OPV doch im normalen Bereich, oder nicht?

Das Platinen-Layout wird noch mal gefixt und hier würde ich dann auch 
vorschlagen, dass man das so durchführt wie über die R7_Linearization 
Excel Tabelle vorgegeben ist. Dann hat man da etwas festes und es ist 
nachvollziehbar. Hier könnte ich von z.B. im OPV Output Range von 0,25V 
bis 3,275 Volt arbeiten, damit ich 0,25V Puffer am Anfang und Ende habe, 
oder was meint ihr (s. Datasheet "Maximum Output Voltage Swing", oder 
ist das falsch?)

A. H. schrieb:
> Ob der Ersteller die unlinearität im unteren Bereich genutzt hat den
> "Bauch" aus der PT Kennlinie zu ziehen?
> Nach meinen Berechnungen (ohne Offset und linearen OP) gibt Adc-Wert
> *100/156 genaue zehntel Grad von 0-30° aus. Darüber wird's zu wenig (bei
> 100° fehlen 1,7° und bei 220 Grad fehlen schon 10°)

Bin da etwas verwirrt - ist die PT-Kennlinie allgemein im unteren 
Temperaturbereich ungenauer als im oberen? Wie kommst du auf 100 und 156 
für die Berechnung?

Datasheet OpAmp MCP6004T: 
https://ww1.microchip.com/downloads/en/DeviceDoc/MCP6001-1R-1U-2-4-1-MHz-Low-Power-Op-Amp-DS20001733L.pdf

von Peter S. (peter_sch)


Lesenswert?

Burak S. schrieb:
> Hier könnte ich von z.B. im OPV Output Range von 0,25V
> bis 3,275 Volt arbeiten, damit ich 0,25V Puffer am Anfang und Ende habe,
> oder was meint ihr (s. Datasheet "Maximum Output Voltage Swing", oder
> ist das falsch?)

Den im DB angegebenen "Maximum Output Voltage Swing" würde ich nicht 
voll ausnutzen. Die Angabe gilt nur für Vdd=5.5V und "0.5V input 
overdrive". Das hier habe ich dazu gefunden: 
https://electronics.stackexchange.com/questions/534140/what-is-input-overdrive. 
Für eine Betriebsspannung von 3.3V sieht das vermutlich anders aus.

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.