Hallo,
ich habe einige digitale Ausgänge die ich über einen Daten Bus zu einem
Raspberry Pi übertragen möchte. Zwei Leitungen für den Bus liegen auch
schon. Wie baue ich den Bus auf bzw. welchen Bus nehme ich dafür und wie
kopple ich die digitalen Ausgänge an den Bus. Also zunächst
Hardwaremäßig???
Vielen Dank im voraus!!!
Deine Frage ist viel zu unspezifisch. Interessant und ausschlaggebend
für eine gescheite Antwort wären Angaben zu:
- zu übertragende Pegel, Datengeschwindigkeit, Gleichstromfreiheit, usw.
- Länge der Übertragungsstrecke
- Anzahl der Bus-Teilnehmer
usw. Also beschreibe Deinen Fall etwas besser, dann magst Du auch eine
hilfreiche Antwort bekommen.
Möglicherweise brauchst Du überhaupt keinen Bus (à la CAN, RS-485, SPI,
USB, ...), sondern verbindest direkt die digitalen Ausgänge des Senders
mit den digitalen Eingängen des Empfängers. Eventuell brauchst Du dafür
einen Pegelwandler.
Wie gugu schon sagte: Um Dir besser helfen zu können, müsstest Du das
von Dir verwendete System bzw. dessen Komponenten erst mal vernünftig
beschreiben.
Erstmal vielen Dank! Ich bin ja gerade dabei zu überlegen welches System
und welche Komponenten ich überhaupt verwenden kann ;-)
- Also die Länge der Übertragungsstrecke beträgt ca. 100 m.
- Die Anzahl der Busteilnehmer wird sich auf 10 beschränken.
- Pegel: 0 V - 5 V
- Datengeschwindigkeit: kann langsam sein.
- Gleichstromfreiheit: ???
Genügen diese Informationen erst mal ?
Vielen Dank nochmal
Nimm CAN, das ist bei mehr als 2 Teilnehmern und der Leitungslänge am
einfachsten und dabei noch stabil (Fehlerkorrektur, Störunempfindlich).
Du brauchst aber entweder:
* eine gemeinsame Masse
* Eine dritte Leitung für die Masse
* Low-Speed CAN, welches mit 2 Leitungen inklusive Masse auskommt, aber
nicht differentiell ist
Ok danke,
und wie mache ich das mit der Ankopplung der Busteilnehmer? Also
angenommen ich habe einen digitalen Ausgang 0-5 V, wie schließe ich den
an den Bus an?Kenne mich da mit der Hardware nicht so aus? Woher weiß
der Raspberry PI dann welche CAN-ID der der digitale Ausgang hat bzw.
dass es genau der Ausgang ist?
Du brauchst natürlich für die Ein/Ausgänge eigene "I/O Module", wie für
jeden Bus. Für CAN kann man so was für (sehr) viel Geld kaufen, oder mit
einem Mikrocontroller selber bauen. Um den Mikrocontroller an den CAN
anzubinden, brauchst du einen CAN Controller und einen CAN Transceiver.
Es gibt viele Mikrocontroller mit integriertem (und damit leicht zu
verwendenden) CAN Controller (AVRs, PICs, STM32, LPC, ...) , und einige
wenige die zusätzlich noch den CAN Transceiver integriert haben (zB
LPC11C00 iirc) und somit direkt an den CAN angeschlossen werden können.
Der Mikrocontroller braucht natürlich noch ein Programm, welches die CAN
Nachrichten auf I/O Pins umsetzt. Dort gibst du auch die CAN IDs ein,
die dein PI dann senden muss. Statt eines Mikrocontrollers kannst du
auch R-PIs mit CAN Modulen verwenden, aber die sind groß, stromfressend,
teuer, overkill, kaum Echtzeit fähig. Die meisten modernen
Mikrocontroller mit CAN können vermutlich nur 3.3V an den Pins, daher
brauchst du evtl noch Pegelwandler für die 5V Signale.
Für den R-PI musst du natürlich noch ein Programm schreiben dass die
entsprechenden Nachrichten für die Mikrocontroller sendet.
Oder vielleicht noch mal so gesagt: Ich habe einen Raspberry PI eine
feste Leitung (Twisted Pair) und einen Arduino wie bekomme ich die
digitalen Werte der Eingänge die am Arduino anliegen, am Einfachsten auf
den PI ?
bass schrieb:> Angenommen ich möchte einen Arduino verwenden, was brauche in dann> noch> zusätzlich ?
Ein CAN-Shield für den Arduino, zB:
http://skpang.co.uk/catalog/arduino-canbus-shield-with-usd-card-holder-p-706.html
Ein CAN-Shield für den PI, zB:
http://skpang.co.uk/catalog/pican-canbus-board-for-raspberry-pi-p-1196.html
Da diese Shields einen DSUB-9 Stecker eingebaut haben, brauchst du noch
zwei Gegenstücke, die du dann an deine Leitung anlötest/crimpst um die
einfach einstöpseln zu können.
Diese Lösung ist zwar einfach, finde ich aber recht klobig/unelegant.
Ich bin mehr Freund von Mikrocontrollern mit eingebauten
CAN-Controllern.
bass schrieb:> Oder vielleicht noch mal so gesagt: Ich habe einen Raspberry PI> eine> feste Leitung (Twisted Pair) und einen Arduino wie bekomme ich die> digitalen Werte der Eingänge die am Arduino anliegen, am Einfachsten auf> den PI ?
* Bei genau einem Arduino, und tatsächlich nur genau zwei Leitungen:
UART auf TTL-Pegel auf einer Leitung, und GND auf der anderen. Dass es
Twisted ist, bringt dann nichts. Ist störanfällig und erfordert daher
Prüfsummen in Software.
* Bei genau einem Arduino, und 3 Leitungen: RS-485 Transceiver an die
UART's vom Arduino und R-PI packen, das Twisted-Pair als Datenleitung
nutzen, und eine dritte Leitung als GND.
* Bei mehreren Arduinos, und 2 Leitungen: Single-Wire-CAN (SAE-J2411)
auf einer Leitung verwenden, und GND auf der anderen. Braucht auf beiden
Seiten entsprechende Single Wire CAN Transceiver und CAN Controller.
Gibts vermutlich keine Shields für, und ist langsam (88,3 kBit/s inkl.
Protokoll Overhead)
* Bei mehreren Arduinos, und 3 Leitungen: Normalen differentiellen CAN
auf dem Twisted Pair verwenden, und GND auf einer dritten Leitung.
Braucht CAN Controller und Transceiver, wie zB durch o.g. Shields.