Kapazitive Touch Sensing mit einem EFM8 Microcontroller

Capacitive sensor, Theory, application and design (March 2019).

Anonim

Kapazitive Touch Sensing mit einem EFM8 Microcontroller


In diesem Projekt wird die kapazitive Touch-Sense-Technologie mithilfe einer Evaluierungskarte für einen Sleepy Bee-Mikrocontroller des Typs EFM8 untersucht.

Zugehörige Informationen

  • LCD über SPI steuern: Eine Einführung in die Projektentwicklung mit einem EFM8 Microcontroller
  • Ambient Light Monitor: Anzeige von Messungen auf einem LCD
  • Einführung in die kapazitive Berührungssensorik
  • Schaltungen und Techniken zur Implementierung kapazitiver Berührungssensoren

Benötigte Hardware / Software

  • SLSTK2010A Sleepy Bee Starter Kit
  • Einfachheit Studio

Das Entwicklungsboard

Zusätzlich zu einem Mikrocontroller, der ein integriertes kapazitives Erfassungsmodul aufweist, hat das SLSTK2010A-Evaluierungsboard eine PCB-Struktur, die als eine kapazitive Berührungsschnittstelle fungieren kann. Sie können es in der unteren rechten Ecke des Boards sehen:

Es gibt hier tatsächlich vier Sensoren. Das Innere des Kreises ist ein individueller Sensor. Der Bereich zwischen dem kleineren Kreis und dem größeren Kreis besteht eigentlich aus drei Sensoren, die derart zusammenwirken, dass sie einen kreisförmigen Schieber bilden, dh die Signale von den drei Sensoren können verarbeitet werden, um den Ort einer Fingerpresse zu identifizieren. Auf dem nächsten Foto können Sie (irgendwie) die spezielle Form des Verriegelungssensors sehen, die diese Funktionalität ermöglicht, und dann wird das Sensor-Design in der folgenden Abbildung deutlich deutlicher.

Grafik mit freundlicher Genehmigung von Mark Hughes.

Wir brauchen in diesem Artikel die Fähigkeit des Kreisschiebers nicht; Nichtsdestotrotz werden wir einen der Circular-Slider-Sensoren verwenden. Warum fragst du? Einfach: Der einzelne Sensor, der dem kleineren Kreis entspricht, ist standardmäßig nicht mit dem Mikrocontroller verbunden, und die einzige Möglichkeit, diese Verbindung zu erhalten, ist über eine Null-Ohm-Widerstandsbasisfläche, die etwas größer als ein Sandkorn ist. Außerdem befindet sich dieser Fußabdruck gefährlich nahe bei anderen Komponenten, einschließlich des Mikrocontrollers. Anstatt meinen Lötkolben zu benutzen, um den EFM8 zu schmelzen und einen oder zwei Widerstände in der Nähe zu beseitigen, entschied ich mich, einfach einen der anderen Sensoren zu verwenden.

Kapazitätsänderung

Wir beginnen mit einem der in Simplicity Studio verfügbaren Demo-Projekte:

Laden Sie das Programm herunter und drücken Sie irgendwo auf den kreisförmigen Schieberegler, und das LCD zeigt ein weißes Oktagon, das der Position Ihres Fingers entspricht.

Lassen Sie uns dieses Programm verwenden, um zu sehen, was genau mit dem Cap-Sense-Signal passiert. Wenn Sie mit der kapazitiven Touch-Sense-Technologie nicht vertraut sind, sollten Sie die beiden oben genannten Cap-Sense-Artikel im Abschnitt "Zugehörige Informationen" lesen. Wenn Sie nicht viel über kapazitive Sensorik wissen und Sie nicht in der Stimmung für einen technischen Artikel sind, hier ist die Quintessenz: Ein Abschnitt der Leiterplatte ist so ausgelegt, dass sie einen Kondensator (in der Regel Fingerspitzengröße) bildet. Wenn Ihr Finger mit diesem PCB-Kondensator in Kontakt kommt, erhöht sich die Gesamtkapazität. Der PCB-Kondensator ist in eine Art von Schaltung eingebaut, die diese Änderung der Kapazität durch Analysieren von Variationen in den Zeitcharakteristiken eines angelegten Signals erfassen kann.

Ich habe nicht jedes Wort im Cap-Sense-Abschnitt des Sleepy Bee-Referenzhandbuchs gelesen, aber es scheint mir, dass es keine klaren Informationen über die spezifische Kapazitätsänderungserkennungstechnik gibt, die von der Hardware des EFM8 verwendet wird. Lass uns einen der Cap-Sense-Pins untersuchen und sehen, was passiert. Ich habe P0.2 abgetastet und das LCD teilt mir freundlicherweise mit, welcher Abschnitt des Kreisschiebers dem P0.2-Signal entspricht (mehr dazu später).

Der Bereich zeigt eine periodische Rampensignalform:

Die folgende Scope-Aufnahme zeigt die Breite des Rampenimpulses, wenn ich meinen Finger nicht irgendwo in der Nähe der P0.2-Region des kreisförmigen Schiebers habe.

Die nächste Scope-Aufnahme zeigt Ihnen, wie die Wellenform aussieht, wenn ich fest auf den P0.2-Sensor drücke.

Es ist vielleicht nicht so offensichtlich in den Einzelbildaufnahmen, aber wenn ich auf die Live-Anzeige schaue, kann ich klar sehen, dass der Kontakt mit einem Finger eine Verringerung der Spitzenspannung und eine Änderung im Entladungsbereich der Rampenwellenform bewirkt. Die Änderung der Entladungscharakteristik ist genau das, was man mit erhöhter Kapazität erwarten würde: die Abnahme der Spannung ist etwas allmählicher und somit ist etwas mehr Zeit erforderlich, damit die Spannung auf 0 V zurückkehrt.

Ich habe keine signifikante Änderung der Frequenz aufgrund von Fingerkontakt festgestellt, daher kann ich nur annehmen, dass der "Kapazität-Digital-Wandler" von Sleepy Bee (wie in dem Blockdiagramm unten gezeigt) Änderungen der Kapazität basierend auf Änderungen in den Entladungsabschnitt der Rampenwellenform, möglicherweise in Verbindung mit Amplitudenvariationen.

Blockdiagramm für das kapazitive Sense-Modul, entnommen aus dem Referenzhandbuch Sleepy Bee, Seite 154.

Der Beobachter-Effekt

Ich würde gerne etwas mehr über die Cap-Sense-Messungen des EFM8 erfahren, aber das Sondieren mit einem Oszilloskop ist nicht der beste Weg, dies zu tun. Der Grund sollte klar aus dem kleinen weißen Oktagon sein, das erschien, sobald wir das Cap-Sense-Signal untersuchten - in diesem Fall funktionieren die Oszilloskop-Sonde und die Eingangsschaltung als ein ziemlich sperriger und teurer Ersatz für eine Fingerspitze. Wir können den Standardzustand der Wellenform nicht sehen, da wir durch das Anlegen der Sonde dem Sensor eine relativ große Kapazität hinzufügen.

Stattdessen benötigen wir eine Echtzeitanzeige, die die Kapazitätsmessungen meldet, ohne den Sensor zu stören. Dazu benötigen wir das LCD und einige benutzerdefinierte Firmware.

Ein Echtzeit-Kapazitätsmonitor

Der Grundgedanke ist hier, die grundlegende Cap-Sense-Funktionalität des EFM8 zu aktivieren und dann die Kapazitätsmessungen auf dem LCD anzuzeigen. Dies ermöglicht uns, die genauen Änderungen der gemessenen Kapazität zu sehen, die als Reaktion auf jegliche Art von Wechselwirkung zwischen dem Sensor und einem Finger auftreten.

Der Großteil der Firmware-Arbeit, die in diesem Projekt involviert ist, bezieht sich auf die LCD-Schnittstelle, die Pixeldatenarrays für die Ziffern enthält, Pixeldaten in das LCD-Modul schreibt und einen binären Wert als Basis-Zehnzahl anzeigt. Ich werde nicht viel über diese Themen sagen, weil sie in früheren Artikeln diskutiert werden; Dieser ist besonders relevant, weil die numerische Anzeige ähnlich wie in diesem Projekt ist. Der Link am Ende dieses Artikels gibt Ihnen Zugriff auf alle Quell- und Projektdateien. Sie sollten in der Lage sein, eine Menge Informationen zu sammeln, indem Sie den Code untersuchen, der aussagekräftige Bezeichner verwendet und gut kommentiert ist.

Ein wichtiger Unterschied, den ich erwähnen werde, ist die SPI-Schnittstelle. In früheren Projekten verwendete ich Interrupt-gesteuerte Firmware für die SPI-Kommunikation zwischen dem EFM8 und dem LCD-Modul, aber in diesem Projekt verwende ich eine einfachere Polling-Implementierung (erinnere mich an das KISS-Prinzip).

Hier ist die Pinbelegung:

CS0: Der Cap-Sense-Controller

Das Cap-Sense-Modul des Sleepy Bee ist ein leistungsstarkes Peripheriegerät, das die meisten Details zur Messung kleiner Kapazitätsschwankungen bewältigt. Es enthält verschiedene Funktionen, die ich wahrscheinlich nie verwenden werde oder die ich sogar beachten werde, aber ich bin sicher, dass sie wertvoll für Leute sind, die Produkte der Unterhaltungselektronik entwerfen.

Ein Feature, das mir wirklich gefällt, ist die integrierte Akkumulations- und Durchschnittsfunktionalität. Kapazitive Messungen können verrauscht sein. Daher ist es praktisch, dass die EFM8-Cap-Sense-Hardware automatisch bis zu 64 Samples akkumulieren und mitteln kann.

