Forum: Mikrocontroller und Digitale Elektronik RS232 > RS485, Problem bei galvanischer Trennung


von Matthias B. (matthias_b14)


Angehängte Dateien:

Lesenswert?

Hallo

Ich versuche mir mit kleinen Projekten das Wissen über die Serielle 
Kommunikation näher zu bringen. Nachdem ich mit RS232 einige Erfahrungen 
sammeln konnte wollte ich nun auf RS485 gehen. Erste Versuche liefen 
auch da erfolgreich.

Im vorliegenden Fall sende ich vom PC aus wahllos Zeichen an den 
Atmega8. Diese wandern über einen Max232 zu einem Max 485. Von dort zu 
einem zweiten Max485 in den µC. Dieser macht nichts weiter als die 
empfangen Zeichen wieder zurück zu schicken und gleichzeitig das Senden 
und Empfangen der Max-ICs zu steuern (sind halbduplex). Das funktioniert 
soweit auch ganz gut. Heute wollte ich jedoch eine Stufe weiter gehen 
und mich an eine Galvanische Trennung wagen.

Ich hab versucht mit meinen (noch?) bescheidenen Eagle-Kenntnissen den 
groben Aufbau zu skizzieren. Ich hoffe man kann das nötigste erkennen. 
Verwendet wird ein Max232 welcher über Optokoppler an dem ersten Max485 
hängt. Eine galvanische Trennung der Spannung erfolgt mittels UM201 
DC/DC Konverter (5V/5V).

Wenn ich jedoch versuche einen der Max485 ICs Galvanisch zu trennen 
kommt kein Signal mehr durch. Die getrennte Spannungsversorgung des ICs 
macht dabei jedoch keine Probleme, das senden und empfangen funktioniert 
damit einwandfrei(ohne OK). Es scheint also eher an den Optokopplern zu 
liegen. Hier kommen 4N35 Optokoppler zum Einsatz. Sind sicher nicht die 
idealen Bausteine aber sind die einzigen die ich hier rumkullern hatte. 
Laut Datenblatt haben die eine Reaktionszeit von 10µs. Das würde doch 
theoretisch bedeuten das diese locker 9600 Baud schaffen sollten oder 
befinde ich mich da auf dem Holzweg? Eventuell fehlt ja noch ein 
elementarer Bestandteil damit es funktioniert...?
Die Widerstände:
R1-3: 330 Ohm
R4-5: 120 Ohm (Anschlusswiderstände)

von Purzel H. (hacky)


Lesenswert?

Ja. Optokoppler funktionieren so nicht. Wi solldas gehen?

von Flurz (Gast)


Lesenswert?

Der Mega 8 soll die Richtung der Treiber auf beidn seiten bestimmen. Wie 
soll das inplementiert werden? Mir scheint dieser Opto kann weggelassen 
werden, nachdem klar ist, wie das Signal auf die andere Seite kommt

von tip (Gast)


Lesenswert?

Es fehlen die PullDown-Widerstände (z.B. 10K) jeweils auf der 
Sekundärseite der Optokopler, damit auch der LOW-Pegel definiert ist.

von Forzo (Gast)


Lesenswert?

Besser wie Optokoppler sind magnetische, wie der ADum1400 oder 
kapazitive, wie der ISO721

von ... (Gast)


Lesenswert?

Forzo schrieb:
> Besser wie Optokoppler sind magnetische

Klar, magnetische Optokoppler - warum heißen die wohl Opto mit 
Vornamen?

von Japp (Gast)


Lesenswert?

Bindestrich vergessen - jetzt aber. Hau drauf.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Angehängte Dateien:

Lesenswert?

Hier maln Bild wie man UART durchn Opto ballert ohne, dass da was 
verändert wird am Signal.

Verstehe nur nich was der MAX3232 da soll, wenn du offensichtlisch 
zwischen 2 AVRs kommunizierst?

von Matthias B. (matthias_b14)


Lesenswert?

Hallo

Vielen dank für die vielen Antworten. Nun, es kann schon sein das ich da 
was falsch angeschlossen habe. Ich werde mich nachher gleich mal 
ransetzen und die schaltung überarbeiten.

>Besser wie Optokoppler sind magnetische, wie der ADum1400 oder
>kapazitive, wie der ISO721

Danke für den hinweis. werde mir diese mal anschauen und ggf. bei einer 
nächsten Bestellung beachten. Jetzt habe ich aber leider nur die 4n35 
zur Verfügung.

