Welche Probleme können bei der Verkettung von 40 Schieberegistern auftreten?

Ich plane, 40 x 74HC595- Schieberegister miteinander zu verketten. Die gesamte Kette von 74HC595 wird von einem 5-V-Mikrocontroller gesteuert, der die SDI, CLOCK& LATCH-Signale erzeugt.

Jedes Schieberegister und der Mikrocontroller verfügen über eine eigene Leiterplatte, wie im folgenden Diagramm dargestellt:

Diagramm

Aufgrund mechanischer Einschränkungen beträgt der Abstand zwischen den einzelnen Schieberegistern etwa 30 cm (12 Zoll), sodass die Steuersignale über eine Entfernung von etwa 12 m (40 Fuß). Außerdem wird das gesamte System in einer sehr lauten Umgebung montiert (in der Nähe von Leuchtstofflampen, Stromkabeln usw.)

Meine Sorge ist, dass die Steuersignale sehr laut sind und die Schieberegister möglicherweise die falschen Dinge ausgeben. Ich dachte an:

  • Verwendung eines Puffer-ICs auf jeder Platine, um die Steuersignale zu puffern. Welche würden Sie empfehlen?
  • Verwendung von geschirmten Kabeln zwischen den Platinen für die Signale
  • Verringern Sie die CLOCKFrequenz so weit wie möglich. Ich muss den Inhalt der Register nur ein paar Mal am Tag aktualisieren.

Sind die oben genannten Lösungen sinnvoll? Was kann ich noch tun, um das (potenzielle) Rauschen in den Signalleitungen auf ein Minimum zu reduzieren?

Das klingt nach einem fantastischen Kandidaten für ein CPLD anstelle der 40 Schieberegister.
@JoelB Es klingt vielleicht nach einer guten Passform für ein CPLD, aber das würde bedeuten, dass 320 (= 40 * 8) Signale von der Hauptplatine (CPLD) überall hin gehen. Es wäre in meinem Fall sehr schwierig, in dieser Umgebung zu installieren; und es wird sehr schwer zu warten sein. Außerdem sind die Signale, obwohl sie kürzer sind, immer noch Rauschen ausgesetzt.
@Joel - Digikey listet nur wenige CPLDs mit 320 E / A auf, und sie sind alle BGAs. Sie sind auch teurer als 40 '595er, und wie m.Alin sagt, haben Sie nicht den Vorteil der verteilten Signale. Aus logischer Sicht ist dies ein perfekter Job für einen CPLD, aus praktischer Sicht weniger.
@m.Alin - Du hast vollkommen recht. Ich habe gerade 40 Schieberegister gelesen und CPLD eingegeben. Nachdem Sie die Frage gründlich gelesen haben, macht es Sinn, wie Sie vorgehen.

Antworten (3)

Verwenden Sie Schmitt-Trigger-Puffer an den Eingängen jeder Karte. Sie werden die Signale bereinigen, damit zum Beispiel kein Rauschen falsche Impulse auf der Uhr gibt. Der 74LVC3G17 ist ein dreifacher nicht invertierender Puffer.

Leiten Sie auch die gepufferten Signale an die nächste Platine weiter. Andernfalls wären alle Eingänge parallel und Sie könnten den Fan-Out des ansteuernden Mikrocontrollers überschreiten (ich denke insbesondere an die gesamte kapazitive Last). Die Daisy-Chain von Clock- und Latch-Signalen führt zu einer Welligkeitsverzögerung in der gesamten Kette, aber die Daten werden dies auch tun, und Sie planen sowieso eine niedrige Geschwindigkeit.

