Hallo liebe Forumgemeinde, in meiner Schaltung sind zwei Mikrocontroller über UART miteinander verbunden. Die Kommuniaktion ist zeitweise gestört und mir wurde empfohlen Serienwiderstände in die RX TX Leitungen einzubauen, seitdem kommt es zu keiner Fehlübertragung. Ich würde gerne den Fehler Messtechnisch festhalten, aber längeres messen zeigte kein Fehler in den Spannungsamplituden. Ich vermute es sind reflektionen, aber wie misst man diese Reflektionen mit einem Oszi? Kann mir jemand einen Tipp geben?
Nicht jede schnelle Reflektion kann man mit jedem Oszi sichtbar machen. Trotz LAN-Tester habe ich vor vielen Jahren ein ganzes Hochhaus systematisch abgesucht. Im obersten Stockwerk hatte einer umgeräumt und der RG-58-Terminator an den VORletzten PC gesteckt.
> in meiner Schaltung sind zwei Mikrocontroller > über UART miteinander verbunden. Wie weit auseinander? Welche Potentiale? Wie ist die Versorgung? > Die Kommuniaktion ist zeitweise gestört und mir wurde empfohlen > Serienwiderstände in die RX TX Leitungen > einzubauen, seitdem kommt es zu keiner Fehlübertragung. Wo hast du die Widerstände eingebaut? Welcher Wert?
@ Azubi (Gast) >Hallo liebe Forumgemeinde, in meiner Schaltung sind zwei Mikrocontroller >über UART miteinander verbunden. Die Kommuniaktion ist zeitweise gestört >und mir wurde empfohlen Serienwiderstände in die RX TX Leitungen >einzubauen, seitdem kommt es zu keiner Fehlübertragung. Naja, da ist was faul. Ein UART ist sooo langsam, dass Reflexionen praktisch keine Rolle spielen. Ich tippe eher auf Masseverschiebungen oder EMV-Einkopplungen. > Ich würde gerne >den Fehler Messtechnisch festhalten, aber längeres messen zeigte kein >Fehler in den Spannungsamplituden. WIE hast du denn gemessen? > Ich vermute es sind reflektionen, >aber wie misst man diese Reflektionen mit einem Oszi? Kann mir jemand >einen Tipp geben? Mit einem SCHNELLEN Oszi , 300MHz++, und einem HF-tauglichen Tastkopf mit KURZER Masseanbindung. Ist hier aber IMO ein Irrweg, siehe Wellenwiderstand. MFG Falk
Hallo Azubi, was du sagst ergibt nur Sinn, wenn du eine sehr hohe Datenrate in den UARTs eingestellt und auf RS232 Transciever verzichtet hast. Dann kannst du in der Tat Probleme mit der Wellenwiderstandsanpassung haben. Wenn die Übertragungsgeschwindigkeit auf vernünftige Werte für die Kabellänge eingestellt ist und RS232 Transceiver verwendet werden, dürften eingefügte Serienwiderstände eigentlich nichts wesentlich ändern. Heutezutage verwendet man für solche Zwecke symmetrische, differentielle Signalübertragung mit RS422/485 Transceivern und verwendet abgeschirmte Kabel mit beidseitig aufgelegtem Schirm und floatender Signalmasse (-> Profibus). Der LT1785 beispielsweise ist optimal dafür geeignet. Kai Klaas
@Kai Klaas (Gast) >was du sagst ergibt nur Sinn, wenn du eine sehr hohe Datenrate in den >UARTs eingestellt und auf RS232 Transciever verzichtet hast. Dann kannst >du in der Tat Probleme mit der Wellenwiderstandsanpassung haben. ??? Bitte? Selbst bei 115k2 muss man VERDAMMT lange Kabel haben, um mit Reflexionen Probleme zu bekommen. Und man beachte, ein UART macht eine 16x Überabtastung. Und was soll ein popeliger MAX232 in bezug auf Anpassung und Wellenwiderstand besser machen? >Heutezutage verwendet man für solche Zwecke symmetrische, differentielle >Signalübertragung mit RS422/485 Transceivern und verwendet abgeschirmte >Kabel mit beidseitig aufgelegtem Schirm und floatender Signalmasse (-> >Profibus). Der LT1785 beispielsweise ist optimal dafür geeignet. Mag sein, spielt hier aber keine Geige. Wenn auf einer Platine bzw. in einem Gerät zwei uCs per UART direkt miteinander reden auf CMOS-Pegel, dann braucht man keinen Tranceiver. MFg Falk
Manchmal kommt es auch auf diiie Kabel und deren Länge an. Es gab auch schon kuriose Fälle wo 2m Kabel zu lang waren für eine störungsfreie Verbindung. Ursache habe ich damals nicht gesucht, da ich wußte daß 20 cm kürzen half. Mein Verdacht war Wellenwiderstand/ Resonanzen.
Fakt ist, dass der OP mit seinen Widerständen eine Verbesserung erzielt hat. Wenn wir also einfach statt von Reflexionen von einem Klingeln auf der Leitung reden, könnten wir dann die Diskussion voran bringen?
@Falk >Selbst bei 115k2 muss man VERDAMMT lange Kabel haben, um mit Reflexionen >Probleme zu bekommen. Wissen wir was er für Kabel verwendet?? Woher weißt du, daß das 115kbaud sind?? >Und was soll ein popeliger MAX232 in bezug auf Anpassung und >Wellenwiderstand besser machen? Endliche Diver Slew Rate. Beim MAX232 von TI 3V/µsec, typisch. Bewirkt das Gleiche wie beim LT1785 mit seiner limited slew rate: "Controlled slew rates on the driver outputs control EMI emissions and improve data transmission integrity on improperly terminated lines." >Mag sein, spielt hier aber keine Geige. Wenn auf einer Platine bzw. in >einem Gerät zwei uCs per UART direkt miteinander reden auf CMOS-Pegel, >dann braucht man keinen Tranceiver. Woher weißt du, was er hat?? Kai Klaas
Hallo, vielen Dank für die Antworten. Die beiden Bausteine sind ohne RS232 Pegelwandler miteinander auf der PCB verbunden und die Baurate beträgt 115k2. Die Platine ist nicht geätzt, sondern eine Lochrasterplatine. Zur Fehlersuche wurden alle anderen Bausteine deaktiviert und letzte Nacht wurde ein Dauerlauf mit zwei Widerstandswerten durch geführt. Der erste Dauerlauf lief mit 330Ohm und 1KOHm einwandfrei. Die Widerstände wurden so nah wie möglich am Empfänger (RX) angeschlossen. Der Sender sendet immer die gleiche Charakterfolge und der Empfänger speichert die Information in einem Software FIFO Buffer. Zwischendurch prüft der Mikrocontroller die Empfangendaten auf Richtigkeit. Der zweite Testablauf war identisch nur mit 120Ohm Widerständen und es kam zu Fehlern. Wellenwiderstandsanpassung ist für mich ein neues Thema und zum besseren Verständnis wollte ich dieses Problem messtechnisch Untersuchungen, aber irgendwie suche ich die Nadel im Heuhaufen, weil der Fehler recht sporadisch auftritt.
Hallo Azubi,
>Die Platine ist nicht geätzt, sondern eine Lochrasterplatine.
Dann hast du wahrscheinlich keine durchgehende Massefläche, oder? Dann
brauchst du dich nicht zu wundern. Ohne Massefläche kein einheitliches
Bezugspotential und jeder Schaltvorgang erzeugt genügend Störungen auf
der Masse um die Noise Margin am jeweilen UART Eingang zu zerstören.
Also, du brauchst eine durchgehende Massefläche und dann solltest du
nicht beim Empfänger, sondern beim Sender einen Widerstand von sagen wir
mal 47R in Serie zum Ausgang schalten. Wie weit sind denn die beiden
Mikrocontroller von einander entfernt?
Kai Klaas
Du könntest zusätzlich jedem UART-Eingang einen Schmitt-Trigger voransetzen mit einem RC-Glied aus 1k und 100..220pF an seinem Eingang. Das RC-Glied siebt dir dann hochfrequente Störspikes aus und der Schmitt-Trigger erzeugt dir wieder ein sauberes Rechteck. Achte darauf, daß der Schmitt-Trigger symmetrisch um Vcc/2 schaltet. Das ist aber kein Ersatz für die durchgehende Massefläche! Zur Not könntest du direkt unter der Lochrasterplatine eine durchgehende Kupferplatine anordnen und verschiedene Massepunkte der Schaltung auf kurzem Weg mit dieser Massefläche verbinden. Kai Klaas
UART Leitung auf einer Platine mit 115200Baud und Probleme mit Reflektionen, Klingeln o.ä.? Da läuft doch gravierend was schief! Wie Falk schon schrieb: Ein UART verwendet in der Regel Überabtastung, und selbst wenn nicht, dann werden die Daten in der Mitte der Periode abgetastet. Nach rund 5µs sollte der Pegel soweit stabil sein, dass die Signale richtig eingelesen werden. Wenn das nicht der Fall ist, dann gibt es auf der Platine weitaus mehr Probleme als nur die UART Leitung. -> Fotos vom Aufbau.
>Wenn das nicht der Fall ist, dann gibt es auf der Platine weitaus mehr >Probleme als nur die UART Leitung. Er hat wahrscheinlich durch den Lochrasterplatinenaufbau und das Fehlen einer niederimpedanten Masse jede Menge Ground Noise. Der Widerstand arbeitet mit der Eingangskapazität des UART-Eingangs wie ein Tiefpaß, der einzelne Spikes aussiebt. Das würde erklären, warum er mit einem 1k Ohm Widerstand Erfolg hat, aber nicht mit einem 120 Ohm Widerstand. Kai Klaas
@ Kai Klaas (Gast) >>Die Platine ist nicht geätzt, sondern eine Lochrasterplatine. >Dann hast du wahrscheinlich keine durchgehende Massefläche, oder? Sicher nicht. Braucht er auch nicht. Aber eine HALBWEGS gescheite Masseführung und Entkopplung der Versorgungsspannung. Siehe Wellenwiderstand (ich wieder hole mich). > Dann >brauchst du dich nicht zu wundern. Ohne Massefläche kein einheitliches >Bezugspotential und jeder Schaltvorgang erzeugt genügend Störungen auf >der Masse um die Noise Margin am jeweilen UART Eingang zu zerstören. Im Einzelfall ja, allgemein sicher nicht! Soviel EMV Müll erzeugt kein uC! >Also, du brauchst eine durchgehende Massefläche Braucht er nicht. >nicht beim Empfänger, sondern beim Sender einen Widerstand von sagen wir >mal 47R in Serie zum Ausgang schalten. Unsinn.
Also zB die charakteristische Impedanz eines Kabels laesst sich super mit ca. 5MHz Rechteck (Quarzkanisterchen und einen LS00 als Treiber dahinter), einem Einkoppelwiderstand (ich nehme gern ein Kiloohm), einem 500R Poti am Ende, und einem 30-60MHz Oszi auf Senderseite (hinterm Widerstand) messen. Dabei geht es gar nicht darum die Reflektionen einzeln zu sehen - die Art auf die das Rechteck senderseitig verzerrt wird spricht schon eine sehr klare Sprache. Ein aehnlicher Aufbau wuerde es auch hier tun.
Nachtrag: Fuer die Variante mit variabler Terminierung natuerlich kein Drahtpoti nehmen ;)
Kai Klaas schrieb: >>Wenn das nicht der Fall ist, dann gibt es auf der Platine weitaus mehr >>Probleme als nur die UART Leitung. > > Er hat wahrscheinlich durch den Lochrasterplatinenaufbau und das Fehlen > einer niederimpedanten Masse jede Menge Ground Noise. Wie gesagt: Wenn der Masseversatz auf einer Platine so stark ist, das Logikpegel durcheinander kommen, dann hat nicht nur die UART Verbindung Probleme, sondern auch die Funktion der restlichen Bauteile ist fragwürdig. Um ein paar Volt Groundnoise hinzubekommen, so dass die überabgetastete UART Verbindung nicht mehr funktioniert, muss man schon ziemlich viel Mist bauen (z.B. eine PWM ohne Kondensatoren, oder ein Schaltnetzteil mit miserabler Masseführung o.ä.) Auf jedenfall irgendwas was sehr viel Strom zieht oder eine extrem hochimpedante Masseleitung.
@Benedikt K. (benedikt) (Moderator)
>Strom zieht oder eine extrem hochimpedante Masseleitung.
Wenn er denn überhaupt eine hat . . . soll ja des öfteren vorkommen 8-0
>>nicht beim Empfänger, sondern beim Sender einen Widerstand von sagen wir >>mal 47R in Serie zum Ausgang schalten. >Unsinn. Sinn!
Was liegt den noch auf dem Board? Kannst du die Störung zeitlich eingrenzen? Wenn z.B. alle 60min ein Relais schaltet und du zuuufäällig alle 20min eine Störung auf der UART hast... Eventuell hilft es auch, wenn du mal eine extra Masse-Strippe um die RX/TX Leitungen wickelst um eventuelle Störungen draussen zu halten... Knipps doch mal den Aufbau (Achtung, Bildformate ;) )
@ HildeK (Gast) >>>nicht beim Empfänger, sondern beim Sender einen Widerstand von sagen wir >>>mal 47R in Serie zum Ausgang schalten. >>Unsinn. >Sinn! Klar, bei einem UART mit 115K2 und nicht mal 1m Leitung. Was kommt als Nächstes? Terminierungswiderstände für Taster? Kopfschüttelnde Grüsse Falk
@Azubi: hat du Quarze für die Mikrocontroller verwendet, oder werden interne Oszillatoren benutzt ?
Falk Brunner schrieb: >Was kommt als >Nächstes? Terminierungswiderstände für Taster? Nein, aber z.B. für Resetleitungen! Einen Vorschlag, einen Serienwiderstand an die Quellseite und nicht auf Seite der Senke anzubringen, nur mit dem Wort 'Unsinn' zu kommentieren, konnte ich nicht unwidersprochen lassen.
Hallo Benedikt, >Um ein paar Volt Groundnoise hinzubekommen, so dass die überabgetastete >UART Verbindung nicht mehr funktioniert, muss man schon ziemlich viel >Mist bauen (z.B. eine PWM ohne Kondensatoren, oder ein Schaltnetzteil >mit miserabler Masseführung o.ä.) Auf jedenfall irgendwas was sehr viel >Strom zieht oder eine extrem hochimpedante Masseleitung. Es reicht, wenn du ein paar 74HCMOS-Bauteile ohne Betriebsspannungsentkopplung auf der Platine hast. Eine nicht ausreichend niederimpedante Masseführung besorgt dann den Rest. Im Anhang ist schön zu sehen, was 74HCMOS-Chips für Störungen produzieren, wenn sie nicht sauber entkoppelt werden. @Falk >>Dann hast du wahrscheinlich keine durchgehende Massefläche, oder? > >Sicher nicht. Braucht er auch nicht. >>nicht beim Empfänger, sondern beim Sender einen Widerstand von sagen wir >>mal 47R in Serie zum Ausgang schalten. > >Unsinn. Wenn du nicht weißt, wozu man eine durchgehende Massefläche und Widerstände an Ausgängen braucht, dann kann ich dir auch nicht helfen. Kai Klaas
Nachtrag: Das obige Bild stammt aus dem "High-speed CMOS Logic Data Book" von Texas Intruments. Es gibt auch ein pdf-file, der diese Passage enthält, habe das aber auf die Schnelle nicht finden können. Kai Klaas
Kai Klaas schrieb: > Es reicht, wenn du ein paar 74HCMOS-Bauteile ohne > Betriebsspannungsentkopplung auf der Platine hast. Eine nicht > ausreichend niederimpedante Masseführung besorgt dann den Rest. Aber das ist ein sehr kurzer Peak, der dauert keine 10µs lang und stört nicht alle Werte der Überabtastung des UARTs. Daher ist UART an sich sehr fehlertolerant, solange die Baudrate passt. Das ist der Punkt wieso ich solche Fehler für unwahrscheinlich halte. Klar, das IC kann mit mehreren MHz schalten, so dass andauernd diese Peaks vorhanden sind, aber dann beeinflussen diese Peaks mit Sicherheit mehr als nur den UART, wie ich weiter oben schon schrieb. Ich weiß nicht ob es einem µC gefällt, wenn ein paar Volt Ripple auf der Betriebsspannungsleitung sind.
Hallo Benedikt, >Aber das ist ein sehr kurzer Peak, der dauert keine 10µs lang und stört >nicht alle Werte der Überabtastung des UARTs. Daher ist UART an sich >sehr fehlertolerant, solange die Baudrate passt. Das ist der Punkt wieso >ich solche Fehler für unwahrscheinlich halte. >Klar, das IC kann mit mehreren MHz schalten, so dass andauernd diese >Peaks vorhanden sind, aber dann beeinflussen diese Peaks mit Sicherheit >mehr als nur den UART, wie ich weiter oben schon schrieb. Ich weiß nicht >ob es einem µC gefällt, wenn ein paar Vss Ripple auf der >Betriebsspannungsleitung sind. Ja, da gebe ich dir Recht. Mit Ground Noise ist es vielleicht nicht alleine erklärt. Vielleicht hat er ja auch zusätzlich kapazitives Überkoppeln in die UART Leitung? Da scheint eine Menge nicht zu stimmen. Jedenfalls kann er mit seinem 1k Widerstand am Eingang die Fehler reduzieren und mit 120 Ohm nicht. Das sieht doch so aus, als ob da Störungen auf seiner UART Leitung sind, die er durch Tiefpaßfilterung minimieren kann? Kai Klaas
@ Kai Klaas (Gast) >Wenn du nicht weißt, wozu man eine durchgehende Massefläche und >Widerstände an Ausgängen braucht, dann kann ich dir auch nicht helfen. Bist du so dumm oder tust du nur so? Schau dir mal an, wer den Artikel Wellenwiderstand geschrieben hat. http://www.mikrocontroller.net/wikisoftware/index.php?title=Wellenwiderstand&action=history >Jedenfalls kann er mit seinem 1k Widerstand am Eingang die Fehler >reduzieren und mit 120 Ohm nicht. Das sieht doch so aus, als ob da >Störungen auf seiner UART Leitung sind, die er durch Tiefpaßfilterung >minimieren kann? Das bestreitet doch keiner. Aber es ist Herumdoktern an Symtomen, anstatt echter Ursachenforschung oder gar Bekämpfung! MfG Falk
@Falk >Bist du so dumm oder tust du nur so? Schau dir mal an, wer den Artikel >Wellenwiderstand geschrieben hat. Mann, bist du wieder unfreundlich! Wie kann man sich nur so aufregen? Komm mal von deinem hohen Roß runter, es gibt auch noch andere Menschen, die was wissen... Kai Klaas
Also meine erste Frage wäre gewesen ob die µC genügend Stützkondensatoren haben. Als nächstes wäre natürlich ein Bild vom Aufbau interessant. Alles andere ist doch reine Spekulation...
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.