Martin Wende schrieb:
> Hier maln Bild wie man UART durchn Opto ballert ohne, dass da was
> verändert wird am Signal.
>
> Verstehe nur nich was der MAX3232 da soll, wenn du offensichtlisch
> zwischen 2 AVRs kommunizierst?

Der Max232 soll das signal welches vom PC kommt an einen Max485 
übergeben. Das soll später der ausgangspunkt sein um verschiedene 
Controller anzusprechen. Im vorliegenden Fall habe ich jedoch nur einen 
Controller welcher bequemerweise so eingestellt ist das er den 
Sende/Empfangsbetrieb der beiden Max485 steuert (über 2 pins). Später 
wird das sicher anders gemacht aber jetzt ging es mir ja erstmal um die 
prinzipielle funktionalität. Naja, und ohne optokoppler hat es zumindest 
schon geklappt.

Gut, dann werd ich mich mal an steckbrett setzten und die Vorschläge 
einarbeiten. Melde mich dann wieder:).

von Matthias B. (matthias_b14)


Angehängte Dateien:

Lesenswert?

So ich hab jetzt mal den Aufbau entsprechend der Zeichnung von Martin 
geändert und es funktioniert:):).

Allerdings ergibt sich für mich jetzt noch eine Frage:

Wenn ich den zweiten Optokoppler so anschließe wie auf der Zeichnung von 
Martin gezeigt, habe ich dann noch eine einwandfreie galvanische 
Trennung?
Da ich ja den Max485 mit der getrennten Leitung versorge dachte ich bis 
jetzt das ich auch die Signale welche in bzw. aus dem Bauteil kommen 
über den selben Stromkreis versorgen muss. Wenn ich aber anders als auf 
dem Bild gezeigt VCC und VDD vertausche  erhalte ich zwar auch eine 
antwort vom µC, diese ist aber Zeichensalat (Zumindest stimmt aber immer 
die anzahl der Zeichen).

Ich hab mal ne kleine skizze von dem Empfangskanal des Max485 gemacht. 
So wie es da gezeigt wird funktioniert der empfang nicht korrekt. Was 
mache ich da falsch? Ach ja, wenn ich den OK weg lasse funktioniert 
alles einwandfrei sodass das problem bei dem Bauteil liegen müsste.

Edit:
Hab mal ein Beispiel angehängt wo ich einen Text übermittle (unten) und 
die entsprechenden Antworten (oben). Wie man erkennt stimmt die Länge 
des Empfangsstrings überein. Auch ist der Inhalt der Antworten 
identisch. Scheint eine art codierfehler zu sein...?

von Matthias B. (matthias_b14)


Angehängte Dateien:

Lesenswert?

Hm irgendwie konnt ich das Bild nicht einfügen. Na dann eben hier:)

von David P. (chavotronic)


Lesenswert?

Evtl ist der Optokoppler zu langsam. Schau mal ins Datenblatt bzw setze 
die Baudrate mal runter.

von David P. (chavotronic)


Lesenswert?

Wenn das nicht geht, einfach mal den Ausgangsport toggeln mit nem Delay, 
und schauen ob du am Ausgang ne LEDs ans blinken bekommst.

von Matthias B. (matthias_b14)


Angehängte Dateien:

Lesenswert?

Das glaub ich nicht da es mit der variante von Martin ja wunderbar 
funktioniert. Also wenn ich ISO VCC und ISO GND gegen VCC und GND 
tausche.

Hab im Anhang mal den aufbau wie es funktioniert. Allerdings ist mir 
jetzt nicht klar warum es das tut. Ist denn jetzt noch ne galvanische 
Trennung gegeben wenn ich ISO VCC auf den Max232 ziehe?

Falls jemand weiß warum ich mit dieser geänderten Spannungsversorgung 
plötzlich alles richtig empfange bitte melden, bin grad etwas 
verwirrt...

von David P. (chavotronic)


Lesenswert?

Das kann nicht sein, das sollte auch gehen wie in deinem Originalbild. 
Kann ich mal einen kompletten Schaltplan sehen. d.h. wie der MAX232 und 
der MAX 3468 versorgt werden?
Ich vermute fast dass dein max 232 dann auch GNDISO abbekommen hat wenn 
es auf einmal läuft.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Hab im Schaltplan nur die 2 Spannungen angegeben um klar zu machen, 
dasses getrennt ist.

von Matthias B. (matthias_b14)


Angehängte Dateien:

Lesenswert?

Der Hinweis mit der Verbindung zum Max232 hat mich nochmal genauer auf 
die Schaltung blicken lassen. Da ist mir aufgefallen das ich die 
steuerung des Sende/Empfangsberiebs des Max485 ja über den Atmega8 
steuer welcher natürlich am anderen Stromkreis klemmt. Hier hab ich doch 
glatt ne trennung der Leitung vernachlässigt. Hab ich gleich mal 
eingebaut und jetzt funktioniert es "fast". :).

Einziges Problem was sich jetzt noch ergibt sind viele Leerzeichen 
welche sich am anfang und ende des Strings schmuggeln.

Ich mach jetzt erstmal ne Zeichnung. Meld mich dann nocheinmal. Oh, und 
vielen Dank bis hierhin schonmal:)

von Matthias B. (matthias_b14)


Angehängte Dateien:

Lesenswert?

Hubs, da hab ich mich aber vorhin selber reingelegt. Es funktioniert 
NICHT:(. Hatte den Empfangskanal beim testen verbunden gehabt...

Nun ich hab jetzt zum besseren verständniss mal ne Zeichnung angehängt. 
Langsam bauen sich bei mir "Eagle-Fähigkeiten" auf :P. Hoff man kann 
alles soweit erkennen.

Also, beim ersten bild funktioniert die Übertragung nicht. Der µC 
Empfängt zwar und antwortet auch aber am PC kommt nur salat an (Bild 2).

Lasse ich nun jedoch den zweiten OK komplett weg funktioniert alles 
hervorragend (Bild 3 und 4). Ich frag mich nun natürlich was ich falsch 
mache. Irgendwie scheinen ja die Zeichen welche der ATMega zurücksendet 
nicht ordentlich interpretiert werden. Jemand nen Tipp was ich da machen 
kann?

von Mine Fields (Gast)


Lesenswert?

Dein Controller und dein RS485-Wandler hängen auf dem falschen 
Groundpotential.

Mit welcher Baudrate arbeitest du? Die Optokoppler sind schon recht 
langsam.

Außerdem fehlen alle Bypasskondensatoren.

von Bastler (Gast)


Lesenswert?

Verwende in deinem Schaltplan doch mal nicht die gleiche Netzbezeichnung 
für deine jeweils zwei Gnd- und VCC-Netze. Eagle verbindet die sonst, 
auch wenn du keine Verbindung einzeichnest und dann ist es vorbei mit 
der Isolation.

von Japp (Gast)


Lesenswert?

Der OK2 ist redundant, den kann man weglassen.

von Zacc (Gast)


Lesenswert?

Wenn der GND des OK2 Einganges auf der anderen Seite ist geht natuerlich 
nichts. Da wird dann kein Strom fliessen.

von tip (Gast)


Lesenswert?

Pin 4 und 5 von OK2 sind vertauscht. Oder Pin 4 an GND und 10k als 
PullUp an VCC.

von Matthias B. (matthias_b14)


Lesenswert?

Ui, viele Anworten, dann will ich mal was dazu schreiben.

> Dein Controller und dein RS485-Wandler hängen auf dem falschen
> Groundpotential.
>
> Mit welcher Baudrate arbeitest du? Die Optokoppler sind schon recht
> langsam.
>
> Außerdem fehlen alle Bypasskondensatoren.

Meinst du den µC und den zweiten RS485? Wenn ja dann war das so 
beabsichtigt. Ich wollte zunächst erst einmal eine galvanische trennung 
hinbekommen bevor ich mich an größeres wage.

Ich arbeite gerade mit 9600Baud. Sollten die Koppler also schaffen denk 
ich.

> Verwende in deinem Schaltplan doch mal nicht die gleiche Netzbezeichnung
> für deine jeweils zwei Gnd- und VCC-Netze. Eagle verbindet die sonst,
> auch wenn du keine Verbindung einzeichnest und dann ist es vorbei mit
> der Isolation.

Danke für den Tip. Werde ich mir für die Zukunft merken. Hier wollte ich 
einfach mal zeigen wie ich es verdrathet habe. Falls ich irgendwann mal 
ne Platine ätzen werde weiß ich aber jetzt schonmal bescheid:).

> Der OK2 ist redundant, den kann man weglassen.

Ist das so? Muss ich den ausgang des Max485 nicht auch galvanisch 
mittels optokoppler trennen?

> Wenn der GND des OK2 Einganges auf der anderen Seite ist geht natuerlich
> nichts. Da wird dann kein Strom fliessen.

Hab ich grad angepasst (GND und VCC an Pin 5, Signal an Pin4). Leider 
bekomme ich immer noch zeichensalat:(.

Bin also für weitere Lösungsvorschläge bzw. hinweise dankbar.
Ach ja, und nochmal vielen Dank für die hinweise bisher:).

