Forum: Mikrocontroller und Digitale Elektronik Berührungsempfindlicher Taster mit AVR


von Daniel H. (danyag)


Angehängte Dateien:

Lesenswert?

Hey,

ich suche derzeit eine praktische Lösung zur Kontrolle einer 
LED-Beleuchtung. Es handelt sich um 12 V LED-Streifen, die in einem 
Alu-Profil angebracht sind und von einem externen (Stecker-) 
Schaltnetzteil versorgt werden.

Ich habe verschiedene Implementierungen von "Q-Touch" getestet um eine 
Art kapazitiven Berührungssensor aus dem (eloxierten) Alu-Profil zu 
machen. Dass die zu berührenden Flächen nicht isoliert sind, entspricht 
natürlich nicht ganz dem Prinzip. Das größere Problem scheint mir aber 
darin zu liegen, dass sich das Alu-Profil (kapazitiv) auflädt (siehe 
angehängtes Bild). Durch eine niederohmige Verbindung auf ein beliebiges 
Potential ließe sich das natürlich verhindern.

Hat jemand eine Idee bzw. einen Lösungsvorschlag, wie ich das gesamte 
Alu-Profil als berührungsempfindlichen Taster nutzen könnte?

- die Aufladung/ Störung oszilliert bei 50 Hz: Wäre es einen Versuch 
wert, das Alu-Profil gegen Masse zu schalten und für verhältnismäßig 
sehr kurze Abfragemessungen hochohmig zu schalten?

- statt kapazitiver Messung, eventuell mittels Strom bzw. Spannung 
Rückschlüsse auf eine etwaige Berührung ziehen?



Vielen Dank für etwaige Ideen und Vorschläge!

Mit freundlichen Grüßen
Daniel

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


Lesenswert?

Daniel H. schrieb:

> Ich habe verschiedene Implementierungen von "Q-Touch" getestet um eine
> Art kapazitiven Berührungssensor aus dem (eloxierten) Alu-Profil zu
> machen. Dass die zu berührenden Flächen nicht isoliert sind, entspricht
> natürlich nicht ganz dem Prinzip.

? Sind sie doch. Die eloxierte Oberfläche ist natürlich isoliert. Eher 
wirst du ein Problem haben, das Profil zuverlässig zu kontaktieren.

> Das größere Problem scheint mir aber
> darin zu liegen, dass sich das Alu-Profil (kapazitiv) auflädt (siehe
> angehängtes Bild).

Ja.

> Hat jemand eine Idee bzw. einen Lösungsvorschlag, wie ich das gesamte
> Alu-Profil als berührungsempfindlichen Taster nutzen könnte?

Q-Touch ADC entlädt die Touch-Elektrode vor der Messung und mißt dann 
die Ladungsverteilung zwischen der Elektrode und dem Sample-Kondensator 
des ADC. Siehe den Beitrag "TinyTouchLib - Touchbutton library für Attiny"

Dieses Verfahren ist recht robust gegenüber Störfeldern. Und vielleicht 
kannst du es ja mit der Speisung deiner LED synchronisieren. Die 50Hz 
oben sehen übrigens eher nach allgemeinem Netzbrumm aus; vermutlich 
eingekoppelt über die kapazitive Kopplung zwischen Primär- und 
Sekundärseite deines LED-Netzteils. Es könnte schon reichen, das 
Netzteil mit einem Schukostecker zu versehen und die Ausgangsspannung 
mit einem Pol an Schutzerde zu legen.

von Daniel H. (danyag)


Lesenswert?

Axel S. schrieb:
> Sind sie doch. Die eloxierte Oberfläche ist natürlich isoliert.

das stimmt natürlich.. allerdings gibt es natürlich kleinere Kratzer und 
die Oberfläche ist nicht perfekt. Wenn das dem gewünschten Einsatzzweck 
deiner Meinung nach nicht im Wege steht, freue ich mich.