Sie können nicht sagen, dass Sie keinen Platz für den 3G17 haben: Das XSON8-Gehäuse ist 1,0 mm x 1,2 mm, 0,3 mm Abstand. :-)
Oh... das ist nicht gut. Die würde ich kaum sehen :-)
@m.Alin - Keine Sorge, es ist auch in TSSOP verfügbar. Noch klein, sollte aber überschaubar sein. Verlassen Sie sich bei dieser Art von Gerät auf keinen Fall auf DIP, das gehört definitiv der Vergangenheit an. Wenn Sie DIP wollen, werfen Sie einen Blick auf die klassischere 74HC-Serie.
Danke, Stefan. TSSOP sollte in Ordnung sein. Nehmen wir nur theoretisch an, ich werde die Puffer nicht verwenden. Die Eingangssignale wären also parallel und würden die Auffächerung des Mikrocontrollers überschreiten. Könnte ich das lösen, indem ich die Ausgänge des uC mit einigen Transistoren ansteuere?
@m.Alin - Ja, eine Gegentaktstufe wäre in Ordnung. Aber ich würde die Puffer dringend empfehlen, nicht nur für die Treiberfähigkeit, sondern insbesondere für die Hysterese des Schmitt-Triggers , die falsche Taktimpulse durch Rauschen um den Schwellenwert herum vermeidet.
@stevenvh Ist es besser, Puffer vor oder nach dem Kabel zu platzieren, das Signale von einer Platine abnimmt? In meinem Fall habe ich Puffer vor dem Kabel, aber keine danach.
@Saad - Du meinst, der Puffer treibt das Signal zum Kabel? Das Gute ist dann, dass es eine niedrige Impedanz bietet, die das Rauschen reduziert. Aber wenn es auf der Empfängerseite Rauschen geben würde , können Sie auf der Senderseite nichts dagegen tun. Es ist also der Empfänger, der eine gute Störfestigkeit benötigt, die der Schmitt-Trigger bietet.
@stevenvh Die beste Lösung, wenn Sie Rauschen am Empfänger erwarten, aber auch eine niedrige Impedanz für die Quelle bereitstellen möchten, besteht darin, Puffer an beiden Enden anzubringen?
@Saad - Ja, aber in diesem Fall scheint es übertrieben zu sein: Die Drähte sind nur 30 cm lang und Sie haben bereits einen Repeater / Puffer auf jeder Platine.
@stevenvh Ja, ich habe allgemein gesprochen. Ihre Beiträge sind reich an Informationen und ich lerne fast immer etwas Neues! In diesem Fall habe ich Puffer auf einer Steuerplatine, die mit einem Kabel verbunden sind, das mit einer „Tochterplatine“ verbunden ist. Ich erwarte nicht viel Lärm, also bleibe ich vielleicht bei meiner Anordnung. Ich habe dort nur Puffer, damit meine Quelle nicht 8 Geräte ansteuert (mit 8 pF Eingangskapazität + Leiterbahn- und Kabelkapazität).
@Saad - Danke für die Blumen! :-) Achten Sie auf die Kapazität des Kabels, besonders wenn es länger als einen Meter oder so lang ist. Faustregel: 100 pF/m, das ist viel mehr als die Eingangskapazität.

Das Problem, das auftreten kann, besteht darin, dass einige SR vor dem nächsten SR takten, so dass der nächste SR die falschen Daten eintakten wird. Eine (Standard-?) Lösung dafür ist, die Uhr ab dem letzten SR zu verdrahten.

Ich würde in Betracht ziehen, auf jeder Karte einen (Schmit-Trigger?) Puffer für alle 3 Signalleitungen hinzuzufügen.

(Bearbeiten) Das Verringern der Taktfrequenz hilft nicht (es sei denn, sie war von Anfang an viel zu hoch). Die Probleme, die Sie haben können, treten an den Taktflanken auf, die Sie sowieso haben werden, egal wie niedrig Sie Ihre Taktfrequenz wählen.

Das größte Problem bei der Verkettung von Schieberegistern besteht darin, sicherzustellen, dass die zeitliche Beziehung zwischen dem Takt, der von jeder Platine zum Empfangen von Daten verwendet wird, und der Änderung der Daten von der vorherigen Platine vorhersagbar ist. Etwas ärgerlich ist in diesem Zusammenhang die Tatsache, dass sich der Ausgang des 74HC595 mit der gleichen Flanke wie der Takt ändert. Ich würde vorschlagen, dass das Taktsignal gepuffert werden sollte, wenn es durch jede Platine geht, und dass das Datensignal, das aus dem 74HC595 einer Platine kommt, durch einen Puffer geleitet werden sollte, der es um eine etwas längere Zeit als der Taktpuffer verzögert.

Alternativ könnten Sie ein Schieberegister wie das 74HC4094 verwenden , dessen Datenausgang sich an der fallenden Taktflanke ändert, oder Sie könnten ein Flipflop zwischen dem Ausgang des letzten 74HC595 auf der Platine und der nächsten Platine hinzufügen und dieses Flipflop haben Verriegeln Sie seinen Ausgang auf der fallenden Flanke des Takts, der die 74HC595 ansteuert (möglicherweise den Takt durch zwei Inverter leiten, um ihn zu puffern und das invertierte Taktsignal an das Flip-Flop zu liefern).

Wenn die Anzahl der 74HC595-Ausgänge, die Sie verwenden, um einen (oder mehr) kleiner ist als die von Ihren Chips gelieferte Anzahl (z. B. auf einer Platine mit zwei 74HC595 benötigen Sie tatsächlich nur 15 Ausgänge), können Sie den letzten 74HC595 auf einer Platine damit versorgen eine von den anderen invertierte Uhr, aber das würde Sie die Verwendung eines 74HC595-Ausgangs für jedes Mal kosten, wenn das Signal zwischen einer nicht invertierten Uhr 74HC595 und einer invertierten Uhr 74HC595 durchläuft.