Short Distance Board to Board-Kommunikation

24

Meine MCU betreibt einen SPI-Bus mit ca. 4 Geräten. Ich möchte diesen Bus so erweitern, dass er auch außerhalb des Boards ist, dh einige PCBs werden mit dem "Hauptboard" verbunden und erweitern die Funktionalität. Der Abstand "Pad zu Pad" wäre:

Leiterbahnlänge der Hauptplatine + Kabellänge + Leiterbahnlänge auf der Erweiterungsplatine

3 "+ 6" + 3 "= ungefähr 12"

Nach meiner Erfahrung wurde sogar ein 1-MHz-Signal mit Anstiegszeiten von etwa 7 ns über diese Distanz über ein Flachbandkabel um mehr als 1 V übersteuert (es trat jedoch kein übermäßiges Klingeln auf). Die Platinen werden von derselben Stromversorgung gespeist.

Bildbeschreibung hier eingeben

Hinweis: Sie können die Anstiegszeiten hier nicht sehen, aber Sie können das übermäßige Überschwingen sehen - dies ist ein 3,3-V-Signal. Und ja, dies wurde mit einem sehr kurzen Kabel von der Sonde zur Erde richtig gemessen. Ähnlich wie es auf dieser Seite oft empfohlen wird. Ich denke nicht, dass es ein Messfehler ist.

Ich möchte, dass das System mit 4 MHz arbeitet, aber 2 MHz sind auch akzeptabel. Die max. Die Anzahl der Karten, die ich anschließen möchte, beträgt ungefähr 4, wodurch der SPI-Bus auf ungefähr 12 Geräte erweitert wird. Ich denke nicht, dass es zu schwierig wäre, dies per Code zu handhaben, da ich bereits so etwas habe. Es ist auch kein Problem, die zusätzlichen Slave-Auswahlleitungen zu haben.

Mein Anliegen ist jedoch, wie die SPI-Daten von einer Karte zu einer anderen gesendet werden. Sollte ich nur gerade SPI senden oder es an einem Ende in LVDS konvertieren und es dann am anderen Ende wieder in SPI konvertieren?

Saad
quelle
1
Was ist deine Anstiegszeit?
Kortuk
@Kortuk Vollständig vergessen, das aufzulisten, sorry. Die Frage wurde aktualisiert.
Saad
7ns Anstiegszeit, das schreit schnell.
Kortuk
Entschuldigung für zwei irrelevante Fragen. Was ist das Oszilloskop, das Sie verwendet haben? 2. Warum sind die Ringe so wichtig?
Richieqianle

Antworten:

15

Als Faustregel gilt, dass Sie Übertragungsleitungseffekte berechnen müssen, wenn Ihre Verbindungslänge länger als 1/10 der Wellenlänge des Signals ist.

Bildbeschreibung hier eingeben

Übertragungsleitungen verursachen Reflexionen, wenn sich die Impedanz plötzlich ändert. Das reflektierte Signal fügt sich dem Original hinzu, kann auf der Senderseite wieder reflektiert werden und auf diese Weise hin und her gehen. Das Ergebnis ist in der Grafik dargestellt: das Überschwingen, von dem Sie sprechen, und ein gewisses Klingeln.

ΩΩ Zunächst einmal Widerstand, und sehen Sie, wie weit uns das bringt.

edit (
bezüglich des Frage-Updates) Die Anstiegszeit scheint 7ns zu betragen. Das ist schnell, wie Kortuk sagt, es bedeutet, dass Sie ein Spektrum von mindestens 400 MHz haben, und diese Harmonischen leiden in der Tat unter Übertragungsleitungseffekten, selbst wenn Ihr Takt nur 1 MHz beträgt. Versuchen Sie, sie herauszufiltern. Eine Bandbreite von 20 MHz (80 MHz für den 4-MHz-Takt) bietet Ihnen mehr als genug Anstiegszeit. Dies ist eine 1-MHz-Rechteckwelle, die mit einer LPF- Ziegelwand bei 20 MHz gefiltert wurde :

Bildbeschreibung hier eingeben

Durch Platzieren eines Vorwiderstands wird ein LPF erster Ordnung mit der Kapazität der Leitung gebildet. Wenn wir das auf 50pF schätzen, dann

R=12π100MHz50pF=32Ω

Ω