Axel S. schrieb:
> Siehe den Beitrag "TinyTouchLib - Touchbutton library für Attiny"

Die Beiträge habe ich gelesen und auch schon kurz die library 
angetestet. Mit einer kleinen Elektrode schien das auch zu 
funktionieren, aber mit dem Alu-Profil - zu diesem Zeitpunkt - nicht.

Axel S. schrieb:
> Und vielleicht
> kannst du es ja mit der Speisung deiner LED synchronisieren

Wie könnte/ sollte eine Synchronisierung ablaufen? - Messungen während 
des Nulldurchgangs?

Axel S. schrieb:
> Die 50Hz
> oben sehen übrigens eher nach allgemeinem Netzbrumm aus; vermutlich
> eingekoppelt über die kapazitive Kopplung zwischen Primär- und
> Sekundärseite...

Ich bin zu der Thematik kein Experte, aber hege die gleiche Vermutung

Axel S. schrieb:
> Es könnte schon reichen, das
> Netzteil mit einem Schukostecker zu versehen und die Ausgangsspannung
> mit einem Pol an Schutzerde zu legen.

Darüber hatte ich nachgedacht, war mir aber nicht sicher ob das für 
einen Alltagsgebrauch "angemessen" ist. Könnte das relevante 
Auswirkungen auf Sicheheit, EMV und Schutzschaltungen haben?


Wie gefährlich könnten die Aufladungen denn dem AVR werden, wenn ich sie 
nicht unterbinde? - wären zusätzliche Schutzdioden und ein 
Serienwiderstand sinnvoll?

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


Lesenswert?

Daniel H. schrieb:
> Axel S. schrieb:
>> Sind sie doch. Die eloxierte Oberfläche ist natürlich isoliert.
>
> das stimmt natürlich.. allerdings gibt es natürlich kleinere Kratzer und
> die Oberfläche ist nicht perfekt.

Eloxalschichten auf Aluminium funktionieren so gut, daß man sogar 
Kondensatoren damit baut. Und sie haben die Tendenz, sich in Anwesenheit 
von Sauerstoff (vulgo: Luft) selbständig zu erneuern. Deswegen läßt sich 
Aluminium ja auch so schlecht löten.

>> Siehe den Beitrag "TinyTouchLib - Touchbutton library für Attiny"
>
> Die Beiträge habe ich gelesen und auch schon kurz die library
> angetestet. Mit einer kleinen Elektrode schien das auch zu
> funktionieren, aber mit dem Alu-Profil - zu diesem Zeitpunkt - nicht.

Das könnte an der vergleichsweise großen Kapazität deiner Elektrode 
liegen. Wie ich in jenem Thread bereits darlegte, hat die Lib da einen 
Bug - man muß mit 16 Bit rechnen, sonst bekommt man bei großer 
Elektrodenkapazität einen Überlauf. Eventuell brauchst du sogar eine 
Kompensationskapazität in Hardware. Das wäre einfach ein kleiner 
Kondensator (maximal einige 10pF) direkt am verwendeten ADC-Eingang nach 
GND.

>> Und vielleicht
>> kannst du es ja mit der Speisung deiner LED synchronisieren
>
> Wie könnte/ sollte eine Synchronisierung ablaufen? - Messungen während
> des Nulldurchgangs?

Jep.

>> Es könnte schon reichen, das
>> Netzteil mit einem Schukostecker zu versehen und die Ausgangsspannung
>> mit einem Pol an Schutzerde zu legen.
>
> Darüber hatte ich nachgedacht, war mir aber nicht sicher ob das für
> einen Alltagsgebrauch "angemessen" ist. Könnte das relevante
> Auswirkungen auf Sicheheit, EMV und Schutzschaltungen haben?

Nein. Das Netzteil muß jetzt schon schutzisoliert sein. Du darfst dessen 
Ausgangsspannung also auf jedes beliebige Potential legen. Insbesondere 
auch auf PE. Außerdem faßt du diese Spannung gar nicht an. Die 
Touch-Elektrode ist relativ hochohmig mit dem Rest der Schaltung 
verbunden.

