6.3  Kapazitiver Schalter

Ein weiteres Anwendungsbeispiel für das Comparator-A-Modul ist die Vermessung einer Kapazität mittels eines Kapazitäts-Frequenz-Umsetzers. Wie in der Application-Note ”PCB-Based Capacitive Touch Sensing With MSP430” [Tex07f] beschrieben, kann hierdurch ein berührungsloser Schalter realisiert werden, wie sie ähnlich auch in einem modernen PDA eingesetzt werden.

Bringt man auf einer Leiterplatte zwei Kontakte ringförmig zueinander an, so bilden diese eine, wenn auch kleine, Kapazität. Der Wert der Kapazität ist hierbei durch verschiedene Faktoren, wie Geometrie, Material, Isolationslack oder auch Verbindungsmedium bestimmt. Gerade dieses Verbindungsmedium kann vom Benutzer durch Auflegen eines Fingers deutlich verändert werden, Bild 6.7.


PIC

Bild 6.7.: Finger und Leiterbahn bilden eine Kapazität, aus [Tex07f]


Eine Möglichkeit die Kapazität zu vermessen, ist sie in einem Oszillator als frequenzbestimmendes Element zu verschalten und dann die resultierende Frequenz des Oszillators zu messen. Für den Aufbau des Oszillators kann zum Beispiel der Komparator des MSP mit etwas zusätzlicher Programmlogik und wenigen externen Bauteilen verwendet werden, wie es in Bild 6.8 gezeigt ist.


PIC

Bild 6.8.: Schaltbild des grundsätzlichen Aufbaus, aus [Tex07f]


Zum Verständnis der Schaltung fangen wir in einem Schaltzustand an. Der Kondensator ist entladen, der Pin P.X steht auf HIGH. Damit beträgt die Vergleichsspannung am positiven Komparatoreingang 2/3 VCC. Der Ausgang des Komparators ist somit auch HIGH und der Kondensator wird geladen. Überschreitet die Kondensatorspannung die Referenzspannung, schaltet der Komparator um. Damit geschieht zweierlei: Zum einen wird der Kondensator wieder entladen, zum anderen wechselt auch die Referenzspannung und beträgt nun 1/3 VCC. Die beiden Zustände (laden/entladen) wechseln sich periodisch ab, und eine von der Kapazität und deren Vorwiderstand abhängige Frequenz stellt sich ein. Die Frequenz kann nun, wie wir es im Kapitel 4 ja schon gelernt haben, mit Hilfe des Timer-A-Moduls relativ einfach gemessen werden.

Auf der Software-Ebene müssen wir zunächst den Komparator, den Portpin und den Timer gemäß unserer Vorgaben initialisieren. Im Komparator-Interrupt zählen wir einfach jede steigende Signalflanke hoch. Der Timer definiert unsere Torzeit, das heißt in welchem Referenzintervall wir die Anzahl der Flankenwechsel zählen. Die Schalterauswertung selbst ist dann nur noch der Vergleich mit einem zuvor festgelegten Referenzwert.

#include <msp430x16x.h> 
 
int i;              // globale Zählvariable 
int Frequenz;       // Messergebnis 
int Schaltschwelle  // experimentell bestimmte Schaltschwelle 
 
// Comparator-A-Interrupt-Service-Routine 
#pragma vector=COMPARATORA_VECTOR 
__interrupt void COMPARATORA(void) 
{ 
  i++;              // Laufzähler hochzählen 
} 
 
// Timer-A-Interrupt-Service-Routine 
#pragma vector=TIMERA0_VECTOR 
__interrupt void TIMERA0(void) 
{ 
  Frequenz = i;     // Auswertung Messung 
  i=0; 
  if (Frequenz > Schaltschwelle) { 
    P1OUT |=  BIT0; // LED an 
  } 
  else { 
    P1OUT &= ~BIT0; // LED aus 
  } 
} 
 
int main ( void ) 
{ 
 WDTCTL = WDTPW | WDTHOLD;     // Watchdog-Timer ausschalten 
 
 // Timer A konfigurieren 
 TACTL  = TASSEL_2;            // Auswahl der SMCLK als Quelle 
 TACTL |= TACLR;               // Rücksetzen des Zählers 
 TACCTL0= CCIE;                // Cap/Comp-Interrupt aktivieren 
 TACCR0 = 32767;               // von 0 bis 32767 zählen 
 
 // Comparator A konfigurieren 
 CACTL2 = P2CA0 + P2CA1 + CAF; // verbinde Ausgänge und Filter 
 CACTL1|= CAON + CAIE;         // Anschalten und Interrupt 
 P2DIR  = BIT2;                // CA Ports konfigurieren 
 P2SEL  = BIT2+ BIT3+BIT4; 
 
 P6DIR  = BIT6;                // Steuerausgang Referenz 
 P6OUT  = BIT6;                // Port setzen 
 
 P1DIR  = BIT0;                // LED Ausgang 
 P1OUT  = 0x00; 
 
 
 _enable_interrupts();         // los gehts 
 TACTL |= MC_1;                // Timer starten 
 while(1) {} // Hauptprogramm, hier gibt es nichts zu tun 
}
Listing 6.2: Realisierung eines kapazitiven Schalters