Forum: Mikrocontroller und Digitale Elektronik 74HC595 EMV und Timing Probleme


von Robert S. (efyzz)


Lesenswert?

Moin,

ich steuere mit einem AT89S8252 zwei 74HC595 zur Porterweiterung an. 
Nicht über SPI, sondern "zu Fuß" in ASM programmiert.

Das ganze läuft seit vielen Jahren korrekt, jedoch gibt es manchmal 
falsche Ausgangsdaten aufgrund von EMV-Störungen (wenn induktive 
Verbraucher in der Nähe geschaltet werden).

Nun wollte ich mich diesem Problem endlich mal annehmen und habe einfach 
jeweils ein RC-Glied (100R / 1nF) in die Steuerleitungen Data, 
Shiftclock, Latchclock geschaltet.

Dies führte jedoch zu einem anderen Problem: Die Ausgänge des zweiten 
Shiftregisters sind nun jeweils um ein Bit nach hinten verschoben. 
Außerdem schaltet das letzte Bit des ersten Registers auch gleich das 
erste Bit des zweiten Registers mit.

Ich dachte mir, dass das zweite Register wohl auf eine andere Schwelle 
des Clock triggert (durch die RC-Glieder sind die Flanken ja nun sehr 
flach). Also habe ich probeweise ein zweites RC-Glied in die 
Clock-Leitung vor das zweite Register geschaltet, damit dieses den Clock 
noch etwas später sieht. Das machte aber alles noch viel schlimmer und 
total chaotisch.

Anpassen der Setup- und Hold-Zeiten hab ich schon versucht, indem ich 
diverse "NOPs" in meinen Code eingefügt habe. Aber auch das hat nicht 
wirklich geholfen.

Nun habe ich nur noch eine Idee: Ich schalte jeweils zwischen RC-Glied 
und Register-Eingang noch einen Schmitt-Trigger (74LVC2G17), damit die 
Register wieder steile Flanken sehen.

Macht das Sinn oder hole ich mir damit nur neue Probleme?
Was würdet ihr machen, um die Datenleitungen EMV-sicherer zu machen?

Die Register sind mit der CPU über ein etwa 10cm langes Flachbandkabel 
verbunden, das in der Nähe der Relais verläuft, die wiederum die 
induktiven 230V Verbraucher schalten... Dass das Probleme gibt, ist ja 
eigentlich klar. Vielleicht würde ja auch schon ein abgeschirmtes Kabel 
helfen???

Vielen Dank!

von 100nF (Gast)


Lesenswert?

Ich wette, du hast an deinen Schieberegistern die Stützkondensatoren 
eingespart.

von Falk B. (falk)


Lesenswert?

@ Robert S. (efyzz)

>jeweils ein RC-Glied (100R / 1nF) in die Steuerleitungen Data,
>Shiftclock, Latchclock geschaltet.

Das 1nF ist viel zu viel! Selbst 100pF machen an der Taktleitung schon 
arg Probleme.

>noch etwas später sieht. Das machte aber alles noch viel schlimmer und
>total chaotisch.

Was dir zeigt, dass dein Lösungsansatz untauglich ist.

>Macht das Sinn oder hole ich mir damit nur neue Probleme?
>Was würdet ihr machen, um die Datenleitungen EMV-sicherer zu machen?

Dazu müsste man erstmal den IST-Zustand sehen. Wo liegt die Masse? Wie 
sieht die Abblockung der ICs aus?

https://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator

>Die Register sind mit der CPU über ein etwa 10cm langes Flachbandkabel
>verbunden, das in der Nähe der Relais verläuft, die wiederum die
>induktiven 230V Verbraucher schalten...

Hast du über den Schaltkontakten einen Snubber?

>Dass das Probleme gibt, ist ja
>eigentlich klar. Vielleicht würde ja auch schon ein abgeschirmtes Kabel
>helfen???

Eher nicht.

von Robert S. (efyzz)


Lesenswert?

100nF schrieb:
> Ich wette, du hast an deinen Schieberegistern die Stützkondensatoren
> eingespart.

Nein, die sind drin.

Falk B. schrieb:
> Das 1nF ist viel zu viel! Selbst 100pF machen an der Taktleitung schon
> arg Probleme.

Kommt auf die Frequenz an oder? Bei meinem Controller können max. 1 MHz 
auftreten, also 1 us lange Pulse. bei 100 R / 1 nF ist Tau = 100 ns. 
Also ist nach 500 ns ganz sicher der Pegel erreicht. So hab ich anfangs 
gerechnet und das klappt ja auch, nur dass die beiden Register halt 
nicht mehr wirklich synchron laufen. Von daher hast Du wohl Recht.

