Forum: Mikrocontroller und Digitale Elektronik Möglichkeit zur resistiven Messung an uC-ADC - Verfahren geeignet?


von ADC-Fraguist (Gast)


Lesenswert?

Hi Leute!

Ich habe hier einen PT500, den ich gerne messen würde. Zum Einsatz kommt 
der 12 Bit Wandler in einem MSP430.

Ist folgende Variante praktikabel:
1
        Versorgung
2
            |
3
      Vorwiderstand
4
            |
5
        ----+------------+---------- OPV --- 12Bit ADC
6
       |                 |
7
Festwiderstand       Messobjekt
8
       |                 |
9
uC     |                 |
10
-----  |                 |
11
P1.0 |-                  |
12
     |                   |
13
P1.1 |-------------------
14
     |
15
     |
16
-----

Jetzt würde ich abwechselnd P1.0 auf low oder High-Z schalten, wodurch 
jeweils nur ein Widerstand mit Strom versorgt wird.

Durch einen Vergleich der beiden Widerstände könnte ich doch nun das 
Messobjekt bestimmen, oder? In der Variante würden doch auch die Drifts 
und die Toleranz in der OPV-Schaltung rausfallen, oder täusche ich mich?

Der Leckstrom in die Pins hinein beträgt laut DB 50nA, also 
vernachlässigbar.

Meint ihr, dass ich damit sinnvolle Ergebnisse erzielen kann, oder ist 
da irgendwo ne Krücke drin, die ich grad nicht erkenne?

von ADC-Fraguist (Gast)


Lesenswert?

Ich habe es jetzt mal ausprobiert - generell geht es ja ersmtal so, aber 
über die Qualität kann ich natürlich keine großen Aussagen machen.

Was ich mal getan habe: Den ADC-Wert mit der Portpin-Variante verglichen 
mit den Werten, die rauskommen, wenn ich die Widerstände direkt an GND 
anschließe.

Bei einem Pin kommt ein Delta von 26 ADC-Zählern raus, beim anderen ein 
Delta von 24.

Es ist also schon ein "relativ großer" Widerstand in den IO-Pins. Jetzt 
weiß ich natürlich nicht, ob beide sich gleich verhalten, also mit der 
Temperatur und so. Ich würde ja erstmal davon ausgehen. Ergo müsste doch 
eine Temperaturdrift auch beide gleichermaßen betreffen, oder? Und das 
Ergebnis somit wieder stimmen.

Oder würde es sich anbieten, einen kleinen FET anstelle der Pins direkt 
zu nehmen? Ein BSS123 oder so.

Was meint ihr?

von ADC-Fraguist (Gast)


Lesenswert?

Oder ist die Exemplarstreuung von zwei diskreten FETs ggf. schlimmer?

von ADC-Fraguist (Gast)


Lesenswert?

Grad mal den Pin gemessen - der Widerstand nach GND im low-Zustand 
beträgt 23,6 bzw. 23,8 Ohm - das ist ja doch recht nah beieinander.

Hat nicht jemand mal eine Meinung dazu? ;-)

von ADC-Fraguist (Gast)


Lesenswert?

OK Leute...ich hoffe immernoch, dass sich mal jemand meldet...

Ich habe mit der Geschichte jetzt ein wenig herumgespielt, jedoch ist 
das doch nicht so optimal - und da wäre ich echt froh, wenn jemand nen 
Rat hätte, woran es liegen könnte.

Ich habe jetzt abwechselnd einen 500Ohm Widerstand dran und schalte dann 
im Sekundentakt um auf den anderen, zu messenden Widerstand.

Zwischen der Zeit, wo der Widerstand umgeschaltet wird bis zum 
Samplingbeginn des ADCs vergehen rund diese Sekunde. Also der Sampling C 
sollte sich schon lange auf den neuen Wert aufgeladen haben.

Ich mache jetzt gerade einfach folgende Rechnung im uC:


R_Messwiderstand = (ADC-Wert_Messwiderstand * 5000) / 
ADC-Wert_Referenzwiderstand


5000 wegen 500Ohm plus Nachkommastelle.

