Hallo Leute,
folgendes Problem:
Ich habe mehrere Tasten ueber Schieberegister an einem Mikrocontroller
angebunden. Leider bekomme ich manchmal "Geistertasten-Signale", obwohl
nichts gedrueckt wurde.
Situation im Ueberblick:
*) 11 Tasten werden über 2 8 Bit Schieberegister 74HCT165 ausgelesen
*) Es sind noch weitere Schieberegister dahinter, die funktionieren,
SREG-Leitungen passen also
*) Bei Tasten-Betaetigung wird direkt auf 5V gezogen
*) Bei nicht betaetigten Tasten gibt es einen Pulldown von 15k auf GND
*) 4-Layer Platine: Layer 1 - Tasten; Layer 2 - GND; Layer 3 - 5V; Layer
4 - SREG
*) Pulverbeschichtetes Metallgehaeuse, mit Platine verschraubt, mit
Schrauben durch die Platine auf GND gelegt
*) Versorgung via USB
Die SREG liefern manchmal falsche Werte (in beide Richtungen; 0 statt 1,
1 statt 0). Der Effekt wird sehr deutlich verstaerkt, wenn man das
Metallgehaeuse oder die Kunststofftasten beruehrt.
Ich habe folgendes getestet:
*) Software-Entprellung (Messung gilt nur wenn 20x nacheinander gleicher
Wert)
*) Pulldown halbiert auf 7.5k
*) 0402 Keramik-Kondensatoren an alle SREG-Eingaenge, je 1.7 uF
*) Betrieb an Notebook mit Akku, ohne Netz Kabel
*) Extra 2. Masseleitung an diesem Platinen-Teil
*) SREG langsamer angesteuert (Faktor 10)
Nichts davon hilft.
Hat hier jemand irgendwelche Ideen?
ebtschi schrieb:> *) Pulverbeschichtetes Metallgehaeuse, mit Platine verschraubt, mit> Schrauben durch die Platine auf GND gelegt
Damit leitest Du Dir Störströme (z.B. ESD) direkt auf die Leiterplatte.
Ist auf der 4-Lagen Platine nur die Tastatur oder auch die Auswertung
(Mikrocontroller)?
Wie lang ist die Leitung zur Auswertung und wie sind die Kabel geführt.
Ist die Taktleitung und die Datenleitung durch mindestens eine
Masseleitung voneinander Separiert?
Ich vermute ein Übersprechen eines Signals auf die Taktleitung. Das
Problem müßte durch einen kleinen Kondensator (100pF .. 470pF) beim
Takteingang des Schieberegisters besser werden. (nicht übertreiben die
minimale Flankensteilheit für HC-Mos darf nicht unterschritten werden).
Gruß Anja
Anja schrieb:> Ich vermute ein Übersprechen eines Signals auf die Taktleitung.
Ist wahrscheinlich doch eher die Strobe-Leitung die gestört wird. wenn
die anderen Schieberegister ok sind.
Gruß Anja
Hallo Anja,
danke fuer die schnelle Antwort.
Stoerstroeme: naja, das Gehaeuse ist geerdet, loest das das Problem
nicht?
In diesem Bereich der Platine sind nur die Tasten und das
Schieberegister. Die Daten des SREG werden ueber eine Flex-Leitung zu
einem anderen Bereich mit Mikrocontroller gefuehrt.
Leitungen:
Tasten-Register: 1-3 cm
Register-Mikrocontroller: ca. 10 cm
alles auf Platine/Flex
Daten und Clock sind durch GND-Leitung separiert
Das mit dem Kondensator werde ich mal ausprobieren.
Das Interessante ist ja, dass noch weitere SREG hinter diesen sind, die
funktionieren. D.h. die Daten die durch diese SREG durchgeschliffen
werden sind alle richtig, nur die die eingelesen werden sind falsch.
Schoene Gruesse,
Ewald
ebtschi schrieb:> Stoerstroeme: naja, das Gehaeuse ist geerdet, loest das das Problem> nicht?
Jetzt wird es gefährlich... Gehäuse ist geerdet und mit Schaltung-Masse
verbunden ????
Aeh, Bloedsinn (wird wirklich schon spaet heute...). Das Gehaeuse ist
mit Schaltungs-Masse verbunden (damit auch USB-Masse), und nicht
geerdet. Versorgung ist ueber USB.
Was evtl. noch relevant sein koennte: VSG der SREG ist 5V, angesteuert
wird alles mit 3.3V. Das ist laut Datenblatt noch innerhalb der
erlaubten Werte.
Das Strobe-Signal habe ich mir gerade angesehen, sieht alles sehr gut
und unverdaechtig aus.
ebtschi schrieb:> *) Software-Entprellung (Messung gilt nur wenn 20x nacheinander gleicher> Wert)
Das nützt nichts, Du mußt auch zwischen den Auslesungen eine
entsprechende Zeit warten.
Bei mir hat sich eine Abtastzeit von 2..50ms (Timerinterrupt) und ein
4-maliger Vergleich bewährt.
Wichtig ist auch, beide Flanken zu entprellen (EXOR).
Peter
ebtschi schrieb:> eh, Bloedsinn (wird wirklich schon spaet heute...). Das Gehaeuse ist> mit Schaltungs-Masse verbunden (damit auch USB-Masse), und nicht> geerdet. Versorgung ist ueber USB.
Wie ich es machen würde:
Metall-Gehäuse mit Schirm des USB-Steckers verbinden.
Signalmasse von Gehäuse und Schirm trennen. Maximal eine Kapazitive
Verbindung (Filterung) beim USB-Stecker falls Abstrahlungsprobleme
auftreten.
Ansonsten: die Hand-Empfindlichkeit zeigt daß Du irgendwelche Störströme
auf deinen Leitungen hast.
ebtschi schrieb:> Das Strobe-Signal habe ich mir gerade angesehen, sieht alles sehr gut> und unverdaechtig aus.
Keine Kunst bei geerdetem Oszi: da fließen die Störströme dann völlig
anders.
Gruß Anja
Peter Dannegger schrieb:> Bei mir hat sich eine Abtastzeit von 2..50ms (Timerinterrupt) und ein> 4-maliger Vergleich bewährt.
Das mache ich auch so, 5 ms, 20-maliger Vergleich.
Anja schrieb:>> Das Strobe-Signal habe ich mir gerade angesehen, sieht alles sehr gut>> und unverdaechtig aus.>> Keine Kunst bei geerdetem Oszi: da fließen die Störströme dann völlig> anders.
Wie kann ich dann auf de Leitung messen?
>Ich habe mehrere Tasten ueber Schieberegister an einem Mikrocontroller>angebunden. Leider bekomme ich manchmal "Geistertasten-Signale", obwohl>nichts gedrueckt wurde.>11 Tasten werden über 2 8 Bit Schieberegister 74HCT165 ausgelesen
Viel einfacher zu verdrahten und weit weniger störanfällig ist es, alle
Tasten an die Ausgänge eines oder mehrerer Schieberegister HC595 o.ä. zu
schalten und mit (Schottky)Dioden zu entkoppeln. Eine gemeinsame
Sammel-Leitung führt zurück zum Controller und dort auf einen relativ
niederohmigen Pulldown (1k...10k), dem man auch noch ein Puffer-C
parallelschalten kann, was die Leitung gegen hochfrequente Störer
unempfindlich macht. Die Schieberegister bekommen eine einzelne '1'
durchgeschoben. Erscheint die '1' am Controllereingang, ist die
betreffende Taste gedrückt. Nach jedem Schiebevorgang wird ~1ms gewartet
und dann mehrfach abgefragt.
Anstatt 74HCT165 zu verwenden, wäre langsame CMOS Technik besser; z.B.
4021.
Ich vermute einen Fehler beim Timing. Überprüfe, ob Du die Datenleitung
zum richtigen Zeitpunkt einliest. Nach der steigenden oder nach der
fallenden Clock-Flanke?
>Das mache ich auch so, 5 ms, 20-maliger Vergleich.
Sind die 5ms die Gesamtzeit oder die Wartezeit zwischen den Abtastungen?
Als Gesamtzeit wäre es deutlich zu schnell.
Travel Rec. schrieb:> Schieberegister brauchen nur 3 Pins inklusive Rückleitung. Matrix sind 7> Leitungen oder mehr.
Nein, ich meinte die Taster werden mit diversen Widerständen
ausgestattet und ein Pin geht zum AD-Wandler. Der kann dann Rückschlüsse
auf die gedrückte Taste per Software ziehen.
siehe: http://www.avr-asm-tutorial.net/avr_de/keypad/keyboard.html unter
3.
Ich habe jetzt mal alle parallelen Eingänge direkt beim Schieberegister
auf GND gelegt. Das Problem war weg.
D.h. wir können annehmen dass es an den Signalen von den Tasten liegt,
oder?
Ferkel schrieb:> Sind die 5ms die Gesamtzeit oder die Wartezeit zwischen den Abtastungen?> Als Gesamtzeit wäre es deutlich zu schnell.
5ms ist die Zeit zwischen den Abtastungen.
Ganz ehrlich,
ich glaube nicht so recht an ein EMV-Problem.
Ich würde als erstes auf einen Wackelkontakt in der Datenleitung tippen.
Oder ein Masseproblem bei den Pull-downs. Für micht sieht das eher so
aus, als ob die Eingänge irgend wie Floaten, wenn die Tasten nicht
gedrückt sind.
Ich kenn Deine Schaltung nicht, aber schaltest Du vielleicht auch
irgendwelche Relais? Klemmdiode dort?
Entkoppel-C´s bei jedem Schieberegister? Wie schnell werden die denn
eingelesen?
Ein EMV-Problem passiert nicht durch "Handauflegen", Du sendest ja keine
Störfrequenzen aus. Also muss es etwas mit ESD sein oder was
Kapazitives. Nur mal so laut gedacht.
Frank B. schrieb:> Ich würde als erstes auf einen Wackelkontakt in der Datenleitung tippen.
Daten "durchschleifen" funktioniert wunderbar. Das würde nicht gehen
wenn in der Datenleitung ein Wackelkontakt wäre.
> Oder ein Masseproblem bei den Pull-downs. Für micht sieht das eher so> aus, als ob die Eingänge irgend wie Floaten, wenn die Tasten nicht> gedrückt sind.
Habe ich mir auch gedacht, und nachgemessen. Sind wirklich immer 7.5k
auf GND.
> Ich kenn Deine Schaltung nicht, aber schaltest Du vielleicht auch> irgendwelche Relais? Klemmdiode dort?
keine Relais
> Entkoppel-C´s bei jedem Schieberegister?
Ja.
> Wie schnell werden die denn eingelesen?
ca. alle 5 ms mit 100 kHz
>> Damit leitest Du Dir Störströme (z.B. ESD) direkt auf die Leiterplatte.>> Gruß Anja
Ja, genau das war's. Wir haben die Metallschrauben vom Gehaeuse zur
Platine durch Kunststoffschrauben ersetzt und alles klappt.
Besten Dank fuer die Unterstuetzung.
Frank B. schrieb:> Ein EMV-Problem passiert nicht durch "Handauflegen", Du sendest ja keine> Störfrequenzen aus. Also muss es etwas mit ESD sein oder was> Kapazitives. Nur mal so laut gedacht.>
Schon mal darüber nachgedacht was am USB-Kabel so alles aus dem PC an
Störungen entweicht?
- PC-Schaltnetzteil-Spitzen (ca 100 KHz)
- USB-Datenverkehr (mind. alle 1 ms)
Wenn ich jetzt den Schaltungs-Gnd direkt ans Gehäuse ("große" Kapazität)
anschließt fließen sehr wohl kapazitive Störströme zum PC-Gehäuse
zurück. (Die Kapazität und damit der Störstrom verändert sich dann durch
Handauflegen).
Wenn der Anschluß dann auch noch an der falschen Stelle ist, so daß der
Störstrom auf der Leitung zwischen Prozessor und Schieberegister fließt
dann hat man es geschafft.
Gruß Anja
D.h. was mache ich in Zukunft bei Elektronik in Metallgehaeusen?
Nur bei der USB-Buchse an GND anschliessen?
Nur kapazitiv an GND koppeln? (An welchen Stellen?)
In der Luft haengen lassen?
Fragen ueber Fragen ^^
ebtschi schrieb:> D.h. was mache ich in Zukunft bei Elektronik in Metallgehaeusen?
Hängt leider immer vom konkreten Anwendungsfall ab:
- Leitungen ins Gehäuse
- Signalfrequenzen
- Schutzklassen
- Störumgebung
Leitungen sind immer auch gute Antennen (für bestimmte
Frequenzbereiche).
Generell solltest Du dir Überlegen: wie verhindere ich daß Störströme
die (Kapazitiv) über Leitungen eingefangen werden durch deinen
Signal-Gnd fließen bzw. in der Schaltung einen Spannungsabfall
generieren.
Die meisten Störungen haben bei ca 100 MHz ihre Hauptspektralanteile.
bei 100 MHz hat 1 cm Leiterbahnlänge ca 10nH (entspricht 6 Ohm) oder
einen Spannungsabfall von 0,6V bei 100mA Störstrom.
(zum Vergleich: Burststörungen nach Industrienorm haben 2000V bei 50 Ohm
= bis zu 40 A Störstrom)
zum Vergleich: 100 pF (Streu-)Kapazität (großes Gehäuse) haben ca 16 Ohm
Impedanz bei 100 MHz.
Generelle Konzepte:
- Strikte Trennung von Schirm (= Gehäuse) und Signal GND.
(im Gesamtsystem darf es maximal eine Verbindung im Steckerbereich
geben)
- Alle Leitungen von einer Seite her ins Gehäuse führen.
(Störströme fließen nur im Steckerbereich
und nicht quer durch den Schaltungsbereich)
- Filtern von stark störenden (ungeschirmten) Leitungen
(niederfrequente Signale) gegen Gehäuse
- Zusatzlich grundsätzliche Tiefpaßfilterung
(RC oder LC gegen Gnd) für Signale die über Leitungen herein kommen.
- eventuell nach dem Kondensator gegen Gehäuse noch eine Drossel
(oder Ferrit) einbauen damit die Störung auch wirklich auf
das Gehäuse geht.
(insbesonders wichtig wenn man doch Stecker
auf mehreren Seiten des Gehäuses hat)
Gruß Anja