Widerstandsmessung über Spannungsteilerverhältnisse

4 Antworten

Das ist etwas seltsam was du da beschreibst.. Um welchen Mikrocontroller handelt es sich denn?

Deine Zeichnung zeigt einen 4 Bit D/A Wandler zwischen 1/4 Vcc und 3/4 Vcc.

Diese Spannung jetzt an den externen unbekannten Widerstand zu leiten bringt nix.

Normalerweise haben Mikrocontroller "Komparatoreingänge" A und B.

Du kannst jetzt A an die D/A Wandler hängen und Rx an eine Konstantstromquelle von etwa 5V / Rx hängen. Das bringt eher gar nichts, da Du den Bereich kennen musst.

Üblicherweise verwendet man dann eine "Bereichsumschaltung": Du speist den unbekannten Widerstand der Reihe nach mit MIkrocontrollerausgängen, an denen jeweils 1M, 100k, 10k, 1k,. Für kleinere Widerstände musst Du einen Impedanzwandler nachschalten, etwa einen FET...


Der "normale" Weg besteht darin, einen Kondensator zu spendieren, und die Lade- und Entladezeit über den unbekannten Widerstand zu messen. Ziemlich simpel..

Der Kondensator muss natürlich kalibriert werden (ist +/- 10% ungenau, wenigstens...)

Commodore64 
Fragesteller
 26.04.2013, 15:44

Das wäre hier ein PIC 16F87x.

Und Du hast recht, es ist eine Art D/A Wandler. Der dient dazu die Versorgungsspannung zu teilen und damit zwei eingebaute Komparatoren zu betreiben. Man kann diese Spannung aber auch auf einen Portpin schalten um diese Spannung extern zu verwenden. Da man aber den Pin auch gleichzeitig messen kann (oder den ADC direkt auf Cref schalten kann), kam mir die Idee eine Widerstandsmessung per belastetem Spannungsteiler durchzuführen.

Klar könnte ich auch einen zweiten, bekannten Widerstand nach Vcc anbringen und dann die Spannung eines unbelasteten Spannungsteilers messen und leicht auf den Widerstandswert schließen, mir geht es aber darum ganz ohne irgendwelche Zusatzteile so was zu machen, einfach aus Spaß an der Freude.

Außerdem sind die Widerstände im PIC so perfekt gleich wie es nur geht. Da müsste man doch eigentlich den WIderstand ziemlich exakt messen können ohne den Messwert durch zusätzliche Bauteile mit deren Toleranz zu verfälschen.

Einen Kondensator kann ich bereits über diese Cref Kette durch umschalten und messen der Zeiten sehr exakt bestimmen, hier ist das einzige Teil was die tolleranz mit bringt der Quarz und den ich da verwendet habe, der ist extrem genau.

0
Edgar339  26.04.2013, 16:22
@Commodore64

Einen Kondensator kann ich bereits über diese Cref Kette durch umschalten und messen der Zeiten sehr exakt bestimmen,

Das klingt interessant... Welche Zeit misst du? Bis ein Pin ein High erkennt? Das würde ich gerne mal nachbauen.

Edgar

0
Commodore64 
Fragesteller
 26.04.2013, 19:07
@Edgar339

Ich schalte einfach die Cref Kette um.

Die Formel wie lange es dauert bis ein Kondensator eine Spannung erreicht hat ist:

t=-R*C * ln(1-Uss/Uref)

Und Uss/Uref ist genau das Verhältnis was man am Referenzspannungsgenerator in form von x/24 einstellen kann. Damit wird der Teil mit dem Logaritmus völlig unabhängig von der Betriebsspannung und kann im Programm durch ein Array aus Konstanten vorbereitet werden die man mit Excel oder dem Taschenrechner erzeugt hat. Der µC braucht da nicht mit rechnen!

Der ADC, der ebenfalls nur das Verhältnis der angelegten Spannung zur Betriebsspannung misst kann dannn überwachen wie lange es dauert bis die SPannung im Kondensator eine Spannung zwischen Cref alt und Cref neu erreicht hat. Ich benutze hier die Hälfte. Der ADC hämmert seine Werte im 37µs Takt raus, ist also schnell genug, der vom QUarz angetriebene Timer1 misst dann die Zeiten und wird durch eine Schleife die den ADC auswertet gestartet und gestoppt. Die Unschärbe beträgt selbst in C geschrieben nur 3µs bei einem 4,0000MHz Quarz.

0
Commodore64 
Fragesteller
 26.04.2013, 19:15
@Commodore64

Wegen dem R das erst mal übrig bleibt:

Stellst Du die Formel nach C um und setzt die zwei mal ineinander ein mit unterschiedlichen Cref Teilungsverhältnissen, kannst Du R ebenfalls wegkürzen, also ist es egal wie groß die einzelnen Rs im µC sind, hauptsache die sind alle gleich groß!

Leider habe ich keine funktionierenden Formeln parat, die die ich aufgestellt habe sind verkehrt, aber anhand der Ergebnisse konnte ich das Programm richtig stellen.

Wenn es Dir gelingt, die richtigen Formeln auszuknobeln wäre schön, ich habe da versagt und kann den Fehler nicht finden, erzeuge ich die Formeln aus dem Programm, passen die seltsammerweise nicht mehr, da kommt dann so was wie R/R=4 raus!

0
Commodore64 
Fragesteller
 26.04.2013, 19:16
@Commodore64

Ups, Udd/Uref ist richtig, mit Masse funktioniert das nicht :D

0
Commodore64 
Fragesteller
 26.04.2013, 19:21
@Commodore64

Hier ist ein ähnliches Projekt was vieles Erklärt was man um C messen zu können braucht:

http://elm-chan.org/works/cmc/report.html

Bei mir kommen aber keine externen Bauteile zum Einsatz, der Ladewiderstand ist die Cref Widerstandskette im µC und die genauigkeit der Ganzen Sache basiert rein auf der genauigkeit des Quarzes und wie genau die einzel Rs im µC sind - und die sind "verdammt" genau, bleibt nur der Quarz als Tolleranzquelle und die Fähigkeiten des Programms (Unschärfe in der Zeitmessung durch aktivieren der Register nacheinander und ADC Messzeit, das lässt sich aber zum großteil per Software beheben) und natürlich der Genauigkeit der Variablen, ich habe hier Integer verwendet und "mache das Komma selber" so dass keine Rundungsfehler entstehen die sichtbar werden!

0
Edgar339  26.04.2013, 20:52
@Commodore64

Ich bastel auch gerade an einem LCD :D, jedoch habe ich das nur aus dieser schebigen Hülle namens "Radio" befreit, eine Schande ein 2 x 16 Industriestandard-LCD so zu verunschandeln... Und dann auch noch eines in negativ...

Das mit dem Kondensator werde ich mal probieren, sobald ich Zeit habe(ich habe eindeutig zu viele Projekte nebeneinander [VFD-Uhr, Universalfernbedienung] ...und dabei kann ich noch nicht mal wirklich gut C...)

Danke dir,

Edgar

0

Hallo Leute,

ich fange noch mal von vorne an, weil meine erste Antwort schon zu viel Kommentar-Ebenen enthält.

Das R-Netzwerk erzeugt genau 16 verschiedene Werte. Mit einem Komparator kann man dadurch 16 verschiedene Dinge unterscheiden. Das ist keine gute Auflösung...

Natürlich kann man damit eine Kapazität bestimmen. EIn A/D-Wandler wird dazu auch nicht benötigt, sondern nur ein Komparatoreingang.

Ich bezweifle allerdings, dass der Innenwiderstand des "Spannungs"-Pins etwas mit den R-Werten zu tun hat, aus vielerlei Gründen muss der gepuffert sein! Du benutzt also diesen Innenwiderstand bei den Messungen.

Ein C lässt sich messen (über eine quasi-analoge Zeitmessung), weil Du da das RC Glied in natürlicher Weise hast.

Wenn Du einen externen Rx hast, dann fehlt Dir ein "internes" C.

Du kannst es mit der parasitären Kapazität der Pins versuchen (5-10 pF), aber da wirken dann schon die Kontaktierungen des Widerstands in der gleichen Größenordnung.

Kurs gesagt, es KANN NICHT gehen ohne ein weiteres Bauelement.

Commodore64 
Fragesteller
 26.04.2013, 23:31

Ach ne und warum nicht?

Ich will ja keine Zeiten messen, warum auch?

Ich schalte mir hier einen "Belasteten Spannungsteiler" aus dem Cref Generator und einem externen Widerstand zusammen. Gepuffert ist da nix, wozu auch? Jetzt kann ich das Teilungsverhältnis verstellen und die Ausgangsspannung des Spannungsteilers messen.

Damit müsste alles vorhanden sein um die Unbekannte, also den angeschlossenen Widerstand auszurechnen.

Bei der Kondensatormessung habe ich schon erfolgreich alle internen Rs weggekürzt und behielt einzig und alleine die Umladezeit, das Verhältnis der internen Rs und eben die gesuchte Kapazität als Variablen. Das Spannungsteilerverhälnis kann ich selbst bestimmen, die Zeit messen und dann das C ausrechnen.