Jetzt habe ich zum Vergleich gerade einen 750 Ohm Widerstand drin, aber 
mein uC spuckt mir einen Widerstandswert von 730 aus, also knapp 20 zu 
wenig.

Es ist so, dass mit steigendem Messwiderstand auch der Fehler steigt.
Bei einem 900 Ohm Widerstand sind es bereits 40 Ohm Differenz.

Wo soll ich hier anfangen den Fehler zu suchen?

von ADC-Fraguist (Gast)


Lesenswert?

Wenn ich als Messwiderstand auch 500 Ohm reinmachen, dann zeigt er mir 
auch genau 500 an.

von Achim S. (Gast)


Lesenswert?

ADC-Fraguist schrieb:
> OK Leute...ich hoffe immernoch, dass sich mal jemand meldet...

na dann mach ich mal den Anfang ;-)


ADC-Fraguist schrieb:
> R_Messwiderstand = (ADC-Wert_Messwiderstand * 5000) /
> ADC-Wert_Referenzwiderstand
>
>
> Wo soll ich hier anfangen den Fehler zu suchen?

Am besten nochmal über deine Berechnungsformel nachdenken. Dieser 
Dreisatz würde stimmen, wenn der ADC-Wert proportional dem Wert des 
jeweiligen Widerstands wäre. Ist er aber nicht, denn du baust einen 
Spannungsteiler. Dein ADC-Wert pro Einzelmessung ist also

ADC_wert = Versorgung/Referenzspannung * 2^12 * R_m /(R_v + R_m)

und hängt nichtlinear vom gemessenen Widerstand R_m ab.

Die Abhängigkeit vom Vorwiderstand R_v kürzt sich auch nicht bei der 
Quotientenbildung der beiden ADC-Werte, Dreisatzrechnung liefert hier 
nicht das gewünschte Ergebnis.

ADC-Fraguist schrieb:
> Wenn ich als Messwiderstand auch 500 Ohm reinmachen, dann zeigt er mir
> auch genau 500 an.

Klar: wenn du zwei mal den selben ADC-Wert hast und beide durcheinander 
dividierst, kommt 1 raus. Aber die Berechnung bei unterschiedlichen 
ADC-Werten muss den Spannungsteiler berücksichtigen.

Ich fürchte, mit deiner Vergleichsmethode schaffst du nicht wirklich 
einen Genauigkeitsvorteil gegenüber einer sauber aufgebauten 
Standardbeschaltung des Pt500.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

deine Schaltung kann überhaupt nicht lineare Ergebnisse liefern - durch 
die zu messenden Widerstände fliesst ja kein konstanter Strom, sondern 
der ist vom zu messenden Widerstand abhängig. Du kannst dir höchstens 
die Abweichungen berechnen und das im Programm korrigieren.

Gruss Reinhard

von Rainer Z. (razi)


Lesenswert?

Hai!

ADC-Fraguist schrieb:
> Meint ihr, dass ich damit sinnvolle Ergebnisse erzielen
> kann,

Nein.

> oder ist da irgendwo ne Krücke drin, die ich grad nicht
> erkenne?

Ja. Wenn es sich wirklich um ein Pt500 handelt, dann ist
die Empfindlichkeit ungefaehr 1 Ohm/K (ca. 0.4%/K). Das
bedeutet: 10 Ohm Messfehler = Temperatur 10° falsch gemessen.
Da ist Dein Daumen deutlich genauer...

Platinwiderstaende sind schoen und haben eine Menge Vorteile,
aber sie haben auch (mindestens) einen Nachteil: Die Mess-
empfindlichkeit ist ziemlich klein.

Standardloesung: Messbruecke + OPV.

Ich will nicht ausschließen, dass man Deine Lösungsidee
irgendwie so hinfrickeln kann, dass man ohne OPV auskommt,
aber ich würde die Frickelei nicht wollen.

Korrektur: Habe übersehen, dass Du ja offenbar einen
OPV vorgesehen hast. Um so besser. Nun also nur noch
Messbrücke mit 0.1%-Widerständen aufbauen.

Grusz,
Rainer

: Bearbeitet durch User
von ADC-Fraguist (Gast)


