Forum: Mikrocontroller und Digitale Elektronik Kapazität mit AVR messen (<300pF)


von bastel-marco (Gast)


Angehängte Dateien:

Lesenswert?

Ich möchte mit einem AVR die Kapazitätsänderung von
(Platten-)Kondensatoren erfassen (Bereich 0-40pF und 0-300pF).

Ich arbeite mit dem Programm BASCOM. Der darin enthaltene Befehl
"GETRC" eignet sich leider nur für erheblich größere Zeitkonstanten
(Kondensatoren mit ca. 100nF) [bei 40pF ist der entsprechende
Widerstand zu groß mit dem diese Zeit erreicht werden könnte!].

Habe auch einige andere Ideen (Zähler während Entladevorgang
fortlaufend erhöhen) verfolgt (siehe auch Anhang).

Leider reicht mir die Auflösung (Kapazitätsänderung zu Zähleränderung)
nicht aus.

Hat jemand Ideen oder Lösungen zu diesem Problem??

von Rahul (Gast)


Lesenswert?

Wie wäre es mit einer Cf-Wandlung, sprich einen Multivibrator mit Rs und
Cs aufbauen und die Frequenz messen?
Bei 40pF liegt man doch schon im Bereich der Leitungskapazität, oder?
Sprich 4-Leiter-Schaltung wäre angebracht.
Vorschläge halt...

von bastel-marco (Gast)


Lesenswert?

Habe bis jetzt auf diese Weise gearbeitet. Schwingkeis mit NE555 eine
Hand voll Bauteile und der Plattenkondensator. Die Frequenzdifferenz
dann ausgewertet.
Wollte aber auf externe Bauteile verzichten und versuchen nur mit
Microcontroller (möglichst wenig Bauteile) zu messen.

Brauche ein Signal mit >= 20 Schritten auf 40pF.

von Peter D. (peda)


Lesenswert?

Nimm doch einfach die Capture-Funktion des Komparators. Mit einem 1MOhm
solltest Du auch bei 40pF schon gut auswertbare Zählerwerte erhalten.

Die Kabelkapazitär kann man z.B. eimal im EEPROM speichern und dann
rechnerisch abziehen.


Peter

von harry (Gast)


Lesenswert?

nicht superelegant, geht aber:

c hängt über 1MOhm an Pinx und 100KOhm an int0.
Pinx auf High setzen.
wenn c aufgeladen wird int0 ausgelöst.
int0 entlädt c über 100K widerstand und setzt pinx auf low.
ebenfalls ist in int0 ein zähler enthalten, der um 1 erhöht wird.
die torzeit wird mit timerx auf 1 sekunde gesetzt, wenn timerx overflow
erfolgt fragste in timerinterrupt den zähler von int0 ab.
kapazität ist prop. dem zählerstand. kapazitäten bis runter auf 2pF
kein problem.
gruss, harry

von bastel-marco (Gast)


Lesenswert?

Danke Harry,
habe Verständnisprobleme mit Int0-Routine. Du meinst, wenn die Spannung
aufgrund des aufladevorganges steigt, erfolgt ein Pegelwechsel an Int0
von lo nach hi. In der dadurch aufgerufenen Int0-Routine soll was
geschehen..???

Aufruf der Interrupt-Routine durch positive Flanke??
Pin Int0 als Eingang schalten ??
gleichzeitig Pinx = 0  ??
wann wird der Zähler erhöht (fortlaufend, in Abhägigkeit von was) ??

Hast du das ausprobiert? Dann schick mir doch mal das Programm. Ist
dann leichter für mich das zu verstehen was du meinst.

Danke - Marco

von harry (Gast)


Lesenswert?

