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.
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
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
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...