Zum Hauptinhalt springen

Kapazitive Messungen, endlich verständlich

·1512 Wörter
elektronik mikrocontroller physik tutorial
Inhaltsverzeichnis

Kapazitive Sensortechnologie ist inzwischen überall — ob berührungsempfindliche Schaltflächen, Feuchtigkeitssensoren oder Bildschirme mit Multitouch-Funktion.

Für Elektronik-Anwendungen greift man meistens auf fertige Module zurück. Die Entwicklung mit I²C, PWM und Co. ist schließlich komfortabel und versteckt die Komplexität der Messung einer elektrischen Kapazität. Oder wie ich in diesem Post zeigen möchte:

Hier wird gar nicht viel Komplexität versteckt! Mit wenig Hard- und Software bekommt man erstaunlich genaue Messergebnisse.

Physikalischer Hintergrund
#

Ladekurve eines Kondensators
#

Die Spannung eines Kondensators an einer Gleichspannungquelle lässt sich mit dieser Formel berechnen:

$$ u_{rel}(t) = 1 - e^{-\frac{t}{\tau}} $$

Hierbei wird \( \tau := R \cdot C \) als die Zeitkonstante des RC-Schaltkreises bezeichnet. In dieser Gleichung ist die Kapazität \( C \) die einzige unbekannte Variable. Der Ladewiderstand \( R \) ist vorgegeben, während relative Kondensatorspannung \( u_{rel} \) und verstrichene Zeit \( t \) messbar sind.

Die relative Kondensatorspannung ist definiert als das Verhältnis der absoluten Kondensatorspannung zur Versorgungsspannung. Ein Wert von \( u_{rel}(t) = 50~\% \) bedeutet demnach, dass der Kondensator die Hälfte der Versorgungsspannung erreicht hat.

Um eine zu starke Verstärkung von Messfehlern zu vermeiden, empfiehlt es sich, die Messung ab \( u_{rel}(t) \ge 50~\% \) zu starten. Dies entspricht etwa \( t \ge 0.7 \cdot \tau \). Es ist jedoch zu beachten, dass die Messung nicht zu spät erfolgen sollte. Ab dem Zeitpunkt \( t = 2 \cdot \tau \) ändert sich \( u_{rel} \) nur noch sehr langsam, sodass der exakte Zeitpunkt durch externe Störungen leicht verfälscht werden kann.
Darüber hinaus ist eine möglichst zügige Messung stets vorteilhaft.

Die Gleichung der Ladekurve kann nach der Zeit \( t = m_C \cdot \tau \) umgestellt werden:

$$ \begin{align*} u_{rel}(t) &= 1 - e^{-\frac{t}{\tau}} \\ e^{-\frac{t}{\tau}} &= 1 - u_{rel}(t) \\ -\frac{t}{\tau} &= \ln(1 - u_{rel}(t)) \\ t = \boxed{m_C} \cdot \tau &= \boxed{- \ln(1 - u_{rel}(t))} \cdot \tau \\ \Rightarrow m_C(u_{rel}) &= - \ln(1 - u_{rel}) \end{align*} $$

Entladekurve eines Kondensators
#

Wie beim Laden eines Kondensators zeigt sich auch beim Entladen ein enger Zusammenhang zwischen Spannungsverlauf und der Zeitkonstante:

$$ u_{rel}(t) = e^{-\frac{t}{\tau}} $$

Aufgrund der engen Verwandtschaft der beiden Funktionen wird ebenfalls empfohlen, die Messung zwischen \( t = 0.7 \cdot \tau \) und \( t = 2 \cdot \tau \) durchzuführen.

Auch diese Gleichung kann nach der Zeit \( t = m_D \cdot \tau \) aufgelöst werden:

$$ \begin{align*} u_{rel}(t) &= e^{-\frac{t}{\tau}} \\ e^{-\frac{t}{\tau}} &= u_{rel}(t) \\ -\frac{t}{\tau} &= \ln(u_{rel}(t)) \\ t = \boxed{m_D} \cdot \tau &= \boxed{- \ln(u_{rel}(t))} \cdot \tau \\ \Rightarrow m_D(u_{rel}) &= - \ln(u_{rel}) \end{align*} $$

Praktische Überlegung
#

Peripherie-Bausteine lassen sich am besten für Standardspannungen wie 5 V oder 3,3 V beschaffen, und höhere Spannungen sind im Allgemeinen weniger anfällig für externe Störeinflüsse. Deshalb habe ich mich für eine Versorgungsspannung von 5 V entschieden.

