Hallo Zusammen,
Ich arbeite gerade an einem Projekt bei dem ein Raspberry Pi mit
mehreren Arduinos via RS485 über eine Strecke von 15-20 Metern
kommunizieren soll.
Ich bin dabei zunächst diesem Tutorial gefolgt, was super funktioniert
hat:
https://circuitdigest.com/microcontroller-projects/rs485-serial-communication-between-arduino-and-raspberry-pi
Das funktioniert selbst mit "normalen" paralleleln, nicht verdrillten
Kabeln mit mehreren Verlängerungselementen dazwischen sozusagen als
worst-case Verkabelung.
Nun zum eigentlichen Problem:
Ich habe das ganze um Montageaufwand und Platz zu sparen auf einer
eigenen Platine wie eine Art Shield nachgebaut anhand dieses Schaltplans
https://arduinoinfo.mywikis.net/wiki/RS485-Modules
Die Kommunikationskette sieht dann etwa so aus wie auf dem Foto.
Die nachgebaute Version funktioniert super bei kurzen Kabeln von 1-2m
schwächelt aber bei meinem worst-case 20Meter Verlängerungs-Kette.
Da kamen mir mehrere Fragen auf:
1. Welchen Einfluss hat bei den Kabellängen der Kabeltyp? Braucht man
bei 10-20 Metern vllt. doch schon twisted-pair Kabel oder sogar
irgendeine Art von Schirmung? Hatte ich da beim ersten Versuch einfach
Glück?
2. Ist diese Ketten-Topologie mit den ganzen JST Steckern eventuell
schädlich für die Kommunikation? Ich würde da am Ende gerne 10-15 Slaves
anschließen wenn möglich.
3. Auf der Platine sind noch ein paar Andere Komponenten verbaut
(Spannungswandler mit Kondensatoren, 3 Transistoren für je eine Lampe
und dazugehörige Widerstände etc.) Kann davon irgendetwas einen Einfluss
haben?
4. Ist der Einbau auf der Platine selbst relevant? (Leiterbreite,
Abstand o.Ä.)
Ich hoffe der ein oder andere mag vielleicht seine Erfahrungen teilen.
LG und danke im Voraus,
Felix
Zu den Rückfragen:
Geschwindigkeit: 9600 baud (Kann ich noch reduzieren wenn nötig, sind
nicht viele Daten)
Terminierung und Bias Widerstände sind vorhanden, identisch
dimensioniert wie in meinem verlinkten Schema.
Von Modul zu Modul gehen 4 Adern: VCC,GND und die zwei Adern des
Differenzsignals.
Die Links schau ich mir heute abend mal an, danke.
Felix schrieb:> Geschwindigkeit: 9600
Völlig unkritisch, habe ich auch schon über mehrere 100m altes
Telefonkabel gefahren.
Felix schrieb:> Terminierung und Bias Widerstände sind vorhanden, identisch> dimensioniert wie in meinem verlinkten Schema.
Die Bias-Widerstände darin sind mit 20k viel zu gross. Die bilden mit
der Terminierung einen Spannungsteiler, für mindestens 0.2V Differenz
bietet sich (bei Terminierung mit 120 Ohm) ein Wert von jeweils 680 Ohm
an.
Natürlich nur 1x pro Bus, nicht für jeden Teilnehmer!
Hmmm schrieb:> Natürlich nur 1x pro Bus, nicht für jeden Teilnehmer!
Noch ein Hinweis, falls Du das Verlinkte 1:1 nachgebaut hast: Terminiert
wird auch nicht bei jedem Teilnehmer, sondern an den beiden Bus-Enden.
Hmmm schrieb:> Die Bias-Widerstände darin sind mit 20k viel zu gross. Die bilden mit> der Terminierung einen Spannungsteiler, für mindestens 0.2V Differenz> bietet sich (bei Terminierung mit 120 Ohm) ein Wert von jeweils 680 Ohm> an.
So ziemlich alle RS485-Leitungstreiber der letzten 20 Jahre haben
entsprechend angepasste Schwellwerte, so dass bei nicht allzu stark
gestörter Umgebung die Fail-Safe-Schaltung eigentlich nicht mehr
erforderlich ist. Sofern der TE wirklich einen Original MAX485 einsetzt,
trifft das auch hier zu.
> Natürlich nur 1x pro Bus, nicht für jeden Teilnehmer!
Ansonsten soll die Fail-Safe-Schaltung ja nicht nur im Normalbetrieb
funktionieren, sondern auch bei unterbrochenem Bus ordentliche
Ruhesignalpegel liefern. Daher finde ich es sogar besser, wenn jeder
Teilnehmer hochohmige Fail-Safe-Widerstände besitzt.
Wenn die Widerstände zu gering sind, besteht die Gefahr, dass ein
ausgeschalteter Busteilnehmer, der folglich auch keine
Fail-Safe-Versorgung bereitstellt, den Bus belastet.
Andreas S. schrieb:> So ziemlich alle RS485-Leitungstreiber der letzten 20 Jahre haben> entsprechend angepasste Schwellwerte, so dass bei nicht allzu stark> gestörter Umgebung die Fail-Safe-Schaltung eigentlich nicht mehr> erforderlich ist. Sofern der TE wirklich einen Original MAX485 einsetzt,> trifft das auch hier zu.
Im MAX485-Datenblatt ist zwar von einem Fail-safe-Feature die Rede ("if
the input is open circuit"), als Threshold Voltage wird aber weiterhin
-0.2V - 0.2V angegeben, so dass ich dafür nicht meine Hand ins Feuer
legen würde.
Erst bei der MAX3080-Serie kann man wirklich von fail-safe sprechen:
> The MAX3080 family guarantees a logic-high receiver output when the> receiver inputs are shorted or open, or when they are connected to a> terminated transmission line with all drivers disabled. This is done by> setting the receiver threshold between -50mV and -200mV.
Aber da der TO hier von einer 20 Meter langen "Kommunikationskette"
spricht, sehe ich das Problem eher bei den Terminatoren. Vermutlich
diverse Busteilnehmer hintereinander, jeder davon mit
120-Ohm-Terminierung.
Oder eben die üblichen Firmwareprobleme bei der TX/RX-Umschaltung.
Felix schrieb:> Ich habe das ganze um Montageaufwand und Platz zu sparen auf einer> eigenen Platine wie eine Art Shield nachgebaut anhand dieses Schaltplans> https://arduinoinfo.mywikis.net/wiki/RS485-Modules
WTF! Gibt es in Makerstan auch gescheite Schaltpläne und nicht nur die
Verdrahtung per Fritzing?
> Die Kommunikationskette sieht dann etwa so aus wie auf dem Foto.
Foto? Meinst du deine leicht krakelige Skizze?
> Die nachgebaute Version funktioniert super bei kurzen Kabeln von 1-2m> schwächelt aber bei meinem worst-case 20Meter Verlängerungs-Kette.
Dann ist was faul.
> 1. Welchen Einfluss hat bei den Kabellängen der Kabeltyp? Braucht man> bei 10-20 Metern vllt. doch schon twisted-pair Kabel
Nicht zwingend, vor allem nicht bei niedrigen Baudraten.
>oder sogar> irgendeine Art von Schirmung?
Nein.
>Hatte ich da beim ersten Versuch einfach> Glück?
Kann sein.
> 2. Ist diese Ketten-Topologie mit den ganzen JST Steckern eventuell> schädlich für die Kommunikation?
Nein.
> Ich würde da am Ende gerne 10-15 Slaves> anschließen wenn möglich.
Sollte relativ einfach gehen.
> 3. Auf der Platine sind noch ein paar Andere Komponenten verbaut> (Spannungswandler mit Kondensatoren, 3 Transistoren für je eine Lampe> und dazugehörige Widerstände etc.) Kann davon irgendetwas einen Einfluss> haben?
Eigentlich nicht.
> 4. Ist der Einbau auf der Platine selbst relevant? (Leiterbreite,> Abstand o.Ä.)
Man kann schon diverse Dinge vermurksen, idiotensicher ist es nicht.
> Ich hoffe der ein oder andere mag vielleicht seine Erfahrungen teilen.
Dann teile du erstmal einen gescheiten Schaltplan und Bilder von deinem
Aufbau.
Felix schrieb:> Zu den Rückfragen:> Geschwindigkeit: 9600 baud (Kann ich noch reduzieren wenn nötig, sind> nicht viele Daten)
Total harmlos.
> Terminierung und Bias Widerstände sind vorhanden, identisch> dimensioniert wie in meinem verlinkten Schema.
Wo denn?
> Von Modul zu Modul gehen 4 Adern: VCC,GND und die zwei Adern des> Differenzsignals.
Schon mal gut.