Stevenvh
quelle
2
Die 1MHz-Frequenz spielt keine Rolle. Es ist die Anstiegszeit, die wichtig ist.
Rocketmagnet
@ stevenvh, Versucht, einen 1K-Widerstand am Ziel zu erden. Es hat bei den Spikes geholfen, aber auch den Signalpegel etwas gesenkt. Ist das normal? Wenn ich den Pegel sage, bei dem sich das Signal beruhigt. Auch versucht, 500 Ohm, 220 Ohm gleichen Effekt, aber deutlicher.
Saad
@ Saad - Wie viel kostet ein bisschen? 3,3V in 1k ist nur 3mA, der Fahrer sollte das perfekt liefern können. Es kann einen Innenwiderstand haben, aber das sind einige zehn Ohm, daher sollte der Pegel nur um 2 oder 3% niedriger sein.
Stevenvh
@stevenvh Ich habe vergessen, dass ich einen Vorwiderstand in der Leitung habe, also werde ich offensichtlich etwas Spannung abfallen lassen. Wie dumm von mir! Allerdings hat auch ein 180 Ohm Widerstand nicht viel gebracht. Es brachte das Überschwingen auf 4,5 V. Ich schätze, ich brauche einen viel geringeren Widerstand, aber dann muss ich mir Sorgen um die Stromaufnahme machen.
Saad
Sollte ich auch eine aktive Kündigung in Betracht ziehen? Die Verwendung eines niedrigen Widerstands erhöht den Strombedarf auf der gesamten Platine und erhöht den Stromverbrauch, da der Bus ständig in Betrieb ist. Würde die Verwendung von Schottky-Dioden als Klemmen gut funktionieren?
Saad
6

Für einen so kurzen Bus würde ich versuchen, einen kleinen Widerstand in Reihe mit irgendetwas zu schalten, das eine Leitung antreibt. Dies ist nicht die theoretisch ideale Methode, um die Übertragungsleitungstheorie zu berücksichtigen, sondern ein pragmatischer Ansatz, von dem ich denke, dass er für Ihren Fall gut genug funktioniert. Probieren Sie zunächst 47 Ω aus und sehen Sie, was das bewirkt. Wenn das aber nicht genug hilft, kannst du höher gehen, aber ich würde 120 Ω nicht überschreiten. Möglicherweise finden Sie irgendwo in diesem Bereich einen Wert, der gut genug funktioniert.

Olin Lathrop
quelle
Ich habe es versucht, Olin. Ich habe einen 100-Ohm-Widerstand verwendet und er hat das Überschwingen um ca. 500 mV verringert und von 4,7 V auf 4,3 V gesenkt. Das ist immer noch eine Spannung über 3,3 V! Die Anstiegszeit betrug dann 12 ns im Vergleich zu der anfänglichen 7.
Saad
Sieht so aus, als hätte ich meinen Widerstand berechnet, als du deine Antwort gepostet hast, Olin. Entschuldigung
Stevenvh
@OlinLathrop Ich habe den Serienwiderstand auf 330 Ohm erhöht und das Überschwingen auf 3,7V gebracht. Ich bin sehr zufrieden damit. Die Anstiegszeit betrug 10 ns. Sollte ich mich einfach daran halten oder bei der nächsten Revision der Platine Abschlusswiderstände einbauen? Ich frage, weil Sie empfohlen haben, 120 Ohm nicht zu überschreiten.
Saad
@ Saad: Ich war besorgt über die Auswirkung anderer Lasten auf die Leitung und darüber, dass sie anfällig für Lärm wird. Wenn die Signale sauber sind und keine DC-Lasten (z. B. nur hochohmige CMOS-Eingänge) in den Leitungen vorhanden sind, verwenden Sie die 300 Ohm.
Olin Lathrop
4

AFAIK das Überschwingen kann durch ordnungsgemäße Beendigung beseitigt werden, wenn Ihr Fahrer die Last fahren kann. Andernfalls reicht sicherlich ein dediziertes Treiber / Empfänger-Paar wie LVDS oder vielleicht sogar RS485 aus.

Wouter van Ooijen
quelle
+1: Wir verwenden häufig LVDS, um SPI-Signale zu übertragen.
Jason S
1

Ich hatte in der Vergangenheit ernsthafte Probleme, SPI über Flachbandkabel zu betreiben, obwohl diese viel länger sind als von Ihnen beschrieben. Die Störfestigkeit wurde zu einem echten Problem, und beschädigte Befehle landeten an meinen Peripheriegeräten. Es genügte, um die CE-Störfestigkeitsprüfung nicht zu bestehen. Wenn diesbezüglich später Probleme auftreten, empfehle ich, auf jeder Karte eine separate MCU zu installieren und diese über CANbus anzuschließen.

Stephen Collings
quelle