Lesenswert?

OK Leute!

Ihr habt mir die Augen geöffnet, danke!

Achim S. schrieb:
> Ich fürchte, mit deiner Vergleichsmethode schaffst du nicht wirklich
> einen Genauigkeitsvorteil gegenüber einer sauber aufgebauten
> Standardbeschaltung des Pt500.

Macht Sinn. Also: Mir geht es nicht um die supergenauen Messwerte, wenn 
es um Grad daneben liegt, dann isses in Ordnung. Den PT500 nehme ich 
auch nur, da er bereits vorhanden ist. Auf den Vergleich kam ich, da in 
der Schaltung noch ein OP eines 4-fach-Typen frei ist. Hierbei handelt 
es sich um einen MCP6004, welcher ja nicht so dolle ist. Daher der 
Vergleich, wodurch alle Verschiebungen durch Temperatur und auch 
Widerstandstoleranzen in der Verstärkerschaltung rausfallen sollten. Um 
jetzt nochmal an der Vergleichsrechnung anzuknüpfen...wenn ich es jetzt 
so aufbauen würde:
1
        Versorgung
2
            |
3
           JFET--     <- BF245 o.ä.
4
            |    |
5
 Widerstand zur Stromeinstellung
6
            |
7
        ----+------------+---------- OPV --- 12Bit ADC
8
       |                 |
9
Festwiderstand       Messobjekt
10
       |                 |
11
uC     |                 |
12
-----  |                 |
13
P1.0 |-                  |
14
     |                   |
15
P1.1 |-------------------
16
     |
17
     |
18
-----
dann wäre ich doch eigentlich alle Probleme los, oder? Da hätte ich 
einen konstanten Strom, welcher sogar mit der Temperatur wandern kann, 
da er ja für beide Rs gilt. Immernoch vorausgesetzt, P1.0 und P1.1 
verhalten sich identisch, was aber anzunehmen ist. Alternative zum JFET 
wäre ein LM334 oder irgendwas in der Richtung.

Ich habe als Versorgung 3V, also ist ggf. die Sättigungsspannung am JFET 
zu hoch. Als Messstrom muss ich mich leider auf 100 bis 200uA begrenzen, 
eher 100, da ich hier nicht verschwenderisch sein kann.

Ist die KSQ hier die Lösung?

Reinhard Kern schrieb:
> durch
> die zu messenden Widerstände fliesst ja kein konstanter Strom

Mit jetzt gezeigter Lösung ja dann schon.

Rainer Ziegenbein schrieb:
> Standardloesung: Messbruecke + OPV.

Klar, ginge auch, aber wie gesagt, der OPV ist schon dürftig.

Also, wenn ich hierbei wieder was nicht mit in Betracht gezogen habe, 
dann seid so gut und sagt es mir. Weil ich denke, das ist doch jetzt 
absolut praktikabel, oder? Das einzige was mir hier einen Fehler 
reinbringt ist dann mein 500Ohm Vergleichswiderstand.

von Reinhard Kern (Gast)


Lesenswert?

ADC-Fraguist schrieb:
> Das einzige was mir hier einen Fehler
> reinbringt ist dann mein 500Ohm Vergleichswiderstand.

Widerstandsmässig schon, aber wenn du nicht aufpasst, ist dein Pt500 
kein Messfühler, sondern selbst eine Heizung. Ich würde so Pi mal Bauch 
sagen, mehr als 2 mA dürfen nicht durchfliessen, damit die 
Eigenerwärmung nicht das Ergebnis verfälscht.

Gruss Reinhard

von ADC-Fraguist (Gast)


Lesenswert?

Vorgesehen hatte ich 100uA, also sehr wenig.

von Rainer Z. (razi)


Lesenswert?

ADC-Fraguist schrieb:
> Vorgesehen hatte ich 100uA, also sehr wenig.

Machst Du Witze?

U = R * I
  = 500 Ohm * 0.1mA
  = 50mV

Das entspricht etwa einer Empfindlichkeit von 0.1mV (!!)
je Kelvin. --> Vergiss es.

von ADC-Fraguist (Gast)


Lesenswert?

