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)
Ja. Optokoppler funktionieren so nicht. Wi solldas gehen?
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
Es fehlen die PullDown-Widerstände (z.B. 10K) jeweils auf der Sekundärseite der Optokopler, damit auch der LOW-Pegel definiert ist.
Besser wie Optokoppler sind magnetische, wie der ADum1400 oder kapazitive, wie der ISO721
Forzo schrieb: > Besser wie Optokoppler sind magnetische Klar, magnetische Optokoppler - warum heißen die wohl Opto mit Vornamen?
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?
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:).
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...?
Hm irgendwie konnt ich das Bild nicht einfügen. Na dann eben hier:)
Evtl ist der Optokoppler zu langsam. Schau mal ins Datenblatt bzw setze die Baudrate mal runter.
Wenn das nicht geht, einfach mal den Ausgangsport toggeln mit nem Delay, und schauen ob du am Ausgang ne LEDs ans blinken bekommst.
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...
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.
Hab im Schaltplan nur die 2 Spannungen angegeben um klar zu machen, dasses getrennt ist.
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:)
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?
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.
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.
Wenn der GND des OK2 Einganges auf der anderen Seite ist geht natuerlich nichts. Da wird dann kein Strom fliessen.
Pin 4 und 5 von OK2 sind vertauscht. Oder Pin 4 an GND und 10k als PullUp an VCC.
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:).
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.
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...?
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.
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?
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.
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.
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.
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...
Es fehlen immer noch die Bypasskondensatoren. 10k Pullup sind außerdem sehr viel für den Optokoppler.
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:)
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.
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.
4N35 raus und 6N136 rein.....und mit Oszi kontrollieren !
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
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.