Forum: Mikrocontroller und Digitale Elektronik Kapazitive Füllstandsmessung mit Mikrocontroller


von Hansen (Gast)


Lesenswert?

Tag zusammen!

Ich wollte mal fragen, ob ich mit meiner Planung zur kapazitiven 
Füllstandsmessung auf dem Holzweg bin, oder ob es so, wie ich es 
vorhabe, klappen kann.

Also ich möchte den Füllstand mittels eines in einen Metallbehälter 
hängenden Stabes messen. Dieser Stab ist natürlich isoliert. Auswerten 
möchte ich das ganze mit einem uC.

Mein Plan:
1
-----------
2
 uC     Pin |-----
3
            |     |
4
            |     R
5
            |     |
6
            |     Cx: Metallstab in Behaelter
7
            |     |
8
 Komparator |-----|
9
            |     |
10
            |    GND
11
------------

Der Portpin ist anfangs auf 'low' - der C ist leer. Der Komparator hat 
zwei Schaltschwellen: 0,25*Vcc und 0,5*Vcc. Jetzt stelle ich den 
Threshold auf 0,25*Vcc ein und warte auf den Interrupt vom Komparator. 
Wenn dieser kommt, stelle ich den Threshold auf 0,5*Vcc und merke mit 
gleichzeitig einen Timer-Wert, dieser Timer läuft im Continous-Mode 
immer weiter. Meldet der Komparator sich dann bei 0,5*Vcc, so nehme ich 
wieder den Timer-Wert und kann die Differenz bilden.

