Überlegungen zum Design von kapazitiven Steuerplatinen für den Mikrocontroller MSP430FR2633 von TI

Putz: Reportage über die Herstellung von Fassadenputz (April 2019).

Anonim

Überlegungen zum Design von kapazitiven Steuerplatinen für den Mikrocontroller MSP430FR2633 von TI


In einem früheren Projektartikel habe ich die grundlegenden Überlegungen zum Schaltungsentwurf für eine kundenspezifische kapazitive Touch-Schnittstelle mit dem MSP430FR2633 von TI behandelt. In diesem Artikel werden wir stattdessen die Überlegungen zum PCB-Design und die Programmierung des Geräts näher betrachten.

Meine Schnittstelle besteht aus zwei Platinen: einer vierschichtigen Platine, auf der der Mikrocontroller und die Support-Schaltung untergebracht sind, und einer zweischichtigen Platine mit kapazitiven Touchpanels und Anzeige-LEDs.

Überlegungen zum Leiterplattenlayout für den MSP430FR2633

Die Hauptplatine ist ein vierschichtiger Stack-up mit interner Masseebene und schraffierter Stromversorgungsebene. Das Schraffieren hilft, die parasitäre Kapazität zu reduzieren, die die Leistungsfähigkeit der kapazitiven Berührungserfassung negativ beeinflussen könnte.

Die Komponenten sind auf der Oberseite der Platine montiert, mit Ausnahme der ESD-Dioden und des USB-Anschlusses. Der USB-Anschluss ist an der Unterseite der Platine angebracht, um eine Überkreuzung der differentiellen Leitungspaare zwischen dem Micro-USB-Anschluss und dem CP2102N zu vermeiden sowie den ungenutzten Platz zwischen der Platine und dem Gehäuse zu nutzen.

Das Fabrikationshaus, von dem ich dieses Board bestellt habe, MacroFab, lädt dasselbe für einseitige und zweiseitige Boards.

Oben gezeigt sind Top-Down-Bilder der vier Leiterplattenschichten.

Ich war besorgt über kapazitive Kopplung zwischen Spuren der kapazitiven Touch-Pins und den darunter liegenden Schichten. Um die kapazitiven Effekte zu minimieren, verwendete ich 5 mil-Spuren für die Verbindungen und eine schraffierte Füllung mit fester Spurbreite und variierender Raumbreite zwischen den Schichten.

Das ist nicht unbedingt notwendig, aber ich wollte die schraffierten Füllungen auf den verschiedenen Ebenen ausgleichen. Leider ist das kein Feature meines PCB-Design-Programms (Diptrace), und das manuelle Verschieben der schraffierten Füllungen lieferte inkonsistente Ergebnisse. Die Verwendung von kapazitiven Berührungslesestreifen mit minimaler Spurbreite mit schraffierten Füllungen auf der nahegelegenen Leistungsschicht soll die Kapazität auf den kapazitiven Berührungsstiften verringern.

Die zweite Schicht der Leiterplatte (Vcc) ist rot zu sehen. Schraffierte Füllungen und dünne Linien werden verwendet, um die Auswirkungen der kapazitiven Kopplung zu verringern.

Die schraffierte Füllung ist mit demselben Netz wie die feste Füllung verbunden. Ich fügte zusätzliche Punkte in der Volumenkörperfüllung hinzu, um einen negativen Raum zu erstellen, der von einem zweiten schraffierten Kupferbereich ausgefüllt wird. Mit Diptrace verhindert die Definition des positiven und negativen Bereichs, dass die feste Füllung den schraffierten Bereich füllt.

LED-Überlegungen

Unterseite des kapazitiven Bedienfelds

Änderungen im Signalzustand, die zum Ansteuern von LEDs verwendet werden, können als eine Änderung der Kapazität durch den Mikrocontroller detektiert werden. Um eine versehentliche Aktivierung zu vermeiden, empfiehlt TI, die digitalen und kapazitiven Signalleitungen um mindestens 4 mm getrennt zu halten. Beim Kreuzen auf verschiedenen Ebenen sollten sie sich im rechten Winkel kreuzen.

Anstatt Spuren über Vias zu leiten, die die LEDs auf derselben Ebene wie die Tasten und das Drehrad platzieren, wählte ich umgekehrt montierte LEDs, die durch Löcher in der Platine leuchten.

CP2102N Programmierung

Der CP2102N ist mit dem Simplicity Studio Express-Konfigurationstool von Silicon Labs programmiert. Zwei GPIO-Pins zeigen die UART-Datenübertragung zwischen dem MSP430FR2633 und dem CP2102N an. Diese LEDs befinden sich auf unterschiedlichen Netzen als die tatsächliche Datenübertragung, und die LEDs scheinen für übertragene Bytes und Datenketten anstelle der einzelnen Datenbits aufzuleuchten.

