Erneut PT100 an MCP6004T und 12-Bit ADC

OP #7434647
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....

Angehängte Dateien:
OP #7434983
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:

$$V = 1 + \frac{R_3}{\frac{R1\times R_2}{R_1 + R_2}} = 1 + \frac{49k9}{\frac{49k9\times 1k}{49k9 + 1k}} = 1 + 50,999 = 51,999$$

Die Offsetspannung U_o wäre

$$U_o = U_v \times \frac{R_2}{R_1+R_2} = 3,3 \times \frac{49k9}{49k9+1k} = 3,3 \times 0,98 = 3,235$$

Die Ausgangsspannung bei U_e = 0,0648V (für 100 Ohm):

$$U_a = (U_e \times U_o)\times V + U_o$$

$$U_a = (0,0648-3,235)\times 51,999 + 3,235$$

$$U_a = -161,612$$

Irgendetwas mache ich doch falsch?

OP #7435174
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

$$U_o = U_v \times \frac{R_2}{R_1+R_2} = 3,3 \times \frac{1k}{49k9+1k} = 3,3 \times 0,0196 = 0,0647$$

Somit kommt für

$$U_{100} = 0,070 V$$

raus bei 100 Ohm für 0 Grad und

$$U_{138} = 1,333 V$$

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

$$ADC_{0} = 87$$

bei 100 Ohm und

$$ADC_{138} = 1655$$

bei 138,51 Ohm.

Als ungefähre lineare Funktion

$$f(x) = 00631\times x- 5,6263$$

, 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 :) :) :)

#7435358
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!

#7435476
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°)

OP #7436869
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

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren