Forum: Analoge Elektronik und Schaltungstechnik Kapazitive Touch-Sensorik diskret aufbauen?


von A. S. (rava)



Lesenswert?

Hi,


Ich habe mich ein bisschen mit kapazitiven Touch-Sensoren beschäftigt. 
Die Rede ist von kleinen Kupferflächen, also Pads, die in der 
Leiterplatte selbst untergebracht sind. Diese ändern die Kapazität bei 
Berührung. Es geht hier um ein paar pF.

Ausgewertet wird das Ganze meist von Mikrocontrollern mit der 
entsprechenden Peripherie. Ich habe ein bisschen mit den CTMUs von 
Microchip gerarbeitet.

Oft sind in einem Mikroctonroller recht wenige Analogkanäle verbaut, 
außer man geht auf kleine Formfaktoren, die dann nicht mehr DIY-lötbar 
sind.

Ich habe mir überlegt, ob es machbar ist, eine solche Peripherie diskret 
aufzubauen.

Ziel
* noch einigermaßen bezahlbar (ADCs können in großer Zahl schon recht 
teuer sein)
* realistischer Platzbedarf mit großen ICs, Pinabstand < 1mm (z.B. 50 
kapazitive Kanäle auf 10cm x 10cm, einseitig bestückt)
* Verhalten: wie eine SPI-Eingangsporterweiterung, die kleine 
Kapazitäten misst

Generelle Probleme
* Die Messung muss recht hochohmig sein, sonst entlädt sich das Pad 
durch Leckströme. Gibt es hochohmigere OPAMPs als ADCs? Dann könnte man 
einen Impedanzwandler dazwischen setzen. Vielleicht.
* Analogmultiplexen ist erlaubt, um die Kosten zu senken. Aber das 
braucht Platz und erzeugt weitere Leckströme. Und ist das immer 
bidirektional?




Verfahren 1
Ein dreiphasiges Messverfahren.
a) Sprunganregung & Aufladen für eine konstante Zeit (CTMUs verwenden 
z.B. eine Konstantstromquelle)
b) Messen der erreichten Spannung
c) Entladen des Pads

Die Phasen brauchen viel Digitallogik (Zähler, Decoder, Multiplexer). 
Und irgendwoher müsste noch die Abschaltzeit der Ladelogik kommen.
Dafür könnte man die Arbeitsschritte in den Phsen pipelinen und ohne 
Zeitverlust mehrere Pads messen. Was mich stört ist die Tatsache, dass 
man dafür analoge Ringschalter bräuchte, die bidrektional funktionieren 
und wenig Leckstrom haben
1
InSel0, InSel1 | Out0, Out1, Out2, Out3
2
     0,      0 |  In0,  In1,  In2,  In3
3
     0,      1 |  In3,  In0,  In1,  In2
4
     1,      0 |  In2,  In3,  In0,  In1
5
     1,      1 |  In1,  In2,  In3,  In0
Gibt es so etwas?
Eine Alternative scheint nur zu sein, mindestens 3 Analogmultiplexer zu 
verwenden. Das klingt zu aufwändig.


Verfahren 2
Chargetime-Measurement: Man könnte eine Rechteckspannung über einen 
Widerstand/eine KSQ anlegen, und die Pulsbreite messen, bis die 
Padspannung beim Ent- oder Aufladen einen vorgegebenen Grenzwert 
überschreitet.
Das erscheint mir ganz geschickt. Man braucht nicht allzu viele ICs, und 
hat mehr Freiheiten beim Multiplexing. Allerdings müsste wieder alles 
mit der SCK-Leitung synchronisiert werden. Deren Frequenz ist aber nicht 
genau genug bekannt, um den Widerstand auszulegen.
Und ich glaube, an einem internen Oszillator hat man auch keine Freude, 
denn dann müssen irgendwo die beiden Clocks synchronisiert werden.
Man könnte eine Auslegungsvorschrift machen, für R, aber ob das klappt? 
Während so eines Projekts ändert sich die SCK-Frequenz ja gerne mal 
öfter...
Dann eher noch ein "triggern" über die CS-Leitung, wobei mir nicht ganz 
klar ist, wie dann der Entladevorgang angestoßen werden soll.


