Hi! Ich habe folgendes Problem mit einem RS-485-Bus, den ich im Rahmen eines verteilten Roboters (der auf 3 Atmega32 aufbaut) verwende: Sobald ich mehr als 2 Teilnehmer an den Bus anschließe, wird die Datenübertragung teilweise fehlerhaft. Entweder werdn Zeichen übertragen, die nach Übertragungsfehlern aussehen, oder die Teilnehmer antworten gar nicht. Das ganze scheint mir nicht immer gleich aufzutreten, manchmal funktioniert die Kommunikation auch, wenn man die Busstecker neu einsteckt oder die Reihenfolge am Bus ändere. Aufbau wie folgt: http://img263.imageshack.us/img263/2120/aufbaupk1.jpg (Schaltpläne im Anhang!) Der PC stellt mit der Busumsetzerbox den Master dar, die bis zu 3 "Seiltrommelboxen" die Slaves. Der PC ist alternativ über USB oder per RS-232 (seriell) anschließbar. Für den RS-485-Bus wurde der Baustein max488 für 4-Draht-Technik verwendet (Datenblatt http://www.maxim-ic.com/parts.cfm?p=MAX488). Schließt man die Seiltrommelboxen jeweils einzeln an, funktioniert die Kommunikation wunderbar, bei einer zusätzlichen Box nur noch mit Schwierigkeiten, bei einer weiteren gar nicht mehr. Buskabel: Hier wurde ein herkömmliches Netzwerkkabel (Patch, nicht Crossover) verwendet. Dieses transportiert auf 4 Adern die Datensignale und auf den restlichen 4 Adern die 12V Spannungsversorgung. Jede Mikrocontrollerplatine in den Seiltrommelboxen zieht ca. 100mA. Die Verkabelung erfolgt als Ring, also an jedem Teilnehmer sind 2 Buchsen, wo der Bus durchgeschleift und für die aktuelle Box abgegriffen wird. Die Kabel sind jeweils nur 2-5 m lang. Abschluss: Verwendet man nur 2 Teilnehmer am Bus, funktioniert die Kommunikation wunderbar auch ohne Abschluss (s. Datenblatt). Bei mehreren Busteilnehmern führt das Hinzufügen des Abschlusses nicht zu einer Verbesserung, stattdessen steigt der Stromverbrauch um 100-200 mA - was ich etwas viel finde. Irgendwelche Ideen, was der Fehler sein könnte? Evtl. Ansatzpunkte: - Signal und Versorgung in einem Kabel. 12V Gleichstrom bei max. 300-500 mA halte ich eigentlich nicht für bedenklich bei Übertragungsraten von 2400 bps bis 9600 bps - Baustein max488: Lt. Hersteller Maxim gibt es zwei Varianten (http://www.maxim-ic.com/parts.cfm?p=MAX488) für etwas verschiedene Temperaturbereiche, die sich jedoch überlappen: Darf man die evtl. nicht gemischt einsetzen?
Für mehr als 2 Teilnehmer ist eine Tx-Enable-Leitung für alle Slaves zwingend nötig, da sonst mehrere aktive Tx-Treiber gegeneinander arbeiten. Daher auch der Stromverbrauch. Abhilfe: - RS422/485-Treiber mit Tx-Enable verwenden. - CAN-Treiber verwenden. Der MAX488 ist nur beim Master verwendbar, da dessen Tx-Leitungen mit den Rx-Leitungen der Slaves verbunden sind.
Mir ist schon klar, dass, wenn alle Slaves gleichzeitig sprechen, es zu Kollisionen kommt. Dies ist bei mir aber ausgeschlossen, die Teilnehmer haben alle "Adressen". Und wenn nur der angesprochene Baustein antwortet, sind meiner Einschätzung nach alle anderen weiterhin hochohmig. Zudem: Im Datenblatt http://www.maxim-ic.com/getds.cfm?qv_pk=1111&ln=en auf S. 14 sieht es so aus, als könnte man nur mit max488 arbeiten. Auf S.1 steht in der Tabelle, bei Verwendung von max488 könnten 32 Teilnehmer auf dem Bus sein. Was bringt eigentlich bei 4-Draht-Technik (Vollduplex) der Einsatz der Enable-Leitungen, also Unterschied zwischen max488 und max489. Wenn man das programmiert, würde man bei den zusätzlichen Enable Leitungen diese doch nur vor jedem Senden und Empfangen setzen müssen. Kollisionen sind damit auch nicht mehr eingeschränkt. Oder?
Na, solange sie nicht senden, sind die max488 "ab Werk" auf den tx leitungen hochohmig, bei den rx leitungen sind diese immer hochohmig. Das ist doch das Grundprinzip eines Busses. Wenn ich nicht jeden einzelnen Teilnehmer mit eigenen enable-Leitungungen an den Master anschließen kann, dann geht das doch nur so. Ergänzung: Der Fehler gestaltet sich so, dass, wenn viele Boxen angeschlossen sind, nicht alle nicht antworten (wenn einzeln angesprochen), sondern dass eine der zwei Boxen meist funktioniert - nach meinen Beobachtungen die, die als letztes an den Bus angeschlossen wurde.
> Na, solange sie nicht senden, sind die max488 "ab Werk" auf > den tx leitungen hochohmig, Nein. Woher weiss der MAX488, dass er nicht sendet? Diese Information hat er nicht. 0 am Eingang heisst "0 senden", 1 am Eingang heisst "1 senden". Datasheet: "Driver Input. A low on DI forces output Y low and output Z high. Similarly, a high on DI forces output Y high and output Z low." Es ist zieht also immer ein Ausgang hoch und einer runter. Die Begriffe sind allerdings nicht sonderlich glücklich gewählt, "Z" steht hier ausnahmsweise mal nicht für high impendance. "Output Z high" ebensowenig. Die Angabe mit den 32 Teilnehmern ist anders zu lesen: Der Tx-Treiber kann maximal 32 Rx-Receiver verkraften.
> ie, die als letztes an den Bus angeschlossen wurde.
Schon mal Finger dran gehalten? Kann nämlich sein, dass die schon länger
angeschlossenen MAXe in der Zwischenzeit thermisch überlastet wurden und
daher abgeschaltet haben.
A.K. wrote: >> sind meiner Einschätzung nach alle anderen weiterhin hochohmig. > > Wie teilst du das dem MAX488 mit? Garnicht, die MAX488 kann man nicht parallel schalten, basta. Im Datenblatt sind nur ICs parallel gezeichnet, die auch DE-,/RE-Pins haben. Wenn man die Schaltungen selber aufbaut, aber keinen DE-Ausgang hat, nimmt man eben alles CAN-Treiber (PCA82C251). Wenns unbedingt Voll-Duplex sein muß, braucht man aber die doppelte Anzahl. Peter
>Na, solange sie nicht senden, sind die max488 "ab Werk" auf den tx >leitungen hochohmig, bei den rx leitungen sind diese immer hochohmig. >Das ist doch das Grundprinzip eines Busses richtig, und DU als Entwickler bist für das Einhalten dieser Regel zuständig. Der Tranceiver übersetzt nur die Pegel und hat keine eigene Intelligenz. >Auf S.1 steht in der Tabelle, bei Verwendung von max488 könnten 32 >Teilnehmer auf dem Bus sein. Wo steht,daß das MAX488 sein können? alles andere hat A.K. schon geschrieben.
OK, vielen Dank! Dann werde ich die Slaves mit max489-Bausteinen ausstatten, wo ich tx enablen kann (durch den zugehörigen Mikrocontroller, jeweils vor dem Senden). rx bei den slaves würde man bei vorhandener Adressierung ja immer active schalten (oder?). Und am Master reicht ein max488, der seine tx leitungen ja quasi für sich alleine hat. Die RX-Leitungen wären auch immer active, genauso wie bei den Slaves. So sollte es doch klappen, oder? Noch mal vielen Dank!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.