In meinem speziellen Fall wollte ich in einem Mikrocontroller integrierte Hardware nutzen, die eine Spannung von 1,1 V erkennt. Hier ist also \( u_{rel}(t) = \frac{1.1 V}{5 V} = 22~\% \). Damit ergibt sich ein Wert von \( m_C(22~\%) \approx 0.248 \) und \( m_D(22~\%) \approx 1.514 \).

Der \( m_D \)-Wert ist also im sinnvollen Bereich zwischen 0,7 und 2, deswegen entschied ich mich dafür, beim Entladen zu messen. Bei einem Entladewiderstand von 1 MΩ und einer gewünschten Messgenauigkeit von 5 pF ergibt sich \( t = m \cdot \tau = m \cdot R \cdot C \approx 1.514 \cdot (1~\cdot~10^6~[\Omega]) \cdot (5~\cdot~10^{-12}~[F]) = 7.57~\cdot~10^{-9}~[s] = 7.57~\mu s \).

Es reicht also, wenn der Prozessor schnell genug ist, um Zeiträume im Mikrosekundenbereich zu messen — mittlerweile leichtes Spiel für jede CPU.

Tatsächliche Umsetzung
#

Um die Messung praktisch durchzuführen, reicht ein simpler Spannungsteiler:

Schaltplan
Ja, das ist der komplette Schaltplan, um eine Kapazität zu messen!

Was im Bild J heißt, wird zum Mikrocontroller geführt. Dort wird ein analoger Komparator und ein digitaler Ausgang vorausgesetzt. Ggf. müssen dafür mehrere Pins zusammengeschaltet werden. C ist der zu messende Kondensator, RC der Ladewiderstand und RD der Entladewiderstand.

Messung beim Entladen
#

Damit beim Entladen gemessen werden kann, muss C zuerst aufgeladen werden. Die Ladekurve ist eine Exponentialfunktion. Theoretisch erreicht sie niemals wirklich 100 %, aber in der Praxis reicht es, wenn nach \( 5 \cdot \tau \) Sekunden über 99 % der Kapazität geladen sind.

Wichtig: \( \tau \) beim Aufladen bezieht sich auf RC und C!

RC sollte so dimensioniert werden, dass der Strom von J nach C nicht zu groß wird. Für meinen Mikrocontroller wird empfohlen, Ausgangsströme auf 20 mA zu begrenzen. Bei 5 V also \( R_C \geq \frac{5~V}{20~mA} = 250~\Omega \), daher wähle ich als nächste Standardgröße aus der E12-Reihe RC = 270 Ω.

Mit C ≤ 1 nF ergibt sich \( 5 \cdot \tau \leq 5 \cdot 270~[\Omega] \cdot 1~[nF] = 1.35~[\mu s] \). Es ist also mehr als ausreichend, C für 2 μs zu laden. Da RC und RD einen Spannungsteiler bilden, ist hier auch wichtig, dass RC im Vergleich zu RD möglichst klein ist. Wenn für RD = 1 MΩ genommen wird, liegt \( \frac{R_C}{R_C + R_D} \approx 0.00027 \lt 0.1~\% \) in einem sehr guten Bereich.

Ablauf der eigentlichen Messung
#

Damit steht fest, wie eine Messung konkret ablaufen kann:

  1. C aufladen
    1. J als digitalen Ausgang schalten und 5 V anlegen
    2. 2 μs warten
  2. C entladen
    1. Timer starten (Mindestauflösung 7,57 μs)
    2. J als analogen Komparator schalten (hochohmig, Auslösespannung 1,1 V)
  3. Warten, bis der Komparator auslöst, dann Timer auslesen
  4. Nach \( t = m \cdot \tau = m \cdot R \cdot C \) die Kapazität berechnen: \( C = t \cdot (m \cdot R)^{-1} \approx t \cdot (1.514 \cdot 10^6)^{-1} \Rightarrow C \approx 6.604 \cdot 10^{-7} \cdot t \)

Beispielrechnung für t = 7,57 μs:

$$ \begin{align*} C &\approx 6.604 \cdot 10^{-7} \cdot 7.57~\cdot~10^{-6}~[F] \\ &\approx 50~\cdot~10^{-13}~[F] \\ &= 5 [pF] \end{align*} $$

Bei allen analogen Messungen ist es ratsam, aus mehreren Einzelmessungen einen Durchschnittswert zu berechnen. So wird die Messgenauigkeit verbessert.