von Mine Fields (Gast)


Lesenswert?

Matthias B. schrieb:
> Meinst du den µC und den zweiten RS485? Wenn ja dann war das so
> beabsichtigt. Ich wollte zunächst erst einmal eine galvanische trennung
> hinbekommen bevor ich mich an größeres wage.

Ohne Groundverbindung zwischen der zwei RS485-Wandler geht es aber 
nicht. Die müssen auf einem gemeinsamen Massepotential arbeiten.

von Matthias B. (matthias_b14)


Lesenswert?

Mine Fields schrieb:
> Matthias B. schrieb:
>> Meinst du den µC und den zweiten RS485? Wenn ja dann war das so
>> beabsichtigt. Ich wollte zunächst erst einmal eine galvanische trennung
>> hinbekommen bevor ich mich an größeres wage.
>
> Ohne Groundverbindung zwischen der zwei RS485-Wandler geht es aber
> nicht. Die müssen auf einem gemeinsamen Massepotential arbeiten.

Ja, das habe ich auch schon oft gelesen. Prinzipiell funktioniert es 
bisher aber auch ohne masseverbindung. Nur mit OK 2 hält nicht. Werd 
aber morgen Abend mal versuchen die Massen zu verbinden.

Wie macht man das eigentlich wenn die Max485 weit entfernt liegen und 
zwei unterschiedliche galvanisch getrennte stromkreise haben? Dann macht 
das mitführen der masse doch keinen Sinn, oder?

Hab aber leider immer noch nicht die Kommunikation hinbekommen. 
Irgendwas ist am empfangsteil falsch...?

von S.Tronzo (Gast)


Lesenswert?

Ja sicher. Ist es. Das Unschlten der Richtung sollte jede Richtung fuer 
sich machen, aufgrund des Protokolles. Einen extra Faden fuer das 
Umschalten mitzufuehren, zusaetzlich zum GND ist nicht praktisch und ist 
auch fehleranfaellig.

Falls das zu schwierig ist, sollte man RS422 waehlen, da muss man die 
Richtung nicht umschalten.

von Morc (Gast)


Lesenswert?

Ja. Mal ueberlegen wie die Stroeme fliessen...

von Matthias B. (matthias_b14)


Lesenswert?

S.Tronzo schrieb:
> Ja sicher. Ist es. Das Unschlten der Richtung sollte jede Richtung fuer
> sich machen, aufgrund des Protokolles. Einen extra Faden fuer das
> Umschalten mitzufuehren, zusaetzlich zum GND ist nicht praktisch und ist
> auch fehleranfaellig.
>
> Falls das zu schwierig ist, sollte man RS422 waehlen, da muss man die
> Richtung nicht umschalten.

Ja, das will ich später ja auch nicht So machen. War hier der 
Bequemlichkeit halber das ein controller beide 485 Bausteine schaltet. 
Später wurde ich das mit mehreren controllern testen aber zuvor wollt 
ich es möglichst einfach halten.

Noch ne verstandnisfrage: Die Massen der 485er sollten immer verbunden 
werden auch wenn jeder ic über eine eigene getrennte spannungsversorgung 
verfügt?

von Zacc (Gast)


Lesenswert?

Noch ne verstandnisfrage: Die Massen der 485er sollten immer verbunden
werden auch wenn jeder ic über eine eigene getrennte spannungsversorgung
verfügt?

Was? Die Trennung erfolgt ja nicht auf der RS485 Seite, sondern zwischen 
RS485 und dem Contoller oder PC. Dh der RS485 ist durchgezogen, mit dem 
GND. Deshalb fuehrt man ja, ausser man trennt doppelt, auch die 5V fuer 
den RS485 mit dem Kabel mit.

Das meinte ja Morc(Gast) mit ueberlegen wie die Stroeme fliessen. Also 
erst mal die GND Symbole unterscheidbar machen, dann ueberlegen wie die 
stroeme fliessen. Und welche potentiale wohin gehoeren.

von Zacc (Gast)


Lesenswert?

Ein standard RS485 kann nur +-7V gleichtakt spannung. Wenn die 
gleichtakt spannung hoeher ist, geht nicht zwinged etwas kaputt, es geht 
einfach nicht mehr. Deswegen sollte man ja auch den GND durchziehen. 
Damit wird, bis auf Stroeme, die gleichtakt spannung Null.

von Mine Fields (Gast)


Lesenswert?

Matthias B. schrieb:
> Noch ne verstandnisfrage: Die Massen der 485er sollten immer verbunden
> werden auch wenn jeder ic über eine eigene getrennte spannungsversorgung
> verfügt?