Verfahren 3
Direkte Impedanzmessung: Wieder könnte man ein RC-Glied bauen. Jetzt 
wird aber nicht die SCK-Frequenz angelegt, sondern hochfrequente 
Sinusspannung fixer Frequenz. Dann müsste man nur die noch 
Spannungsamplitude messen, die am Pad abfällt, und man könnte auf C 
rückschließen.
Nur wie misst man die Amplitude einer Wechselspannung derart hochohmig 
mit einem Bauteil? Und ist das nicht viel zu aufwändig für einen derart 
dreckigen Anwendungszweck.


Fällt euch noch ein Verfahren ein? Welches klingt für euch 
vielversprechend?

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Willst Du es wegen des Erkenntnisgewinns machen oder weil Du wirklich 
Probleme mit dem Löten hast?

Ein 0,50€ ATtiny814 (und seine Verwandten mit mehr oder weniger 
Beinchen) mit eingebautem Touchsensor kommen für Dich nicht in Frage? 
SOx-Gehäuse? Dafür gibt es zur Not sogar Adapter nach Brotbrett würg

von HildeK (Gast)


Lesenswert?

A. S. schrieb:
> Fällt euch noch ein Verfahren ein?

Ja, QTouch.
https://www.microchip.com/wwwproducts/en/AT42QT2120

Für einen einzelnen Button ist das mit einem simplen Attiny25 in weniger 
als 10 Zeilen implementiert.
Ursprünglich von Atmel, nun Microchip, gibt es bereits eine fertige 
Bibliothek einzelne Buttons, Matrixanordnung oder Slider und Wheels.

