Forum: Mikrocontroller und Digitale Elektronik Treiber für mehr SPI-Reichweite


von Witali (Gast)


Lesenswert?

Hallo zusammen!

Ich habe vor einer Woche angefangen als Elektronik-Entwickler und habe 
noch überhaupt kein Wissen (geschweige denn Erfahrung) zur Anwendung von 
Bustreibern/Leitungstreibern. Ich muss Lösung dazu finden, wie man 
mehrere Slaves über SPI über längere Entfernungen ( bis 10 m ) betreibt.

Nachdem ich mir hier schon einige Threads zu diesem Thema gelesen habe, 
weiß ich, dass SPI eigentlich zur Kommunikation innerhalb einer Platine 
(oder eines Gerätes) gedacht ist, aber dass es mit etwas Wissen und 
zusätzlichem Aufwand (geeignete Kabel, Terminierung, Leitungstreiber) 
möglich ist, höhere SPI-Reichweite zu erreichen.

Ich habe mich noch nie mit Treibern beschäftigt und weiß nicht wie sie 
eingesetzt werden. Ich habe einige Dattenblätter angeschaut und keine 
genauen Beschreibungen dazu gefunden, wie sie eingesetzt werden. Eine 
Beispielschaltung wäre für mich sehr hilfreich. Euch wird meine Frage 
vielleicht wundern, aber ich habe mich eben noch nie damit beschäftigt. 
Vielleicht kennt jemand eine Seite, wo es ausführliche Erklärung dazu 
gibt?

Welche Treiber sind für SPI empfehlenswert? Gibt es vielleicht speziell 
dafür irgendetwas, so wie es für I2C den Bus Extender gibt? Kann man die 
Signale für die Übertragung differentiell machen?

Ist es überhaupt OK,  bei professionellen Anwendungen Kommunikation 
zwischen länger voneinander entfernten Modulen über SPI vorzunehmen oder 
würdet ihr unbedingt so etwas wie RS485 (wie in einem Thread hier 
empfohlen) nehmen.

Ich danke für jeden Hinweis!!!

von Lupin (Gast)


Lesenswert?

Vielleicht jeweils ein 26LS31 und 26LS32. Als Kabel könnte man normales 
Ethernet Kabel her nehmen.

Es kommt auch auf die verwendete Übertragungsfrequenz an.

von gast (Gast)


Lesenswert?

Kannst die SPI Signale auch über RS485 Treiber übertragen.

von Bogumil (Gast)


Lesenswert?

Du kannst vom Prinzip her alles nehmen, das ist ein Vorteil von SPI, 
auch Optokoppler usw. sind dem Bus egal.

Bei I²C brauchst du spezielle Bausteine da 2 Richtungen auf einer 
Leitung.

von Gast (Gast)


Lesenswert?

> über längere Entfernungen ( bis 10 m )
> bei professionellen Anwendungen Kommunikation zwischen länger
> voneinander entfernten Modulen

wäre meiner Meinung nach RS485 oder CAN geeigneter.

von Witali (Gast)


Lesenswert?

Erstmal danke euch allen für die schnellen und nützlichen Antworten!!

@Gast

zu RS485:
RS485 ist interessant, da man sich die Slave-Select leitungen sparen 
kann. Aber soviel ich aus einem früheren Thread zu ähnlichem Thema hier 
(I2C Buslaenge ueber 5m?) mitgekriegt habe muss man sich bei RS485 um 
das Protokoll (Adressierung der Slaves, Richtung der Datenübertragung, 
Vermeiden von Kollisionen) selbst kümmern und es ist bei wenigen (z.B. 
4) Teilnehmern relativ unkompliziert. Wie hoch ist der Aufwand, wenn 
z.B. 10 oder mehr Teilnehmer am Bus hängen?

zu CAN:

ein Kollege von mir hat gemeint, dass die Verwendung von CAN 
lizenzpflichtig ist? Ist es so? Muss eine Firma Lizenzen haben, wenn sie 
in den entwickelten Geräten/Anlagen CAN-Bus einsetzt? Ich habe auch von 
CAN-Open was gehört? Was ist das?

von Witali (Gast)


Lesenswert?

OK, jetzt weiß ich, CANOpen baut auf CAN auf und ist in der 
Automatisierungstechnik verbreitet. Also nicht so eine Art freie Version 
von CAN, was man dem Namen nach vermuten könnte.