tl;dr … Zusammenfassung
#

Ich habe nur drei Größen für die Dimensionierung zugrunde gelegt: Die Versorgungsspannung (5 V), mein Ziel für die Messgenauigkeit (5 pF) und die maximal erwartete Kapazität (1 nF).

Messmodus und Auslösespannung

In meinem Fall standen 1,1 V als Auslösespannung fest. Die Messung beim Entladen ist also perfekt, da \( m_D = - \ln(0.22) \approx 1.514 \) im richtigen Bereich liegt.

Wenn das Trigger-Level nicht festgestanden hätte, hätte ich für \( m_D \) einen Wert zwischen 0,7 und 2 angepeilt, zum Beispiel: \( m_D = 1.35 = - \ln(u_{rel}) \Rightarrow u_{rel} \approx 0.259 \Rightarrow U = u_{rel} \cdot 5~V \approx 1.3~V \).

Ladewiderstand

Der Ladewiderstand sollte nur so groß sein wie nötig, um den Ladestrom sinnvoll zu begrenzen, in meinem Fall mindestens 250 Ω. Der nächstgrößere Widerstand in der E12-Reihe mit 270 Ω ist also eine gute Wahl.

Ladezeit

Je kleiner der Ladewiderstand, desto kleiner die Zeitkonstante τ. Dann ist die Kapazität schneller geladen (5 τ) und somit früher bereit für die Messung. Hier setzt sich τ aus maximaler Kapazität und Ladewiderstand zusammen: \( 5 \cdot \tau \leq 5 \cdot 270~[\Omega] \cdot 1~[nF] \), also unter 2 μs.

Entladewiderstand

Wenn der Entladewiderstand möglichst groß ist, wird der Effekt des Spannungsteilers verringert. Als Richtwert sollten 1000-mal die Größe des Ladewiderstands nicht unterschritten werden.

Timer-Auflösung

Je größer der Entladewiderstand, desto geringer die Anforderungen an die Auflösung bei der Zeitmessung: \( t = m \cdot R \cdot C \Rightarrow R = \frac{t}{m \cdot C} \), wobei t die Tick-Dauer des Timers und C die angestrebte Messgenauigkeit ist. Mein Entladewiderstand 1 MΩ erfordert bei 5 pF Genauigkeit also mindestens einen Timer-Tick alle 7,57 μs.


Varianten
#

Schaltplan
Variationen des Schaltplans zum Messen beim Laden des Kondensators (links) und die Universalschaltung ohne Spannungsteiler (rechts)

Messung beim Laden
#

Wenn die Messung während des Aufladens des Kondensators erfolgen soll, muss natürlich der \( m_C \)-Wert eingestellt werden. Ansonsten funktioniert die gleiche Logik:

C muss nun vor der Messung entladen werden. J muss dabei als digitaler Ausgang (open drain) geschaltet sein mit 0 V-Level. Um den Controller hinter J nicht zu überlasten, dient nun RD der Strombegrenzung. RC muss nun entsprechend groß sein, dass beim Entladen eine möglichst geringe Spannung am Kondensator anliegt.

Dieselben Werte für RC und RD funktionieren also auch hier, aber umgekehrt. An den Timings ändert sich nichts.

Aufbau ohne Spannungsteiler
#

Die zweite Schaltungsvariante unterstützt beide Messmodi und erlaubt, dass RC und RD unabhängig voneinander gewählt werden. Allerdings wird ein zweiter Controllerpin benötigt.

Zum Beispiel kann C durch RC auf Versorgungsspannung gebracht und danach JC hochohmig an den Komparator geschaltet werden. Während des Ladevorgangs sollte JD hochohmig sein oder selbst auf Versorgungsspannung gebracht werden. Anschließend kann JD als open drain den Kondensator langsam über RD entladen, bis der Komparator auslöst.

Für RC ist so nur die Stromfestigkeit von JC von Belang. RD kann so frei dimensioniert werden, wie es die Auflösung des genutzten Timers erlaubt.

Fazit
#

Der theoretische Hintergrund einer Kapazitätsmessung ist unerwartet kompliziert, obwohl die Messschaltung nur mit Gleichspannung versorgt wird. Die praktische Anwendung ist jedoch einfach:

Mit diesem Wissen sollte es kein Problem mehr sein, eine geeignete Schaltung zu entwerfen und die entsprechende Soft- bzw. Firmware zu entwickeln.

Bildquellen
Jörn-Michael Miehe
Autor
Jörn-Michael Miehe