> Dazu müsste man erstmal den IST-Zustand sehen. Wo liegt die Masse? Wie
> sieht die Abblockung der ICs aus?

100 nF in die Fassung integriert. Das Ganze ist natürlich ein wilder 
Lochraster-Aufbau. Auf sternförmige Masseverteilung hab ich geachtet, 
aber perfekt ist das alles sicher nicht.

> Hast du über den Schaltkontakten einen Snubber?

Jo. 100 R / 100 nF.


Klar, ich könnte jetzt alles neu bauen, aber dafür bräuchte ich ne Woche 
Urlaub... Ich brauch ne quick+dirty Lösung, die heute noch läuft ;)

von Falk B. (falk)


Lesenswert?

@Robert S. (efyzz)

>> Das 1nF ist viel zu viel! Selbst 100pF machen an der Taktleitung schon
>> arg Probleme.

>Kommt auf die Frequenz an oder?

Oder. Normale Schieberegister ohne Schmitt-Trigger Eingang am Takt 
wollen gern knackige, schnelle Flanken sehen.

>Bei meinem Controller können max. 1 MHz
>auftreten, also 1 us lange Pulse. bei 100 R / 1 nF ist Tau = 100 ns.

Das ist schon recht langsam. Typische Anstiegszeiten liegen bei 5-10ns.

>Jo. 100 R / 100 nF.

Hmmm.

>Klar, ich könnte jetzt alles neu bauen, aber dafür bräuchte ich ne Woche
>Urlaub... Ich brauch ne quick+dirty Lösung, die heute noch läuft ;)

Aber auch dafür braucht man mal ein Bild vom Aufbau.

von Possetitjel (Gast)


Lesenswert?

Robert S. schrieb:

> Falk B. schrieb:
>> Das 1nF ist viel zu viel! Selbst 100pF machen an der
>> Taktleitung schon arg Probleme.
>
> Kommt auf die Frequenz an oder?

Nein! Es kommt auf die FLANKENSTEILHEIT an.


Robert S. schrieb:
> Das Ganze ist natürlich ein wilder Lochraster-Aufbau.

Wenn schon Lochraster, dann Lochraster mit Masselage.
Lötaugen nach oben, Masselage nach unten --> Pseudo-SMD
(mit bedrahteten Bauteilen).

von Joe F. (easylife)


Lesenswert?

Robert S. schrieb:
> Das Ganze ist natürlich ein wilder
> Lochraster-Aufbau.

klar...

Was ist denn mit den Output-Enable und Reset-Eingängen?
Wie sind die angeschlossen?

Welchen CLK Takt benutzt du?


Sehr hilfreich wären ein Schaltplan, und ein Screenshot deiner 
Ansteuersignale (Timing).

RC in die Signalleitungen ist definitiv kontraproduktiv (Verzögerung, 
schlechtere Flankensteilheit).

von Robert S. (efyzz)


Lesenswert?

Falk B. schrieb:
> Oder. Normale Schieberegister ohne Schmitt-Trigger Eingang am Takt
> wollen gern knackige, schnelle Flanken sehen.

Dann könnte meine Idee mit den vorgeschalteten Triggern doch klappen?! 
Dann laufen die Register jedenfalls wieder synchron. Es könnte dann 
natürlich sein, dass die 3 Signale untereinander weglaufen, aber mit ein 
paar NOPs zwischen Data und Clock sollte man das ja in den Griff 
kriegen?!

> Aber auch dafür braucht man mal ein Bild vom Aufbau.

Das willst Du nicht wirklich :)
Das Gerät steuert insgesamt an die 30 Verbraucher, die sowohl mit 
Netzspannung, als auch mit DC laufen. Hinzu kommen PWMs, Sensoren usw... 
Ich steuere damit diverse Aquarien, d.h. die ganzen Steuerleitungen 
laufen auch noch über mehrere Meter quer durch den Raum. 230 V Leitungen 
liegen mit Sensorleitungen in einem Kabelkanal usw... Außerdem ist das 
Ganze über zig Jahre gewachsen und wurde immer wieder erweitert / 
umgebaut.