Aber ist CAN lizenzpflichtig? Das würde ich gerne wissen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Aber ist CAN lizenzpflichtig?
Wenn du CAN-Bausteine herstellst, oder einen CAN-Core auf einem FPGA 
implementierst, dann zahlst du Lizenzen an Bosch.

von Gast (Gast)


Lesenswert?

Ein wichtiger Unterschied zwischen RS485 und CAN ist, dass CAN 
Multimasterfähig ist und RS485 nicht. Da du nur Slave anhängen willst, 
wäre also RS485 für dich eine Lösung. Max.Anzahl der Teilnehmer bei 
RS485 in der Regel 32.
Hier ist der RS485 Bus gut erklärt:
http://www.wiki.elektronik-projekt.de/mikrocontroller/rs485_bus

von gast (Gast)


Lesenswert?

@Witali

Du hast nicht richtig gelesen. Ich hab dir empfohlen lediglich die 
pysikalische RS485 Übertragungstechnik zu verwenden und darüber dein SPI 
zu übertragen. Den SPI Signalen ist es egal wie sie von a nach b kommen. 
Nachteil ist lediglich, dass du relativ viele Leitungen benötigst.
Du musst natürlich dafür sorgen, dass keine 2 Teilnehmer gleichzeitig 
senden.

Muss es denn SPI sein? Wenn du frei wählen kannst ist CAN natürlich 
generell sehr konfortabel aber kann etwas Kopf zerbrechen bei der 
Inbetriebnahme verursachen.

von (prx) A. K. (prx)


Lesenswert?

Wobei man im Zusammenhang mit den unidirektionalen Punkt zu Punkt 
Signalen von SPI wohl eher von RS422 sprechen kann. Unter RS485 versteht 
man auch auf physikalischer Ebene meist einen Bus, oft sogar 
bidirektional.

von Witali (Gast)


Lesenswert?

@gast

Oh, das war ein Missverständnis! Deine Antwort habe ich schon richtig 
verstanden, dass du RS485 nur als Treiber-Baustein für SPI-Bus empfohlen 
hast. Es gibt in diesem Thread aber noch einen Gast (großgeschrieben, 
dein Nik ist ja kleingeschrieben "gast")! Meine Frage zu RS485 als 
Bussystem war an Gast (großgeschrieben) gerichtet.

von Witali (Gast)


Lesenswert?

@ A. K.

Hm... SPI ist doch genau so ein Bussystem, und keine Punk zu Punkt 
Verbindung. Es gibt doch aus diesem Grund auch die SlaveSelect-Eingänge, 
um zu wählen welcher der vielen Bus-Teilnehmer angesprochen wird. Oder 
verstehe ich etwas falsch?

von Lupin (Gast)


Lesenswert?

Er wird aber mindestens zwei RS322-Bus treiber benötigen. Denn minimal 
hat er drei Leitungen (SDA, SDI, CLK), eher vier (+CS).

Da immer ein Sender und ein Empfänger in solch einen Treiber IC drin 
ist, braucht er auf der Master Seite drei solcher ICs um seine drei 
Sender zu bilden (SDA, CLK und CS) und einen Empfänger-Teil von diesen 
drei ICs um SDI zu verarbeiten.

Auf der Slave Seite das gleiche umgekehrt.

Also pro Baugruppe drei Bus-Treiber.

Mit den LS31 und 32 benötigte man pro Baugruppe zwei ICs.

von (prx) A. K. (prx)


Lesenswert?

Witali schrieb:

> Hm... SPI ist doch genau so ein Bussystem, und keine Punk zu Punkt
> Verbindung. Es gibt doch aus diesem Grund auch die SlaveSelect-Eingänge,
> um zu wählen welcher der vielen Bus-Teilnehmer angesprochen wird. Oder
> verstehe ich etwas falsch?

SPI kann beides sein. Punkt zu Punkt und Stern (logisch gesehen). Aber 
du hast Recht, ich hatte das "mehrere Slaves" überlesen. Für logische 
Sterne grösserer Distanz ist SPI aber nicht ideal, schon der Anzahl 
Leitungen wegen.

von Bogumil (Gast)


Lesenswert?

SPI kann man auch ohne weiteres Multislavefähig machen indem man ein 
mehrfaches der Registerbitbreite bis zum letzten Slave durchschiebt. 
Einfacher geht es wohl nur noch mit Onewire.

Vor- und Nachteile sind Applikationsabhängig.

von Bogumil (Gast)


Lesenswert?

Lupin,

für Slaves braucht du nur 2. Daten raus und Takt. Die Adressierung 
kannst du auf der Masterseite mittels Treiber Enable machen.

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.