Forum: Mikrocontroller und Digitale Elektronik SPI Signalverstärker Terminierung?


von Kai F. (kai-) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe vor eine lange LED Leiste mit dem TLC5922 (SPI) anzusteuern. 
Eine Leiste ist dabei 50cm lang und gibt das Signal daisy-chained an die 
nächste weiter. Für drei Leisten (1,5 Meter) läuft hier schon alles. Das 
ganze soll jetzt über mehrere Meter (mindestens 20) funktionieren. Da 
ist klar, dass das nicht ohne Signalverstärkung und Terminierung 
funktionieren kann. Jetzt habe ich mir also überlegt auf jede Platine 4 
Transistoren zu platzieren um das Signal nach Bedarf verstärken zu 
können. Jedoch bin ich mir weder sicher ob ich die richtige 
Transistorschaltung verwende, noch ob die Dimensionierung nicht völlig 
daneben liegt.
Am liebsten würde ich die Widerstände noch um den Faktor 10 erhöhen.

Wäre super wenn sich das mal jemand angucken könnte.


Grüße
Kai

von holger (Gast)


Lesenswert?

Pro Stufe gehen 0.6V über die Basis-Emitterstrecke verloren.
So geht das also schon mal nicht. Nimm Schmitt-Trigger ala
74HC14.

von Thomas (Gast)


Lesenswert?

OPV in Bufferkonfiguration ist die einfachste Lösung.

von Kai F. (kai-) Benutzerseite


Lesenswert?

danke für den Hinweis, ich glaube ich werde Transistoren nie richtig 
verstehen :(
Laut Datenblatt ist der 74HC14 ein inverting schmitt trigger, ich werde 
aber wohl einen "normalen" brauchen. Oder gibt es die nur invertierend 
und ist deshalb ein OPV besser?
Wichtig ist, dass es das Teil in SMD gibt und, dass es so klein ich 
möglich ist, meine Platine ist nur 12mm breit und schon sehr voll.

Gruß
Kai

von Branko G. (branko)


Lesenswert?

Ich werde auf deine Stelle ein 74AC244 als BUS-Treiber(+-24mA) 
verwenden.
Das ist auf jeden Fall bessere Lösung als von dir vorgeschlagene 
Transistorstufe.

von Kai F. (kai-) Benutzerseite


Lesenswert?

den Baustein finde ich jetzt allerdings weder bei Reichelt, noch bei TME
Was spricht denn gegen die Schmitt Trigger? Ich habe doch gar keine 
Tri-State, daher sollten die doch locker reichen.
Kann mir jemand eine Bauteilbezeichnung nennen, ich habe bisher nur 
invertierende gefunden

Gruß
Kai

von Udo (Gast)


Lesenswert?

Hallo,

nimm 7407 oder 74LS07, die haben OpenCollector-Ausgänge und können bis 
40mA treiben. Als Kollektor-Arbeitswiderstand würde ich in deinem Fall 
dann 270 Ohm nehmen.

Gruß
Udo

von Andreas K. (a-k)


Lesenswert?

Die Transistorstufe ist schon deshalb problematisch, weil sie entweder 
wie hier gezeigt stark asymmetrisch ist (Transistor rauf, 1K Widerstand 
runter) oder reichlich Strom braucht (100 Ohm pulldown statt 1K).

Schon mal daran gedacht, RS422 Transceiver zu verwenden (26LS31/32 oder 
irgendwelche SN75xxx/MAX4xx)? Ist m.E. auch nicht aufwendiger, zumal die 
dann nicht als Zwischenverstärker dienen, sondern bis auf die 
Datenleitung ein einziger Gesamtbus entsteht. Viel mehr Kabel sind es 
auch nicht, denn bei unsymmetrischer Übertragung braucht du bei der 
Länge auch 2 Leitungen pro Signal.

von Kai F. (kai-) Benutzerseite


Lesenswert?

Der 74LS07 scheint schonmal nicht schlecht, das einzige, was mich noch 
stört ist, dass er PullUps braucht :(
Ideal wäre es für mich wenn ich den Treiber nur alle 2-3 Leisten 
bestücken müsste und den Rest mit Lötbrücken anstelle des Treibers.
Wieso gibt es denn keine nicht-invertierenden Schmitt Trigger? Also vom 
Prinzip ein invertierender und ein Nicht-Gatter in einem Chip.
Irgendwelche MAXe oder Co kommen eher nicht in Frage, weil die vom 
Prinzip her zu teuer sind und da ich 50-60 Leisten bauen will, fällt das 
schon irgendwann ins Gewicht.

@Andreas: was meinst du mit asynchron?

von Andreas K. (a-k)


Lesenswert?

Kai Franke wrote:

> Wieso gibt es denn keine nicht-invertierenden Schmitt Trigger?

Weil in den 70ern wohl niemand solche Leisten gebaut hat und dafür nicht 
invertierende Schmitt-Trigger brauchte. Und danach hat sich bei den ICs 
für Standard-Logik zwar die Technik geändert, an den Funktionen jedoch 
nur noch wenig.

Und weil zwar sicherlich mancher irgendwelche dringend benötigten 
Bausteine für was auch immer gebaut hat, die aber regelmässig 5-10 mal 
so viel kosten wie die weit verbreiteten Standardbausteine.

> Prinzip her zu teuer sind und da ich 50-60 Leisten bauen will, fällt das
> schon irgendwann ins Gewicht.

Die 26LS31/32 kosten bei R 30 Cent.

von Andreas K. (a-k)


Lesenswert?

Kai Franke wrote:

> @Andreas: was meinst du mit asynchron?

Wenn du mich meinst: Dieses Wort habe ich nicht verwendet.

von Kai F. (kai-) Benutzerseite


Lesenswert?

sorry, meinte asymmetrisch
und ich habe tatsächlich non-inverting Schmitt Triggers gefunden, 
allerdings nur bei alldatasheet und in keinem Shop :(

von Andreas K. (a-k)


Lesenswert?

Die Transistorschaltung zieht mit wenigen Ohm rauf, mit 1K Ohm runter. 
Wenn da 20m Kabel dranhängen, dann hast du bei der fallenden Flanke 
einen Tiefpass von ungefähr 1K Ohm / 2nF. Dafür ist die ansteigende 
Flanke sehr schön steil und benötigt daher eine Terminierung.

Beim 7407 ist es genau andersrum.

Langsame Flanken sind akzeptabel, wenn keiner der Bausteine auf der 
betreffenden Flanke triggert. Ansonsten entsteht eine deutliche 
Unsicherheit (jitter) bei der Flankenerkennung, was bei 
Schieberegisterketten (HC595, TLC592) zu Problemen führen kann wenn 
Kaskadeein- und Ausgang auf die gleiche Flanke reagieren - mit dem 
CD4094 ist man in der Hinsicht aufgrund seines um einen halben Takt 
verzögerten Kaskadeausgangs besser dran.

von Falk B. (falk)


Lesenswert?

Also . . .

Transistorbastellösung -> Nicht wirklich in Stufen kaskadierbar, 
ausserdem langsamer als man denkt -> nischt

OPV -> nischt (hallo, wir reden über flinke Digitalsignale)

74AC244 -> Schuss ins Knie, weil viel zu schnell, der schreit nach 
Terminierungsproblemen, ausserdem stark asymetrisch bei LOW/HIGH, siehe 
Wellenwiderstand

Einfachste und solide Lösung. EIN 74HC04 treibt ALLE Takteingänge 
direkt. Ja liebe Kinder das kann er. Die Leitung wird am Ende AC 
terminiert mit 50..120 oHm + 220pF. Das sollte funktionieren.

MFG
Falk

P.S. Ach ja, die Taktleitung bitte nciht als 0815 Klingeldraht ziehen, 
sondern wenn schon als ordentlich verdrillten Klingeldraht. Oder 
Ethernetkabel nehmen, CAT3 reicht dicke. Siehe Artikel 
Wellenwiderstand

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo,
jetzt hatte ich mich gerade gefreut, dass ich einen günstigen 
Leitungstreiber gefunden habe 74HC126, der auch schön klein ist und für 
vier Signale gedacht ist, da muss ich lesen, dass es wohl Probleme mit 
der Terminierung gibt.

@Falk: meinst du ich soll direkt an die Ausgänge vom Controller einen 
74HC04 hängen, der dann alle 20 Meter durchtreiben kann?
Ich hab da so meine Bedenken, dass auf dem Weg irgendwo Störsignale 
eingefangen werden.
Wäre es nicht sicherer einen Leitungstreiber auf jede Platine zu basteln 
und mit einem Serienwiderstand zu terminieren?

PS:  Als Datenkabel ist ein RJ12 Kabel gedacht.

von Andreas K. (a-k)


Lesenswert?

Falk Brunner wrote:

> Einfachste und solide Lösung. EIN 74HC04 treibt ALLE Takteingänge
> direkt. Ja liebe Kinder das kann er. Die Leitung wird am Ende AC
> terminiert mit 50..120 oHm + 220pF. Das sollte funktionieren.

Alle 60 Stück an zig Meter Leitung?

Sicher, er wird nicht kaputt gehen. Ich habe allerdings die Sorge, dass 
der Jitter bei der Erkennung des Taktes durch die langsame Flanke so 
gross wird, dass die korrekte Weitergabe der Daten vom einen Modul zum 
nächsten nicht mehr gesichert ist: Wenn durch den Jitter das Modul (n+1) 
die Daten erst reintaktet, wenn das Modul (n) sie schon rausgetaktet 
hat, dann wird's lustig.

von Andreas K. (a-k)


Lesenswert?

Kai Franke wrote:

> PS:  Als Datenkabel ist ein RJ12 Kabel gedacht.

Man neigt dazu, bei solchen Leitungen pro Signalleitung eine 
Masseleitung vorzusehen. Bei Leitungen, bei denen eine durch 
Übersprechen ausgelöste Störung etwas bewirken kann (beispielsweise dem 
Takt), ist das dringend anzuraten.

von Andreas K. (a-k)


Lesenswert?

Falk Brunner wrote:

> 74AC244 -> Schuss ins Knie, weil viel zu schnell, der schreit nach
> Terminierungsproblemen, ausserdem stark asymetrisch bei LOW/HIGH

Dass man mit dem 74AC244 arg in HF rumspielt und mit Wellenwiderstand 
und Terminierung kämpft ist klar. Aber dass der stark asymmetrisch sei, 
das offenbart sich mir nicht.

von Kai F. (kai-) Benutzerseite


Lesenswert?

Ein weiterer Grund warum ich in jede Platine einen Treiber verbauen will 
ist, dass der TLC5922 laut Datenblatt selbst bis zu 300ns propagation 
time braucht, damit nach einem SCKL Signal die Daten am SOUT anliegen. 
Ich bin mir zwar nicht sicher ob das nicht vielleicht ein Tippfehler 
ist, weil der TLC5924 nur 30ns braucht, aber auch das würde sich 
irgendwann aufaddieren. Durch einen Treiber würde ich sozusagen auch in 
die anderen Leitungen ein kleines delay einbauen.
Für eine Masseleitung ist leider kein Platz mehr, da RJ12 nur 6 polig 
ist, ich habe aber eine VCC Leitung drin.

von Andreas K. (a-k)


Lesenswert?

Kai Franke wrote:

> aber auch das würde sich irgendwann aufaddieren.

Da addiert sich garnichts, das Zeug arbeitet synchron zu einem 
gemeinsamen Takt. Die takten ja alle so um den gleichen Dreh herum 
(siehe oben bzgl. Jitter). Wenn die 300ns stimmen, dann hast du im 
Gegenteil sogar entsprechend weniger Risiko durch Jitter, denn je 
grösser das Clk-to-Data Delay, desto grösser die zulässige 
Taktabweichung.

Vielleicht ist das also sogar Absicht.

> Für eine Masseleitung ist leider kein Platz mehr, da RJ12 nur 6 polig
> ist, ich habe aber eine VCC Leitung drin.

Dann achte wenigstens drauf, dass im Kabel links und rechts vom Takt 
nichts liegt, was sich in der Datentransferphase bewegt und was 
seinerseits ein paar Störungen durch Übersprechen vom Takt nicht weiter 
krumm nimmt.

von Kai F. (kai-) Benutzerseite


Lesenswert?

hast Recht, war ein Denkfehler. Dann denke ich mal, dass nichts dagegen 
spricht einen Treiber mit Serienterminierung alle 2-3 (ausprobieren) 
Platinen zu setzen. Sollte es gar nicht gehen, kann ich immer noch auf 
die Variante von Falk umsteigen. Andersherum wäre das leider nicht 
möglich.

Vielen Dank für eure Hilfe

Gruß
Kai

von Andreas K. (a-k)


Lesenswert?

Serienterminierung ist ein prima Idee, wenn man genau einen Absender am 
einen Ende und genau einen Empfänger am anderen Ende hat. Zwischendrin 
sollte man sich die Leitung lieber nicht ansehen ;-). Siehe 
http://www.mikrocontroller.net/articles/Wellenwiderstand#Serienterminierung.

Nö, entweder implementierst du deine aktive Daisy Chain in jedem Knoten, 
mindestens für den Takt, dann ist Serienterminierung ok. Oder du zapfst 
die Taktleitung auch mal zwischendrin an, dann brauchst du einen 
Abschluss am Ende.

von Kai F. (kai-) Benutzerseite


Lesenswert?

Den Artikel vom Wellenwiderstand hab ich mir schon durchgelesen, 
allerdings habe ich wohl Serien- und Parallelterminierung verwechselt. 
Ich wollte eine Parallelterminierung machen, aber eben nur auf den 
Platinen, auf denen tatsächlich ein Treiber verbaut ist.
Meinst du es reicht, wenn ich nur das SCLK Signal verstärke und den Rest 
wie MODE, BLANK und CS einfach komplett durchziehe?
Ich poste dann zur Sicherheit auch gleich mal einen Schaltplan, wie 
gesagt, ich will gleich 100 Stück bestellen.

von Andreas K. (a-k)


Lesenswert?

Prima Ansatz. Platine designen, 100 Stück bestellen, nix vorher 
ausprobiert haben, nur um festzustellen, dass es doch nicht so 
funktioniert, 100 Platinen wegschmeissen.

Herrje nein. Wenn man sich nicht selbst einigermassen sicher ist, 
probiert man das aus. Wozu sind Breadboards oder Lötpunktrasterplatinen 
denn da?

Also: Probier die Lösungen aus, teste sie durch mit unterschiedlichen 
Längen und Methoden, dann bist du hinterher klüger. Müssen ja nicht alle 
50 in voller Länge sein, aber ein paar Stück schon, damit du weisst ob 
das Prinzip einigermassen stabil funktioniert.

Mit Oszi mal in die Leitungen reinhorchen zu können ist natürlich von 
Vorteil.

von Kai F. (kai-) Benutzerseite


Lesenswert?

Ich habe ja schon 3 Platinen auf Lochraster aufgebaut, die funktionieren 
auch.
siehe hier(externer Link): 
http://www.myvideo.de/watch/4258285/Moodlight_fuer_Wohnzimmer_Bar_Disco
Das Signal werde ich mir auch mal bald anschauen, muss dazu nur zu 
jemand anders, weil ich hier kein Oszi hab.
Bei den aufgebauten Platinen lasse ich eben noch alles von einem mega8 
treiben ohne jegliche Signalaufbereitung. Die Schaltung funktioniert 
also soweit schon, nur brauche ich eben noch etwas für die Länge. Um 
Auszuprobieren ob das jetzt auch mit 20 Treibern noch funktioniert, 
brauche ich eben die Platinen.

von Andreas K. (a-k)


Lesenswert?

Probier aus, ob es mit der Länge, Art und Qualität von Kabel geht, die 
du hinterher zwischen den Nodes einsetzen willst. Darum geht es doch.

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo nochmal,
nach langem Datenblätter wälzen und berechnen der eventuell nötigen 
Terminierung bin ich auf folgendes Ergebnis gekommen:
Ich lasse jegliche Terminierung sein und versehe alle 3-4 Platinen mit 
einem 4050. Das ist ein 6 Bit HEX Buffer, der genau die Transition Time 
hat, die ich mir gewünscht habe: zwischen 50 und 100ns. Dadurch brauche 
ich nur alle paar Meter einen neuen Treiber setzen und habe keine 
nennenswerten Reflektionen (zumindest laut dem Artikel über den 
Wellenwiderstand)
Damit spare ich mir jeglichen Widerstände zum Terminieren und Strom 
gleich noch dazu, weil ich wohl eine parallel Terminierung gebraucht 
hätte. Die Bausteine werden gleich morgen bestellt und getestet. Ich 
berichte dann wie es ausgegangen ist

Gruß
Kai

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.