Forum: Mikrocontroller und Digitale Elektronik SPI-Signal verstärken, wie?


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Manuel N. (manuelambaum)


Angehängte Dateien:

Lesenswert?

Hallo, ich habe ein SPI-Signal, welches ich auf 1meter Distanz 
übertragen möchte. Das Signal hat eine Frequenz von 20MHz und kommt 
leider nicht so an, wie ich es möchte. Es ist völlig krumm und der 
Logikpegel ist nicht 3.3V, wie er sein sollte. Gibt es eine möglichkeit, 
das signal auf ein sauberes 20MHz zu verstärken/filtern?
Danke für zahlreiche vorschläge

von Stefan F. (Gast)


Lesenswert?

Versuche mal mit verdrillten Leitungen und einem "High-Speed 
Differential Line Driver". Also im Prinzip wie bei USB.

Zum Beispiel 
https://www.ti.com/lit/ds/symlink/sn65lvds1.pdf?ts=1652449890949&ref_url=https%253A%252F%252Fwww.google.com%252F

von MaWin (Gast)


Lesenswert?

Nimm einen Verstärker.

von Forist (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Zum Beispiel
> 
https://www.ti.com/lit/ds/symlink/sn65lvds1.pdf?ts=1652449890949&ref_url=https%253A%252F%252Fwww.google.com%252F

Ob du das Datenblatt von den High-Speed Differential Treibern und 
Empfängern (SN65LVDS1, SN65LVDS2, SN65LVDT2) über Google oder sonst wie 
gefunden hast, interessiert doch eigentlich niemanden.

Der Link auf die PDF-Datei würde völlig reichen ;-)
https://www.ti.com/lit/ds/symlink/sn65lvds1.pdf

von HildeK (Gast)


Lesenswert?

Z-Leitung, Serienterminierung, ordentliches Kabel mit guter Masse.
Man muss es nicht unbedingt verstärken, wenn man die richtigen 
Komponenten und die richtige Beschaltung gewählt hat, dann ist ein Meter 
noch nicht unüberwindbar, auch mit einer Single-Ended-Leitung.

Wie wäre es, wenn du die beteiligten Komponenten, deinen Aufbau und die 
Schaltung mal näher erläutern würdest, einschließlich einem Foto?

von Peter D. (peda)


Lesenswert?

Manuel N. schrieb:
> Das Signal hat eine Frequenz von 20MHz

Wird nicht klappen, warum so hoch?
Das Problem ist weniger die Frequenz, sondern die Durchlaufzeit.
Der Master liefert SCK und will vor der nächsten Flanke rechtzeitig das 
MISO geliefert bekommen.

von Gustl B. (-gb-)


Lesenswert?

Manuel N. schrieb:
> Es ist völlig krumm und der
> Logikpegel ist nicht 3.3V, wie er sein sollte.

Das sieht sehr nach Messfehler aus. Ist die Oszilloskop Masse 
angeschlossen? Wo misst du genau? Was ist das für ein Tastkopf? Wenn 
dein Tastkopf umstellbar ist, dann auf 10:1 einstellen.

20 MHz sollten über 1 m noch gut funktionieren, wichtig ist aber auch 
die Masseanbindung. Also die Masse muss eben mit verbunden sein und zwar 
in der Nähe der Signalleitung. Ich habe 20 MHz CMOS schon über 1 m über 
Flachbandkabel gemacht, also wie ein IDE Kabel und da jede zweite Ader 
auf Masse gelegt. Hat prima funktioniert. Am Empfänger muss aber 
vielleicht passend terminiert werden, ich hatte AC terminiert.

HildeK schrieb:
> Wie wäre es, wenn du die beteiligten Komponenten, deinen Aufbau und die
> Schaltung mal näher erläutern würdest, einschließlich einem Foto?

Ja das wäre sinnvoll, denn dann sieht man vermutlich auch wieso das so 
komisch auf dem Oszilloskop aussieht.

von PittyJ (Gast)


Lesenswert?

Ab eine gewissen Länge und Frequenz setzen wir differential Signale ein. 
Das läuft dann stabiler.
Aktuell schon bei 16Mhz und 50cm Flachbandverbindung. Auf der gleichen 
Platine machen wir das nicht, aber sobald irgendein Kabel dazwischen 
ist, bringt es Vorteile.

