mikrocontroller.net

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


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

Bewertung
0 lesenswert
nicht 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??

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: bastel-marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bastel-marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chaldäer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bastel-marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chaldäer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bastel-marco (Gast)
Datum:

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

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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:

Bewertung
0 lesenswert
nicht 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

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.