> Wie gefährlich könnten die Aufladungen denn dem AVR werden, wenn ich sie
> nicht unterbinde? - wären zusätzliche Schutzdioden und ein
> Serienwiderstand sinnvoll?

Die vorhandenen Schutzdioden reichen bei kapazitiver Kopplung mit ein 
paar pF vollkommen aus. Der (ca.) 10K Widerstand zwischen Elektrode und 
µC ist allerdings obligatorisch.

von Daniel H. (danyag)


Lesenswert?

Axel S. schrieb:
> Eloxalschichten auf Aluminium funktionieren so gut, daß man sogar
> Kondensatoren damit baut.

Gut, dann ist das kein Hindernis. ;)

Axel S. schrieb:
>> Mit einer kleinen Elektrode schien das auch zu
>> funktionieren, aber mit dem Alu-Profil - zu diesem Zeitpunkt - nicht.
>
> Das könnte an der vergleichsweise großen Kapazität deiner Elektrode
> liegen.

Damit hast du vermutlich auch recht. Wobei es nicht nur das Profil zu 
sein scheint. Wenn ich ein ähnliches Profil (ohne LED-Streifen und 
Kabel) auf dem Schreibtisch nutze, dann werden Berührungen sehr sicher 
erkannt. Die Variable "delta" in der "tinytouch_sense"-Funktion erhöht 
sich dabei um Werte von ~ 450.
Das Alu-Profil (mit LED-Streifen und Kabeln) steigert den "delta"-Wert 
bei Verbindung mit dem "Sense-ADC" um ~ 1700. Sobald sich "bias" 
eingependelt hat erhöht eine Berührung den "delta"-Wert noch um ~ 50.

Axel S. schrieb:
> Wie ich in jenem Thread bereits darlegte, hat die Lib da einen
> Bug - man muß mit 16 Bit rechnen, sonst bekommt man bei großer
> Elektrodenkapazität einen Überlauf.

Den Beitrag habe ich gelesen und konnte den Logikfehler anhand von Code 
in einem Thread nachvollziehen. Der Code der library scheint mir aber 
entsprechend angepasst worden zu sein. Ich hoffe ich darf hier Auszüge 
posten:

Beitrag "TinyTouchLib - Touchbutton library für Attiny"
>*  Author: Tim (cpldcpu@gmail.com)
> Auszug:
1
uint16_t tinytouch_adc(void)
2
uint16_t dat1 = 0x100;
3
dat1 -= ADCH;
4
uint16_t dat2 = ADCH;
5
return dat2 + dat1;

Bei den Messungen ist das ADLAR-Bit gesetzt.

Axel S. schrieb:
> Kompensationskapazität in Hardware. Das wäre einfach ein kleiner
> Kondensator (maximal einige 10pF) direkt am verwendeten ADC-Eingang nach
> GND.

Das werde ich gleich mal versuchen, danke!

Axel S. schrieb:
> Nein. Das Netzteil muß jetzt schon schutzisoliert sein. Du darfst dessen
> Ausgangsspannung also auf jedes beliebige Potential legen.

Gut, danke. Ich wäre davon ausgegangen, dass das gemacht werden darf. 
Meine Schlussfolgerungen können aber - bedingt durch fehlendes Wissen -
falsch sein. Daher frage frage ich vorher lieber. Sofern die kapazitive 
Kopplung im (einfachen) Schaltnetzteil zum Schaltungsdesign gehört, 
fürchtete ich eben dieses Schaltungsdesign zu konterkarieren.

Axel S. schrieb:
> Die vorhandenen Schutzdioden reichen bei kapazitiver Kopplung mit ein
> paar pF vollkommen aus. Der (ca.) 10K Widerstand zwischen Elektrode und
> µC ist allerdings obligatorisch.