von P. S. (namnyef)


Lesenswert?

Mögliche Ansätze:
- Differenzielle Übertragung (z. B. LVDS).
- (Halbwegs) definierte Leitungsimpedanz. Wenn wir von normaler 
CMOS-Logik ausgehen wird man Flankensteilheiten von ~1ns haben. Und da 
reicht es bei 1m Leitungslänge oft nicht mehr einfach irgendwie eine 
elektrische Verbindung herzustellen. Als ersten Versuch könnte man am 
Ende der Leitung mal eine RC-Terminierung vorsehen. Vielleicht reicht 
das schon. Eine andere Möglichkeit wäre es die Flankensteilheit mit 
einem Serienwiderstand am Anfang der Leitung zu begrenzen. Wobei man da 
bei 20 MHz vielleicht nicht mehr allzu viel Spielraum hat. Aber 
vielleicht reicht es auch hier schon die Flanken von ~1ns auf ~5ns zu 
verlängern.

von Stefan F. (Gast)


Lesenswert?

Bei der Leitungslänge sind Reflexionen dominieren, nicht die 
Flankensteilheit.

von P. S. (namnyef)


Lesenswert?

Naja, woher kommen wohl die Reflexionen? Weil für die gegebene 
Leitungslänge bzw. für die vorhandenen Unregelmäßigkeiten im 
Wellenwiderstand der Leitung die Frequenzen zu groß sind, um 
Leitungseffekte vernachlässigen zu können. Und die hohen Frequenzen 
stecken bei digitalen Signalen nun mal in den Flanken.

von Gustl B. (-gb-)


Lesenswert?

P. S. schrieb:
> Unregelmäßigkeiten im Wellenwiderstand

Die größte Unregelmäßigkeit ist oft das andere Ende der Leitung wenn die 
nicht passend terminiert ist. Aber ja, da könnten noch mehr Probleme 
drinnen sein. Bis jetzt wissen wir nicht viel, es ist sogar noch 
möglich, dass das SPI gut aussieht (nur falsch gemessen wurde), aber ein 
Softwareproblem vorhanden ist.

von P. S. (namnyef)


Lesenswert?

Gustl B. schrieb:
> Die größte Unregelmäßigkeit ist oft das andere Ende der Leitung wenn die
> nicht passend terminiert ist.

Deswegen ja auch mein Vorschlag (u. a.) einfach mal einen RC-Abschluss 
am Leitungsende zu versuchen. Eine undefinierte Leitung wird man so zwar 
nicht perfekt abschließen können, aber vielleicht ist es gut genug.

von Thomas Z. (usbman)


Lesenswert?

ich tippe auch auf einen Messfehler (Tastkopf). Darauf deuten der DC 
Offset und Pegel hin. Da sind einfach (für 20MHz) zu große Kapazitäten 
im Spiel.

Ist das gezeigte Signal der SPI Clock?
Wie sieht das Signal direkt am Clock Ausgang aus?
Wie ist die Masseführung?

Bedenke dass die Ausgänge nur begrenzt kap. Lasten treiben können.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Also die einen sagen so:
Gustl B. schrieb:
> 20 MHz sollten über 1 m noch gut funktionieren, wichtig ist aber auch
> die Masseanbindung.

Die anderen so:
Peter D. schrieb:
> Das Problem ist weniger die Frequenz, sondern die Durchlaufzeit.
> Der Master liefert SCK und will vor der nächsten Flanke rechtzeitig das
> MISO geliefert bekommen.

