Warum zittern einige meiner Signale (haben Jitter)?

9

Ich habe einen 2-MHz-SPI-Bus, aber eines ist mir aufgefallen: Einige meiner Signale zittern oft. Ja, mein Trigger ist richtig eingerichtet, daher glaube ich nicht, dass das Problem dort liegt.

Sie können hier sehen, was ich meine: (Dies ist mit aktiviertem Persistenzmodus). Dies ist die Uhr meines SPI-Busses.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Das SPI funktioniert einwandfrei. Ich habe Hunderte von Megabyte auf mehrere Boards übertragen und bisher kein Problem festgestellt. Aber ich bin immer noch daran interessiert zu wissen, was hier das Problem sein könnte. Sollte ich mir auch die Mühe machen, das Problem zu beheben, auch wenn es funktioniert?

Die Messungen wurden direkt an der Quelle mit einem SEHR kleinen Bodenclip durchgeführt.

Dies ist ein vereinfachtes Schema meiner Schaltung. Natürlich verfügt die Karte über mehr SPI-Geräte, aber für die Zwecke dieser Frage ist dies korrekt, da auf der Karte noch nichts außer der uC und der SD-Karte angelötet ist.

Geben Sie hier die Bildbeschreibung ein

Der Master (AVR Mega 128) läuft von seinem internen RC-Oszillator ab - ich weiß nicht, ob dies relevant wäre, aber da sich die Signale mit der Zeit verschieben, ist es möglich, dass der Jitter des RC-Oszillators auch im SPI-Bus landet. Ich dachte nur, ich würde es erwähnen. Mir ist auch aufgefallen, dass ich während dieser Messungen den Controller in einer Endlosschleife betrieben habe. Hier ist der Code:

while(1)
{
    setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus.
    GLCD_SetCursorAddress(40); // Change cursor position on the display.
    GLCD_WriteText("LED: "); 
    for(wire=0;wire<72;wire++)
    {
        itoa(wire+1,str,10);
        GLCD_WriteText(str);
        GLCD_SetCursorAddress(44);
        _delay_ms(10);
        shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide.
    }
}

Der Jitter / Shiver kann auftreten, wenn der interne 72-mal ausgeführt wird und dann beendet wird. Da die Ausführung der ersten drei Zeilen eine zusätzliche Zeit benötigt, kann es sein, dass jede 73. Wellenform aufgrund der zusätzlichen Verarbeitungszeit zu einer etwas anderen Zeit ankommt. Wenn ich wetten müsste, denke ich, dass dies die Ursache für mein Problem ist (wenn ich könnte, würde ich es sofort bestätigen, aber meine Boards arbeiten und die nächste Woche ist aus!) Aber ich hätte immer noch gerne Meinungen / Antworten von SE zu diesem Thema.

Aber wenn man bedenkt, dass die uC mit 8 MHz läuft, zittere ich nicht aufgrund von Software, weil in Nanosekunden, sondern in Mikrosekunden. In der 2. Abbildung ist jedoch eine flache Linie sichtbar. Dies geschieht für eine sehr kurze Sekunde, in der sich die gesamten Wellenformen zeitlich verschieben und auf dem Bildschirm unsichtbar sind. Ich vermute, dass dies an der Schleife liegt und der Jitter im ersten Bild am RC-Oszillator.

Saad
quelle
2
Was ist dein Auslöser?
Markrages
@markrages Der Trigger wird an CH1 - steigende Flanke auf 1,48 V eingestellt.
Saad
2
Eine Vermutung ist, dass der uC (meine Annahme), der das SPI-Taktsignal erzeugt, eine PLL verwendet, die einige Taktzyklen verkürzt oder verlängert, um sich an die Referenz zu binden. Wenn diese kurzen oder langen Taktzyklen auftreten, wird Jitter in Ihrer Oszilloskopspur erzeugt, da die Kanten, die Sie betrachten, früher / später relativ zu der Flanke auftreten, von der Sie ausgelöst haben.
Das Photon
1
Oder der SPI wird in Ihrer Hauptschleife generiert, aber manchmal gibt es einen Interrupt, der die Ausführung der Hauptschleife verzögert, sodass Sie wieder Unterschiede in der Periode der Schleife sehen.
Das Photon
2
Das Wort ist "Jitter", aber Sie können "Schauer" sagen
;-)

