Forum: Mikrocontroller und Digitale Elektronik Mehrere Kapazitäten parallel messen mit AVR


von Karl (Gast)


Lesenswert?

Ich muss mit einem AVR, vorzugsweise ATmega8 / 328 oder ATtiny, mehrere 
kleine Kapazitäten im pF bis nF-Bereich messen.

Das Ganze soll für einen kapazitiven Füllstandssensor sein. Es sind zwei 
Füllstände und eine Vergleichskapazität für Temperaturdrift der 
Zeitmessung (interner Takt des AVR) zu messen.

Zum einen wäre da die LC-Meter-Schaltung mit LM311 
(http://digital-nw.de/images/RCKreis.png und andere). Hierfür müsste ich 
mit 3 Reed-Relais die Füllstandsdrähte und den Vergleichskondensator 
zuschalten. Die Reed-Relais brauchen halt Platz und Strom.

3 mal die Schaltung aufbauen scheitert daran, dass ich ja nur einen 
T1-Zählereingang habe, um die Frequenzen im unteren MHz-Bereich zu 
messen. Und Unterschiede in den 3 Aufbauten (Induktivität) bekommt ich 
damit nicht raus.

Gleiches Problem bei Takterzeugung mit einem 555: Entweder ich muss die 
Leitungen umschalten, oder ich habe mehrere 555, deren Unterschiede ich 
nicht kompensieren kann. Und nur einen T1.

Dann gäbe es noch die direkte Messung über den Analogkomparator des AVR 
(http://elm-chan.org/works/cmc/gfx/cmc.png). Würde mir sehr gefallen, da 
wenige Bauteile. Problem hier: Es gibt nur einen Komparator. Und bei den 
geringen Kapazitäten = kurzen Schaltzeiten bin ich anscheinend auf die 
Nutzung des Interrupts angewiesen.

Oder gibt es eine Möglichkeit, die Messung auch mit anderen Pins 
ausreichend schnell - und vergleichbar - durchzuführen? INT0 und INT1 
hab ich ja auch wieder nur zwei Eingänge...

Die Messung darf hintereinander erfolgen. Die Messung darf auch durchaus 
mehrere msec oder sec dauern. Aber bei längerer Messung soll der AVR 
ansprechbar bleiben, es soll ein I2C-Slave werden.

von Karl M. (Gast)


Lesenswert?

Hallo,

Ich würde von deinem Design Abstand nehmen und für jeden Kanal einen 
Messkopf aufbauen.
Für jeden Messkopf bedeutet das jeweils auch noch eine AVR µC mit 
Schnittstelle, z.B. I2C.

Da I2C i.A. für kurze Verbindungen gemacht wurde, sind alle Messköpfe 
nahe an der Messstelle anzuordnen und ihre Daten werden über einem 
Master zur Verfügung gestellt.
Dieser verfügt über einen BUS, z.B. "CAN-Bus", und wird so im 
Netzverbung abgefragt.

von Der Andere (Gast)


Lesenswert?

Karl schrieb:
> Das Ganze soll für einen kapazitiven Füllstandssensor sein. Es sind zwei
> Füllstände und eine Vergleichskapazität für Temperaturdrift der
> Zeitmessung (interner Takt des AVR) zu messen.

Und die Füllstände musst du alle 100µs messen, oder warum schaltest du 
nicht einfach um und misst nacheinander?

von Karl (Gast)


Lesenswert?

Der Andere schrieb:
> Und die Füllstände musst du alle 100µs messen, oder warum schaltest du
> nicht einfach um und misst nacheinander?

Hab ich doch so geschrieben: Ich könnte über Reedrelais umschalten, aber 
Reedrelais sind groß und brauchen Strom.

Der AVR hat ja genug Pins, vielleicht gibt es doch eine Möglichkeit die 
zu nutzen, die ich nicht sehe.

von Johannes S. (Gast)


Lesenswert?

etwas ähnliches baue ich auch gerade, kapazitive Erdfeuchtemessung. Aber 
anstelle eines AVR verwende ich LPC812 / LPC24, Cortex-M0. Die haben 
einen Comparator aber 2 (LPC812) oder 4 (LPC824) Analogeingänge.
Die Messung funktioniert aber ich optimiere noch. Die Temperaturdrift 
ist beim internen Oszi deutlich zu sehen, die Idee mit der 
Vergleichsmessung eines konstanten C hatte ich auch. Oder die LPC mit 
Quarz betreiben.
Wenn ich kleine C messe ist der Wert sehr stabil, habe gerade eine 
Mittelung über 32 Werte eingestellt, stdAbw ist <0 und Range 3µs. Meine 
Sensorfolie reagiert aber sehr empfindlich, komme ich mit der Hand näher 
gehen Standardabw. und Range der Messwerte in die Höhe, auch wenn ich 
mit der Leuchtstofflampe in die Nähe komme stört die kräftig. Der Sensor 
dürfte stark auf die allgegenwärtigen 50 Hz Felder reagieren.
Edit:
zum Umschalten der Analogen Signale mit AVR könnte sowas wie ein CD4066 
helfen.

von Erwin D. (Gast)


Lesenswert?

Der Andere schrieb:
> Und die Füllstände musst du alle 100µs messen, oder warum schaltest du
> nicht einfach um und misst nacheinander?

Auf die gleiche Idee kam Karl schon, bevor du deine Frage gestellt hast.
Und deine Frage nach den 100µs (wo nimmst du diesen Wert her?) hat er 
auch schon beantwortet:

Karl schrieb:
> Die Messung darf hintereinander erfolgen. Die Messung darf auch durchaus
> mehrere msec oder sec dauern.

von Hurtig (Gast)


Lesenswert?

Karl schrieb:
> Ich muss mit einem AVR, vorzugsweise ATmega8 / 328 oder ATtiny, mehrere
> kleine Kapazitäten im pF bis nF-Bereich messen.

Woher kommt dieser rel. große Bereich? Wie genau muss das Ergebnis sein.

Für eine ähnliche Aufgabe habe dich die Kapazitäten per 
Touch-Algorithmus ermittelt.

Infos ab: Beitrag "Re: qtouch - sekt oder selters"

von Karl (Gast)


Lesenswert?

Hurtig schrieb:
> Woher kommt dieser rel. große Bereich? Wie genau muss das Ergebnis sein.

Um die 30 bis 100pF reine Kabelkapazität bei leerem Tank, einige nF bei 
vollem Tank.

Ich würde das gleiche Prinzip  Schaltung  Software entsprechend 
angepasst gern auch für Erdfeuchtemessung nutzen.

Die LM311 Variante soll ja sehr gut auflösen über einen weiten 
Messbereich. Ist halt etwas aufwendiger.

Johannes S. schrieb:
> zum Umschalten der Analogen Signale mit AVR könnte sowas wie ein CD4066
> helfen.

Ich hab auch schon an PhotoMos gedacht. Das Problem sind halt immer die 
verbleibenden Kapazitäten. Da kommen schon einige pF, bei PhotoMos 100pF 
zusammen.

Auch zeigt die Simu, dass beim LM311 die Spannung am Schwingkreis - 
natürlich - negativ wird. Da braucht der 4066 dann eine negative 
Hilfsspannung.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Karl schrieb:
> Der AVR hat ja genug Pins, vielleicht gibt es doch eine Möglichkeit die
> zu nutzen, die ich nicht sehe.

Je nachdem, wie schnell deine Pulse kommen, geht nicht nur T0 und T1, 
sondern z.B. auch ein PC Interrupt und/oder INT0 und INT1.
Dabei bleibt Timer 2 eines Mega328 als Ticker immer noch frei.

Du kannst aber auch die (digitalen) LM311 Ausgänge über einen 
Multiplexer führen (4051/4052) und die nacheinander auf T0/T1 führen und 
messen.
Braucht halt für jede Messstelle eine Schaltung mit LM311.

von Wolfgang (Gast)


Lesenswert?

Karl schrieb:
> Hurtig schrieb:
>> Woher kommt dieser rel. große Bereich? Wie genau muss das Ergebnis sein.
>
> Um die 30 bis 100pF reine Kabelkapazität bei leerem Tank, einige nF bei
> vollem Tank.

Warum musst du dazu die kleinen Kapazitäten messen?
Du willst die großen Kapazitäten messen (% von Maximalkapazität?). Was 
interessieren dich die kleinen. Wenn sie so klein sind, dass sie 
schwierig zu messen sind, dann stören sie auch nicht.

von Karl (Gast)


Lesenswert?

Wolfgang schrieb:
> Warum musst du dazu die kleinen Kapazitäten messen?

Ist das jetzt für die Auswahl des Messverfahrens irgendwie relevant, ob 
ich 30pF oder 300pF oder 3nF messen will? Ich will schlicht keine Elkos 
messen und damit fällt Ladekurve über ADC messen aus. Fertsch.

Das ist genauso irrelevant wie die Frage ob I2C oder CAN-Bus.

Hurtig schrieb:
> Für eine ähnliche Aufgabe habe dich die Kapazitäten per
> Touch-Algorithmus ermittelt.

Touch hatte ich mir schon angeschaut, aber mein Eindruck war, dass das 
eher für Detektion einer schnellen Kapazitätsänderung bei Berührung als 
zur Messung tauglich ist? Kann man damit sinnvoll in pF-Auflösung 
messen?

Der große Vorteil von Q-Touch wäre, dass man problemlos mehrere Eingänge 
nutzen kann.

von m.n. (Gast)


Lesenswert?

Karl schrieb:
> Oder gibt es eine Möglichkeit, die Messung auch mit anderen Pins

Beim Analogkomparator läßt sich AIN1 mit den Multiplexerausgang vom ADC 
ersetzen. Damit stehen mehrere Eingänge für die Kanäle zur Verfügung.

Da die ADC-Eingänge auch gleichzeitig digitale Ausgänge sein können, 
kann man einen Kondensator am Eingang schnell auf GND oder Vcc Potential 
bringen und mit einem zusätzlichen Widerstand eine Lade- bzw. 
Entladekurve erzeugen. Die Zeiten kann man per ICP mit Timer1 genau 
ermitteln und somit die Kapazität errechnen.

Es gibt mehrere Schaltungsvarianten, von denen ich jedach keine näher 
ausführen möchte. Es selber zu machen, sollte nicht schwer sein.
Ich würde jedoch dafür sorgen, daß die Kapazität am Eingang nicht zu 
klein wird (>= 1 nF), um die erzeugten Frequenzen nicht zu hoch werden 
zu lassen. Aber auch das ist Geschmackssache.

von Karl (Gast)


Lesenswert?

m.n. schrieb:
> Beim Analogkomparator läßt sich AIN1 mit den Multiplexerausgang vom ADC
> ersetzen. Damit stehen mehrere Eingänge für die Kanäle zur Verfügung.

Das ist mir neu, aber AIN hab ich auch noch nie verwendet. Muss ich mal 
im Datenblatt schmökern.

Ich hab gestern abend mal Qtouch ausprobiert, das sieht gar nicht so 
schlecht aus. Ich hab mich nur gewundert: Eigentlich sollte ich für 
Kondensatorpaare 330p / 47nF ja so Werte um die 150 Umladungen bekommen. 
Ich bekomme aber nur 76.

Gerade fiel es mir wie Schuppen aus den Haaren: Ich lade ja mit Vcc, der 
Pin schaltet aber bei Vcc / 2. Natürlich reicht dafür die Hälfte der 
Umladungen.

Ich werd mir aber dennoch mal den Analogkomperator in Verbindung mit 
Qtouch ansehen. Die Schaltschwelle dürfte definierter sein als beim 
"normalen" Pin.

Dann werd ich heute mal Messreihen schieben um zusehen, wie die 
Auflösung und Reproduzierbarkeit der Qtouch-Lösung ist.

von Hans-Georg L. (h-g-l)


Lesenswert?

Eine weitere Möglichkeit sind U/F Wandler wie zb: AD537 da gibts auch 
ein Beispiel dafür. Der wird dir als DIL aber zu groß sein.

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.