Bei 20MHz hab' ich also eine Periodendauer von 1/20MHz = 50nsec.
Eine halbe Periode (also von fallender zu steigender Flanke ist also 
hoechstens die Haelfte davon, also 25nsec. Wenns keine exakten 50% 
dutycycle im Clk sind, dann noch weniger.
Und so'n Stueck Kabel mit Plastikisolierung aussenrum hat so ca. 2e8 m/s 
Ausbreitungsgeschwindigkeit, also ungefaher 2/3 von Strippe im Vakuum. 
Auf/in 'ner Platine geht's eher noch gemaechlicher, eher nichtmal 1.5e8 
m/s.
2e8 m/sec x 25e-9 sec = 5m
Also max. 5m hin und zurueck - sprich Laenge der Verbindung darf 
abs.max. 2.5m sein. Und jede Nanosekunde, die irgendwo verschuett' geht, 
sei es durch Setup&Holdzeiten, Flankensteilheit oder gar 
Treiber/Receiverbausteine, etc. nagt heftig an diesen 2.5m.

Also ich hab' da meine Zweifel, ob das Ausgangsszenario so ueberhaupt 
zuverlaessig funktionieren kann (mal ganz abgesehen von Masse, symm. 
Signalen, etc. bla.), ohne dass man irgendwo mit 
Ueberlichtgeschwindigkeit operieren muesste...

Gruss
WK

von Gustl B. (-gb-)


Lesenswert?

Ja, ist richtig. Wenn es bidirektional funktionieren muss, dann muss man 
die Latenz mit einplanen. Es gibt aber genug "SPI" Bausteine die nur 
unidirektional Daten liefern oder entgegennehmen wie ADCs und DACs.
Wie so oft wissen wir hier noch zu wenig.

von m.n. (Gast)


Lesenswert?

Manuel N. schrieb:
> Hallo, ich habe ein SPI-Signal, welches ich auf 1meter Distanz
> übertragen möchte.

Anstatt der Luftverbindung würde ich ein Kabel nehmen.
Oder muß es unbedingt drahtlos sein?

von Stefan F. (Gast)


Lesenswert?

m.n. schrieb:
> Anstatt der Luftverbindung würde ich ein Kabel nehmen.
> Oder muß es unbedingt drahtlos sein?

Sage mal, welchen Knall hast du nicht gehört?

von M.A. S. (mse2)


Lesenswert?

Gustl B. schrieb:
> Das sieht sehr nach Messfehler aus. Ist die Oszilloskop Masse
> angeschlossen? Wo misst du genau? Was ist das für ein Tastkopf? Wenn
> dein Tastkopf umstellbar ist, dann auf 10:1 einstellen.
Einmal das und ausserdem: Wie groß ist eigentlich die Bandbreite des 
Oszilloskops?

von Michael M. (Firma: Autotronic) (michael_metzer)


Lesenswert?

Stefan ⛄ F. schrieb:
> m.n. schrieb:
>
>> Anstatt der Luftverbindung würde ich ein Kabel nehmen.
>> Oder muß es unbedingt drahtlos sein?
>
> Sage mal, welchen Knall hast du nicht gehört?

Ich habe aber auch erst geglaubt, dass die Übertragung drahtlos sein 
muss, ich habe mich nur nicht getraut nachzufragen. Ansonsten einfach 
ein Standardkoaxialkabel einsetzen, fertig.

von M.A. S. (mse2)


Lesenswert?

Michael M. schrieb:
> Ansonsten einfach
> ein Standardkoaxialkabel einsetzen, fertig.

Tolle Idee. Das sind dann mindestens drei "Standardkoaxialkabel": MISO, 
MOSI, SCLK und ein viertes, wenn auch noch das Select-Signal gebraucht 
wird.

von Stefan F. (Gast)


Lesenswert?

M.A. S. schrieb:
> Tolle Idee.

Ohne vernünftige Treiber und Terminierung bringen Koaxiale Kabel den TO 
kein Stück weiter.

von HildeK (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ohne vernünftige Treiber und Terminierung bringen Koaxiale Kabel den TO
> kein Stück weiter.

Glaub ich nicht, das geht mit jedem normalen CMOS-Ausgang mit 
Serienterminierung; sowohl auf Koaxkabel als auch auf einem Bandkabel.
Ich würde ein Bandkabel mit 6 Adern vorsehen, wobei jeder zweite GND ist 
+ ggf. noch welche für die Spannungsversorgung.

von Manuel N. (manuelambaum)


Angehängte Dateien:

Lesenswert?

Hallo,
Da ich mein Problem sehr knapp erläutert habe, hier nochmals ein wenig 
ausführlicher.

Ich habe einen Raspberry Pi 3b+, an welchem ein Touchscreen namens 
Hyperpixel 4.0 vom Hersteller "Pimoroni" angeschlossen ist. Das 
Touchscreen bekommt die Farbinformationen mittels RGB666, sprich 6 
Kanäle rot, 6 grün und 6 blau. Damit diese Informationen bezüglich 
Farben und auch diejenigen der "Touch-Funktion" übertragen werden, habe 
ich noch einige andere Signale, welche wie schon gesagt auf bis zu 20MHz 
takten.

Da mir aktuell kein Oszilloskop mehr zur Verfügung steht, kann ich die 
Leitungen erst in einigen Tagen gemäss euren Vorschlägen austesten. Die 
"schnellen" Datenleitungen, von welchen ich aktuell kenntnis habe, sind 
wie folgt:

VSYNC auf GPIO2: Synchronisierung des Bildes auf Vertikaler Ebene 
(taktrate noch unbekannt)
HSYNC auf GPIO3: Synchronisierung des Bildes auf Horizontaler Ebene 
(taktrate noch unbekannt)
Pixelclock auf GPIO0: Taktrate für die Pixel (Anzahl Pixel * 
Bilder/Sekunde --> ca. 20MHz)
I2C-SDA auf GPIO10: I2C Signal für die Verarbeitung vom Touch, 
wahrscheinlich 100kHz
I2C-SCL auf GPIO23: I2C Signal für die Verarbeitung vom Touch, 
wahrscheinlich 100kHz
GPIO19 Backlight Control: PWM Signal für die 
Displayhintergrundbeleuchtung
GPIO18 LCD Chip select: Gemäss antworten aus anderen Foren ein 
SPI-Signal, welches als Datenbus zur anzeige des Bildes fungiert.

Wie gesagt möchte ich das Touchscreen über 1 Meter über ein 40poliges 
GPIO Kabel übertragen, es ist ungeschirmt und bietet daher aus meiner 
Sicht nicht perfekte voraussetzungen für die verwendung, jedoch sehe ich 
aktuell keine aktuelle Möglichkeit, sofern ich das aktuelle Touchscreen 
weiterhin verwenden möchte.

Beim testen über kürzere Distanzen von ca. 40cm hat noch alles bestens 
funktioniert. Die effekte bei längeren Leitungen waren wie folgt:
Standbild, flackerndes Standbild, gar kein Bild, andere Farbtöne der 
einzelnen Pixel

Die i2c signale haben auf allen getesteten Distanzen nahezu perfekte 
rechtecksignale geliefert, dort habe ich jedoch auch schon sehr stark 
mit Signalfilterung nachgeholfen.

Ich habe einige Bilder der Bauteile und verschaltungen angefügt.
Danke für die Tipps von euch, die kamen und noch kommen werden :)

von Dieter R. (drei)


Lesenswert?

Manuel N. schrieb:


> Da ich mein Problem sehr knapp erläutert habe, hier nochmals ein wenig
> ausführlicher.

Du hast es nicht knapp erläutert, sondern völlig falsch.

> Ich habe einen Raspberry Pi 3b+, an welchem ein Touchscreen namens
> Hyperpixel 4.0 vom Hersteller "Pimoroni" angeschlossen ist.

https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#parallel-display-interface-dpi

Das ist die Dokumentation für den DPI-Mode beim Raspberry Pi.

Da wird nicht EIN SPI-Signal benutzt, sondern ACHTUNDZWANZIG Port-Pins. 
Steht ja auch so in der Dokumentation des LCD-Panels.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Für so etwas gibt es spezielle Lösungen.

Lies das hier:
https://www.ti.com/lit/an/slyt581/slyt581.pdf

fchk

von Purzel H. (hacky)


Lesenswert?

SPI ist eigentlich fuer kurze Verbindungen gedacht, auf einer 
Leiterplatte. Alles andere ist Murks. Duerfen wir den Sinn des Vorhabens 
erfahren ?

von Peter D. (peda)


Lesenswert?

Ich hatte auch mal SPI mit 5MHz über 4-paariges Kabel und 
RS-485-Treibern gesehen. Der Trick war, zum Slave ging SCK+MOSI und vom 
Slave kam SCK+MISO zurück. Die Laufzeiten waren also immer in der 
gleichen Richtung und störten daher nicht. Der Master hatte zum Empfang 
ein extra Schieberegister und las es parallel ein, MISO geht ja nicht 
wegen dem verzögerten SCK.

von Manuel N. (manuelambaum)


Lesenswert?

Frank K. schrieb:
> Für so etwas gibt es spezielle Lösungen.
>
> Lies das hier:
> https://www.ti.com/lit/an/slyt581/slyt581.pdf
>
> fchk


Danke für deinen Vorschlag, hatte auch schon an sowas gedacht ;)
Kenne mich leider nicht so gut aus.
Der Sinn dieses Bauteils ist ja, dass RGB888 mittels einer Datenleitung 
übermittelt wird. Ich habe jedoch noch andere Signale, wie z.B. Daten 
des Touchscreens, etc. könnte ich evt. die anschlüsse, welche für I2S 
gedacht sind, dafür verwenden? Auf was muss ich achten? "serialisiert" 
und "deseralisiert" dieses Bauteil denn einfach? egal was dranhängt?