EIn A/D-Wandler wird dazu auch nicht benötigt, sondern nur ein Komparatoreingang.

Klar, normal macht man das mit einem externen RC GLied und dem eingenauten Komparator der den Timer steuert. Aber hier habe ich nur ein einziges R oder C und missbrauche die eingebaute Referenzspannungsquelle so dass der eingebaute Komparator nur noch dann funktionieren kann, wenn ich dem eine externe Referenzspannung gebe - und das wäre wieder mehr externer Aufwand.

Ziel ist es eben nur ein Bauteil an den nackten µC anzuschließen und der misst das dann mit den Fähigkeiten seiner Eingeweide durch. Es geht nicht darum dass ich zu geizig bin einen zweiten WIderstand einszusetzen, mich fasziniert hier die Herausforderung und die habe ich für einen Kondensator "ohne alles" schon gemeistert. Leeren Kondensator (<5V geladen) an den Portpin und der µC knobelt ohne die Hilfe eines einzigen weiteren Bauteils (außer Quarz) den Wert aus.

Mir ist sogar gelungen mit einem PIC einen DCF77 Funkuhrempfänger mit einem PIC und drei weiteren Bauteilen zu bauen - nur der absolute Verkaufsschlager wird das nicht sofern man die 20m lange Antenne die dazugehört nicht als Wäscheleine anpreist.

0
DonDeSilva  27.04.2013, 23:02
@Commodore64

Lieber Commodore64, nimm meine Nörgeleien bitte nicht krumm. Du machst da gute Sachen mit Deinem Mikrocontroller, die eigentlich alle "Bastler" seit 20 Jahren (damals gab es die ersten günstigen PICs und den ATmega8 ) machen. Das nennt man Hobby :-)

Aber was Du da mit Deinem "R" vorhast geht nicht, weil es auf einigen Missverständnissen beruht.

0

Wieviele solche Geräte möchtest du bauen? Wenn es ein Gerät ist dann schlage ich vor du bestimmst mit Hilfe eines bekannten externen Widerstandes den unbekannten inneren, dann wird die Rechenaufgabe ganz einfach. Baust du mehrere Geräte dann würde ich den Widerstand als Variable einfügen und pro Seriennummer dann den Wert mitgeben. Sonst gibt es fürchterliche Rechenaufgaben. Du brauchst dann ein Programm das aus 2 unterschiedlichen Messungen die je nach Einstellung (1-16) und eventuell gedrückter Taste dann eine Differenzspannung erhält und aus einer serien/parallel Schaltung 2 unbekannte Widerstände errechnet und dabei ein Ergebnis liefert und das andere wieder vergisst. Hast einmal die Innenwiderstandskaskade errechnet dann reicht dir jedesmal eine Messung mit einer einfachen Rechnung.

Commodore64 
Fragesteller
 26.04.2013, 15:57

Es geht nicht um Einsparen bei Massenproduktion sondern das ist einfach ein Projekt "Aus Spaß an der Freude", also einfach nur eine herausforderung.

Mit Kondensatoren ist mir das schon gelungen da sich die Formeln zusammengefügt auf Widerstandsverhältnisse umarbeiten lassen, auch die Spannung kürzt sich komplett raus. Die einzigen Unnbekannten bleiben C und t₁ und t₁ die Zeit des Umladens kann über den Quarz sehr genau bestimmt werden. Also lässt sich C sehr exakt ausrechnen.

0

Zweiter Widerstand in Reihe zum Prüfling -> dazwischen Spannung abnehmen(-> ADC) Allerdings kann der Widerstand dann nur in einem Bestimmten Bereich liegen(abhängig von zweiten Widerstand).

Commodore64 
Fragesteller
 26.04.2013, 15:50

Klar geht das, macht man ja auch im einfachsten Fall.

Richtig macht man das, in dem man eine Konstantstromquelle baut und dann den Spannungsfall des Prüflings misst. In einem Multimeter ist die Konstantstromquelle so eingestellt, dass die Anzeige die in in "mV" misst dann direkt das Ergebnis in Ohm anzeigt.

Aber mir geht es darum, das ganz ohne irgendein anderes Bauteil außer dem Mikrocontroller zu machen. Nicht weil ich muß, rein aus Spaß an der Freude.

Kondensatoren kann ich über das umgeschaltete Widerstandsverhälnis bereits messen und das sehr genau (Messauflösung 0,0121pF, Mindestkapazität 0,5pF, maximalkapazität 200000µF, ermittelte Abweichung mit einem kalibrierten KARU Messgerät +/-0,5%!)

0