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?
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
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.
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
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
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.
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-controllershttp://www.cypress.com/products/touch-sensing-capsensehttp://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
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"
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.
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.
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.