Forum: Mikrocontroller und Digitale Elektronik SPI mit RS485


von Gad Z. (gad)


Lesenswert?

Hallo,
ich habe schon viel gelesen über das Thema "SPI und lange Kabel".
Wenn man die äußeren Störeinflüsse von der Umgebung nicht genau kennt, 
scheinen RS485 Treiber die einzig sichere Variante zu sein.

Ich habe nun folgende Ausgangsituation.
Ein Atmega fragt verschiedene Sensoren über SPI ab.
Dabei sind die Sensoren in Sternform (parallel) angeschlossen.
Das ist auf einer Platine ohne Treiber auch kein Problem.
Da meine Sensoren jetzt aber außerhalb der Steuerung sind und über ca. 
2-3 Meter lange Kabel angeschlossen werden, muß ich mich mit Maßnahmen 
zur Signalfilterung bzw. Glättung auseinander setzen.

Bei RS485 funktioniert aber die Parallel-Schaltung von Teilnehmern im 
Bus nicht, da der letzte Teilnehmer die Abschlußwiderstände hat.

Meine Idee war also folgende.
Ein RS485 Treiber in der Steuerung und an jedem Ende der Kabel dann 
nochmal ein RS485.
Da ich aber immer nur Daten lese, würden alle Sensoren mittels des RS485 
Treibers die MISO Leitung beinflussen.

Einzige Alternative die mir einfällt ist, jeweils einen RS485 in der 
Steuerung und am Sensor.
Damit kann ich dann die RS485 in der Steuerung abschalten. die gerade 
nicht abgefragt werden.

Das ganze ist technisch zwar kein Problem, ergibt aber viele RS485 
Treiber.

Hat jemand eine andere Idee?
Habe hier schon viele gute Anmerkungen gelesen und hoffe, das sich 
jemand meines Problems annimmt ... :-)

von Oliver J. (skriptkiddy)


Lesenswert?

Schau doch mal hier. Vielleicht ist da was dabei:
Beitrag "Re: Leitungslänge mit SPI Bus"

Gruß Oliver

von Falk B. (falk)


Lesenswert?

@  Gad Zinkler (gad)

>Da meine Sensoren jetzt aber außerhalb der Steuerung sind und über ca.
>2-3 Meter lange Kabel angeschlossen werden,

Dafür ist SPI eher ungünstig.

>Bei RS485 funktioniert aber die Parallel-Schaltung von Teilnehmern im
>Bus nicht, da der letzte Teilnehmer die Abschlußwiderstände hat.

Doch, auf dem Bus sind alle parallel geschaltet, nur halt nicht 
sternförmig sondern linienförmig.

>Ein RS485 Treiber in der Steuerung und an jedem Ende der Kabel dann
>nochmal ein RS485.

Genau.

>Da ich aber immer nur Daten lese, würden alle Sensoren mittels des RS485
>Treibers die MISO Leitung beinflussen.

Dafür gibt es Chip Selects und Tristate. SPI halt.

>Damit kann ich dann die RS485 in der Steuerung abschalten. die gerade
>nicht abgefragt werden.

Eben.

>Das ganze ist technisch zwar kein Problem, ergibt aber viele RS485
>Treiber.

>Hat jemand eine andere Idee?

Man kann es auch mit reinen CMOS Pegeln versuchen, wenn die 
Stromaufnahme der einzenen Sensoren nicht zu hoch und die Kabel, 
spezielle für die Masse nicht zu dünn sind. Dann gibt es kaum 
Potentialverschiebungen. Sagen wir, bei vollem Stromverbrauch darf auf 
der Masseleitung maximal 500mV abfallen, wenn man mit 5V Logik arbeitet, 
bei 3,3V eher die Häfte.
Das Thema Wellenwiderstand bleibt natürlich und muss berücksichtigt 
werden.

von Gad Z. (gad)


Lesenswert?

Danke Oliver für die Info.
Allerdings habe ich diesen beitrag und noch viele andere gelesen.
Ich schreibe ja nicht hier drin weil ich zu faul bin zum suchen, sondern 
weil ich bisher keine Lösung für mich gefunden habe.

Die meisten Beiträge hilfen mir auch nicht weil immer zu viele 
"vielleicht" in den beiträgen sind.
Ich muß jetzt die Schaltung entwerfen und die Platinen fertigen lassen 
und danach muß es funktionieren.
Also bevor ich irgendwelche Risiken bei der Datenübertragung eingehe, 
mache ich es lieber etwas oversized mit RS485 :-)

