Forum: Mikrocontroller und Digitale Elektronik Problem bei der Anbindung von Steckkarten über einen Bus


von Christian W. (clupus)


Angehängte Dateien:

Lesenswert?

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

von Reinhard Kern (Gast)


Lesenswert?

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

von Christian W. (clupus)


Lesenswert?

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

von Reinhard Kern (Gast)


Lesenswert?

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

von Reinhard Kern (Gast)


Angehängte Dateien:

Lesenswert?

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

von Christian W. (clupus)


Angehängte Dateien:

Lesenswert?

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

von Christian W. (clupus)


Lesenswert?

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

von Christian W. (clupus)


Angehängte Dateien:

Lesenswert?

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

von Peter B. (pbuenger)


Lesenswert?

> 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

von Reinhard Kern (Gast)


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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

von MCUA (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.