Forum: Mikrocontroller und Digitale Elektronik pic24fj128ga306 mit CTMU Kleinstkapazitäten messen


von Christoph S. (mcseven)


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

von WehOhWeh (Gast)


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.

von Christoph S. (mcseven)


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

von WehOhWeh (Gast)


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.

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.