Bitte lesen Sie meinen anderen Artikel darüber, wie ich eine Programmierschwierigkeit mit dem CP2102N überwunden habe.

MSP430FR2633 Programmierung

Wie ich im ersten Artikel erwähnt habe, ist das CapTivate Design Center ein grafisches Softwaretool, mit dem der meiste Code generiert werden kann, der für die Ausführung dieses Projekts erforderlich ist. Es muss wissen, welche Tasten und Schieberäder vorhanden sind und an welchen Pins sie angebracht sind. Die Software generiert alle C-Quellcodes, Header-Dateien und Bibliotheken, die für den Betrieb des Mikrocontrollers und der kapazitiven Touch-Schnittstelle erforderlich sind.

Code herunterladen

Leider hatte die Software zu diesem Zeitpunkt keine Ahnung, dass ich LEDs an mein Board angeschlossen habe. Also konnte ich den Code leider nicht einfach aufbauen und auf den Mikrocontroller hochladen. Zuerst musste ich dem MSP430FR2633 mitteilen, dass er mit einigen LEDs ausgestattet war und dann eine Möglichkeit zum Ein- und Ausschalten hatte.

Ich entschied mich dafür, dies durch Bitmasken zu tun. Ich habe fünf LEDs in den oberen linken, unteren linken, mittleren, oberen rechten und unteren rechten Ecken des Bedienfelds, und ich wollte drei Möglichkeiten schaffen, sie zu steuern - ein, aus und umschalten.

Die Vorgehensweise für den MSP besteht darin, die LEDs so zu behandeln, als wären sie Bits an einer bestimmten Stelle im Speicher. Schreiben Sie eine 1 und die LED leuchtet auf; Schreibe eine 0 und es schaltet sich ab; Invertieren Sie den Wert und Sie schalten den LED-Status um. Die Pins sind auf Bits in verschiedenen Registern abgebildet. Diese Bitpositionen werden durch die Pinbelegung auf dem Mikrochip bestimmt. Zum Beispiel befindet sich GPIO Pin P2.3 auf Bit 3 in Register 2. Um die LED ein- und auszuschalten, manipulieren Sie einfach das 3. Bit von Register 2. Die Registerposition P2 wird in einer anderen Datei definiert, die für den Mikrocontroller spezifisch ist.

Glücklicherweise ist die Grundstruktur in einer Beispielskizze für das MSP430FR2633 in Code Composer Studio enthalten. Alles, was ich tun musste, war, es für meine LEDs zu kopieren und zu modifizieren.

LED_UL steht für die LED oben links im Bedienfeld.

 #define LED_UL_POUT (P2OUT) #define LED_UL_PDIR (P2DIR) #define LED_UL_PIN (BIT3) #define LED_UL_ON (LED_UL_POUT |= LED_UL_PIN) #define LED_UL_OFF (LED_UL_POUT &= ~LED_UL_PIN) #define LED_UL_TOGGLE (LED_UL_POUT ^= LED_UL_PIN) 

In der Funktion main () musste ein kleiner Befehl eingefügt werden, um den hochohmigen GPIO-Pin-Modus zu deaktivieren. Wenn Sie Ihr eigenes Projekt verfolgen, fügen Sie den Befehl ein, nachdem der Watchdog-Timer gestoppt wurde oder die LEDs nicht leuchten.

 Void main(void) WDTCTL = WDTPW 