Ja. Wenn beide Schaltungen geerdet sind, ist die Erde die gemeinsame 
Masse. Besser ist aber wirklich, die Masse wirklich mitzuführen und bei 
Bedarf die RS485 von der Controllerschaltung noch einmal galvanisch zu 
trennen.

von Matthias B. (matthias_b14)


Lesenswert?

Also irgendwie schein ich zu doof zu sein. Das ganze will immer noch 
nicht funktionieren. Ich hab jetzt mal die Massen verbunden und dann 
gesendet. Ergibt genau das gleiche ergebniss. Wenn ich den zweiten 
Max485 über den selben Stromkreis versorge kommt nur noch ein bruchteil 
der übertragenen Zeichen an.

Das problem muss an dem Optokoppler liegen da ich ja ohne das Bauteil 
einen einwandfreien Empfang habe. Ich habe den OK jetzt auch schon 
ausgetauscht um einen eventuellen defekt auszuschließen. Das Ergebnis 
ist immer noch genau gleich:(. Auch das entfernen der 
terminierungswiderstände an den A-B Leitungen brachte keinen Erfolg.

Bin jetzt echt Ratlos. Oder muss ich das Signal invertieren oder irgend 
sowas? Vielleicht nen Transistor wie bei der Empfangsleitung?
Möchte gern mal ne vollständige trennung hinbekommen, deshalb bin ich so 
hartnäckig, sorry...

von Mine Fields (Gast)


Lesenswert?

Es fehlen immer noch die Bypasskondensatoren.

10k Pullup sind außerdem sehr viel für den Optokoppler.

von Matthias B. (matthias_b14)


Lesenswert?

Mine Fields schrieb:
> Es fehlen immer noch die Bypasskondensatoren.
>
> 10k Pullup sind außerdem sehr viel für den Optokoppler.

JUHUUUUUU, du hast des rätsels Lösung gefunden. Ich hab den 10k 
Widerstand gegen einen 1k ausgetauscht und siehe da, es GEHT:):):). 
DANKE!

Interessant was son kleiner Widerstand doch bewirken kann. Obgleich es 
natürlich schon bemerkenswert ist das es bei dem anderen OK mit nem 10k 
funktioniert. Liegt das an dem Transistor der den eingang nochmal 
verstärkt?

Ach ja, wegen den Kondensatoren. Meinst du sowas wie es hier angeordnet 
ist:

http://www.mikrocontroller.net/articles/Galvanische_Trennung

Wenn ja hab ich sogar schon einen in der Schaltung eingefummelt aber auf 
der Zeichnung vergessen. Wenn nein, wo dann?

Danke für die viele Geduld mit mir:)

von Mine Fields (Gast)


Lesenswert?

Wenn der Transistor ausgeschaltet wird, kann das Netz nur noch über den 
Pull-Up umgeladen werden. Und da da doch meistens etwas Kapazität 
drinsteckt dauert das eine Weile, wenn der Widerstand so hochohmig ist. 
Schau dir das mal mit dem Oszilloskop an (oder in LTSpice), dann wird 
dir klar, was dort passiert.

Matthias B. schrieb:
> Ach ja, wegen den Kondensatoren. Meinst du sowas wie es hier angeordnet
> ist:

An die Versorgungsleitungen jedes IC gehört ein Kondensator. 100n haben 
sich hier eigentlich bewährt.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Interessant, dass die 10k bei dir zu viel waren, die 4N35 sehen bei mir 
sogar meist nur den AVR internen Pullup mit 30k aufwärts.

von sagsig (Gast)


Lesenswert?

4N35 raus und 6N136 rein.....und mit Oszi kontrollieren !

von trenner (Gast)


Lesenswert?

Hey Leute,

ich stehe nun vor dem gleichen Problem wie der OP. Ich möchte einen 
RS485 Transmitter (genauer DMX) mit galvanischer Trennung konstruieren.

Allerdings finde ich im Netz viel Widersprüchliches, wie nun die Masse 
zu verbinden ist.

http://www.mikrocontroller.net/articles/Galvanische_Trennung#Beispielschaltung
Im Schaltplan auf dieser Seite ist zu sehen, dass die Schaltungsmasse 
nicht mit der vom RS485 Bus verbunden wird, sondern letztere mit der 
GNDOUT vom DC-DC-Wandler.

Ist das richtig so?

Beste Grüße

von Falk B. (falk)


Lesenswert?

Ja.

von trenner (Gast)


Lesenswert?

Danke!

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.