Forum: Mikrocontroller und Digitale Elektronik Kapazitätsmessung mit uC


von Bert S. (kautschuck)


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
von Harald (Gast)


Lesenswert?

Zum Detektieren kleiner Kapazitäten:

Beitrag "Re: qtouch - sekt oder selters"

Poste doch einmal deinen Aufbau und das Programm.

von HeikoG (Gast)


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

von Purzel H. (hacky)


Lesenswert?

AD7746 & AD7747, falls es denn etwas werden soll.

von HildeK (Gast)


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.

von Bert S. (kautschuck)


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.
1
#define adc A0
2
#define out 7
3
4
volatile int val=0;
5
volatile int k=0;
6
volatile uint8_t b=0;
7
8
void setup() {
9
  pinMode(adc,INPUT);
10
  pinMode(out,OUTPUT);
11
12
  Serial.begin(115200);
13
}
14
15
void loop() {
16
  k=0;
17
  digitalWrite(out,HIGH);   //Charge Capacitor
18
  while(1) {
19
    k++;
20
    val = analogRead(adc);
21
    if(val>1000) //5 Tau
22
      break;
23
  }
24
  digitalWrite(out,LOW);  //Discharge Capacitor
25
  Serial.print("Value: ");
26
  Serial.println(k); //Does k change?
27
  delay(50);
28
}

von Michael B. (laberkopp)


Angehängte Dateien:

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

von Einer K. (Gast)


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.

von Thomas E. (picalic)


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
von Bert S. (kautschuck)


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.

von Einer K. (Gast)


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: https://www.ebay.de/itm/162663318366
ungetestet

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.