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!!!
Vielleicht jeweils ein 26LS31 und 26LS32. Als Kabel könnte man normales
Ethernet Kabel her nehmen.
Es kommt auch auf die verwendete Übertragungsfrequenz an.
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.
> ü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.
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?
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.
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
@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.
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.
@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.
@ 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?
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.
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.
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.