mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kapazitätsmessung mit uC


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich versuche eine Flüssigkeit in einem Schlauch zu detektieren und da 
kam mir die kapazitive Messung in den Sinn. Also habe ich zwei Kupfer 
Plättchen genommen und daraus eine Kapazität gebildet, wobei der 
Silikonschlauch dazwischen liegt.

Nun berechnet sich ja die Kapazität wie folgt:

Nun wäre ja die Kapazität mit einer Flüssigkeit im Schlauch um einiges 
grösser als ohne, damit möchte ich die Flüssigkeit detektieren. Wenn man 
obiges einsetzt, kommt man auf Kapazitäten von:

Wobei erstere in Luft ist, zweitere mit Wasser als Dielektrikum.

Also sehr kleine Kapazitäten. Die Messung muss ja nicht genau sein, aber 
einen Sprung sollte eigentlich detektierbar sein, oder?

Nun habe ich mal zum Testen einen 5.1MOhm Widerstand in Serie mit der 
Kapazität geschaltet und über einen 5V GPIO wird der Kondensator 
geladen. Übern den ADC lese ich die Spannung ein, wobei ich auf 5 Tau 
triggere:

Ich habe zum Testen keinen Timer genommen, sondern mit dem uC in der 
main loop enfach den ADC eingelesen und eine Variable erhöht, ohne 
irgendwelche delays. Der uC hat eine Frequenz von 16Mhz. im Schnitt 
dauert das einlesen 89 Cycles und eine Änderung mit Flüssigkeit im 
Schlauch ist nicht feststellbar.

Jemand eine Idee, wie man das erreichen könnte?

: Bearbeitet durch User
Autor: Harald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Detektieren kleiner Kapazitäten:

Beitrag "Re: qtouch - sekt oder selters"

Poste doch einmal deinen Aufbau und das Programm.

Autor: HeikoG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bert S. schrieb:
> Also sehr kleine Kapazitäten. Die Messung muss ja nicht genau sein, aber
> einen Sprung sollte eigentlich detektierbar sein, oder?

Diese Überschlagsrechung gilt aber nur wenn das ganze 
Kondensator-Dielektrikum durch Wasser ersetzt wird. Du hast aber noch 
die Schlauchwände, eventuelle Luftspalte usw. die die Kapazitätsänderung 
verringern.

Heiko