Da ist doch noch ein OPV hinter.

Die 100uA sind absolut praktikabel - arbeitet schon in einer anderen 
Schaltung mit besserem OP und genauen Widerständen optimal.

von W.S. (Gast)


Lesenswert?

ADC-Fraguist schrieb:
> Ich habe hier einen PT500, den ich gerne messen würde. Zum Einsatz kommt
> der 12 Bit Wandler in einem MSP430.

Es geht nur eines von beiden.
Entweder willst du den PT500 messen (!!!) zwecks Temperaturmessung -
Oder du willst den 12 Bit Wandler in deinem MSP einsetzen.
Beides zusammen geht nicht.

Wenn du tatsächlich Temperaturen messen willst, dann nimm einen 
richtigen ADC.

Wenn du gerne abgleichst und mit krummen Kennlinien dich befassen 
willst, dann nimm einen CMOS-OpV für den PT500 und einen beliebigen µC, 
denn da kommt's dann auch nicht mehr drauf an.

Alle paar Tage kommt hier so ein Thema rein und die TO's sind zu bequem 
zum vorherigen Suchen und zu deppert zum vorherigen Durchkalkulieren 
ihrer grandiosen Ideen.

W.S.

von ADC-Fraguist (Gast)


Lesenswert?

Klar geht beides zusammen. Ich sagte doch, ich brauche es nicht so genau 
und der PT500 is schon drin, also kann ich ihn auch benutzen. Und ein OP 
is auch noch frei.

Was spricht also dagegen? Die Kennlinie des Pts ist nicht linear, klar, 
aber das lässt sich mit nem Ersatz-Polynom 3. Grades einfach in Software 
erschlagen.

Ich muss ja nur erstmal den Widerstandswert in den uC bekommen. Mit zwei 
Grad Auflösung bin ich zufrieden. Da reicht der ADC.

von Achim S. (Gast)


Lesenswert?

irgendwie finde ich deine Herangehensweise nicht ganz schlüssig. 
Einerseits investierst du einigen Aufwand in deine Schaltungen um "Drift 
und Toleranz" zu reduzieren. Aber wenn genauere Alternativen 
vorgeschlagen werden (die Standardbeschaltungen halt) erklärst du, dass 
du es ja gar nicht so genau brauchst.

Zu deinen Schaltungenideen: der prinzipielle Ansatz, Fehler durch 
Vergleich mit einem Referenzwiderstand zu eliminieren, ist ja nicht 
schlecht. (Das macht übrigens die von Rainer vorgeschlagene Messbrücke 
auch). Aber du solltest nicht bei der prinzipiellen Betrachtung aufhören 
sondern die tatsächlichen Fehler konkret durchrechnen. Dann erkennst du, 
dass welche Maßnahmen wirklich sinnvoll sind.

Eine Sensor-Empfindlichkeit von ~0,2mV/°C und ein OPV mit einigen mV 
Offset passen einfach nicht zusammen. Wenn du die Wirkung der 
Offsetspannung mal mit einer konkreten Formel auf ein Stück Papier 
schreibst würdest du auch sofort erkennen, dass der Offset sich bei der 
von dir geplanten Korrektur nicht herauskürzt: deine Herangehensweise 
hilft also nicht gegen die OPV-Drift.

Der Vergleich mit dem Festwiderstand würde dir allerdings bei deiner 
butterweichen Stromquelle helfen - die wird voraussichtlich wild 
driften, und wenigstens dieser Fehler fällt durch den Vergleich mit dem 
Festwiderstand in erster Näherung raus (einfach mal nachrechnen).

