Frage:
Jittergenauigkeit im Submikrosekundenbereich - was ist zu verwenden?
ignoramusextraordinaire
2018-10-01 17:40:02 UTC
view on stackexchange narkive permalink

Ich habe vier TTL-Pegelsignale, die den Status in einer bestimmten Reihenfolge ändern müssen.

Ab dem Startsignal auf einer der Leitungen erfolgt das Umschalten der anderen Leitungen innerhalb von 100 us. Die anderen drei Signale schalten höchstens ein paar Mal um. Der Start, das Ende und die Dauer zwischen Zustandsänderungen, die diese anderen drei Signale umschalten, variieren in Abhängigkeit von Metriken im System, die gut bekannt sind, bevor das Startsignal auftritt. Das Timing ist jedoch variabel, so dass die Impulsfolge und ihre Dauer programmierbar sein müssen. Das Timing und die Dauer sind bekannt, bevor die Sequenz beginnt.

Hier ist das Problem: Ich benötige eine Jittergenauigkeit von weniger als einer Mikrosekunde. Das von mir verwendete 120-MHz-ARM-Mikro kann solche deterministischen Timing-Profile aufgrund von Pipelining und einer Vielzahl anderer leistungssteigernder Gründe nicht garantieren. Wir können unser Bestes tun, um das System so zu gestalten, dass der Jitter minimiert wird. Ich möchte jedoch wissen, ob ein schnelleres Mikro oder DSPs oder CPLD, PALs usw. verwendet werden, um die gewünschte Genauigkeit und Auflösung zu erzielen.

In der Vergangenheit konnte ich mit einem 8-Bit-Mikro, das mit einem Befehl pro Taktzyklus bei 8 MHz läuft, einen Assembler schreiben, das Mikro in den Ruhezustand versetzen, bei Unterbrechung aufwachen, einige Taktzyklen zählen und eine Genauigkeit von 0,25 us haben

Welche Technologie muss ich untersuchen, um diese Auflösung und Genauigkeit zu erreichen?

FPGAs werden den Trick machen
Pipelining verursacht 10 Uhr Jitter ???
Es wäre hilfreich, eine Spezifikation oder zumindest einige Beispiele dafür zu haben, welches Signal als Ergebnis welcher anderen Signale mit minimaler und maximal zulässiger Flankensteuerung erzeugt werden muss.
Es wäre hilfreich, wenn Sie genau angeben könnten, welches Teil Sie verwenden.Meinen Sie mit Pipelining tatsächlich die Verzweigungsvorhersage?Wie in kann ein Teil mit Cache-Speicher ein unbestimmtes Verhalten erhalten, wenn die Verzweigungsvorhersage fehlschlägt.Besonders wenn Flash & Wait-Zustände betroffen sind.Denn Pipelining sollte keinen Jitter verursachen, sondern den Code insgesamt nur schneller machen.Und Pipelining gibt es schon lange vor ARM, also hatte Ihre alte MCU wahrscheinlich etwas davon.
Sie beginnen mit einer Zustandsmaschine mit Timing-Anforderungen für alle Ein- und Ausgänge, synchronisieren dann mit einem stabilen Takt, um Jitter zu vermeiden, und wählen dann eine Lösung.Nicht umgekehrt.d.h. von oben nach unten aus anderen Gründen von oben nach unten, um eine kostengünstige Lösung zu erhalten
* "In der Vergangenheit mit einem 8-Bit-Mikro ..." * 8-Bit-Mikro existieren noch.Einige von ihnen sind sehr schnell.Warum würdest du keinen benutzen?
Sogar ein Xtal mit 32 kHz zum Synchronisieren von Ausgängen hat eine Periode von 31 us und einen Jitter von xxx ns unter Verwendung der JJJ-Logik.Ist Totzeit beteiligt?in x us Bereich?
"... ein typischer Weg, um die Genauigkeit und Auflösung zu erhalten, die ich suche." Es wäre hilfreich, wenn Sie uns die Genauigkeit und Auflösung zur Verfügung stellen würden, die Sie suchen.Suchen Sie nur nach "Submikrosekunden", d. H. Weniger als 1 us, oder haben Sie tatsächlich eine strengere Anforderung?
Ich gehe davon aus, dass ein digitaler Verzögerungsgenerator für Ihr Projekt übertrieben ist.Was sind Ihre Anforderungen?
Sieben antworten:
Olin Lathrop
2018-10-01 18:08:11 UTC
view on stackexchange narkive permalink