von Falk B. (falk)


Lesenswert?

Dieter R. schrieb:

> Da wird nicht EIN SPI-Signal benutzt, sondern ACHTUNDZWANZIG Port-Pins.
> Steht ja auch so in der Dokumentation des LCD-Panels.

Ich vermute mal, daß der OP eben NICHT die normale, parallele TFT 
Ansteuerung des Raspberryx PI nutzt sondern wirklich ein TFT mit SPI 
Anschluß.

Das KANN man über ein normales, 40-poliges Flachbandkabel über 1m 
führen, aber NICHT mit der normalen Pinbelegung am Raspberry PI! Dort 
sind die Signale beliebig angeorndet und Masse ist rar!

Wenn, dann muss man einen Adapter bauen, welcher die Signale auf eine 
HF-taugliche Pinbelegung umsetzt. Siehe Wellenwiderstand. Im 
Idealfall ist jede 2. Leitung Masse. Wenn es aber nur um die vier 
SPI-Signale geht, kann man auch mit einem Ethernetkabel arbeiten. Dort 
sind 4 Doppeladern mit definertem Wellenwiderstadn drin. 
Serienterminierung, fertig. Die ~5ns Laufzeit für 1m fallen bei 50ns 
Periodendauer nur wenig ins Gewicht. OK, MISO könnte da Probleme 
kriegen, muss man mal messen. Aber richtig.