von HildeK (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?

A. S. schrieb:
> Oft sind in einem Mikroctonroller recht wenige Analogkanäle verbaut

Sag doch erstmal, wieviel Du brauchst.
Als DIP gibt es:
ATtiny25: 4 ADC-In
ATtiny24: 8 ADC-In
ATtiny261: 11 ADC-In

von Dieter (Gast)


Lesenswert?

Das geht ganz Simpel mit Darlington-Transistor und geht dann auf den 
Digitaleingang vom Prozessor. So hat man das früher gemacht und die 
Schaltung wurde in ein IC gegossen.

Und so hat man 8 auf 3 Eingänge gematcht:
https://www.cmos4000.de/cmos/4428.html

von Axel S. (a-za-z0-9)


Lesenswert?

Dieter schrieb:
> Das geht ganz Simpel mit Darlington-Transistor und geht dann auf den
> Digitaleingang vom Prozessor. So hat man das früher gemacht

Das ist dann aber kein kapazitiver Touch-Sensor.

Auf diese Weise kann man entweder resistive Sensoren bauen - da berührt 
man zwei Flächen gleichzeitig und stellt eine hochohmige Verbindung 
her. Oder man nutzt das meist vorhandene 50Hz Störfeld in der Umgebung, 
das bei Berührung der Sensorfläche über die Körperkapazität eingekoppelt 
wird.

Letztere Variante ist sehr unzuverlässig. Und resistive Sensoren haben 
den Nachteil, daß sie konstruktiv in das Gehäuse eingebaut werden 
müssen. Einen kapazitiven Sensor kann man hinter einer Abdeckfolie 
anbringen, ja sogar ganz hinter der Frontplatte, sofern diese 
nichtleitend ist.

Zurück zum Thema: QTouchADC ist für gewöhnlich die Methode mit dem 
geringsten Aufwand und der besten Zuverlässigkeit. Aktuelle µC haben an 
fast allen Pins die Möglichkeit, einen ADC dahin zu muxen. Ein externer 
ADC ist da kein Vorteil.

von herbert (Gast)


Lesenswert?

Funkamateure morsen mit Kapazitven Berührungs-Paddeln. Schaltungen dazu 
muss man halt im Netzsuchen...

von Mic R. (microller)


Lesenswert?

Ich werfe auch noch die Cypress' PSoCs in die Runde, da kann nahezu 
jeder Microcontroller GPIO auch für CapSense (= Touch) verwendet werden. 
Logisch, dass man Eingänge auch kombinieren kann für Slider oder 
Martrix. Schau mal auf deren Webseite unter Capsense, die IDE PSoC 
Creator bringt sogar ein Tuning tool mit.
Und neueere Bausteine können sogar 'Metal detektieren', spricht 
Induktives Sensing (nur der Name dafür mit MagSense ist fast ein bischen 
Irreführend ;-)
http://www.cypress.com/products/capsense-controllers
http://www.cypress.com/products/touch-sensing-capsense
http://www.cypress.com/products/psoc-creator-integrated-design-environment-ide
Also für Touch HMI sind die PSoCs meine erste Wahl, zumal die sich auch 
recht robust verhalten.
#Mic Roller

von Axel S. (a-za-z0-9)


Lesenswert?

Ach ja, QTouchADC fehlt in der Liste der Verfahren. Deswegen eine 
Kurzbeschreibung:

- es ist ein charge-rebalancing Meßverfahren

- in Phase 1 wird die unbekannte Sensorkapazität entladen und eine 
bekannte Referenzkapazität auf eine bekannte Spannung geladen

- in Phase 2 werden beide verbunden und gewartet; die Ladung der 
Referenzkapazität verteilt sich nun auf beide Kapazitäten

- in Phase 3 wird die resultierende Spannung gemessen. Je stärker die 
Spannung abgesunken ist, desto größer die Kapazität der Sensorfläche

- um die Effekte von Störeinstreuung (50Hz Netz & Co) zu egalisieren, 
wiederholt man die Messung mit wechselnder Polarität

Der geniale Teil dabei: man verwendet als Referenzkapazität die 
Sample-Kapazität des ADC. Den Pin schaltet man entweder als Ausgang 
(Laden/Entladen des Touchsensors) oder als ADC-Eingang. Wenn der MUX des 
ADC eine Stellung für Vcc und eine für GND hat, kann man den ADC damit 
direkt vorladen. Sonst braucht man einen extra Pin.

Implementiert findet man das in der QTouch Lib von Atmel^W Microchip 
oder auch hier im Forum, siehe den 
Beitrag "TinyTouchLib - Touchbutton library für Attiny"

von Dieter (Gast)


Lesenswert?

Stimmt herbert.

Ganz Simpel mit Darlington-Transistor gibt es sowohl, als auch.

Als Hinweis sei angemerkt, dass die Schaltung mit genau und nur einem 
Darlington-Transistor pro Taste kein kapazitiver Touch-Sensor ist. Aber 
so eingeschränkt war der Blogbeitrag nicht gewesen.

von Peter D. (peda)


Lesenswert?

Dieter schrieb:
> Ganz Simpel mit Darlington-Transistor gibt es sowohl, als auch.

Wobei da nur die Version mit 2 Kontaktflächen zuverlässig ist, d.h. 
ohmscher Sensor. Daß man selber auf 50Hz brummt, ist nicht zuverlässig. 
Insbesondere, wenn auch Batteriebetrieb gehen soll.

Nebenbei nimmt man keine Darlingtons mehr, seit es MOSFETs gibt. Ein 
MOSFET kann Strom beliebig hoch verstärken. Der Pulldown-Widerstand 
bestimmt allein den Ansprechstrom.
Darlingtons nimmt man nur noch für Nischenanwendungen, z.B. klassische 
AB-Endstufen. Aber auch für Audio haben sich D-Endstufen mit MOSFETs 
durchgesetzt.

von Dieter (Gast)


Lesenswert?

Peter D. schrieb:

> Ein MOSFET kann Strom beliebig hoch verstärken.

Ein Mosfet wird gesteuert durch eine Spannung am Gate (nicht Strom), 
indem der Stromfluß durch den Source-Drain-Kanal dadurch beeinflußt 
wird.
Der Transistor ist ein Stromverstärker.

Es gibt noch Varianten mit astabiler Kippschaltung und Schwingkreis. Die 
zweite Fläche sieht man nicht, denn die ist die Masse des Gehäuses oder 
Fläche um die Taster herum unterhalb des isolierenden Plastik.

von Peter D. (peda)


Lesenswert?

Dieter schrieb:
> Ein Mosfet wird gesteuert durch eine Spannung am Gate (nicht Strom),

Deshalb nannte ich ja den Pulldown-Widerstand als I->U Wandler.

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.