Es ist nicht klar, welche Signale Sie genau erzeugen müssen und wie sie sich im Verhältnis zu eingehenden Signalen verhalten.

250 ns sind jedoch nicht wirklich schwer zu erreichen, zum Beispiel mit so etwas wie einem dsPIC der EP-Serie.Bei einer Befehlsrate von 70 MHz erhalten Sie bis zu 17 Befehlszyklen mit zulässigem Jitter.Das ist viel.

Wenn Ihr eingehendes Signal einen Interrupt verursacht und Sie dann die Ausgangssignale aus einem festen Befehlszeitpunkt erzeugen, erhalten Sie weniger als 17 Jitterzyklen.Es wäre sogar noch besser, wenn das Eingangssignal einen PWM-Generator oder dergleichen auslösen könnte.Sie haben jedoch nicht genügend Informationen über die Art der Ausgangssignale angegeben, um zu wissen, ob bestimmte auf solchen Mikros verfügbare Hardware anwendbar ist.

Hallo Olin, ich plane die Verwendung des Atmel ATSAMD51 und derzeit sind keine Systemressourcen zugewiesen.Die höchste Priorität haben diese vier Signale, damit ich bei Bedarf Ressourcen zuweisen kann.Die Ausgangssignale sind mit FET-Treibern verbunden.
Die Mikrocontroller der ATSAMD51-Reihe verfügen über ein Ereignissystem-Peripheriegerät, das eine autonome Kommunikation mit geringer Latenz und eine konfigurierbare Kommunikation zwischen diesen ermöglicht Peripheriegeräte. Mehrere Peripheriegeräte können so konfiguriert werden, dass sie als Ereignisse bezeichnete Signale erzeugen und / oder darauf reagieren.Dies könnte zu den Rechnungen für Ihre Anwendung passen.Es enthält auch einen konfigurierbaren benutzerdefinierten Logikblock, der für Ihre Anwendung funktionieren kann, indem er eine minimale Interaktion mit dem mcu-Kern bietet
Lundin
2018-10-01 18:23:15 UTC
view on stackexchange narkive permalink

Normalerweise können Sie diese Art von Echtzeit erreichen, solange die Ausgabe nicht von Software / Interrupts abhängt.Das heißt, Pins werden nicht von einem ISR oder ähnlichem gesetzt. In diesem Fall haben Sie Mikrosekunden-Jitter.Die Interrupt-Latenz kann eine statische Zeit sein, aber ich würde nicht damit rechnen, falls mehr als ein Interrupt gleichzeitig ausgelöst wird usw.

Möglicherweise können Sie dies mit der Ausgangsvergleichsfunktion des Hardware-Timers lösen.Das heißt, alle relevanten Pins werden gesetzt, wenn ein Timer abgelaufen ist, wie zum Beispiel bei Verwendung von PWM.Dies kann häufig mit Systemuhr oder Systemuhr / 2-Genauigkeit erfolgen.Andere Alternativen sind DMA, sofern dies für die spezifischen Pins unterstützt wird.

Dies kann bis zu 50-100 ns irgendwo funktionieren, wo Sie den analogen Eigenschaften der Pins ausgeliefert sind.

Und dann können Sie natürlich keine bessere Genauigkeit erzielen, als es Ihr Oszillator zulässt.Sie können sicherlich keinen eingebauten RC-Oszillator verwenden, müssen jedoch einen hochgenauen Quarz oder einen externen Oszillator verwenden.

Dan Mills
2018-10-01 18:03:30 UTC
view on stackexchange narkive permalink

DMA und ein Timer?

Ein paar SPI-Busse und verwenden Sie einfach die Datenpins (möglicherweise wieder mit DMA, wenn Sie mehr als 32 Zeitfenster benötigen)?

