www.mikrocontroller.net

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

Autor: bastel-marco (Gast)
Datum:
Angehängte Dateien:

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??
Autor: Rahul (Gast)
Datum:

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...
Autor: bastel-marco (Gast)
Datum:

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.
Autor: peter dannegger (Gast)
Datum:

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
Autor: harry (Gast)
Datum:

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
Autor: bastel-marco (Gast)
Datum:

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
Autor: harry (Gast)
Datum:

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
Autor: peter dannegger (Gast)
Datum:

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
Autor: Matthias (Gast)
Datum:

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
Autor: Chaldäer (Gast)
Datum:

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
Autor: peter dannegger (Gast)
Datum:

@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
Autor: bastel-marco (Gast)
Datum:

@ 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??
Autor: Matthias (Gast)
Datum:

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
Autor: Chaldäer (Gast)
Datum:

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
Autor: peter dannegger (Gast)
Datum:

"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
Autor: bastel-marco (Gast)
Datum:

@Chaldäer
hast recht, ist dann erheblich weniger. Wollte wie gesagt möglichst auf
ext. Komponenten verzichten.
Autor: Walter (Gast)
Datum:

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
Autor: Peter Dannegger (peda)
Datum:

@Walter

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


Peter
Autor: Walter (Gast)
Datum:

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

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net