Wenn du statt einer Standardschaltung bei deinem Entwurf bleiben willst, 
dann pack die wichtigen Punkte an:
1)  geh mit dem Strom mindestens auf 1 mA (oder mehr). Völlig Wurst ob 
du anderswo schon mal mit 100 µA glücklich wurdest. Du willst den Strom 
doch ohnehin schalten: mit einem Dutycycle <1% und einer On-Zeit im 
ms-Bereich, stört der höhere Strom doch niemanden. Damit werden alle 
Fehler des OPV um eine Größenordnung uninteressanter, das ist sehr viel 
wirksamer als alle bisher von dir durchdachten Maßnahmen.
2) mach eine differentielle Messung an beiden Enden des Widerstands (ich 
hoffe, dein ADC kann das). Selbst wenn der IO-Port niederohmig sein 
sollte schaltet er auf das digitale GND durch. Der interne Digital-GND 
eines µC ist eine miserable Bezugsspannung für eine empfindliche 
Analogmessung.
3) nutze zumindest eine halbwegs hochohmige Stromquelle. Der Vergleich 
mit dem Festwiderstand eliminiert zwar die Drifts der Stromquelle, aber 
die weiche Kennlinie der Stromquelle wird dadurch nicht korrigiert.
4) achte beim Einbau des Sensors darauf, dass du auch wirklich die 
Temperatur des Messobjekts bekommst, nicht die der Zuleitungen.

Um die Nichtlinearitäten der Pt-Kennlinie musst du dir dann erst sehr 
viel später Gedanken machen.

von ADC-Fraguist (Gast)


Lesenswert?

Hallo Achim!

Vielen Dank für deine ausführliche Antwort!

Achim S. schrieb:
> irgendwie finde ich deine Herangehensweise nicht ganz schlüssig.
> Einerseits investierst du einigen Aufwand in deine Schaltungen um "Drift
> und Toleranz" zu reduzieren.

Ich war eigentlich der Meinung, dass das gerade fast garkein Aufwand ist 
und ich damit dennoch recht praktikable Ergebnisse erzielen kann. Eine 
KSQ, welche abwechselnd einen Referenzwiderstand und einen 
Messwiderstand bestromt. Beide werden vom gleichen Verstärkungsnetzwerk 
an den ADC weitergegeben - somit sind Toleranzen/Drifts der Schaltung 
für bei identisch und fallen quasi raus. Das war jetzt zumindest der 
letzte Plan.

Achim S. schrieb:
> Aber wenn genauere Alternativen
> vorgeschlagen werden (die Standardbeschaltungen halt) erklärst du, dass
> du es ja gar nicht so genau brauchst.

Ich kann mir denken, dass die gewöhnlichen Schaltungen zur Auswertung 
wesentlich besser geeignet sind, jedoch erfordern sie auch andere 
Bauteile. Ich habe hier halt noch OPs frei (welche aber eher schlecht 
sind) und dieser PT500 ist eben auch vorhanden. Eine Genauigkeit von 2 
Grad ist für mich völlig ausreichend, Nachkommastellen brauche ich 
nicht. Das ganze soll halt ein guter Kompromiss werden, mit den 
vorhandenen Mitteln noch das Beste rauszuholen.

Achim S. schrieb:
> Zu deinen Schaltungenideen: der prinzipielle Ansatz, Fehler durch
> Vergleich mit einem Referenzwiderstand zu eliminieren, ist ja nicht
> schlecht.

Juhu, nicht nur Tadel :-)

Achim S. schrieb:
> Das macht übrigens die von Rainer vorgeschlagene Messbrücke
> auch

Bei einer Messbrücke brauche ich aber doch auch einen guten OP mit guten 
Widerständen, oder? Wenn ich stets nen Offset zwischen den Eingängen 
habe, dann komme ich ohne kalibrieren auch nicht aus.

Achim S. schrieb:
> Eine Sensor-Empfindlichkeit von ~0,2mV/°C und ein OPV mit einigen mV
> Offset passen einfach nicht zusammen.

Das ist mir klar.

Achim S. schrieb:
> Wenn du die Wirkung der
> Offsetspannung mal mit einer konkreten Formel auf ein Stück Papier
> schreibst würdest du auch sofort erkennen, dass der Offset sich bei der
> von dir geplanten Korrektur nicht herauskürzt: deine Herangehensweise
> hilft also nicht gegen die OPV-Drift.

Das verstehe ich leider nicht, ich wäre dir sehr dankbar, wenn du mir 
das vielleicht erklären könntest. Wieso habe ich trotzdem einen Fehler?