Aber für konkrete andere Vorschläge bin ich natürlich dankbar.
Wenn es eine "sichere" variante der Datenübertragung ohne RS485 gibt, 
dann umso besser.
Habe ohnehin Platzprobleme auf den Platinen :-(

von Falk B. (falk)


Lesenswert?

@  Gad Zinkler (gad)

>Ich muß jetzt die Schaltung entwerfen und die Platinen fertigen lassen
>und danach muß es funktionieren.

So läuft Elektronikentwicklung nicht. Schon gar nicht, wenn man auf dem 
speziellen gebiet wenig Erfahrung hat.

>Also bevor ich irgendwelche Risiken bei der Datenübertragung eingehe,

Explodiert dann ein Kernkraftwerk?

>mache ich es lieber etwas oversized mit RS485 :-)

Andere Leute würde nicht so rumjammern und einfach mal einen Testaufbau 
mit Lochraster machen. Die Kabel sind die gleichen.

von Gad Z. (gad)


Lesenswert?

Danke Falk...
SPI kann ich mir nicht aussuchen auch wenn es ungünstig ist.
Die sensoren arbeiten nur mit SPI bzw. SSI!

>Doch, auf dem Bus sind alle parallel geschaltet, nur halt nicht
>sternförmig sondern linienförmig.

Ja ich weiß, habe es wohl auf die Schnelle etwas ungenau geschrieben.
Aber genau die sternförmige Anordung ist ja das mein Problem.

Das Thema Terminierung und Wellenwiderstände habe ich mir gestern nacht 
schon intensiv durchgelesen.
Leider sind meine elektronischen kenntnisse nicht so gut wie die vieler 
anderer hier.
Daher tue ich mich schwer mit Berechnungen...

Wie auch immer, PS485 mit Tri-State Treiber scheint mir am sichersten.
Kann ich mir die differenzielle Übertragung beim CS Signal sparen?
das Signal hat ja keine Frequenz.

von Falk B. (falk)


Lesenswert?

@  Gad Zinkler (gad)

>Aber genau die sternförmige Anordung ist ja das mein Problem.

Auch das ist ein lösbares Problem. Nimm einen kleinen 1:N Treiber für 
deinen SPI-Takt, 74HC04 reicht. Dann hat jeder Sensor seinen eigenen 
Takttreiber mit Serienterminierung. Fertig. Chip Select ist sowieso 
schon jeweils eine Punkt zu Punkt Verbindung, auch hier 
Serienterminierung. MISO und MOSI sind Bussignal, aber wenn man nicht zu 
hoch taktet, kann man hier einfach an deinem Master alles sternförmig 
verbinden, die nicht ganz perfekten Flanken spielen hier keine große 
Rolle.

>Wie auch immer, PS485 mit Tri-State Treiber scheint mir am sichersten.

Ist aber eher unnötig.

von Gad Z. (gad)


Lesenswert?

Danke für den Tip mit dem 74HC04.
Die MOSI Leitung benutze ich garnicht, da die Sensoren nur gelesen 
werden.
Für die MISO Signale bräuchte ich aber noch eine Lösung.
Da ginge es vielleicht mit einem 74HC mit Tri-State Ausgang?

von temp (Gast)


Lesenswert?

Ich denke mal die Geschwindigkeit kann man so niedrig machen wie nötig 
ist damit es funktioniert. Da reichen dann auch ein paar Dioden und ein 
gemeinsamer Widerstand gegen Plus für MISO. Opendrain  und ein 
gemeinsamer Widerstand gehen bei OneWire auch recht zuverlässig über ein 
paar Meter Kabel.

von Gad Z. (gad)


Lesenswert?