Meiner Meinung nach sollte 1us gut machbar sein, wenn Sie Ihre IO-Pins richtig auswählen und bereit sind, ein paar Low-Level-Spiele zu spielen.

100 ns, über die ich nachdenken müsste, aber vielleicht etwas Falsches, wenn man einen QSPI-RAM-Chip lädt und dann das Bitmuster mit einem Timer als Takt ausstempelt?

10ns ist FPGA-Gebiet.

Dmitry Grigoryev
2018-10-01 19:13:53 UTC
view on stackexchange narkive permalink

Überprüfen Sie, ob Sie Timer haben, die mehrere Pins ansteuern können, die normalerweise für die Motorsteuerung verwendet werden (normalerweise 4 oder 6 für H-Brücken bzw. 3-Phasen).In vielen Fällen verfügen solche Timer über "Preload" -Register, mit denen Sie die Periode und den Arbeitszyklus nahtlos ändern können, was bedeutet, dass Sie im Wesentlichen eine beliebige Wellenform mit ihnen erzeugen können.Wenn dies richtig gemacht wird, sind solche Wellenformen bis auf die Timer-Auflösung präzise.

Danke Dmitry - ich benutze den ATSAMD51, er hat diese Funktionen und es sieht so aus, als würde er funktionieren
gregb212
2018-10-01 18:39:49 UTC
view on stackexchange narkive permalink

Vielleicht so etwas wie ein Cypress-PSOC mit programmierbaren Logikzellen.Ich denke, Microchip hat Teile mit ähnlichen Fähigkeiten.Sie sind wie Mikrocontroller mit winzigen, eingeschränkten FPGA-Funktionen, die Sie anpassen können.Es hört sich so an, als würden Sie entweder DMA oder FPGA benötigen, um Ihre Anforderungen zu erfüllen.

akohlsmith
2018-10-02 06:53:33 UTC
view on stackexchange narkive permalink

STM32-Geräte verfügen über sehr leistungsstarke und konfigurierbare Timer-Peripheriegeräte.Sie können verkettet oder synchronisiert werden und bieten zyklusgenaue Ausgaben.Möglicherweise möchten Sie einige Zeit damit verbringen, die Datenblätter für den Start der STM32L4- und H4-Geräte zu lesen und möglicherweise einige der timer spezifischen Dokumentationen von STMicro zu lesen.

Ich persönlich verwende die Timer zusammen mit einem FPGA, um mir ein mikrosekundengenaues Timing und eine Sequenzierung für 32 digitale Ausgänge zu ermöglichen.Das FPGA macht nichts zeitspezifisches, sondern MUXT lediglich die hervorragenden und konfigurierbaren Timer des STM32 an einen von 32 Ausgängen.Die endgültige Hardware wird das STM32 eliminieren, aber für Prototyping und Entwicklung ist es unschlagbar.

Graham
2018-10-02 02:23:09 UTC
view on stackexchange narkive permalink

Ich mache etwas sehr Ähnliches bei der Arbeit mit einem DSP.Ich habe ein FPGA, das den Präzisions-Timing-Teil ausführt.Ich hatte gehofft, eine Rechteckwelle vom DSP zu verwenden, um die PLL zum Synchronisieren von zwei FPGAs zu testen.Tatsächlich stellte ich fest, dass obwohl die FPGA-Timing-Toleranzen basierend auf den Takttoleranzen auf etwa 0,01 us eingestellt waren, mein DSP zu viel anderes hatte, um besser als 0,1 us zu sein.

Dies ist jedoch eine ziemlich vollständige Verarbeitungsschleife.Mit einer weniger intensiven Schleife könnte es natürlich besser sein.Für die Teile, die wirklich deterministisch sein mussten, kann es hilfreich sein, sie ganz am Anfang der Schleife auszuführen.Seien Sie jedoch gewarnt, dass die Interrupt-Latenz zwar vorhersehbar ist, jedoch nicht Null ist!Für meine Plattform sind es 91 Takt-Ticks bei 456 MHz.Ich kann leicht Sub-us-Jitter durch Interrupts bekommen, aber Mikrosekunden-Verzögerungen erfordern, dass die Interrupt-Latenz in die Berechnungen einbezogen wird.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...