Natürlich ist das alles Mist. Ich arbeite auch schon an einer neuen 
Lösung auf Basis STM32, die dann auch von vornherein diverse EMV-Filter 
haben wird. Statt Relais gibt's dann auch Triacs. Aber bis es soweit 
ist, muss die alte Kiste halt noch irgendwie rennen. Am Aquarium kann 
man nicht einfach den Stecker ziehen, denn die Tiere sind auf 
funktionierende Technik angewiesen.

Daher jetzt quick+dirty, auf lange Sicht vernünftig.

von Soul E. (Gast)


Lesenswert?

Robert S. schrieb:

> 100 nF in die Fassung integriert. Das Ganze ist natürlich ein wilder
> Lochraster-Aufbau. Auf sternförmige Masseverteilung hab ich geachtet,
> aber perfekt ist das alles sicher nicht.

Lochraster ist ok, aber bitte keine Massesterne. Das ist '60er Jahre, 
als die Röhrentechnik noch langsam und hochohmig war.

Digitalschaltungen brauchen eine Massefläche. Wenn Du die nicht hast, 
dann bau ein möglichst engmaschiges Netz. Das geht auch auf Lochraster, 
und 8 MHz-Schaltungen funktionieren dann problemlos.

von Falk B. (falk)


Lesenswert?

@soul eye (souleye)

>Digitalschaltungen brauchen eine Massefläche.

Übertreib's nicht! Eine handvoll CMOS-ICs kriegt man auch auf normalem 
Lochraster ohne Massefläche stabil zum laufen!

von Falk B. (falk)


Lesenswert?

@ Robert S. (efyzz)

>> Aber auch dafür braucht man mal ein Bild vom Aufbau.

>Das willst Du nicht wirklich :)

Sollen wir hellsehen?

>Natürlich ist das alles Mist. Ich arbeite auch schon an einer neuen
>Lösung auf Basis STM32,

Das löst keine EMV-Probleme.

>Daher jetzt quick+dirty, auf lange Sicht vernünftig.

Schau dir an, wo die Masse verläuft. Die muss eng und parallel zu den 
Signalen laufen. Auf dem Flachbandkabel sollen mindestens 2 
Masseleitungen liegen, die beidseitig angeschlossen sind. Im Idealfall 
ist jede 2. Leitung Masse.

von Soul E. (Gast)


Lesenswert?

Falk B. schrieb:

> Übertreib's nicht! Eine handvoll CMOS-ICs kriegt man auch auf normalem
> Lochraster ohne Massefläche stabil zum laufen!


Falk B. schrieb:

> Schau dir an, wo die Masse verläuft. Die muss eng und parallel zu den
> Signalen laufen. Auf dem Flachbandkabel sollen mindestens 2
> Masseleitungen liegen, die beidseitig angeschlossen sind. Im Idealfall
> ist jede 2. Leitung Masse.

Auch das ist ein Massenetz.


Bei Lochraster kann man unter jeder IC-Reihe einen Massedraht 
durchziehen und diese dann am oberen und unteren Leiterplattenrand 
verbinden. So laufen problemlos 8 MHz auf Lochraster.

von Kurt B. (kurt-b)


Lesenswert?

Robert S. schrieb:

> Nun wollte ich mich diesem Problem endlich mal annehmen und habe einfach
> jeweils ein RC-Glied (100R / 1nF) in die Steuerleitungen Data,
> Shiftclock, Latchclock geschaltet.
>
> Dies führte jedoch zu einem anderen Problem: Die Ausgänge des zweiten
> Shiftregisters sind nun jeweils um ein Bit nach hinten verschoben.
> Außerdem schaltet das letzte Bit des ersten Registers auch gleich das
> erste Bit des zweiten Registers mit.

Das bedeutet dass mit der Übernahme etwas nicht mehr stimmt, die beiden
übernehmen nicht synchron (stimmt die Flankenlage?).

Mach es halt so schnell wies geht dann merkst du den Fehler ev. nicht.
Oder du sorgst dafür dass keine Einstrahlung erfolgt.

 Kurt

von Peter D. (peda)


Lesenswert?

Die 8051 machen nur für ~2µs strong high an der 0-1 Flanke, danach gehen 
sie in weak Pullup. Wenn Das RC-Glied länger braucht, hast Du verloren.

Generell:
RC-Glieder in Digitalschaltungen lösen keine Probleme, sondern sie 
machen welche.

von Robert S. (efyzz)


Lesenswert?

Moin,

ich habe die Probleme letztendlich mit einer abgeschirmten Leitung 
zwischen CPU und SR gelöst ;)

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