Wenn Sie die "Capacitive Sensing Library" im Hardware-Konfigurator aktivieren, werden Sie feststellen, dass die IDE automatisch zwei cap-sense-bezogene Funktionen in Ihre main () - Routine einfügt. Ich weiß nicht, was diese tun, und um ehrlich zu sein, habe ich nur wenig Geduld für den Autopilot-ähnlichen Bibliothekscode, der mir nur mehr vergisst, was eigentlich in meinem Mikrocontroller vor sich geht. Also habe ich diese Funktionsaufrufe gelöscht und das CS0-Modul manuell konfiguriert. (Um ehrlich zu sein, schätze ich Hardware-Konfigurations-Tools, die den komplizierten und fehleranfälligen Prozess des Setzens und Löschens der richtigen Bits in zahlreichen Spezialfunktionsregistern erheblich reduzieren.)

Hier ist die Hauptfunktion ():

 int main(void) { //call hardware initialization routine enter_DefaultMode_from_RESET(); //give the EFM8 control over the LCD module EFM_DISP_ENABLE = HIGH; //initialize chip select to LOW (inactive) SPI_CS = LOW; //clear the LCD screen LCD_Clear_All(); SFRPAGE = CAPSENSE_PAGE; //enable the cap-sense module CS0CN0_CSEN = TRUE; //select 16-bit conversions CS0MD2 &= ~(BIT7|BIT6); CS0MD2 |= (BIT7|BIT6); //make sure that the end-of-measurement interrupt flag is cleared CS0CN0_CSINT = CLEARED; while(1) { //initiate a capacitance measurement CS0CN0_CSBUSY = TRUE; while(!CS0CN0_CSINT); CS0CN0_CSINT = CLEARED; //print the measured value on the LCD Update_LCD(CS0D); Delay_10ms(10); } } 

Die gewünschte Akkumulationseinstellung ist 64 Samples, aber ich muss diesen Konfigurationsschritt nicht manuell durchführen, da die Akkumulationseinstellung von der Option übernommen wird, die ich im Hardwarekonfigurator-Tool ausgewählt habe. Die Standardmaßnahme für den Start der Messung ist auch das Schreiben einer 1 an CSBUSY (Bit 4 im CS0CN0-Register), also musste ich dies auch nicht konfigurieren, weil ich mit CSBUSY Messungen initiieren möchte. Ich setze die Verstärkung auf 4x (der Standardwert ist 8x), weil es bei einer Verstärkung von 8x so aussah, als würde ich den maximalen Messwert erreichen oder erreichen, als ich sehr fest auf den Sensor drückte. Die Verstärkung, wie die Akkumulationseinstellung, kann über den Hardware-Konfigurator ausgewählt werden.

Wie Sie der CSD-Anweisung (Update_LCD) entnehmen können, ist die auf dem Bildschirm angezeigte Zahl nur der Rohwert aus dem Datenregister des Cap-Sense-Moduls. Es ist nicht die gemessene Kapazität in Picofarad oder irgendeiner anderen Einheit, und außerdem ist die absolute Kapazität irrelevant - die kapazitive Sense-Technologie basiert auf Änderungen der Kapazität.

Die Firmware in Aktion

Sie können den Code hier herunterladen:

Quell- und Projektdateien

Hier ist ein kleines Detail, das Ihnen einige Probleme ersparen könnte: Als ich das LCD-Interface zum ersten Mal getestet habe, habe ich scheinbar zufällige Display-Störungen bemerkt. Ich fand schließlich heraus, dass der Debugger die SPI-Kommunikation störte, weil das Problem nur auftrat, wenn ich das Programm als Teil einer Debugsitzung ausführte. Als ich die Verbindung zwischen Simplicity Studio und dem Mikrocontroller schloss und das Programm EFM8 unabhängig laufen ließ, war alles in Ordnung.

Sie können im folgenden Video sehen, dass ein Fingerdruck eine große Änderung der gemessenen Kapazität verursacht - viel größer als die Rauschvariationen, die nur wenige zählen, wenn sich der Finger nicht in der Nähe des Sensors befindet. Dies zeigt, wie effektiv Sie einen Fingerdruck erkennen können, indem Sie einfach einen geeigneten Schwellenwert auswählen.

Fazit

Wir wissen jetzt sehr viel über 1) wie das Capsense-Modul des Sleepy Bees Kapazitätsänderungen erkennt und 2) wie man das Modul aktiviert und grundlegende Messungen durchführt. In zukünftigen Artikeln werden wir weiterhin mit der kapazitiven Touch-Sense-Funktionalität dieses Evaluierungsboards arbeiten.

Gib diesem Projekt einen Versuch für dich selbst! Holen Sie sich die Stückliste.