Zuletzt musste ich eine Funktion schreiben, die die kapazitive Touch-Interface-Sensorposition verwendet, um die LEDs zu beleuchten.

 void my_slider_callback(tSensor* pSensor) { // FIRST CHECK IF THERE IS VALID TOUCH if(pSensor->bSensorTouch == true) { // THEN GET THE CURRENT TOUCH POSITION ON THE SLIDER/WHEEL position = (uint16_t)((tSliderSensorParams*)pSensor->pSensorParams)->SliderPosition.ui16Natural; // Even though it is storing the data in a 16-bit integer, the numbers never exceed 8 bits in length // Use the position to generate eight cases -- illuminate one of four corners, or illuminate one of four sides. // Mask bits 5:7 thenshift them to become bits 0:2 // case8 = (position & 0x00E0) >> 5; // add an integer offset if lights are rotated from wheel positions case8 = ((position & 0x00E0)>>5) + 3 ) % 7 switch(case8) { case 0: // Light Upper Left Corner LED_UL_ON;LED_UR_OFF;LED_BR_OFF;LED_BL_OFF; break; case 1: // Light Top Side LED_UL_ON;LED_UR_ON;LED_BR_OFF;LED_BL_OFF; break; case 2: // Light Upper Right Corner LED_UL_OFF;LED_UR_ON;LED_BR_OFF;LED_BL_OFF; break; case 3: // Light Right Side LED_UL_OFF;LED_UR_ON;LED_BR_ON;LED_BL_OFF; break; case 4: // Light Bottom Right Corner LED_UL_OFF;LED_UR_OFF;LED_BR_ON;LED_BL_OFF; break; case 5: // Light Bottom Side LED_UL_OFF;LED_UR_OFF;LED_BR_ON;LED_BL_ON; break; case 6: // Light Bottom Left Corner LED_UL_OFF;LED_UR_OFF;LED_BR_OFF;LED_BL_ON; break; case 7: // Light Left Side LED_UL_ON;LED_UR_OFF;LED_BR_OFF;LED_BL_ON; break; Default: // Turn corner lights off and toggle center LED LED_UL_OFF;LED_UR_OFF;LED_BR_OFF;LED_BL_OFF;LED_C_TOGGLE; break; } } } 

JTAG Fehlerbehebung

In einer perfekten Welt hätte ich den Code sofort hochladen und mit dem Experimentieren beginnen können. Aber das ist nicht der einfache Weg.

Meine anfänglichen Versuche, die Karte zu programmieren, scheiterten mit einer Fehlermeldung, die darauf hinwies, dass kein Gerät angeschlossen war. Ich begann, das Problem mit meinem Oszilloskop zu beheben und sah die folgende JTAG-Transaktion.

Oben ist eine nicht funktionierende JTAG-Transaktion dargestellt. Test-, TMS-, TCK-, TDO-, TDI- und nRST-Zustände sind am Oszilloskop basierend auf einem 1, 51 V-Schwellenwert als niedrig / hoch definiert.

Für diejenigen von Ihnen, die mit der JTAG-Programmierung nicht vertraut sind, ist das überhaupt nicht das, was Sie von einer JTAG-Transaktion erwarten würden. Idealerweise gibt es eine Eintrittssequenz, gefolgt von einem schnellen Übergang des Taktsignals und Datenübergängen auf den TDO- und TDI-Leitungen.

Aus Neugierde beschloss ich, meinen Untersuchungen eine normale analoge Sonde hinzuzufügen, um zu sehen, was die Signale ausführlicher machten. Die Analog-Probe-Kurve ist unten in Gelb dargestellt.

Oben in weiß dargestellt ist eine vollständige JTAG-Transaktion für den MSP430FR2633. Die gelbe Kurve ist eine normale analoge Messung, die die TDI-Signalleitung dupliziert.

Jetzt hatte ich einige zusätzliche interessante Informationen mit der gelben Sondenspur. Die Signale waren nicht immer in einem logisch hohen oder logisch niedrigen Zustand. Etwas anderes interagierte mit den Signalleitungen und behielt eine ~ 2 V Potentialdifferenz bei, die die Programmiersignale störte.

Gleichzeitig erkannte ich, dass die zwei Pins, die ich für die USB-zu-Seriell-Schnittstelle (UCA0TXD, UCA0RXD) ausgewählt hatte, doppelt so gut wie TCK \ VREF + bzw. TMS waren. Es gab also absolut keine Möglichkeit, die USB-zu-Seriell-Schnittstelle zu testen, während sie mit einer JTAG-Schnittstelle verbunden war, und es bestand eine hohe Wahrscheinlichkeit, dass der CP2102N die JTAG-Programmierung aktiv beeinträchtigte.

Leider brauchte ich ein Board-Redesign, das die Tx / Rx-Pins des CP2102N auf die UCA1RXD- und UCA1TXD-Leitungen verlagerte.

MSP430FR2633 bessere JTAG-Transaktion


Nachdem ich meine neue Platine erhalten und an meinen JTAG-Programmierer angeschlossen hatte, hatte ich eine letzte Hürde. Ich war frustriert immer noch nicht in der Lage, es zu programmieren, bis ich ein Firmware-Upgrade auf dem Programmierer durchgeführt habe.

Aber nach all dem habe ich endlich ein Projekt, mit dem ich kapazitive Ringschieber besser verstehen und programmieren kann.

Das Texas Instruments MSP430 Benutzerhandbuch zeigt mehrere Möglichkeiten zum Zugriff auf den kapazitiven Schieberegler und die Tasten, und dies ist nur einer von ihnen. Dieser Ansatz sollte Ihnen jedoch helfen, selbst mit einem kapazitiven Touch-Schieberegler in Ihrem nächsten Design zu experimentieren. Ich hoffe, dass es Ihnen gefallen hat.