Leider ist eine niedrige Geschwindigkeit keine Option.
Die 3 Sensoren liefern alle 100µs einen Wert.
Demnach muß/will ich innerhalb von 100µs 3 Sensoren mit jeweils 16 Bit 
abfragen.
Das ergibt ca 500kHz Clock ... :-(

(100µs = 10000Hz)  16 Bit  3 Sensoren = 480000 Hz = 480kHz

von Falk B. (falk)


Lesenswert?

@  Gad Zinkler (gad)

>Für die MISO Signale bräuchte ich aber noch eine Lösung.
>Da ginge es vielleicht mit einem 74HC mit Tri-State Ausgang?

Deine Sensoren haben doch normalerweise schon einen Tristate-Ausgang. 
Wenn nicht, nimm einen 74HC125.

1 MHz SPI-Takt ist nicht allzuschnell, selbst 10 MHz sind noch eher 
gemächlich. Entscheidend ist die verdrillte Masse zu den 
Signalleitungen, siehe Wellenwiderstand.

von ah. (Gast)


Lesenswert?

Ich wuerd je einen kleinen Controller zum SPI Sensor hin machen, der 
dann die Messung selbststaendig durchfuehrt.

von Kai S. (kai1986)


Lesenswert?

Hallo,

wenn du zur Übertragung RS485 einsetzen willst, was spricht dagegen den 
Anschluss der Sensoren von sternförmig auf linear zu ändern? Drei 
Sensoren und 2-3 m Leitung klingen jetzt nicht nach unmachbar.

Gruß Kai

von Gad Z. (gad)


Lesenswert?

@ Falk
Ja die Sensoren haben Tri-State Ausgänge aber es ging ja darum, eine 
Treiber einzusetzen wegen der leitungslänge und eventuellen 
Störeinflüssen von außen.
Aber danke für den Tip. Werde mir den HC125 mal anschauen..

@Gast
Kein Platz für einen Controller da die Sensoren in extrem engen Raum 
verbaut sind.

@Kai
Ich muß es sternförig machen weil die Steuerung zentral verbaut ist und 
die Sensoren an verschiedenen Stellen sitzen und jeweils ca. 2 meter 
kabel zur Steuerung haben.
Außerdem habe ich keinen Platz bei den Sensoren für eine weiterführung 
des kabels zum nächsten Sensor.

von Kai S. (kai1986)


Lesenswert?

Gad Zinkler schrieb:
> Ich muß es sternförig machen weil die Steuerung zentral verbaut ist und
> die Sensoren an verschiedenen Stellen sitzen und jeweils ca. 2 meter
> kabel zur Steuerung haben.
> Außerdem habe ich keinen Platz bei den Sensoren für eine weiterführung
> des kabels zum nächsten Sensor.

Eine weitere Option wäre, die Kabelführung in Stern zu belassen, die 
Busführung aber trotzdem linear zu machen, indem ein Kabel die hin und 
Rückführung enthält und an den jeweiligen Enden weitergebrückt wird.

Ich persönlich würde aber einfach bei SPI bleiben und hochwertige Kabel 
verwenden. Ich kann mir nicht wirklich vorstellen, das z.B. ein CAT 7 
Netzwerkkabel für 600 MHz mit einem 500kHz Signal irgendwelche Probleme 
macht. Da liegen immerhin 3 Größenordnungen zwischen der Auslegung des 
Kabels und der tatsächlichen Nutzfrequenz.

Gruß Kai

von Falk B. (falk)


Lesenswert?

@  Kai S. (kai1986)

>Ich persönlich würde aber einfach bei SPI bleiben

Ich auch.

>und hochwertige Kabel

Jain.

>verwenden. Ich kann mir nicht wirklich vorstellen, das z.B. ein CAT 7
>Netzwerkkabel für 600 MHz mit einem 500kHz Signal irgendwelche Probleme
>macht.

;-)

Nur weil man einen Ferrari kauft, gewinnt man noch lange kein Rennen. 
Die richtige Schaltung ist der Knackpunkt.

> Da liegen immerhin 3 Größenordnungen zwischen der Auslegung des
> Kabels und der tatsächlichen Nutzfrequenz.

Die Anstigeszeiten sind deutlich hochfrequenter als 500kHz, da geht es 
in den Bereich 10ns, das sind 35MHz und mehr. Siehe 
Wellenwiderstand.

MFG
Falk

von Gad Z. (gad)


Lesenswert?

Die lineare Sternanordnung von Kai ist aus Platzgründen nicht möglich 
und außerdem verdoppelt sie die Leitungslänge und Adernanzahl.

Das was Falk gesagt hat, habe ich vorher auch schon gelesen.
Nämlich das die Clock Frequenz garnicht so entscheident ist sondern die 
Empfindlichkeit der Eingänge.

Da heutzutage die Eingänge für hohe Frenquenzen ausgelegt sind und 
dementsprechend schnelle Anstiegszeiten haben müssen, erfassen sie auch 
bei niedriger Übertragungsfrequenz die störenden Wellen.

Zumindest habe ich es so verstanden, Falk korregiere mich wenn ich 
falsch liege.

Genau aus diesem Grund und weil ich keine optimalen kabel nehmen kann, 
habe ich mich für RS485 entschieden.
Außerdem gibt es jede menge Indutriesensoren, die mehr und mehr SSI mit 
RS485 haben.
Somit kann ich irgendwann auch ein gekauften Sensor direkt bei mir 
anschließen.

von Gad Z. (gad)


Angehängte Dateien:

Lesenswert?

Habe mal die Sender und Empfängerseite gemacht.
Vielleicht hat mal jemand Zeit und schaut mal kurz drüber.
Vielleicht habe ich ein denkfeheler drin oder falsch ausgelegt...

von Gad Z. (gad)


Lesenswert?

Naja zumindest habe ich ein Haufen Ausdruck - und Rechtschreibfehler in 
meinem Beitrag :-(
Hoffe mal bei der Schaltung war ich nicht so schlampig..

Ach die Kondensatoren und Widerstände in den Signalen MISO, SCK und SS 
auf der Empfängerseite sind noch Altlasten, weil mein erster Entwurf ja 
ohne RS485 war und dafür mit serienwiderstand und Kondensator.
So wird es im Datenblatt vom Hersteller des Sensor-IC empfohlen.

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.