Antworten:

6

Was Ihr Oszilloskop zeigt, ist ein klassisches Beispiel für Jitter , was einen Fehler im Timing eines Ereignisses (steigende oder fallende Flanke) bedeutet, unabhängig davon, ob das Signal Spannungsrauschen aufweist.

Aber was kann den Jitter in Ihrem System verursachen?

  • Wenn der uC-Haupttakt nervös ist, wird dieser Jitter höchstwahrscheinlich direkt auf den vom SPI-Peripheriegerät ausgegebenen Takt übertragen.

    Eine unzureichende Umgehung (zusätzlich zu den beiden von Ihnen gezeichneten 100-nF-Kondensatoren sollte auf Ihrer Platine eine zusätzliche Massenumgehung vorhanden sein) kann zu Jitter im uC-Taktkreis führen.

    Stromversorgungsgeräusche, die von anderen Schaltkreisen auf Ihrer Platine verursacht werden, können ebenfalls diesen Effekt haben (würden jedoch durch mehr Umgehen verringert).

  • Der Jitter könnte der Leistung des SPI-Peripheriegeräts des uC inhärent sein. Es muss die SPI-Uhr in Bezug auf die Systemuhr generieren. Wenn ein einfacher Teiler verwendet wird (4 zu 1 im Fall eines 8-MHz-Systemtakts und eines 2-MHz-SPI-Takts), würden Sie nicht erwarten, dass überhaupt viel zusätzlicher Jitter auftritt (obwohl der Systemtakt-Jitter direkt durchlaufen würde). Wenn jedoch ein komplexeres Schema wie eine PLL verwendet wird, kann diese Schaltung die SPI-Taktimpulsbreiten variieren, um mit dem Systemtakt synchron zu bleiben, und Sie würden dies als Jitter betrachten. Eine PLL-Schaltung kann auch besonders empfindlich gegenüber Stromversorgungsrauschen sein.

Wenn die Jitteramplitude auf einen kleinen Bruchteil der Taktperiode begrenzt ist, wie es hier zu sein scheint, gibt es keinen Grund, warum dieser Jitter Fehler auf dem SPI-Bus verursacht (in Übereinstimmung mit Ihrer Beobachtung, dass der SPI-Bus wie erwartet zu funktionieren scheint). .

Das Photon
quelle
Ich habe eine 100nF Bypass-Kappe. auf jedem vcc / gnd-Paar auf jedem Chip. Würden Sie noch mehr vorschlagen? Wenn ja, zusätzliche 100nF- oder 1uF-Kappen?
Saad
Wenn dieser Jitter das schlechteste Leistungsproblem auf Ihrem Board ist, müssen Sie nichts ändern. Abhängig davon, wie viele andere Schaltkreise sich in Ihrem System befinden und was sie tun, sind einige zusätzliche 1, 10 und / oder 100 uF Bypass-Kappen, die auf der Platine verteilt sind, eine gängige Konstruktionspraxis. Diese sind nicht auf einem bestimmten Chip lokalisiert, sondern bieten eine "Bulk" -Bypass für die gesamte Platine.
Das Photon
Ja, ich habe zu diesem Zweck zwei 47u-Wutanfälle auf dem Brett. Also sollte ich beim Umgehen Teil in Ordnung sein.
Saad
2
SPI ist vollständig synchron. Kein Jitter führt dazu, dass SPI fehlschlägt.
Markrages
@markrages, in der Situation von OP ist das wahr. Im Prinzip könnte jedoch eine wirklich extreme Menge an Periodenjitter beispielsweise das Intervall zwischen der ansteigenden Flanke und der abfallenden Flanke so weit reduzieren, dass die Rüstzeit des Slave-Teils verletzt wird und die Schnittstelle ausfällt. Der Jitter müsste jedoch fast der halben Taktperiode entsprechen, damit dies geschieht.
Das Photon
6

Das sieht für mich nach Signaljitter aus. Die Taktperiode variiert geringfügig, so dass die Kante durch die Beständigkeit des Oszilloskops "verschmiert" aussieht.

