Wie fährt man einen SPI-Bus über 5 Fuß 26AWG-Draht?

Unten ist die Schaltung, die ich zu erreichen versuche. Der Endpunkt ist ein 5-V-Gerät, aber mein Mikrocontroller (SPI-Master) ist ein 3,3-V-Gerät, also muss ich die Spannungsumsetzung durchführen.

Meine Frage ist, welche Art von Schaltung sollte ich verwenden, um das SPI-Signal so über ein langes Kabel zu treiben? Die Schaltung, die ich jetzt habe (siehe unten), verzerrt das Signal wirklich stark.

Geben Sie hier die Bildbeschreibung ein

Das Signal sieht ziemlich schlecht aus, wenn nur das 5-Fuß-Kabel angeschlossen ist.

Geben Sie hier die Bildbeschreibung ein

Wo wird diese Messung in Ihrer obigen Architektur vorgenommen?
Die Messung erfolgt direkt an der Connector. Ich werde diese Informationen zur Frage hinzufügen.
Was Sie sehen, sind wahrscheinlich Reflexionen; 1 Meter Draht entspricht etwa 5,3 ns Flugzeit und die Signalflanken sind schneller als das; der Unterschied in den Reflexionen bei High und Low würde von den Abschlüssen am fernen Ende abhängen.
Schließen Sie das treibende Ende in Reihe (zwischen Umsetzer und Stecker).
Ist der Übersetzer in Ihrem aktuellen Setup (mit dem Sie den Scope-Trace erstellt haben) vorhanden oder nicht?
Ja ist vorhanden
Haben Sie ein Datenblatt für das Kabel und den "Endpunkt"?
@ user1406716 - Diese Frage scheint mit Ihrer älteren Frage " Reflektion über SPI-Taktsignal, Terminierung oder Stub-Problem? " zusammenzuhängen, die anscheinend nicht gelöst wurde (keine akzeptierte Antwort, kein Update von Ihnen in den letzten 18 Tagen). Wenn diese frühere Frage nicht gelöst wurde (oder sich als Messartefakt erwiesen hat), besteht nicht die Gefahr, dass Ihre SPI-Signale Probleme haben, noch bevor Sie die 5 Fuß Draht hinzufügen?
@SamGibson Du hast Recht. Ich habe alle Optionen ausprobiert. Das Problem, das ich denke, könnte Antriebsstärke sein. Ich habe den MAX14611 entfernt und versucht, diesen Pufferteil ti.com/lit/ds/symlink/sn74ahct125.pdf zu verwenden . Nachdem ich die nicht perfekte Wellenform geändert hatte, wurde sie viel besser: imgur.com/a/3Mybv
@ user1406716 - Danke. Ich kann nicht alle meine Analysen in einen Kommentar packen, aber kurz: Wenn Ihr neuer Imgur-Link das 5-V-Signal am Anschluss ohne angeschlossenes Kabel ist, dann gibt es IMHO immer noch ein Signalintegritätsproblem "auf der Leiterplatte". Wir können das neue Imgur-Bild in dieser Frage nicht direkt mit dem Hauptbild vergleichen (sie scheinen aufgrund unterschiedlicher Spannungen von verschiedenen Stellen in der Schaltung zu stammen, und das neue Imgur-Signal hat die doppelte Frequenz). Das neue imgur-Bild weist jedoch erhebliche Über-/Unterschwingungen und andere Unregelmäßigkeiten auf. Ich würde das "on PCB" -Signal reparieren, bevor ich ein externes Kabel hinzufüge.

Antworten (3)

Wie wäre es damit: Sie treiben einen Strom durch den Draht, der durch die LED eines Optokopplers auf der anderen Seite geht. Sie treiben die LED von der 3V3-Versorgung und den Fototransistor im Operationsverstärker von den 5V an. Dies löst zwei Probleme: Die Umwandlung von 3V3 in 5V und die Empfindlichkeit gegenüber externem Rauschen.

Nicht schlecht, man muss nur einen Hochgeschwindigkeits-Optokoppler verwenden. Die meisten sind für diese Anwendung wahrscheinlich nicht schnell genug.
Ich werde diese Einschränkung der Frage hinzufügen: das letzte Slave-Gerät (ein LED-Streifen wie gezeigt) - ich kaufe es von der Stange und kann an diesem Ende kein Gerät hinzufügen. Gibt es kein Umweg?

