Hallo! :)
Ich betreibe auf einer Platinen einen AVR ATxmega16D4, welcher den LED
Treiber TLC5940 von Texas Instruments via SPI anspricht.
Der XMEGA läuft mit seinem internen 32 MHz Takt und bei 3.3 Volt. Das
SPI zum TLC5940 taktet mit 16 MHz.
Der 32 MHz Takt des XMEGAs wird direkt an einem Pin ausgegeben und als
Takt für die PWM Steuerung des LED Treibers verwendet (GSCLK). Damit
werden die Schieberegister im LED Treiber angesteuert und mitunter auch
die Taktung des PWMs für die LEDs vorgegeben.
Genau mit dieser 32 MHz Taktleitung gab es ein Problem !
Sporadisch trat der Fall auf, dass die LEDs deutlich zu flackern
begonnen haben. Mitunter häufiger wenn der TLC5940 sehr heiß geworden
ist bzw. er gerade sehr viele LEDs auf maximalster Helligkeit treibte.
Mehr oder weniger durch Zufall bin ich drauf gekommen, dass das Problem
an der 32 MHz Taktleitung GSCLK liegt. Sobald ich meinen
Oszilloskoptastkopf an diese Leitung setzte funktioniert alles wieder
wunderbar! In Folge habe ich dann an die Leitung einfach mal einen 15 pF
Kondensator angehängt - genau diesen Wert hat nämlich mein Tastkopf!
Wunderbar, Problem gelöst ! :D
Obwohl ich mit diesem Kondensator zwar die Symptome des Problems
bekämpft habe, wüsste ich doch schon gerne was den die Ursache dafür
war/ist. Ich habe sehr viel schon im Internet recherchiert und bin zum
Thema "clock termination" auf sehr viele Beiträge u. Artikel gestoßen.
Letztendlich fand ich eine AC termination am passendsten, weil ich diese
auch auf einer Platine im Nachhinein leicht nachbestücken kann (R + C
von der Leitung auf GND schalten). Folglich habe ich dann für meine
Leitung die passenden Widerstands- und Kondensatorwerte errechnet - wie
in diesem Artikel beschrieben
(http://www.bitechnologies.com/pdfs/acterm.pdf)
Einige Details zu dieser 32 MHz Leitung auf meiner Platine:
Höhe: 35 µm
Länge: 45 mm
Dicke: 20 mil (0.5 mm)
PCB Dicke (Substrat): 1.6 mm (63 mil)
IMPEDANZ Z folglich ~ 115 Ω
(http://www.eeweb.com/toolbox/microstrip-impedance/)
Da der gewählte Widerstand R bei der AC termination ja kleiner sein soll
als die Impedanz der Leiterbahn setzte ich dafür mal einen 100 Ω
Widerstand fest.
Wie im verlinkten Artikel oben beschrieben (S. 2, rechts) folgt dann die
Berechnung des Kondensators nach ...
Ich hab dann auch gleich mal auf meiner Platine diese ganzen Werte
ausprobiert und gemessen: (mit RIGOL DS1102E - 100 MHz - 1 GSa/s)
GSCLK - 32 MHz normal - m. 22pF + 100 Ω - m. 100pF + 100 Ω
SCLK - 16 MHz normal - m. 22pF + 100 Ω - m. 100pF + 100 Ω
ERGEBNIS: Nur mit 22 pF + 100 Ω Beschaltung läuft der LED Treiber ohne
Probleme. Mit zu wenig (0) oder zuviel (100 pF) Kapazität fängt das
herumflackern wieder an.
---
Zu meiner Frage. Ist diese Vorgehensweise eigentlich wirklich richtig?
Macht es Sinn eine 45 mm lange Leitung zu terminieren ??? Normalerweise
macht man dass doch nur bei Leitungen ab 10-20 cm und noch höheren
Takten. Ich bin mir einfach nicht sicher ob ich hier an der falschen
Ecke die Schaltung optimiere :/
Das bringt mir bis jetzt Kopfzerbrechen, darum wollte ich mal hier
fragen. :)
Desweiteren frage ich mich ob mein 32 MHz Signal vom XMEGA wirklich so
grotig - beinahe sinusförmig aussieht -, oder mein Oszi die notwendigen
Oberschwingungen nicht mehr messen kann.
Viele Grüße aus Österreich,
Mario
Mario Kahlhofer schrieb:> Ist diese Vorgehensweise eigentlich wirklich richtig?> Macht es Sinn eine 45 mm lange Leitung zu terminieren ??? Normalerweise> macht man dass doch nur bei Leitungen ab 10-20 cm und noch höheren> Takten.
Ja, ist sinnvoll. Speziell bei Takten von modernen, schnellen
CMOS-Bausteinen. Deine Faustregel ist z.B. bei 74HCxxx gut anwendbar.
Die relevante Leitungslänge, ab der terminiert werden sollte, hängt von
der Anstiegszeit des Signals ab. Ich würde aber einen Serienwiderstand
an der Quelle bevorzugen - wenn du eine Punkt-zu-Punkt-Verbindung hast.
Aber Verzweigungen sollte man sowieso bei Takten tunlichst lassen
(Ausnahme: ganz kurze Wege für die Äste).
Probiere einfach mal einen 33R Serienwiderstand an der Quelle!
> Desweiteren frage ich mich ob mein 32 MHz Signal vom XMEGA wirklich so> grotig - beinahe sinusförmig aussieht -, oder mein Oszi die notwendigen> Oberschwingungen nicht mehr messen kann.
Zuerst: ich habe bisher an keinem XMEGA Signale gemessen.
Trotzdem: Messe mal direkt am Ausgangspin ohne angeschlossene Leitung
und mit Masseanschluß des Tastkopfes direkt am Probe (ohne die mistige
Krokodilklemmenschleife), die natürlich nahe an der Quelle auf die
Platine gehen sollte. Dann dürfte das Signal noch ganz ordentlich
rechteckig aussehen und wenn nicht, dann kannst du am Tastkopf oder am
Oszi zu zweifeln beginnen. Wenn aber die Bandbreite des Skopes nur
100MHz beträgt, dann musst du dich nicht wundern, dass nur ein
verbogener Sinus zu sehen ist. Mindestens 300MHz Bandbreite wären schon
ganz hilfreich.
> 32 MHz Leitung
Die Frequenz der Grundfrequenz des Rechtecks beträgt 32 MHz. Ein
Rechteck besteht aber aus der Summe von ungradzahligen Vielfachen dieser
Grundfrequenz. Das heißt da stecken noch weit höhere Frequenzen drinn.
--> Je steiler die Flanken, desto mehr hohe Frequenzen stecken drinn.
Daher ist eine Terminierung sicher sinnvoll.
@ Mario Kahlhofer (blu3r4y)
>Der 32 MHz Takt des XMEGAs wird direkt an einem Pin ausgegeben und als>Takt für die PWM Steuerung des LED Treibers verwendet (GSCLK).
Ist das nicht ein wenig viel? Man kann es auch übertreiben.
>Kondensator angehängt - genau diesen Wert hat nämlich mein Tastkopf!>Wunderbar, Problem gelöst ! :D
Jaja, der berühmte Angstkondensator ;-)
>Thema "clock termination" auf sehr viele Beiträge u. Artikel gestoßen.
Auch den Artikel Wellenwiderstand?
>Da der gewählte Widerstand R bei der AC termination ja kleiner sein soll>als die Impedanz der Leiterbahn
Nicht unbedingt.
>setzte ich dafür mal einen 100 Ω>Widerstand fest.
Klingt OK.
>ERGEBNIS: Nur mit 22 pF + 100 Ω Beschaltung läuft der LED Treiber ohne>Probleme. Mit zu wenig (0) oder zuviel (100 pF) Kapazität fängt das>herumflackern wieder an.
AC Terminierung ist nicht immer ganz einfach, allerding bei einem
Taktsignal mit festem Tastverhältnis ist es deutich einfacher.
>Macht es Sinn eine 45 mm lange Leitung zu terminieren ???
Ja, siehe Wellenwiderstand.
>Desweiteren frage ich mich ob mein 32 MHz Signal vom XMEGA wirklich so>grotig - beinahe sinusförmig aussieht -,
Naja, es gibt deutlich schlimmere Takte.
> oder mein Oszi die notwendigen> Oberschwingungen nicht mehr messen kann.
Welches Oszi?
Welcher Tastkopf?
Tastkopf mit kurzer Masseanbindung?
http://www.mikrocontroller.net/articles/Oszilloskop#Tastk.C3.B6pfe_richtig_benutzen
Layout? Massefläche?
Und bei der Frequnez bzq. den kurzen Anstiegszeiten braucht man
eigentlich schon einen passiven HF-Taskopf (Z0-Taskopf mit 1k
Eingnagswiderstand) oder wenn man hat einen aktiven HF-Taskopf. Die
normalen 10:1 Tastköpfe sind hier kaum noch zu gebrauchen.
Hi !
Danke erstmal für eure Antworten! Die haben mir schon sehr
weitergeholfen. :)
Zum einen hab ich jetzt nochmals das Taktsignal - wie von HildeK
vorgeschlagen - direkt am µC mit einer kurzen 'Masseklammer' gemessen.
Das Messergebnis ist immerhin schon deutlich besser als vorherige
Messungen (siehe gsclk_nahfeld.jpg).
@falk:
Oszilloskop ist ein digitales 2-Kanal RIGOL DS1102E (100 MHz, 1GSa/s)
Eingänge: 1 MΩ // 15pF
1:10 passiver Tastkopf
Danke falk für den Link zum Wellenwiderstand. Darauf bin ich noch gar
nicht gekommen da ich immer nur nach den englischen Begriffen
herumgesucht habe. Sehr schön das ganze auch mal auf Deutsch zu lesen !
:)
Die Idee des Serienwiderstandes habe ich zu Beginn gleich mal wieder
verworfen und gar nicht erst probiert. Im Datenblatt des LED Treibers
TLC5940 fand ich nämlich im Äquivalenzschaltbild einen 400 Ω
Serienwiderstand ! Somit dachte ich der würde das Signal so intern schon
gut terminieren, da müsste es an was anderem liegen.
In der Realität scheint der Serienwiderstand aber auch wirklich Wunder
zu wirken. Ich hab einen 100 Ω und einen 31 Ω Widerstand in Serie in die
Leitung gesetzt und den Takt mit dem Oszilloskop aufgenommen.
(gsclk_100ohm_serie.jpg)
Die gelbe Linie repräsentiert dabei die Taktleitung ohne irgendwelche
Terminierungsmassnahmen. Und bei der weißen Linie liegt ein 100 Ω in
Serie drinnen ! Sieht super aus finde ich :)
Mit dem 31 Ω Widerstand hat sich kaum was getan ? Sieht aus wie die
gelbe Linie nur etwas abgedämpft - hab jetzt leider kein extra Bild
davon gemacht :/
--
Sollte ich jetzt eher die Serienterminierung anwenden oder die AC
Terminierung? Beide lösen das Problem sehr gut, wobei mir das Signal mit
Serienwiderstand fast noch besser gefällt.
Ansonsten würde ich auf der finalen Platine - welche ich fertigen lassen
werde - einfach mal Bauteilslots für eine Serien- und AC-Terminierung
vorsehen. Und wenn ich keine Serienterminierung möchte setze ich darin
einen 0 Ω Widerstand. Klingt das gut? ;)
Viele Grüße,
Mario
@ Mario Kahlhofer (blu3r4y)
>Das Messergebnis ist immerhin schon deutlich besser als vorherige>Messungen (siehe gsclk_nahfeld.jpg).
Sieht gut aus, nahezu perfekt.
>Oszilloskop ist ein digitales 2-Kanal RIGOL DS1102E (100 MHz, 1GSa/s)>Eingänge: 1 MΩ // 15pF>1:10 passiver Tastkopf
Naja, geht so. Damit hat man um die 4-5ns Anstiegszeit, sprich, unter
6-7ns Anstiegszeit sieht man kaum noch was.
>verworfen und gar nicht erst probiert. Im Datenblatt des LED Treibers>TLC5940 fand ich nämlich im Äquivalenzschaltbild einen 400 Ω>Serienwiderstand ! Somit dachte ich der würde das Signal so intern schon>gut terminieren,
Nein, das ist keine Eingangsterminierung, nur bissel ESD-Schutz.
>In der Realität scheint der Serienwiderstand aber auch wirklich Wunder>zu wirken. Ich hab einen 100 Ω und einen 31 Ω Widerstand in Serie in die>Leitung gesetzt und den Takt mit dem Oszilloskop aufgenommen.>(gsclk_100ohm_serie.jpg)>Die gelbe Linie repräsentiert dabei die Taktleitung ohne irgendwelche>Terminierungsmassnahmen. Und bei der weißen Linie liegt ein 100 Ω in>Serie drinnen ! Sieht super aus finde ich :)
Ja.
>Sollte ich jetzt eher die Serienterminierung anwenden
Wenn es eine Punkt zu Punkt Verbindung ist, dann Serienterminierung.
Bei mehreren Empfängern am gleichen Taktsignal, AC-Terminierung.
>einen 0 Ω Widerstand. Klingt das gut? ;)
Ja.
Herlichen Dank falk! :)
Werde einen 100 Ω Widerstand direkt am Ausgang des XMEGAs platzieren. Da
das gemessene Signal trotz meiner grässlichen Drahtbrücke auf meinem
0815-Prototyp ohne ordentliche Groundfläche (in der Nähe der
Taktleitung) schon so gut aussieht wird sich dass ganze auf der nächsten
Platine (mit deutlich verbessertem Layout) sicher sehr gut verhalten. Da
bin ich optimistisch. :)
Bei den 100 Ω bleibe ich denke ich auch. Das trifft die Leitungsimpedanz
in der Theorie und in der Praxis relativ gut.
Danke nochmal für eure Hilfe !
Viele Grüße,
Mario