naja, Alufolie rum und an GND wäre wohl mein erster Versuch gewesen, um 
zu schauen, ob es da reinsaut. Wie ich mich kenne, wäre das dann so 
geblieben bis...

Lochraster ist kein prinzipielles Problem, mein 80MHz Logianalyzer ist 
auch Loachraster. 8MHz, wie oben angenerkt, geht noch ohne größeres 
nachdenken.
http://www.avr.roehres-home.de/logikanalyzer/h_index.html

Gruß aus Berlin
Michael

von 6a66 (Gast)


Lesenswert?

Robert S. schrieb:
> Das ganze läuft seit vielen Jahren korrekt, jedoch gibt es manchmal
> falsche Ausgangsdaten aufgrund von EMV-Störungen (wenn induktive
> Verbraucher in der Nähe geschaltet werden).
>
> Nun wollte ich mich diesem Problem endlich mal annehmen und habe einfach
> jeweils ein RC-Glied (100R / 1nF) in die Steuerleitungen Data,
> Shiftclock, Latchclock geschaltet.
>
> Dies führte jedoch zu einem anderen Problem: Die Ausgänge des zweiten
> Shiftregisters sind nun jeweils um ein Bit nach hinten verschoben.
> Außerdem schaltet das letzte Bit des ersten Registers auch gleich das
> erste Bit des zweiten Registers mit.

Das sieht mir nach Setup-hold-Problem aus. Bitte mal anschauen wie die 
Daten zum Takt stehen und gegebenenfalls Taktflanke prüfen/wechseln. 
Schöne Veranschaulichung:
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#/media/File:SPI_timing_diagram2.svg

rgds

von Georg (Gast)


Lesenswert?

Falk B. schrieb:
>>Natürlich ist das alles Mist. Ich arbeite auch schon an einer neuen
>>Lösung auf Basis STM32,
>
> Das löst keine EMV-Probleme.

Das ist so pauschal nicht richtig. Was man mit einem Prozessor 
verbessern könnte, wäre die Sicherheit der Übertragung z.B. durch 
Prüfsummen. Wenn die Übertragungsstrecke nicht total versaut ist, 
sondern fast immer funktioniert ausser bei sporadischen starken 
Störungen, kann man so verhindern, dass diese Auswirkungen auf die 
Ausgänge haben. Es gibt Störungen, etwa beim Schalten einer grossen 
induktiven Last, die man ohne Umbau der Verkabelung garnicht in den 
Griff bekommt, dann baut man sich kein störungsfreies, sondern ein 
störungstolerantes System.

Ein 32-bit-Prozessor muss das natürlich nicht sein, schadet aber auch 
nicht.

Georg

von Falk B. (falk)


Lesenswert?

@Robert S. (efyzz)

>ich habe die Probleme letztendlich mit einer abgeschirmten Leitung
>zwischen CPU und SR gelöst ;)

Die Schirmung war hier wahrscheinlich nicht die Lösung, wohl aber die 
eng geführte Masse. Eine verdrillte Leitung hätte es wahrscheinlich auch 
getan.

von Mr. Claudius (Gast)


Lesenswert?

Als zusätzliche Maßnahme zur Fehlerminimierung könnte man, nachdem 
eine Ausgabe über die HC595 erfolgt ist, die serielle Übertragung zu den 
HC595 wiederholen und dabei den seriellen Ausgang des letzten HC595 in 
der chain wieder einlesen.
Stimmen die eingelesenen Daten mit den zuvor gesendeten überein, war die 
Übertragung korrekt, und das Signal für die Ausgangsflipflops braucht 
nicht nochmals bedient zu werden.

von Tobias .. (bitfehler)


Lesenswert?

Georg schrieb:
> Was man mit einem Prozessor
> verbessern könnte, wäre die Sicherheit der Übertragung z.B. durch
> Prüfsummen.

Das will ich sehen, wie du deine Daten mit Prüfsumme an ein 74HC595 
schickst.

von Georg (Gast)


Lesenswert?

T. .. schrieb:
> Das will ich sehen, wie du deine Daten mit Prüfsumme an ein 74HC595
> schickst.

Deswegen steht da ja "Prozessor" - sieh dir mal das Datenblatt zum 595 
an, ein Prozessor ist das ganz sicher nicht. Und die Idee einen 
Prozessor stattdessen zu verwenden stammt vom TO selbst.

Georg schrieb:
> Ein 32-bit-Prozessor muss das natürlich nicht sein,

Was kann danach noch unklar sein?

Georg

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.