Fügen Sie dem Ausgang des Übersetzers einen Serienwiderstand hinzu, um die Flankenrate zu verlangsamen. Dies reduziert die Reflexionseffekte und insbesondere den unangenehmen Störimpuls an der abfallenden Flanke, der droht, fehlerhafte Taktflanken zu erzeugen. Der benötigte Widerstand hängt von vielen Details ab, die Sie nicht mitgeteilt haben, daher müssen Sie möglicherweise experimentieren, um den richtigen Wert zu finden.

Dies kann die Kanten bis zu dem Punkt verlangsamen, an dem Sie Ihre Datenrate reduzieren müssen. So ist es halt. Wenn Sie hohe Datenraten über große Entfernungen wünschen, müssen Sie möglicherweise legitime Übertragungsleitungen anstelle von Ad-hoc-Kabeln verwenden.

Es geht nicht so sehr darum, die Flanken zu verlangsamen, sondern darum, die Leitungsimpedanz anzupassen, um die Reflexion zu beenden. Das Abbremsen der Flanken ist eher ein Nebeneffekt, der bei höheren Frequenzen eigentlich unerwünscht ist.
@Barleyman, Wenn der Frequenzinhalt niedrig gehalten wird, ist es durchaus sinnvoll, ein Kabel als RLC-Element und nicht als Übertragungsleitung zu betrachten. Wir müssen nicht die Übertragungsleitungstheorie herausziehen, um jedes Problem zu lösen. Es ist auch durchaus möglich, dass die Last mehrere Abschlüsse hat (z. B. Multi-Drop-Bus). Selbst wenn die Übertragungsleitungsanalyse und der Source-Serien-Abschluss an der Quelle eine schöne Wellenform ergeben, liefert sie an Zwischenpunkten entlang der Leitung möglicherweise keine sehr guten Ergebnisse.
Ja, darum geht es beim Geschäft mit kritischer Länge in der Übertragungsleitungstheorie ;-) Je nachdem, wen Sie fragen, können Sie die Impedanz ignorieren, wenn Ihre Ausbreitungsverzögerung in einer Richtung <1/4 Signalwellenlänge beträgt. In diesem Fall etwa 30 MHz. Das entspricht 33 ns, also sollte Ihre Anstiegszeit mehr als 16,7 ns betragen oder doppelt so hoch sein wie jetzt. Andererseits würden einige Leute denken, dass Sie 1/8 Wellenlänge oder weniger verwenden sollten.

Das wären etwa 80 ns pro Takt oder 12,5 MHz SPI-Bus? Und Sie treiben es über 1,5 Meter eines vollständig ungeschirmten oder anderweitig symmetrischen Kabels mit 0,4 mm Durchmesser? Sieht so aus, als ob die Anstiegszeit etwa 8 ns oder 125 MHz effektiv beträgt. Autsch.

Theoretisch würde sich das zu einer charakteristischen Impedanz von etwa 200 Ohm summieren, sodass Ihr Übersetzertreiber einen 180R-Vorwiderstand zu den Takt- und SDO-Leitungen (MOSI) haben sollte. Wenn Sie tatsächlich Daten zurücklesen, müssen Sie der SDI-Leitung (MISO) am anderen Ende einen weiteren Widerstand hinzufügen. Wenn der Treiber genügend Strom liefern kann, können Sie den Vorwiderstand überspringen und am anderen Ende einen 200R-Widerstand für den besten Effekt an GND hinzufügen, aber dies erfordert einen 25-mA-Antrieb, was möglicherweise nicht praktikabel ist.

Je nachdem, wie das Kabel zusammengesetzt ist, kann die tatsächliche Impedanz (viel) geringer sein, je nachdem, ob direkt daneben ein Draht liegt (<<5 mm). Experimentieren ergibt einen optimalen Wert, beginnen Sie mit einem 47R-Widerstand in Reihe und arbeiten Sie sich in Schritten von 47R nach oben. Alternativ 22R und 22R, wenn Sie es fein abstimmen möchten, aber es wird wahrscheinlich mit 47R-Schritten "nah genug" sein.

Wie haben Sie den Wellenwiderstand ermittelt, ohne den Abstand zwischen Signal- und Rückleitung zu kennen?
@ThePhoton Unter der Annahme, dass der Rückweg "weit" ist, z. B.> 10x Durchmesser entfernt. Das OP hat uns keine Spezifikationen zum Kabel gegeben, daher ist dies wahrscheinlich falsch, da dies nur für ein einsames Kabel zutreffen würde. Ein wenig Experimentieren wird den optimalen Wert ergeben, der wahrscheinlich im Bereich von 33 bis 100R liegt.