Ich weiß nicht, ob Ihr Rigol-Bereich in der Lage ist, Statistiken zu berechnen, wenn er misst. In diesem Fall können Sie Ihren Triggerpunkt so einstellen, dass Ihre Triggerkante am linken Bildschirmrand angezeigt wird. Passen Sie die Zeitbasis an, um einen vollständigen Zeitraum anzuzeigen, und messen Sie die Frequenzänderung über die Zeit, um ein Gefühl für die Änderung zu bekommen. (Jitter kann schlechter aussehen als wenn die Triggerflanke außerhalb des Bildschirms liegt.)

Wenn Sie die Jitterquellen eingrenzen möchten, würde ich mit dem RC-Oszillator beginnen. Prüfen Sie, ob Sie eine andere Taktmethode (wie einen Kristall) verwenden können, implementieren Sie diese und messen Sie den Jitter erneut.

Adam Lawrence
quelle
Ich werde es mit einem externen Oszillator versuchen, sobald die Arbeit beginnt!
Saad
6

Bereichsbilder können irreführend sein, und Sie müssen alle Parameter überprüfen, um die Daten korrekt zu interpretieren. Das erste Bild zeigt einen 10-ns-Jitter, und das wäre nicht so schön, wenn der Auslöser nur links vom Bildschirm wäre. Aber unten rechts steht Trigger + 1,78 µs, so dass 10 ns tatsächlich nur 0,5% des Zeitintervalls sind. Dieser Jitterpegel kann durchaus auf den RC-Oszillator zurückzuführen sein. Erwarten Sie, dass der Jitter mit einem Quarzoszillator um mindestens eine Größenordnung reduziert wird.

Sie sagen, Sie haben noch keine Probleme bei der SPI-Datenübertragung festgestellt. Das liegt an der Relativität der 0,5%. Wenn Sie 1 µs vor dem CLK-Impuls MOSI verwenden würden, würde der Jitter von 0,5% einen Jitter von 5 ns verursachen. Dies würde die Setup- und Haltezeiten nicht verletzen.

Wenn Sie eine Bestätigung benötigen, stellen Sie einfach die Zeitbasis so ein, dass Sie eine vollständige Bitzeit sehen können, sowohl den MOSI- als auch den CLK-Kanal. Sie werden feststellen, dass der Jitter kaum sichtbar ist und die aufeinanderfolgenden Kanten gut voneinander getrennt bleiben.

stevenvh
quelle
Steven, kannst du erklären, warum die Position des Abzugs wichtig ist? Wie haben Sie den Wert von 0,5% erhalten?
Saad
2
@Saad - Der Triggerpunkt ist time = 0. Was auf dem Display angezeigt wird, geschieht 1,78 us = 1780 ns später. Und der 10-ns-Jitter (mehr oder weniger) ist die Variation dieser 1780 ns, also 10 ns / 1780 ns = 0,56%. Es sieht so schlecht aus, weil es auf diese fallende Flanke vergrößert ist, aber die Referenzkante (der Auslöser) befindet sich einige zehn Meter links. Wenn Sie also herauszoomen, um den vollen Puls im Blick zu haben, sieht der Jitter viel kleiner aus. Wenn der Triggerpunkt nur links von der Anzeige wäre, beispielsweise bei -100 ns, wäre der 10-ns-Jitter 10%.
Stevenvh
1

Jitter ist eine Form von Lärm. Wenn Sie die Zwischenankunftszeiten zwischen den Impulsflanken als eine Art Signal betrachten, bedeutet dies, dass Ihr System ein rauschfreies Signal aufweist, wenn diese Flanken überhaupt nicht zittern!

Rechteckwellen werden häufig durch Schwellenwertbildung auf einer kontinuierlicheren Welle mit einer Schmidt-Trigger-Schaltung erzeugt, die ein Hystereseverhalten aufweist. Kristall- oder RC-Oszillatoren erzeugen keine "nativen" Rechteckwellen.

Wenn diese Eingangswelle ein Spannungsrauschen aufweist, führt dieses Rauschen zu geringfügigen Verschiebungen der Triggerung, da die Spannung manchmal früher und manchmal später einen der beiden Schwellenwerte erreicht.

Und so wird Rauschen einer Art (Spannungsrauschen) zu Rauschen einer anderen Art (Zeitrauschen).

Kaz
quelle