PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS485-Sensor oder doch lieber RS232-Sensor an Laptop andocken?



Cysign
21.03.2013, 11:34
Hallo,

ich wüsste gerne mal, was ihr als einfachste Variante anseht, einen RS485-Sensor an einen Rechner anzudocken, der nur USB bietet.

Meine Ideen wären soweit:

- Sensor über einen Adruino auslesen, den man über USB unter Linux ausliest (falls das möglich ist? Vllt. hat ja jemand einen aufschlußreichen Link dazu parrat - ich hab bisher nur über GRBL Daten von Linux an den Arduino gesendet).

- Sensor an einen AdTiny/AtMega anschließen und über eine virtuelle USB-Schnittstelle USB simulieren, um die Daten zu übergeben (z.B. http://www.obdev.at/products/vusb/index-de.html).

- Sensor an einen Raspberry Pi anschließen und hier ne Lösung finden, wie man RS485 auswerten kann.

Ich muss dazu auch fairerweise sagen, dass ich bisher keine Erfahrung mit RS485 habe und dementsprechend nicht genau weiß, was es da zu beachten gibt.
Wäre denn eine Anbindung über RS485 oder über RS232 sinnvoller und einfacher zu realisieren?

Die einfachste Variante wäre vermutlich ein Raspberry Pi, da er bereits RS232 über die GPIOs unterstützt...allerdings habe ich grade keinen hier.

indeas
21.03.2013, 13:11
Hallo,

wir haben mit folgenden Teil sehr gute Erfahrungen gemacht:

http://www.cti-shop.com/RS485-Konverter/USB-Nano-485

robocat
21.03.2013, 13:14
Wenn man den Entwicklungsaufwand nicht scheut (bzw was dabei lernen möchte), sollte das mit einem Attiny und einem dieser FTD-USB Chips machbar sein. Recht viel billiger als die bereits fertigen RS-485 Interface Konverter Adapter: USB auf RS485 (http://www.ebay.de/itm/RS-485-Interface-Konverter-Adapter-USB-auf-RS485-/280604136220?pt=Wissenschaftliche_Ger%C3%A4te&hash=item41554f531c) bei Ieh-bäh wirds aber nicht werden. Such mal dort nach "RS485 usb". Ich habe mit den dort angebotenen kleinen Interface Platinen bisher keine Erfahrung, habe aber auch noch nichts schlechtes darüber gehört.

Bei dem obdev.at Lösung wäre der µC wohl mit dem USB Protokoll schon so ausgelastet, dass es schwierig wird, die RS485 Daten schnell genug zu übertragen (Vermutung).

Grüße von der Katze

Cysign
21.03.2013, 15:41
@Indeas und Robocat: Und wie werden die Daten vom Rechner aus abgerufen?
Im Endeffekt muss die Datenübertragung (in diesem Fall) nicht so schnell wie möglich stattfinden. Ich könnte mir vorstellen, dass ich über einen µC etwas auswerte und nur 1-2 Mal in der Sekunde einen Messwert an den Rechner sende, bzw. von da abrufe.

indeas
21.03.2013, 15:55
In der Regel holt der Rechner (Master) die Daten vom Sensor (Slave) ab.
Z.B. Der PC schickt ein String "*?<CR>" und dann antwortet der Sensor mit dem Datenstring.
Da RS485 oft als Halbduplex ausgeführt wird, kann ohnehin immer nur ein Teilnehmer reden.

Wie sieht denn Dein Sensor aus?

robocat
21.03.2013, 15:58
Das von mir verlinkte Interface Modul stellt PC seitig einen virtuellen COM Port bereit. Bei der OBDEV Lösung gibt es LibUSB Treiber, die man in ein selbstgestricktes Programm einbinden kann. Die Lösung mit dem virtuellen COM Port dürfte für weniger geübte Programmierer die einfachere sein.

Cysign
22.03.2013, 15:42
Ich hab bzgl. der obdev-Lösung mal ne Anfrage gesendet.


Probleme gibt's nur, wenn man einen Bulk endpoint (eigentlich nicht unterstützt auf low speed devices) konfiguriert. Dann braucht v-usb so um die 80% der CPU-Zeit.

Eine weitere Einschränkung ist die Interrupt-Latency. Weitere Interrupts (zum USB Interrupt) müssen innerhalb von ca. 15 bis 20 Instructions die globalen Interrupts wieder aufdrehen und kein Code darf die Interrupts für länger als 15 bis 20 Instructions abdrehen.

Ausserdem müssen andere Interrupts damit rechnen, dass der USB Interrupt für um die 120 Mikrosekunden lang läuft und sie um so viel später drankommen.


Wenn ich mir das so durchlese, versteh ich...noch nicht so viel :D
Was ist ein "Bulk endpoint" im USB-Sinne?

Wenn der Messrechner über USB lediglich ein oder zwei Sensoren angeschlossen hat, dürfte die Interrupt-Latency doch keine große Rolle spielen, oder etwa doch?


Am interessantesten finde ich die Lösung "mit einem Attiny und einem dieser FTD-USB Chip". Ich hab mal ein wenig in der Bucht nach den Chips gesucht, aber auf Anhieb keine gefunden.
Ich wollte schon immer mal ein eigenes USB-Gerät basteln...von daher finde ich das Thema schon sehr interessant.
Ich hatte mich mal auf USB.org umgeschaut und als ich gesehen hatte, dass man sich für eigene USB-Sachen ne PID etc. zulegen muss, was kostenpflichtig ist, wars uninteressant.
Gibts zur FTD-Lösung hier vielleicht irgendwo ein Tutorial?

Noch gibts keinen konkreten Sensor, den ich damit nutzen möchte. Aber ich könnte mir einen Beschleunigungssensor, einen Temperatursensor oder sonstiges vorstellen. Ich hab halt bisher wenig Ahnung von den verschiedenen Anbindungen (I2C, RS232, RS485), wehalb ich da endlich mal reinschnuppern möchte ;)

021aet04
22.03.2013, 17:32
Mit FTD Chips werden vermutlich das http://www.ftdichip.com/ gemeint sein. Die haben USB Wandler zu sehr vielen anderen Schnittstellen (RS232/UART, RS485,....) aber auch andere Chips zum Thema USB (USB Host,...)

Beim USB AVR Lab wird der USB Datenverkehr auch nur mit dem µC bewerkstelligt. http://www.ullihome.de/wiki/USBAVRLab/index

Wie das gemacht wird könntest du bei Christian Ulrich nachfragen wie er es beim AVR Lab gemacht hat.

MfG Hannes

Cysign
22.03.2013, 21:05
Ah, die FTD-Chips kosten ja gar nicht so viel. Ne Direktverbindung USB-I2C ist damit ja möglich.
Aber nen Chip Usb-RS485 hab ich nicht so auf Anhieb gefunden. Nur n Konverterkabel, das gleich mit ~30 Steinen zu Buche schlägt.
Aber da wäre es vermutlich sinnvoller, den RS485-Sensor an nen AtTiny/Mega zu klemmen und den auszulesen.
Aber welches Protokoll wäre dafür am sinnvollsten? I2C? RS232?

Da ist ja einiges möglich mit den FTDIs:
http://de.rs-online.com/web/c/?searchTerm=FTDI&sort-by=P_breakPrice1&sort-order=asc&view-type=List&sort-option=Preis

021aet04
22.03.2013, 21:18
Das kommt auf deine Bedürfnisse an. Wieviele Bausteine sollen möglich sein, welche Geschwindigkeit wird benötigt, wie sicher soll die Verbindung sein (gegen Störungen => z.B. Industrie),....


MfG Hannes

Cysign
22.03.2013, 21:53
Puh, also ich könnte mir als Einsatzzweck z.B. vorstellen, meine Terrarien bzgl. Temperatur und Luftfeuchtigkeit zu überwachen.
Hier wäre ein gerinder Datendurchsatz nötig.

Aber ich köntne mir auch vorstellen, irgendwas bewegliches mit nem Beschleunigungssensor oder nem Gyroskop auszuwerten. Hierbei wäre der Datendurchsatz natürlich gräßer.

Gehen wir mal von einem Beschleunigungssensor aus:
3-4 Kanäle, die 'long doubles' übertragen. 4*16 = 64 Bit.
64 Bit * 100 Messungen in der Sekunde = 6400 Bit.
6400 / 1024 = 6,25 kb / 8 = 0,78 kB

USB 1.0 schafft nominell 187,5 kByte/s. Nun stellt sich die Frage, wie schnell ich über I2C, RS232 oder RS485 Daten abrufen kann.

Was meinst du mit Störungen? Z.B. Strahlung in unmittelbarer Nähe oder Kabellänge?
Bei einem Gyroskop oder einem Beschleunigungssensor würde ich von einer kurzen Kabellänge ausgehen. Nehmen wir einen kleinen Roboter mit aufgesetztem Laptop an.

Bei Thermo- und Hygrometer würde ich von einer etwas längeren Kabellänge ausgehen. 1-2m wären hier durchaus denkbar.

021aet04
23.03.2013, 11:09
Mit Störungen meinte ich Fremdsignale die in das Kabel/Leitung eingekoppelt werden könnten. In der Industrie währen das z.B. große Verbraucher (Motoren mit hohem Anlaufstrom,...), Frequenzumrichter ohne geschirmte Motor-/Zuleitung,.....

Im privaten Bereich hast du z.B. elektronische Dimmer, Schaltnetzteile u.Ä. Dinge die Störungen verursachen könnten.

In der Industrie setzt man z.B. RS485 ein, da dieser Bus sehr unempfindlich gegen Störungen ist (da es ein differentieller Bus ist => http://de.wikipedia.org/wiki/Serielle_Daten%C3%BCbertragung)

Der I2C wurde ursprünglich als reiner Platinenbus entwickelt (kurze Distanzen), RS485 für u.A. lange Distanzen (http://de.wikipedia.org/wiki/EIA-485 => Maximallänge = 1,2km).
Auf diese Längen sollte man achten, da man ansonsten Übertragungsstörungen bekommen kann (falsche Daten, Abbruch der Verbindung,...)
Die maximale Leitungslänge hängt auch von der Übertragungsrate ab (je schneller die Übertragung desto kürzer ist die maximal erlaubte Leitungslänge).
Bei CAN habe ich das gefunden http://www.me-systeme.de/canbus.html
Dort steht z.B. 6,7km bei 10kbit/s bis 40m bei 1Mbit/s


Ich würde für kurze Distanzen I2C bzw SPI verwenden (unter ~50cm), für lange Distanzen (z.B. 50m) bzw Orte mit hohen Störungen RS485 und dazwischen USB (mit anschließendem Wandler zu UART bzw RS232) bzw RS232.

Für I2C gibt es auch Bus-Extender (z.B. http://www.nxp.com/documents/data_sheet/P82B715.pdf). Damit kann man längere Distanzen zurücklegen bzw längere Leitungen verwenden. Der Nachteil ist das jedes IC/Modul/... das diesen I2C Bus verwendet auch einen Bus-Extender benötigt (soweit ich weiß).

Bei der Berechnung der benötigten Geschwindigkeit darfst du die Start/Stopbits, Addressierungen,... nicht vergessen.


Für Leitungslängen von unter 5m würde ich auf alle Fälle USB oder RS232 verwenden.

Je nach Anforderung musst du auch entscheiden welches Kabel du verwendest (Geschirmt, Ungeschirmt, Paare geschirmt (wie z.B. bei CAT7 Netzwerkkabel),...)

MfG Hannes