Autor: Name H. (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AD7746 & AD7747, falls es denn etwas werden soll.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald schrieb:
> Zum Detektieren kleiner Kapazitäten:
>
> Beitrag "Re: qtouch - sekt oder selters"

Ich hab mir nach dem QTouch-Prinzip auch mal ein Muster erstellt.
Als Sensor ein zweiadriges Kabel (mit nebeneinander liegenden Adern und 
Kunststoffisolation) verwendet, eine Ader auf GND, die andere ist der 
Sensor.
Damit lässt sich auf 1cm genau z.B. die Höhe eines Wasserstandes 
feststellen.
Einzig die Tropfen, die bei schnellem Ablassen des Wassers am Kabel 
hängen bleiben, verursachen bis zum Abtrocknen einen Fehler.

Das wäre auch mein Vorschlag als erste Wahl für die Aufgabe gewesen.

Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HeikoG schrieb:
> Diese Überschlagsrechung gilt aber nur wenn das ganze
> Kondensator-Dielektrikum durch Wasser ersetzt wird. Du hast aber noch
> die Schlauchwände, eventuelle Luftspalte usw. die die Kapazitätsänderung
> verringern.

Genau, daher bin ich auch nicht auf die genaue Messung aus, sondern nur 
auf einen Sprung in der Kapazität, wobei dieser vielleicht dem 10 Fachen 
der Kapazität ohne Wasser entspricht.

Harald schrieb:
> Zum Detektieren kleiner Kapazitäten:
>
> Beitrag "Re: qtouch - sekt oder selters"
>
> Poste doch einmal deinen Aufbau und das Programm.

Danke, ich schaue mir das mal an. Ich habe für den Versuch nur einen 
Arduino genommen und die ADC Messungen bremsen natürlich, was nicht 
optimal ist. Später gehe ich auf einen STM32 mit DMA und Timer für die 
Messungen.
#define adc A0
#define out 7

volatile int val=0;
volatile int k=0;
volatile uint8_t b=0;

void setup() {
  pinMode(adc,INPUT);
  pinMode(out,OUTPUT);

  Serial.begin(115200);
}

void loop() {
  k=0;
  digitalWrite(out,HIGH);   //Charge Capacitor
  while(1) {
    k++;
    val = analogRead(adc);
    if(val>1000) //5 Tau
      break;
  }
  digitalWrite(out,LOW);  //Discharge Capacitor
  Serial.print("Value: ");
  Serial.println(k); //Does k change?
  delay(50);
}

Autor: Michael B. (laberkopp)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bert S. schrieb:
> Jemand eine Idee, wie man das erreichen könnte?

Mehrere Probleme:

5.1MOhm erlaubt weniger Strom als bei einem uC Eingang als 
Eingangsfehlstrom fliesst, das Ergebnis wird also vor allem vom 
Eingangsfehlstrom bestimmt.

Ein ADC entnimmt dem Eingang eine Spannungsprobe in einen 14pF 
Kondensator, da dessen Wert also grösser ist als deine Messkapazität 
bricht dabei deine Messspannung zusammen.

Ein Schlauch mit einer Flüssigkeit wird nach abfliessen der Flüssigkeit 
nicht ganz leer sein, sondern Restflüssigkeit am Rand haben. Wenn die 
elektrisch leitend ist (ionenhaltig) ist das im Kapazitätsmesser nichts 
anderes als entweder ein massiver Metallstab oder ein hohles Metallrohr, 
was die Kapaziät nicht beeinflusst.


Vielleicht hilft dir Giess-O-Matic, beachte aber die starke 
temperaturabhängigkeit dessen Messwerts.

https://www.mikrocontroller.net/articles/Giess-o-mat

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bert S. schrieb:
> Ich habe für den Versuch nur einen
> Arduino genommen und die ADC Messungen bremsen natürlich, was nicht
> optimal ist.
Dein Arduino wird einen eingebauten Analog Komparator besitzen.
In Verbindung mit einem Timer wirst du damit bessere Ergebnisse 
erzielen.

Michael B. schrieb:
> Vielleicht hilft dir Giess-O-Matic, beachte aber die starke
> temperaturabhängigkeit dessen Messwerts.
Das wäre auch mein erster Ansatz!
Den Messkondensator als Frequenz bestimmendes Glied in einem 
Schwingkreis.

Autor: Thomas E. (picalic)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Bei winzigen Kapazitäten ist das CVD-Verfahren ("Capacitive Voltage 
Divider", Microchip) sehr empfindlich. Geht praktisch mit jedem PIC mit 
ADC.
Grundlage des Verfahrens ist, daß der der interne Sample-Kondensator 
(~5pF) des ADC auf die gegensinnig geladenen Messkapazität geschaltet 
wird und dann die Spannung der Gesamtkapazität per ADC gemessen wird.

: Bearbeitet durch User
Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke, ich werde wohl auf einen IC wie diesen hier ausweichen:

https://www.mouser.ch/ProductDetail/ON-Semiconductor/LC717A00AJ-AH?qs=sGAEpiMZZMsVh0scArXy31BE7BNTbmz1cgz1HD8uDjM%3d

Der QTouch funktioniert zwar, aber die Treshold ist ziemlich gering und 
sicher auch stark Temperaturabhängig.

Wenn der IC auf die Messkapazität abgestimmt ist, sollte das klappen.

Oder hat jemand noch eine andere Idee, wie man eine Flüssigkeit 
(Wasserbasis) in einem Silikonschlauch zuverlässig erkennen könnte? Mir 
kommt da sonst nur noch die Lichtschranke in den Sinn, aber das ist 
nicht wirklich zuverlässig.

Autor: Arduino Fanboy D. (ufuf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bert S. schrieb:
> Mir
> kommt da sonst nur noch die Lichtschranke in den Sinn, aber das ist
> nicht wirklich zuverlässig.

Eine Lichtschranke alleine nicht.

Aber wenn du einen Glaskegel in das Medium einbringen könntest, dann 
könntest du den Brechungsindex nutzen.

Der hier macht das so: 
https://www.computer-automation.de/feldebene/sensoren/artikel/74513/

Ebay: Ebay-Artikel Nr. 162663318366
ungetestet

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.