Selbiges kann ich andersherum machen. Jetzt, wo der C ganz voll ist (er 
wurde ja weiter geladen nach dem Erreichen des Thresholds, stelle ich 
auf negative Flanke des Komparators um und entlade den C. Bei 0,5*Vcc 
meldet er sich wieder und ich setze den Threshold weiter herab auf 
0,25*Vcc. An beiden Stellen wieder den Timer-Wert merken. Ebenfalls 
wieder die Differenz bilden.

Ziel des ganzen ist es, nicht nur voll/leer, sondern halt auch 
dazwischen die Menge im Tank ermitteln zu können. Also am Anfang einmal 
voll- und leer abgleichen.

Kann man damit erstmal überhaupt brauchbare Ergebnisse erzielen?

von Hansen (Gast)


Lesenswert?

Wo ich selber ein wenig die Probleme momentan sehe, ist z.B. dass ich 
nicht ganz weiß, wie hoch die Taktfrequenz des ganzen sein sollte, denn:

Je höher die Frequenz ist, desto eher kann mir mein Timer überlaufen - 
das müsste ich also gesondert erfassen, was aber natürlich jetzt kein 
Problem darstellt.

Je niedriger sie ist, desto eher kommen so Kleinigkeiten zum Tragen, wie 
dass z.B. das auslesen des Timers selber und jegliche weitere Code-Zeile 
weitere Takte zu meinem Ergebnis hinzufügen.

Die Wahl des Widerstandes...ich denke ja nicht, dass die Kapazität im 
ganzen Gebilde sehr groß ist - eher so ein paar pF. Der Widerstand 
müsste schon recht groß sein, damit der C nicht direkt voll ist.

Wie schätze ich die Kapazität generell erstmal ab?



Naja, das sind so erstmal die ersten Sachen, die mir in den Sinn kommen 
- das werden noch mehr werden.

von Anja (Gast)


Lesenswert?

Hansen schrieb:
> Wie schätze ich die Kapazität generell erstmal ab?

mit einem einfachen isolierten Stab: gar nicht.
Du brauchst noch einen Gegenpol.
Ansonsten ist Er von Wasser 81. Luft ca 1.0. Kunststoff ca 2-3.

Für eine Regentonne habe ich einen TLC555 als Oszillator und eine 
Klingelstegleitung (isoliert mit breitem Steg) als Kondensator 
verwendet. Bei ca 1m Leitung war die Kapazitätsänderung von ca 20 auf 
120 pF.

Gruß Anja

von Reinhard Kern (Gast)


Lesenswert?

Anja schrieb:
> Der Widerstand
> müsste schon recht groß sein, damit der C nicht direkt voll ist.

So isses. Damit du was Vernünftiges zählen kannst, sollten die 
Ladezeiten im Bereich ms liegen; ich denke, dass Anjas Angabe von < 100 
pF realistisch ist, dann brauchst du aber für eine Zeitkonstante von ms 
einen Widerstand im Bereich MOhm. Das geht wohl gerade noch so, wenn man 
weiss was man tut.

Robuster ist es, wie von Anja beschrieben, mit der Kapazität eine 
Schwingschaltung zu bauen und deren Frequenz zu messen. Besonders wenn 
man diese Schaltung am Fühler direkt unterbringt und den Taktimpuls zum 
Prozessor weiterleitet. So kann man auch mit sehr kleinen Kapazitäten 
arbeiten, ohne dass die Kabelkapazität mit einfliesst.

Gruss Reinhard

von Michael (Gast)


Lesenswert?

Bau docu eine Ladungspumpe, die mit der Ladung von deinem Sensor einen 
größeren Kondensator auflädt. Dann zählst du die Anzahl der 
erforderlichen Transfervorgänge, die benötigt werden um eine bestimmte 
Spannung zu erreichen.

von Hansen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo und erstmal danke für eure Rückmeldung!

Anja schrieb:
> mit einem einfachen isolierten Stab: gar nicht.
> Du brauchst noch einen Gegenpol.

Den habe ich ja:

Hansen schrieb:
> Also ich möchte den Füllstand mittels eines in einen Metallbehälter
> hängenden Stabes messen.

Der Gegenpol ist mein Behälter. Oder muss ich zwei Elektroden direkt 
nebeneinander in den Behälter bringen? Müsste doch auch gegen die 
Ausßenwand funktionieren.

Reinhard Kern schrieb:
> einen Widerstand im Bereich MOhm

Ja, in der Größenordnung habe ich mir schon gedacht.

Reinhard Kern schrieb:
> Robuster ist es, wie von Anja beschrieben, mit der Kapazität eine
> Schwingschaltung zu bauen und deren Frequenz zu messen.

OK, ist vielleicht besser - im angehängten Bild habe ich einen astabilen 
Multivibrator mit OPV. Ist die Geschichte so geeignet dafür?

Reinhard Kern schrieb:
> Besonders wenn
> man diese Schaltung am Fühler direkt unterbringt und den Taktimpuls zum
> Prozessor weiterleitet.

Weit entfernt sind Schaltung und Anschluss nicht - der Plan war, ein 
kleines Gehäuse zu bauen, in dem die Elektronik ist und aus dem unten 
halt der Stab herauskommt und direkt in den Tank geht.

Michael schrieb:
> Bau docu eine Ladungspumpe, die mit der Ladung von deinem Sensor einen
> größeren Kondensator auflädt.

Sicherlich auch ne Möglichkeit, werde jetzt aber erstmal den Oszillator 
weiter verfolgen. Aber danke!

von Hansen (Gast)


Lesenswert?

Ups...ich habe die Eingänge vertauscht!

von Hansen (Gast)


Lesenswert?

Oh Moment...die Schaltung kann mit Single-Supply garnicht funktionieren, 
oder sehe ich das falsch?

von Hansen (Gast)


Angehängte Dateien:

Lesenswert?

So, immerhin schwingt schonmal was - mit Single-Supply jetzt.

von Hansen (Gast)


Lesenswert?

So: Jetzt kommen weitere Fragen...wie sieht es hier mit den Widerständen 
aus?

Ich finde im Netz folgende Formel für die Frequenz:

Weiterhin steht da, dass man R3 nach folgendem Zusammenhand bestimmt:

Also R3 halb so groß, wie R1 und R2. Aber wieso? Wenn ich das simuliere, 
dann ist auch mit anderen Werten der Ausgang symmetrisch.

Geht der zusätzliche R für das halbe Potential der Betriebsspannung mit 
in diese Berechnung ein? Mehr macht der doch nicht, oder?

von Peter D. (peda)


Lesenswert?

Hansen schrieb:
> Der Portpin ist anfangs auf 'low' - der C ist leer. Der Komparator hat
> zwei Schaltschwellen: 0,25*Vcc und 0,5*Vcc. Jetzt stelle ich den
> Threshold auf 0,25*Vcc ein und warte auf den Interrupt vom Komparator.
> Wenn dieser kommt, stelle ich den Threshold auf 0,5*Vcc und merke mit
> gleichzeitig einen Timer-Wert, dieser Timer läuft im Continous-Mode
> immer weiter. Meldet der Komparator sich dann bei 0,5*Vcc, so nehme ich
> wieder den Timer-Wert und kann die Differenz bilden.


Viel zu kompliziert.
Du entlädst den Kondensator und dann mißt Du einfach die Aufladezeit bis 
zur Komparatorschwelle.
Beim AVR kannst Du dazu den Komparatorausgang als Capture-Input 
programmieren, dann erhältst Du die Zeit auf 50ns [20MHz] genau.


Peter

von Hansen (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Viel zu kompliziert.
> Du entlädst den Kondensator und dann mißt Du einfach die Aufladezeit bis
> zur Komparatorschwelle.

Hi Peter!

Ja, theoretisch reicht das natürlich. Ich dachte nur, hier muss ich 
irgendwie sicherstellen, dass der Kondensator leer ist und nicht noch 
irgendeine Restladung enthalten ist. Das kann ich ja so nicht messen. 
Also entweder über einen zweiten Portpin sehr niederohmig gegen Masse 
kurzschließen, oder eine Zeit warten nach dem Umschalten auf 'low'.

Am liebsten wäre mir eine allgemeine Lösung des Problems, also für 
nahezu jeden Tank anwendbar - ohne erst mal so die Kapazität bestimmen, 
die maximal und minimal vorliegt und danach die Schaltung berechnen. 
(Möglichst...ganz ohne geht wahrscheinlich nicht.

Ist denn die Komparatormethode ausreichend genau? Ich habe mir jetzt mal 
testweise einen Oszillator aufgebaut. C ist variabel zwischen 20 und 
120pF - die Frequenz ändert sich dabei zwischen 5 - 12kHz. Also schon 
ein deutlicher Unterschied.

Aufwändiger isses natürlich - daher die Frage was geeigneter ist. Da 
teilen sich ja meist die Meinungen.

von Hansen (Gast)


Lesenswert?

Also mal zu meinen vorläufigen Ergebnissen:

Ich habe jetzt einen MCP6001 als OP da drin und mein erstmal kleiner 
Behälter von ca. 1l bringt leer eine Frequenz von 62kHz und voll von ca. 
6kHz. Bei 6kHz ist das Signal annähernd ein Rechteck, bei 62kHz nurnoch 
ein Dreieck. Liegt das an zu wenig GBW des OPs? Der hat ein GBW von 
1MHz. Aber wie rechne ich denn jetzt die Verstärkung in dieser Schaltung 
aus?

Das Signal sollte ja auch noch bei 62kHz ein Rechteck sein. Kann mir da 
einer helfen?

von Peter D. (peda)


Lesenswert?

Hansen schrieb:
> Ja, theoretisch reicht das natürlich. Ich dachte nur, hier muss ich
> irgendwie sicherstellen, dass der Kondensator leer ist und nicht noch
> irgendeine Restladung enthalten ist.

Nach 1ms kannst Du ihn als entladen ansehen. Oder brauchst Du 1000 
Meßwerte je Sekunde?


Hansen schrieb:
> Also entweder über einen zweiten Portpin sehr niederohmig gegen Masse
> kurzschließen

Keinen 2.Pin, sondern einfach den gleichen Pin für 1ms als Ausgang, low 
setzen.
Dann Timer starten und als Eingang setzen.

Die Zeitmessung hat auch den Vorteil, daß der Wert proportional zur 
Kapazität ist.
Bei einer Frequenzmessung ist er aber reziprok, d.h. Du mußt erst 
umrechnen. Und die Auflösung ändert sich auch.


Peter

von Anja (Gast)


Lesenswert?

Hansen schrieb:
> Liegt das an zu wenig GBW des OPs?
Ja.

Hansen schrieb:
> Das Signal sollte ja auch noch bei 62kHz ein Rechteck sein. Kann mir da
> einer helfen?
Deswegen nehme ich einen TLC555: Kondensator an Pin 2 + 6 und Widerstand 
von Pin 3 an den Kondensator.

Pin 3 ist dann der Rechteck-Ausgang.
Alternativ Pin 7 als open drain.

Bei mir ist die Auswerteelektronik allerdings weiter weg.
Ich verwende einen Pull-Up an Pin 7 und werte dann remote die 
Stromänderung des TLC555 (pullup-Strom > 4mA oder nicht pullup << 4 mA) 
aus.

Gruß Anja

von Anja (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Bei einer Frequenzmessung ist er aber reziprok, d.h. Du mußt erst
> umrechnen. Und die Auflösung ändert sich auch.
Man kann auch die Periodendauer (auch von mehreren Schwingungen) 
auswerten.

Peter Dannegger schrieb:
> Du entlädst den Kondensator und dann mißt Du einfach die Aufladezeit bis
> zur Komparatorschwelle.
> Beim AVR kannst Du dazu den Komparatorausgang als Capture-Input
> programmieren, dann erhältst Du die Zeit auf 50ns [20MHz] genau.
Vorsicht: die Zeit ändert sich dann mit dem Offset (temperaturabhängig) 
und der Versorgungsspannung des Komparators. Beim TLC555 werden bewußt 
die Schwellen 1/3 UBat und 2/3 UBat gewählt. Die Periodendauer ist dann 
bis auf ca 1% proportional zum Kondensator.

Die Frage die dann noch bleibt ist: wie ändert sich die zu messende 
Kapazität in Abhängigkeit von Temperatur und sonstigen Einflüssen.

Gruß Anja

von Michael A. (Gast)


Lesenswert?

Anja schrieb:
> Hansen schrieb:
>> Liegt das an zu wenig GBW des OPs?
> Ja.

Oder an zu wenig Slew-Rate.

von Gerd E. (robberknight)


Lesenswert?

> Die Frage die dann noch bleibt ist: wie ändert sich die zu messende
> Kapazität in Abhängigkeit von Temperatur und sonstigen Einflüssen.

Wenn sich der Füllstand nur zu bestimmten, bekannten Zeitpunkten ändert 
(z.B. wenn ein Ventil aufgemacht wird) und man eben nur nicht weiß, 
wieviel genau zu oder abfliesst, könnte man das kompensieren. Also wenn 
sich der Füllstand nicht ändert, meine Messwerte aber schon, beziehe ich 
den Offset in die nächste Messung mit ein. Meistens ändern sich die 
Parameter mit Einfluss auf die Kapazität wie Temperatur, 
Luftfeuchtigkeit oder Medium im Tank nicht so schnell.

Ich mach ne Füllstandsmessung übrigens mit 2 Einheiten von nem 74HC14. 
Ist nicht sonderlich genau aber funktioniert zuverlässig. Ich will nur 
rechtzeitig vor Leer gewarnt werden, einen genauen Füllstand brauche ich 
nicht wirklich.

Gruß,

Gerd

von Jürgen E. (sid)


Lesenswert?

Hi

den Ansatz mit dem TLC555 finde ich recht gelungen. Die anderen sind in 
der Tat sehr "störanfällig". Vor allem für meine Anwendung (Tankanzeige 
Motorschirm) ist dies ein wichtiges Kriterium.

@Anja: wie meinst du das mit "Widerstand von Pin 3 an den Kondensator"?
Ich nehme an du sprichst von der Standardbeschaltung aus dem 
Datenblatt?! Wobei
 der Sensor ist. Dazwischen ist aber kein Widerstand. Kannst du 
vielleicht einmal einen Schaltplan mit deinen Widerstandswerten 
veröffentlichen?

Müssen die Messstäbe zwingend vollständig isoliert sein? Ist der 
Widerstand der über das Medium entsteht kontraproduktiv? Reicht ein 
Schrumpfschlauch oder müssen sogar die Enden isoliert sein?!

Hat das jemand schon einmal mit einem Benzintank versucht? Die 
Dielektrizitätskonstante ist ja leider wesentlich geringer als die von 
Wasser. Da ich einen Plastiktank habe überlege ich evtl die Kontakte 
(Platten) aussen am Tank zu befestigen. Was haltet ihr davon??

Gruß
Jürgen

von Peter D. (peda)


Lesenswert?

Anja schrieb:
> Vorsicht: die Zeit ändert sich dann mit dem Offset (temperaturabhängig)
> und der Versorgungsspannung des Komparators.

Wenn man den 2. Komparatoranschluß über einen Spannungsteiler aus der 
VCC gewinnt, kürzt sich die VCC raus (wie beim 555).
Man kann auch mit dem ADC-Multiplexer den Komparatoreingang umschalten 
und dann einen Referenzkondensator ausmessen.

Der TK des 555 dürfte auch nicht besser als der des ATtiny Komparators 
sein.
Der 555 ist kein Präzisionskomparator.


Peter

von Jürgen E. (sid)


Lesenswert?

Stimmt.
Nicht schlecht... So einen hab ich rum liegen (im Gegensatz zum TLC555).
Dann muss ich nächste Woche nur_noch Experimente mit Benzin machen. 
schluck

Die Info über die Isolation der Stäbe will ich vielleicht an der Stelle 
nochmal kurz pushen...

Danke
Jürgen

von Thilo M. (Gast)


Lesenswert?

Irgendwo hier gab's das doch schon mal ...

Der 556 ist besser geeignet.
Sind zwei 555 in einem Gehäuse.
Der eine C kriegt die Referenzmessung mit dem KerKo im Medium 
(isoliert),
der andere C ist die Sonde (Alurohr als Masse und innen ein Draht 
gespannt).
Die Differenz der Ausgangsfrequenzen ist das Maß für den Füllstand, so 
kürzt sich der Temperaturfehler 'raus.

So habe ich das auch mal probiert und mit akzeptablen Werten, auch bei 
Temperaturschwankungen, auswerten können.

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.