https://www.mikrocontroller.net/articles/Oszilloskop#Tastk%C3%B6pfe_richtig_benutzen

von Prometheus (Gast)


Lesenswert?

Hallo,

"normales" Flachbandkabel, also 1,27mm Raster in Grau für 2,54 
Schneidklemmen hat ca. 120 Ohm Wellenwiderstand.
Eine leicht unpassende Terminierung z.B. 110 Ohm erzeugt aber auch nur 
wenig Reflexionen, geschätzt vielleicht 10%. Das könnte schon gehen. 
Dann muss allerdings die Belegung und die Terminierung halbwegs passen.

von Frank K. (fchk)


Lesenswert?

Manuel N. schrieb:

> Der Sinn dieses Bauteils ist ja, dass RGB888 mittels einer Datenleitung
> übermittelt wird. Ich habe jedoch noch andere Signale, wie z.B. Daten
> des Touchscreens, etc. könnte ich evt. die anschlüsse, welche für I2S
> gedacht sind, dafür verwenden? Auf was muss ich achten? "serialisiert"
> und "deseralisiert" dieses Bauteil denn einfach? egal was dranhängt?

Beim Touchscreen nimmst Du am Besten einen Touchscreen-Controller mit 
I2C-Interface. Ich meine gesehen zu haben, dass das Display einen 
solchen eingebaut hat, aber wenn nicht, dann musst Du eben extra einen 
daneben setzen. Z.B. sowas für einen resistiven Touchscreen:

https://www.ti.com/lit/ds/symlink/tsc2007.pdf

Die Richtung der Signale (Input oder Output) ist festgelegt, und es sind 
alles natürlich nur digitale Signale. Die Chips werten diese Signale 
aber nicht aus, sondern übertragen einfach, was außen anliegt. Ansonsten 
lies und verstehe die Datenblätter.

fchk

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.