Hallo allerseits, ich habe hier für meine Studienarbeit eine elektrische Schaltung aufzubauen, die im wesentlichen aus einem FPGA, mehreren ADCs und mehreren DACs besteht. Weil noch nicht 100%-ig sicher ist, wie viele von welchem Typ benötigt werden, ist das ganze über ein Bussystem realisiert: Der Bus selber besteht aus einer (industriell gefertigten) Platine von ca 20 cm länge, auf der in regelmäßigen Abständen Harting Stecker aufgelötet sind. Ich habe weiterhin eine Einsteckkarte mit dem FPGA drauf. Um den FPGA vor Überspannungen beim experimenteren am Bus zu schützen, wird eine Spannungswandlung 3,3V/5V mittels SN74LVC8T245 und SN74LVC2T45 durchgeführt. Zudem war die Hoffnung, dass der 5V Pegel auf dem Bus etwas störsicherer ist, da die entsprechenden Schaltschwellen höher liegen. Für einen ersten Testaufbau wurden ein ADC (ADC8548) und ein DAC (TLV5630) mit dem FPGA zusammen angeschlossen. Dabei werden nicht die selben Leitungen für ADC und DAC verwendet. Die Übertragungsfrequenz ist auf ca 10 MHz eingestellt (Ziel wären >25MHz wegen der Anforderungen an die Signalauswertung). Der DAC hat noch einen 74ALS245 Bus Treiber vorgeschalten, um die Signale noch einmal "besser" zu machen. Siehe soweit auch das Bild. Je nach der genauen Steckposition der einzelnen Platinen im Bus funktionieren einzelne Karten oder auch nicht: Vom ADC bekomme ich falsche Werte zurück, wenn ich das Statusregister auslese. Der DAC stellt die interne Referenz nicht korrekt ein, sie pendelt hin und her und ist daher nicht zu gebrauchen. Beim DAC habe ich es mal explizit ausprobiert: Wenn ich den Abstand zu groß mache zwischen FPGA und DAC Karte, wird die interne Referenz nicht aktiviert (trotz der Anforderung seitens des FPGAs). Ich weiß momentan nicht mehr woran es liegen kann. Soweit ich die Signale verstehe/interpretiere, stimmen die mit den Anforderungen überein. Sprich: Ich finde nicht die Ursache für das fehlerhafte Verhalten. Habt ihr mir noch eine Idee, woran das liegen kann/was ich nachprüfen soll? Können das schon Laufzeitverzögerungen sein, die sich so stark bemerkbar machen? Wenn alle Signale um die gleiche Strecke verzögert werden, müsste doch alles trotzdem klappen, oder??? Danke Christian
Hallo, das sind alles sehr schnelle ICs, schneller wahrscheinlich als notwendig, aber das ist heute eben so, mit 74LS kann man nicht mehr arbeiten - aber die Konsequenz ist, dass auch bei relativ kurzen Leitungen Reflexionen auftreten. Es geht dabei garnicht darum, wann die Signale dort wo sie hinsollen ankommen und ob gleichzeitig (im Prinzip schon, aber das ist ein eher untergeordnetes Problem). Der Hauptfehler besteht wahrscheinlich darin, dass die Flanken der Signale an den Enden reflektiert werden und sich die reflektierten Signale mit den Originalen überlagern, wodurch die Signalform deutlich verfälscht wird. Dabei ist es durchaus möglich, dass die Reflexionen mehrmals hin- und herlaufen und daher mehrere Laufzeiten andauern. Die ersten Probleme dieser Art habe ich schon vor Jahrzehnten festgestellt bei der Umstellung einer vorhandenen Speichermatrix von 74LS auf 74HC/HCT: erst nachdem ich in alle Leitungen (Adressen, Daten, Rd, Wr, Cs) Widerstände eingefügt habe, funktionierte der Speicher wieder zuverlässig. Dabei ist das noch einfache Feld/Wald/Wiesentechnik und noch lange nicht esoterische überflüssige HF-Technologie, wie ein bestimmter MOD hier gleich wieder einwenden wird. Bei einem Bus ist die Abhilfe garnicht so einfach, weil es keine festen Positionen für Sender und Empfänger gibt. Ich würde mal damit anfangen, an beiden Enden Fassungen für z.B. 9polige Widerstandsnetzwerke (8 + VCC) anzuschliessen und damit zu experimentieren. Nach den Werten der Leiterbahnen müssten diese Widerstände im Bereich 100..200 Ohm liegen, aber das schaffen die ICs nicht, oft helfen aber auch schon z.B. 3,3 kOhm. Das ist dann kein echter Abschluss, aber wenigstens eine Dämpfung für auftretende Schwingungen. Eine andere Möglichkeit wäre, spezielle Bustreiber mit kontrollierter (langsamerer) Anstiegszeit zu verwenden. Es schadet keineswegs, erst mal zu messen, aber die Erfassung solcher Störungen ist auch nicht so ganz trivial, es ist schwierig festzustellen, ob die auf dem Oszi zu sehenden Überschwinger auf dem Bus real sind oder erst durch den oder im Tastkopf entstehen. Das hängt sehr stark davon ab, wie die Masse des Tastkopfs mit der Schaltung verbunden ist. Und natürlich braucht man ausser Erfahrung auch eine gute Ausrüstung, also das Oszilloskop soltte schon ein paar hundert MHz können. Gruss Reinhard
Hallo Reinhard, habe ich dich richtig verstanden, dass ich mit den 3,3kOhm gegen Masse terminieren soll? Soweit ich das mit dem Wellenwiderstand verstanden habe, muss ich am Ende der Leitung (des Busses) die Terminierung machen. Für mich bleibt dann nur eine zusätzliche Karte im letzen Steckplatz als Option. Momentan sind noch alle Leitungen P2P, allerdings halt mit Abzweigungen, die in's leere laufen. Diese "langsamen" Treiber, sind das dann auch 74xx245 Chips oder haben die ein anderes Pinout? Ich frage deshalb, weil ich nicht sonderlich viel Lust habe, alle Platinen noch mal neu zu machen... An der Hardware sollte es nicht scheitern (Oszi kann bis 500MHz). Wohl aber ab der Erfahrung mit HF Messungen. Ich gebe zu, ich habe das noch nie vorher gemacht. Daher traue ich meinen Messungen auch nicht zu 100%. Vielen Dank schonmal Christian
Christian Wolf schrieb: > muss ich am Ende der Leitung (des Busses) die Terminierung machen. > Für mich bleibt dann nur eine zusätzliche Karte im letzen Steckplatz als > Option. Hallo, wie die Wurst hat der Bus 2 Enden. Bei mir funktionieren aber auch alte Systeme, bei denen die CPU-Karte immer auf einer Seite steckt und Pullup-Widerstände am anderen Ende (HF-technisch ist es egal ob Pullup oder Pulldown). Das Problem ist, dass deine Treiber keine beidseitige Terminierung mit dem Wellenwiderstand der Leiterbahnen schaffen, weniger als etwa 330 Ohm beiseitig ist nicht drin. SN74LVC8T245 sind natürlich sauschnell, Schaltzeiten < 1ns, da ist es kein Wunder, wenn ein unterminierter Bus ins Schwingen kommt. Ich weiss natürlich nicht, wie rum du die ICs verwendest und in welcher Bauform, aber wenn an Pin 23 5V liegen, könnte man ja zumindest testhalber normale 74LS245 einsetzen. Eine ganz saubere Lösung ist das aber nicht, immerhin wird der Bus dadurch etwa 10mal langsamer. 25 MHz sind dann natürlich nicht mehr drin. Christian Wolf schrieb: > Zudem war die Hoffnung, dass der 5V Pegel auf dem Bus > etwas störsicherer ist, da die entsprechenden Schaltschwellen höher > liegen. Nur bei CMOS-Pegeln, und der Vorteil ist nicht gross. Wenn der Bus das einzige mit 5V ist. würde ich es bei 3.3V belassen, äussere Störungen sind nicht dein Problem, sondern die selbst erzeugten. Wenn irgend möglich, solltest du wenigstens mal zum Test an beiden Enden 1kOhm anschalten und schauen, ob es dann funktioniert. Wenn du die Busplatine fertig gekauft hast, sollte dir der Hersteller Genaueres über die Impedanz der Busleitungen sagen können (dann wären aber wahrscheinlich schon Terminierungswiderstände dran). Viel Erfolg Reinhard
Hallo, eine Busterminierung braucht übrigens nicht viel Platz, siehe Bild. Wenn das funktioniert, müsste nur die Busplatine redesignt werden. Oder du machst dir schmale Streifen mit einem Harting-Footprint und den Widerstandsnetzwerken und lötest die hinten auf die äussersten Stecker drauf. Gruss Reinhard
Hallo nochmal, also ich habe jetzt mal für ein Signal (Takt) einen Pull-down mit 1kOhm am einen Ende des Buses eingebaut. Am anderen hängt der Sender mit seinem Pullup (weil noch nicht klar war, wie rum die Daten auf der Leitung laufen sollen beidseitiger Pullup). Habe jetzt mal gemessen: Ch4 ist direkt am Pullup des Senders gemessen. Ch2 auf der Bus-Seite des Empfängers, Ch1 auf der DAC-Seite. Die DAC Karte steckt auf dem letzen Steckplatz. Viel gebracht hat es leider (noch) nicht. Die Schwingungen bei Hi Pegel sind massiv und bei Lo Pegel wird sogar eine zusätzliche Flanke getriggert. Ich habe einen RCR Netzwerk-Chip sicherheitshalber zwischen Bus und 74ALS245 vorgesehen. Momentan ist das Netzwerk überbrückt und nicht eingebaut. Kann ich aber auch nachholen, wenn das was bringt. Reinhard Kern schrieb: > Wenn irgend möglich, solltest du wenigstens mal zum Test an beiden Enden > 1kOhm anschalten und schauen, ob es dann funktioniert. Wenn du die > Busplatine fertig gekauft hast, sollte dir der Hersteller Genaueres über > die Impedanz der Busleitungen sagen können (dann wären aber > wahrscheinlich schon Terminierungswiderstände dran). > > Viel Erfolg Reinhard Die zweiten 1kOhm probiere ich gleich noch mal aus. Die Platine habe ich nicht gekauft. Die ist hier im Institut sozusagen State of the art - hat mal irgendwer designed vom Institut. Ich gehe also davon aus, dass da nciht auf den Wellenwiderstand geachtet wurde. Dementsprechend gibt es auch keine genaue Spezifikation. Ich melde mich bald wieder. Danke schonmal Christian PS: Die Schwingung hat ca 9ns Periodendauer
Ach ja, noch eine Frage nebenbei: Wie terminiert man denn dann bei 5V korrekt? Wenn der Wellenwiderstand 100 Ohm wäre (theoretische Annahme für Rechnung), müsste ich mit 2x100 Ohm abschließen. Das macht dann 50 Ohm und führt zu ca 100 mA (pro Leitung!). Zu viel für die Treiber, klar. Selbst wenn man mit je dem dopelten Widerstand gegen GND und gegen 5V arbeitet (macht dann für DC 2x200 Ohm), bekommt man immer noch 50 mA, was sehr viel ist. Wenn ein Kondensator eingebaut wird, hat das den selben Effekt, solange das Signal sich regelmäßig ändert. Wenn das Signal quasi-konstant ist, sinkt der STrom natürlich, aber nicht bei aktiven Takt- und Daten-Signalen. Wie macht man denn das dann korrekterweise? Weniger Spannung? Oder muss man dann gleich differentiell arbeiten? Christian
Hallo nochmal, hier die Messung mit beiden Seiten 1kOhm terminiert gegen digitale Masse. Ein bisschen was hat es gebracht. Aber die "große Schwingung ist weiterhin drauf. Chrstian
> Wie terminiert man denn dann bei 5V korrekt?
Dafür gibt es verschiedene Möglichkeiten. Weitverbreitet ist bei dieser
Art von Backplanes die Terminierung mit 470Ohm nach Masse und
gleichzeitig 330Ohm nach +5V. Das setzt zwar entsprechend starke Treiber
voraus, läuft dafür aber seit vielen Jahren problemlos.
Peter
Christian Wolf schrieb: > Wie macht man denn das dann korrekterweise? Weniger Spannung? Oder muss > man dann gleich differentiell arbeiten? Traditionell, will heissen mit original TTL-Signalen, nimmt man 220 Ohm nach VCC und 330 Ohm nach GND, das ergibt Hi wie ein Pullup, braucht aber weniger Strom. Gab es oder gibt es so zu kaufen als Netzwerk. Solche Busse, z.B. SCSI, sind aber schon richtige Heizungen und brauchen leistungsfähige Netzteile und Treiber. Eine Alternative ist noch aktive Terminierung mit einem Widerstand gegen VCC/2, dieses Potential muss durch einen Push/Pull-Regler erzeugt werden: halbe Spannung gleich viertel Leistung, aber hoher Aufwand. Ansonsten ist der Weg mit der Spannung der richtige, du kannst ja mal nach LVDS googeln zur Information, aber das wäre ein weitgehendes Redesign. I.A. erfordert das differentielle Leitungen, sonst wird der Störabstand zu klein. Richtig ist auf jeden Fall, erst mal Clk sauber hinzukriegen, auf Adress- und Daten-Leitungen sind Überschwinger meistens nicht so kritisch, weil der Zustand zu einem anderen Zeitpunkt abgefragt wird als er wechselt. Bis dahin müssen sie natürlich abgeklungen sein. Gruss Reinhard PS differentiell sollte bei 10 oder 25 MHz eigentlich noch nicht nötig sein.
Reinhard Kern schrieb: > PS differentiell sollte bei 10 oder 25 MHz eigentlich noch nicht nötig > sein. Das nehme ich für 25 MHz mal vorsichtshalber zurück. Zur Clk-Sanierung kannst du dir mal das Datenblatt holen für: http://de.farnell.com/analog-devices/adn4694ebrz/transceiver-100mbps-h-duplex-8soic/dp/2099798 Gruss Reinhard
>Das Problem ist, dass deine Treiber keine beidseitige >Terminierung mit dem Wellenwiderstand der Leiterbahnen schaffen,..... zumal der Wellenwiderstand bei solchen Backplanes 30 Ohm und darunter liegen kann. Oft muss die Welle hin u zurück, bis der nötige Pegel erreicht ist. Wenn das beim Clk der Fall ist kann (wie gesagt) nat Probleme geben. >Eine Alternative ist noch aktive >Terminierung mit einem Widerstand gegen VCC/2... Oder gegen eine variable U, dann lassen sich Termin-Bedingungen dadurch leichter einstellen. > PS differentiell sollte bei 10 oder 25 MHz eigentlich noch nicht nötig > sein. mit GTL+ -Treibern (sind für paral. Backplanes gedacht) sind auch höhere fs möglich. Mit Source-synchron. Mode (dadurch wird die Backplane-Laufzeit eleminiert) ist (auch ohne GTL) auch noch über 100 MHz machbar (natürlich wenn keine Reflexionen da sind, und das Timing sonst stimmt)
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.