Achim S. schrieb:
> Der Vergleich mit dem Festwiderstand würde dir allerdings bei deiner
> butterweichen Stromquelle helfen - die wird voraussichtlich wild
> driften, und wenigstens dieser Fehler fällt durch den Vergleich mit dem
> Festwiderstand in erster Näherung raus

Das hatte ich auch gehofft.

Achim S. schrieb:
> geh mit dem Strom mindestens auf 1 mA (oder mehr)

Muss ich nochmal schauen, was ich da machen kann.

Achim S. schrieb:
> Damit werden alle
> Fehler des OPV um eine Größenordnung uninteressanter, das ist sehr viel
> wirksamer als alle bisher von dir durchdachten Maßnahmen.

Weil das Nutzsignal nicht so nah an den unerwünschten Spannungspegeln 
dran ist?

Achim S. schrieb:
> mach eine differentielle Messung an beiden Enden des Widerstands (ich
> hoffe, dein ADC kann das)

Leider nicht, wie gesagt, ist eher die Variante, in der ich noch das 
Beste aus dem Gegebenen machen möchte.

Achim S. schrieb:
> Selbst wenn der IO-Port niederohmig sein
> sollte schaltet er auf das digitale GND durch. Der interne Digital-GND
> eines µC ist eine miserable Bezugsspannung für eine empfindliche
> Analogmessung.

Stimme ich absolut zu!

Achim S. schrieb:
> nutze zumindest eine halbwegs hochohmige Stromquelle. Der Vergleich
> mit dem Festwiderstand eliminiert zwar die Drifts der Stromquelle, aber
> die weiche Kennlinie der Stromquelle wird dadurch nicht korrigiert.

Was bedeutet das? Was meinst du mit "weicher Kennlinie wird nicht 
korrigiert"? Hat es was damit zu tun, dass der Ausgangsstrom der KSQ 
auch geringfügig von der zu treibenden Last abhängig ist?

Gruß und danke!

von Achim S. (Gast)


Lesenswert?

ADC-Fraguist schrieb:
> Das verstehe ich leider nicht, ich wäre dir sehr dankbar, wenn du mir
> das vielleicht erklären könntest. Wieso habe ich trotzdem einen Fehler?

Dein Ansatz ist, die beiden gemessenen Spannungen zu dividieren, um den 
Fehler loszuwerden. Das funktioniert bei multiplikativen 
(Verstärkungs-)fehlern. Das funktioniert nicht bei additiven 
(Offset-)fehlern.

Also im Idealfall (keine Fehler):
  U1=100µA * R_m
  U2=100µA * R_v

  Ausgewertet wird U1/U2 = R_m/R_v

Wenn der Strom driftet erhältst du:
  U1=110µA * R_m
  U2=110µA * R_v

  U1/U2 = R_m/R_v liefert dir immer noch das korrekte 
Widerstandsverhältnis -> Drifts der Stromquelle werden korrigiert.

Wenn der Offset driftet erhältst du:
  U1=100µA * R_m + U_off
  U2=100µA * R_v + U_off

  U1/U2 = (100µA * R_m + U_off)/(100µA * R_v + U_off)   der Offsetfehler 
fällt nicht heraus, er wird höchstens zum Teil kompensiert (je nachdem, 
wie weit R_m und R_v voneinander entfernt sind)

ADC-Fraguist schrieb:
> Hat es was damit zu tun, dass der Ausgangsstrom der KSQ
> auch geringfügig von der zu treibenden Last abhängig ist?

ja, das hatte ich gemeint. Wobei ich beim konkreten Nachdenken jetzt 
auch zum Schluss komme, dass der Effekt wohl bei einer 100µA JFET-Quelle 
vernachlässigbar wäre. (Die Quelle wäre nicht so "butterweich" wie ich 
auf den ersten Blick vermutet habe.)

ADC-Fraguist schrieb:
> Weil das Nutzsignal nicht so nah an den unerwünschten Spannungspegeln
> dran ist?

Nein: weil das Nutzsignal 10 mal größer wird und alle additiven 
Störungen (Offset des OPV, Rauschen des µC-internen digital-GND) sich 
relativ zum Nutzsignal nur noch ein Zehntel so stark auswirken.

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.