Forum: Mikrocontroller und Digitale Elektronik Welches Bussystem für Sensoren und zentraler Auswerteeinheit


von Bernd (Gast)


Lesenswert?

Hallo,

ich stehe vor einem Problem.

Ich will mehrere (bis 24) externe Sensoren mit einer zentralen 
Auswerteeinheit verbinden. Die Sensoren benötigen schon bis zu 200mA das 
Stück und sind auch bis zu 100m weit entfernt.
Kabel ist ein 2x2x0.8 wobei ein Adernpaar die Versorgung sein soll 
(24VDC) und das Zweite eben für die Daten.

Zuerst dacht ich an RS485. Das Problem ist aber dass die Sensoren 
sternförmig verdrahtet werden sollen, um im Notfall einige Sensoren 
zentral abzuklemmen.

Also jetzt meine Konkrete frage, wie kann ich die Sensoren mit dem 
Auswertegerät am besten verbinden?

mfg Bernd

von Rangi J. (rangi)


Lesenswert?

Die Sensoren sind noch nicht festgelegt?
Wenn die Takt-Geschwindigkeit nicht allzu hoch ist, würde ich serielle 
Daten verschicken, quasi RS485 aber als Treiber CAN-Treiber (PCA82C250) 
verwenden. Das ist zwar auch ein Bus, aber es funktioniert bei mir recht 
gut als Stern (ca. 200 Knoten auf 8 Stränge verteilt mit 57600Baud, 
8N1).
Zur Not kann man dann im Sternpunkt mehrere Treiber (im schlimmsten Fall 
24) verbauen.

von Bernd (Gast)


Lesenswert?

Vielen Dank für die Antwort.

Doch eigentlich sind die Sensoren schon ziemlich fix. Die Sensoren 
werden dann vom uC ausgewertet und dann irgendwie zur "Zentrale" 
übertragen.
Geschwindigkeit sollte eig egal sein. Die 24 Sensoren sollen nur alle 
2,5 Minuten abgefragt werden...und nur 2-3Byte übertragen. Also würden 
so 1000Baud wahrscheinlich schon reichen.

von Martin S. (sirnails)


Lesenswert?

I2C bzw. SMBus? Wäre einfach zu verwenden, würde in Puncto 
Geschwindigkeit Deinem Anforderungsprofil entsprechen, und mittels 
Repeater wären auch 100m machbar.

http://www.ece.vt.edu/cel/ece4534/AN255_2.pdf

von MaWin (Gast)


Lesenswert?

> wie kann ich die Sensoren mit dem Auswertegerät am besten verbinden?

Mit einem Kabel ?

100m mit 0.8mm2 macht 8 Ohm Leitungswiderstand, bei 200mA also
1.6V Spannungsverlust, davon 0.8V auf der Masseleitung.

Damit kann nur eine Sternverdrahtung funktionieren, denn 24 Sensoren
über eine Leetung ergäbe bis zu 38.4V Spannungsverlust.

Da die anderen Adern also für das Signal verwendbar ist, geht jede 
Variante die bis 100m erlaubt, simples RS232 wäre möglich.

Natürlich nicht die hier idiotischerweise vorgeschlagenen I2C bzw.
SMBus, die sind für solche Leitungslämgen komplett ungeeignet.

