pic24fj128ga306 mit CTMU Kleinstkapazitäten messen

OP #4058927
Lesenswert?
• ▲
▼
Grüße *, ich möchte mit einem PIC24 mit der CTMU extrem kleine 
Kapazitätsänderungen messen, möglichst ohne externe Beschaltung (außer 
der zu messenden Kapazität natürlich).

Mit einem syndhaft teuren LeCroy hab ich herausgefunden, daß die zu 
messenden Kapazitäten im Bereich von 10pF bis 14pF liegen.

* Konzept bisher (CTMU) war:
  - Entladen
  - eine bestimmte Zeit t laden mit I=konst.
  - ADC anwerfen und Spannung messen
  - Ergebnis als ADC INTEGER: 3100-4096
  => Es gehen also viele schöne Bit des ADC ungenutzt verloren. Nun
     könnte ich einen externen Meßverstärker nehmen, etc.pp., aber
     das macht das ganze unglaublich komplex; ich hab leider keinen
     Platz mehr auf der Platine.
  => Ich könnte noch versuchen, die Vref- auf die maximalen 1V anzu-
     heben, brauche aber eine belastbare Spannungsquelle, da der Vref-
     beim Messen Strom zieht.

* Konzept neu (wieder CTMU):
  - Entladen
  - Komparator auf 1.8V
  - Timer=0; Timer-Start;
  - Laden mit I=konst.
  - Zeit messen, bis Komparator==1
  => Keine fixe Meßzeit mehr (verschmerzbar)
  => Potentiell 16bit Timer, also größere Auflösung

Habe ich einen Denkfehler? Läßt sich mit Bordmitteln des besagten PIC 
noch anders eine extern-bauteil-arme Lösung realisieren?

Danke, Christoph
Gast #4059633
Lesenswert?
• ▲
▼
Bei Microchip gibts ne Appnote dazu.

Also ich hab das mal für einen Feuchtesensor verwendet. Die CTMU habe 
ich persönlich als etwas zickig empfunden, es geht aber und ist exakt 
wenn man sie kalibriert.
Ich verwende dazu die 550nA Stromquelle des PIC.
Als Schaltung am Pin habe gar nichts, nur den Sensor. An einem anderen 
PIN hängen ein paar MOhm zur Kalibrierung der Stromquelle.

Ein Ablauf läuft so:
- Kapazität entladen
- ADC Sampleswitch öffnen (wichtig!)
- Stromquelle anwerfen
- Eine genau definiert Zeit warten
- Sampleswich schließen und konvertieren
- ADC auslesen
Und das macht man z.B. 16 mal und nimmt den Mittelwert. Das lässt sich 
als
"Backgroundtask" machen, wenn man einen Timer nimmt (den man eh 
braucht).

Der ADC-Wert repräsentiert deine Kapazität:
C=(I*Messwert)/Messzeit
I ist aus der Kalibrierung der Stromquelle bekannt und konstant, 
Messzeit ist per Definition bekannt, das stellt man im Code sicher. Den 
Messwert wirft der ADC aus. Den Sampleswitch schließen und die 
Stromquelle ausschalten muss man also in der Timer-ISR machen.

Mit der 550nA-Stromquelle kann man extrem kleine Kapazitäten messen. 
Beispielseweise bei 8MHz hat man eine Auflösung von ca. 0,07pF. Wie groß 
die zu messende Kapazität ist muss man ungefähr wissen, oder man 
probiert es durch - je nachdem muss man die Zeit wählen. Das Verhalten 
ist dabei linear - die Spannung am C steigt linear an.

Warum man den Sampleswitch zu Anfangs öffnen muss, wird klar, wenn man 
bedenkt dass der ADC Samplekondensator auch ein paar pF hat.

Die ADC, Pin und sonstige parasitäre Kapazität tritt als konstanter 
Offset in auf.
Laufzeiten im Code müssen auch konstant sein.
Ich messe den Strom wie die Kapazität, nur an einem passenden Widerstand 
statt an einer Kapazität.
OP #4063509
Lesenswert?
• ▲
▼
Grüße WehOhWeh, Danke für Deine Antwort, das ist im Prinzip ja genau, 
was ich auch schon mache. Eine Frage hab ich aber zum Sample-Switch: 
Warum öffnest Du den, während die externe Kapazität geladen wird?

Denn wenn Du ihn dann zum Messen schließt, verteilt sich doch die Ladung 
auf die S/H-Kapazität und die zu messende Spannung sinkt.

Ich:
- Vorher (mit CTMU laden): C(ext/*variabel*)+C(leitung)+C(pin)+C(s/h)
- Nachher (mit ADC messen): C(ext/*variabel*)+C(leitung)+C(pin)+C(s/h)

Du:
- Vorher (mit CTMU laden): C(ext/*variabel*)+C(leitung)+C(pin)
- Nachher (mit ADC messen): C(ext/*variabel*)+C(leitung)+C(pin)+C(s/h)

ICh steh grad etwas auf dem Schlauch, wie sich die nachträgliche 
Parallelschaltung von Kapazitäten (nach dem LAden) auf die Spannung 
auswirkt: Gewinne ich dadurch Präzision, und falls ja, warum?

Danke, Christoph
Gast #4064658
Lesenswert?
• ▲
▼
Christoph Söllner schrieb:
> ICh steh grad etwas auf dem Schlauch, wie sich die nachträgliche
> Parallelschaltung von Kapazitäten (nach dem LAden) auf die Spannung
> auswirkt: Gewinne ich dadurch Präzision, und falls ja, warum?

Da hast du eigentlich recht. Eigentlich müssten sich die Ladungen gemäß 
Kapaziätä verteilen und dann müsste die Samplekapazität als konstanter 
Offset in Erscheinung treten und man kann sie wegabgleichen.
So genau habe ich das noch gar nicht betrachtet.

Ein Problem hat man allerdings, es gibt einen Stromstoß beim laden der 
Samplekapazität, den man natürlich vermeiden kann, indem man den 
Sampleswitch vorher öffnet. Auch weiß ich nicht, wie die Stromquelle des 
PIC auf den plötzlichen Kurzschluss reagiert. Die hat ja auch nur eine 
begrenzte Bandbreite.

Ich habe das generell aus dem Reference Manual entnommen (Kapitel 53.6):
http://ww1.microchip.com/downloads/en/DeviceDoc/39743a.pdf
Dort ist auch Beispielcode drin, in dem wird das auch so gemacht.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.