Alles klar!

von frank (unterwegs) (Gast)


Lesenswert?

such mal im web nach „arduino“ und „capacitive sensor“ ...

von Daniel H. (danyag)



Lesenswert?

Daniel H. schrieb:
> Axel S. schrieb:
>> Kompensationskapazität in Hardware. Das wäre einfach ein kleiner
>> Kondensator (maximal einige 10pF) direkt am verwendeten ADC-Eingang nach
>> GND.
>
> Das werde ich gleich mal versuchen, danke!

Das Einbringen einer Kompensationskapazität scheint leider nicht viel zu 
bewirken. Ich habe von 15 pF bis 470 pF verschiedene Kondensatoren 
getestet.

Weiterhin habe ich mit Hilfe eines einfachen Multimeters die Kapazität 
des Alu-Profils gegen Erde zu bestimmen. Die Werte sind sicher nicht 
präzise, aber erlauben vllt. hilfreiche Rückschlüsse ziehen zu können.


Ergebnisse nach Konstellationen nummeriert:
1. Steckernetzteil mechanisch vom Stromnetz getrennt, 
Spannungsversorgung der LED-Streifen hochohmig zur Erde:
-> 140 pF

2. Steckernetzteil elektrisch (nur Phase) vom Stromnetz getrennt, 
Spannungsversorgung der LED-Streifen hochohmig zur Erde:
-> 220 pF

3. Steckernetzteil elektrisch (nur Neutralleiter) vom Stromnetz 
getrennt, Spannungsversorgung der LED-Streifen hochohmig zur Erde:
-> 79 nF (Ergebnis wegen Aufladung "unbrauchbar"?!)

4. Steckernetzteil elektrisch mit Stromnetz verbunden, 
Spannungsversorgung der LED-Streifen hochohmig zur Erde:
-> 9,7 nF (Ergebnis wegen Aufladung "unbrauchbar"?!)

5. Steckernetzteil elektrisch mit Stromnetz verbunden, "negative" 
Spannungsversorgung der LED-Streifen niederohmig zur Erde:
-> 1,8 nF

6. Steckernetzteil mechanisch vom Stromnetz getrennt, "negative" 
Spannungsversorgung der LED-Streifen niederohmig zur Erde:
-> 1,8 nF


Ich vermute, dass die hohe Kapazität problematisch ist und sich nicht so 
einfach verringern lässt. - Oder?



Die Screenshots des Oszilloskops zeigen Messungen mit dem Tastkopf bei 
einem Teilverhältnis von 10:1.

Erläuterungen der Bilder:
1_Abfrageburst_gut:
grüne Kurve: ADC-Sense-Kanal "unbelastet"
blaue Kurve: ADC-Sense-Kanal mit 15 cm Kabel
gelbe Kurve: ADC-Sense-Kanal mit 15 cm Kabel und 1 m Test-Alu-Profil auf 
Tisch

hier funktioniert die "Touch-Erkennung" immer einwandfrei


2_Abfrageburst_mittel:
blaue Kurve: gelbe Kurve aus Bild 1
grüne Kurve: LED-Alu-Profil, LEDs spannungslos und hochohmig
gelbe Kurve: LED-Alu-Profil, LEDs unter Spannung und ein Kanal geerdet

die "Touch-Erkennung" funktioniert perfekt bei "blau", einigermaßen bei 
"grün" und gar nicht bei "gelb"


3_Entladekurve_Alu_Profil:
gelbe Kurve: LED-Alu-Profil, LEDs unter Spannung und ein Kanal geerdet
- zuerst Abfrageburst, dann Entladung



Ich hoffe das ist nicht zu ausführlich bzw. ich fordere damit nicht zu 
viel von euch. Der Post legt meinen aktuellen Kenntnisstand dar. 
Vielleicht habt ihr ja noch Ideen und Anregungen oder seht meinen 
fundamentalen Fehler.

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.