Auch normales TTL-Signal hat ein Problem mit den 0.8V Spannungsabfall 
auf der Masseleitung, entweder muß man differentiell übertragen (RS485) 
oder mit einem Pegel deutlich über 0.8V (also z.B. RS232, oder einfach 
0V/12V oder 20mA Stromschleife.

Da du sowieso zu jedem Sensor eine einfach abschaltbare Leitung nehmen 
willst, kannst du dir Busprotokolle sparen, brauchst aber abschaltbare 
Treiber.

von Bernd (Gast)


Lesenswert?

Okay, danke für die Antworten.

I2C ist meines wissens auch eher für kurze Leitungen.

100m Leitung ist der Extremfall, im Normalfall sag ich sind die 
Leitungen zwischen 10 und 50m. Aber es sollte schon ausgelegt sein für 
100m.

Die RS485 würde mich schon reizen. Kann man im Prinzip 24 Treiber auf 
der Hauptplatine aufschalten, wie es Rangi Jones erwähnt hat, und dann 
einfach die Daten an alle schicken und nur der dessen Addresse 
übereinstimmt zurücksendet!?

von Karl-heinz W. (heinzel)


Lesenswert?

Hallo Bernd,

wenn ich deine Vorgaben richtig gelesen habe, so stehen 2 x 2 Leitungen 
bereit. Bei RS485 handelt es sich um ein differentielles Verfahren, d.h. 
es werden für jede Richtung 2 Leitunge benötigt. Also ein Paar fürs 
Senden und eins fürs Empfangen. Falls deine Sensoren nicht selbständig 
laufen und ggf. konfiguriert werden müssen oder nur auf Anforderung 
Daten senden werden mehr Leitungen benötigt (wg der Versorgung).

von Martin S. (sirnails)


Lesenswert?

MaWin schrieb:
> Natürlich nicht die hier idiotischerweise vorgeschlagenen I2C bzw.
> SMBus, die sind für solche Leitungslämgen komplett ungeeignet.

Im verlinkten Dokument findet sich unter Appendix 1 - Chapter 3 eine 
Abhandlung zu "Very long cables":

Add cabling delays at 10 ns / meter (measured between any two I2C 
devices) and decrease the maximum clock frequency
as before.
For example:
- 100 meter cable, 1 μs delay, total 2.05 μs, clock half-period 7.05 μs, 
max clock = 71 kHz
- 1000 meter cable, delay = 10 μs, total delay 11.05 μs, half-period 
16.05 μs, max clock = 31 kHz

Natürlich geht das nicht ohne Bustreiber, das dürfte klar sein.

von Michael B. (laberkopp)


Lesenswert?

> Natürlich geht das nicht ohne Bustreiber, das dürfte klar sein.

Das geht auch nicht mit Bustreibern (es sei denn, solchen wie RS232)
wegen des Spannungsabfalls auf der Masseleitung.

Mir scheint, du hast das Problem der Installation überhaupt nicht 
verstanden.

Und Repeater sind sicher auch nicht das, was der Fragende haben wollte, 
zudem hat er bei der zwangsweisen Sternverdrahtung nichts von den 
Vorteilen eines adressierbaren einem Bussystem, sondern nur dessen 
Nachteile.

von PittyJ (Gast)


Lesenswert?

Ich hatte einmal etwas ähnliches mit RS-232 auf TTL Level.
1 Master, N Slaves. TX geht auf alle alle Slaves. In der Message war 
noch eine ID drin. Nur der Slave mit der ID durfte antworten. Die 
RX-Leitungen wurden dann mit Dioden zusammengeführt.
Die Nachrichten waren mit Checksumme gesichert. Stimmte die nicht, 
musste der Master noch einmal nachfragen.

von Michael B. (laberkopp)


Lesenswert?

> auf TTL Level

Auch du hast das Problem des Spannungsabfalls auf der GND-Leitung nicht 
verstanden.

von Stefan F. (sfrings)


Lesenswert?

Da für die Daten separate Adern verfügbar sind, würde ich ganz klar 
RS485 verwenden.

RS232 ist bei diesen Leitungslängen problematisch und sowieso von Anfang 
an eine technologische Fehlkonstruktion gewesen.

Es wäre auch denkbar, die Daten über die Leitungen der Stromversorgung 
zu übertragen. Ich habe auf diese Weise mal das Bedienfeld einer 
Alarmanlage über eine 2-Adrige Telefonleitung dupliziert.

Die Stromversorgung war in meinem Fall 12V. Die Trennung der Daten und 
Versorgungsspannung hatte ich ganz simpel mit ein paar Spulen, 
Kondensatoren und Transistoren gemacht. Im Prinzip so:


Daten o--------||----+                        +----||--------o Daten
                     |                        |
             Spule   |                        |   Spule
12V   o---+--XXXXX---+------------------------+---XXXXX--+---o 12V
          |                                              |
         ===                                            ===
          |                                              |
GND   o---+----------------------------------------------+---o GND


Ich hatte Daten mit ungefähr 1000 Bits pro Sekunde übertragen. Das war 
hoch genug, um die Daten problemlos von der Versorgungsspannung zu 
trennen und niedrig genug, um durch die Kabel ohne großartige Dämpfung 
übertragen zu werden.

von TestX .. (xaos)


Lesenswert?

@TO
was spricht denn gegen RS485 mit Stern-Topologie ? Es ist immernoch ein 
BUS und du brauchst auf der Hauptplatinen nur 1nen RS485 Treiber!

Terminiert werden die Slaves jeweils mit R = (120*n*k) Ohm, wobei n die 
Anzahl an Slaves ist und k irgendwas zwischen 1..10. Den Sternpunkt 
bekommt 120Ohm..

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.