1. genau, wenn die spannung steigt, gibt's den int0.
2. aufruf durch pos. flanke, klar. (config int0 = rising)
3. int0 als input, richtig.
4. in der int0 routine müssen 2 dinge passieren: a) das c muss entladen
werden (ladung abschalten, int0 vorübergehend als output, low setzen,
schon isser leer.) b) zähler erhöhen (der die int0 aufrufe zählt

das prog muss ich mal ausgraben, das war schon 'ne weile her...
gruss und fröhliches gelingen, harry

von Peter D. (peda)


Lesenswert?

Der INT0 hat keine definierte Schwellspannung, das dürfte also nicht
sonderlich genau sein.

Der Komparator kompensiert sogar Änderungen der Betriebsspannung.

Der Komparator hat dagenen auch noch den Vorteil, daß der Timer sofort
mit ausgelesen wird, d.h. man bekommt keinen zusätzlichen Fehler durch
die Interruptbehandlungszeit mit rein.


Den INT0 statt des Komparators zu nehmen bedeutet also nur einen Haufen
verschenkter Möglichkeiten.


Peter

von Matthias (Gast)


Lesenswert?

Hi

Problem dabei ist der unbekannte Schaltpunkt des Eingangs. Der ist
nicht wirklich definiert.

Man verwendet besser den Analog-Komperator im AVR oder einen externen
Komperator. Die Aufladung des Kondensators macht man nicht mit
Konstantspannung und Vorwiderstand sondern mit Konstantstrom. Da ist
die Ladekennlienie über die Zeit linear und nicht logarithmisch und
damit die Rechnung wesentlich einfacher.

Dann kann man per

C=Q/U und Q=I*t also C=(I*t)/U auf die Kapazität des Kondensators
schließen.


Matthias

von Chaldäer (Gast)


Lesenswert?

Hallo bastel-marco,

Schau mal auf der elm-chan Seite:
http://elm-chan.org/works/cmc/report.html

Da ist ein Kapazitäts-Meßgerät, mit automatischer Umschaltung zwischen
zwei Bereichen und Kalibrierfunktion. Kann wohl zwischen 1pF und 470µF
messen und benutzt einen 2313.

Gruß,
Chaldäer

von Peter D. (peda)


Lesenswert?

@Matthias,

ob die Ladekennlinie linear ist oder nicht spielt keine Rolle. Die
Ladezeit ist immer eine lineare Funktion der Kapazität:

T = k * C

Und wenn der Spannungsteiler am anderen Eingang des Komparators von der
gleichen Spannung gespeist wird, wie der Ladewiderstand, kürzt sich
diese  Spannung sogar komplett raus:

k = konstant für VCC = 2,7..5,5V


Peter

von bastel-marco (Gast)


Lesenswert?

@ Chaldäer
Danke, leider viel zu aufwendig. Wollte, wenn möglich, nur den MC und
´nen Widerstand benutzen.

@ Peter
Auch eine Gute Idee! Werde ich mal versuchen. Bin AVR-Anfänger und muss
mich erst mal mit der Komparator-Funktion beschäftigen. Wie stellst Du
dir die Beschaltung und das Programm vor??

von Matthias (Gast)


Lesenswert?

Hi

@Peter

Stimmt. Uc ist ja konstant und damit ist auch der Faktor im Logarithmus
konstant und damit ist das Ganze eine rein lineare Geschichte.

Vermerk ans Hirn:
Zuerst denken, dann schreiben.

Matthias

von Chaldäer (Gast)


Lesenswert?

Hm,

viel mehr ist auch nicht drauf. Wichtig ist ja auch nur der Teil am
Komperator. Wenn Du die Bereichsumschaltung wegläßt, bleibt nicht viel
mehr, als ein paar Widerstände.
Das sollte dann auch ungefähr die Schaltung sein, die peter meinte.

Gruß,
Chaldäer

von Peter D. (peda)


Lesenswert?

"Das sollte dann auch ungefähr die Schaltung sein, die peter meinte."

Stimmt.

R1,R4,R6,Q1 sind nur eine zusätzliche Bereichsumschaltung.

R7 begrenzt den Entladestrom auf ungefährliche Werte.

Also minimal nur R2,R3,R5,R7 ist doch nicht aufwendig.



Peter

von bastel-marco (Gast)


Lesenswert?

@Chaldäer
hast recht, ist dann erheblich weniger. Wollte wie gesagt möglichst auf
ext. Komponenten verzichten.

von Walter (Gast)


Lesenswert?

peter dannegger schrieb:
> R1,R4,R6,Q1 sind nur eine zusätzliche Bereichsumschaltung.

ist zwar ein uralter Fred, aber das kann ich nicht so stehen lassen:
R1 dient nicht der Bereichsumschaltung!

Elm Chan misst aus guten Gründen nicht die Zeit zwischen 0V und einer 
Schwellenspannung, sondern zwischen 0,17U und 0,5U,
und R1 braucht er für die Umschaltung zwischen diesen 
Schwellenspannungen.

Walter

von Peter D. (peda)


Lesenswert?

@Walter

Das mag vielleicht bei 470µF eine Rolle spielen, aber 300pF kann man 
nach wenigen ms als vollständig entladen ansehen.


Peter

von Walter (Gast)


Lesenswert?

das

Peter Dannegger schrieb:
> Das mag vielleicht bei 470µF eine Rolle spielen, aber 300pF kann man
> nach wenigen ms als vollständig entladen ansehen.

das ist der eine Grund den Elm Chan nennt, da hast du bei 330pF 
natürlich recht,
aber zum einen besteht der andere  Grund weiter:
"the leakage current on analog input is increased near zero volt. This 
will cause a measurement error"

zum anderen habe ich nur gesagt:
R1 dient nicht der Bereichsumschaltung

Walter

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.