zum ersten Mal auf Stackexchange, hoffe ich bin hier richtig. Ich arbeite an einem Projekt, bei dem ich ein Ereignis (das von einem elektrischen Impuls erkannt wird) auf wenige zehn Nanosekunden zeitstempeln und mit GPS synchronisieren muss (weil es einige dieser Module geben wird, die miteinander synchronisiert werden müssen). ). Ich habe nach einer einfachen Arduino/Himbeer-Lösung gesucht, aber es scheint, dass sie nicht besser als 1-2 us ist, weit entfernt von ~30 ns.
Ich dachte daran, den 1PPS-Ausgang (1Hz) des GPS zu verwenden, um eine sehr genaue Zeit zu erhalten und dann das Zeitintervall zwischen diesem Impuls und dem Impuls des Sensors zu finden, indem ich die Zyklen einer externen, hochpräzisen Uhr zähle. Ich habe eine Uhr gefunden, die mich unter 30 ns Ungenauigkeit über die 1 s PPS (40 MHz, 10 ppb, 1 ps Jitter) bringt.
Das Problem ist nun, wie ich diese Taktzyklen zählen kann. Meine Erfahrung zu diesem Thema ist sehr nahe bei 0 und die meines Teamkollegen auch. Jede Hilfe wird sehr geschätzt.
BEARBEITEN: Es scheint, dass dies für jemanden, der nur Erfahrung mit Mikrocontrollern hat, sehr kompliziert ist, indem er Daten seriell sendet. Das perfekte Produkt für meine Anwendung wäre so etwas: http://www.ti.com/product/TDC7201/description Verbinden Sie einfach die beiden Impulse mit den START- und STOP-Pins und es gibt das Zeitintervall zurück. Der einzige Unterschied besteht darin, dass ich eine 1-s-Messung (gegenüber 8 ms) benötigen würde, jedoch mit einer Genauigkeit von 10-50 ns (gegenüber 50 ps). Grundsätzlich 1000x längere Messung mit 1000x weniger Genauigkeit.
Das Zählen von Zyklen zwischen PPS-Pulsen ist kein guter Ansatz. Selbst wenn Sie Uhren mit einer Stabilität von 10 ppb verwenden, müssen Sie immer noch den Versatz zwischen verschiedenen Einheiten bewerten.
Die Verwendung eines integrierten GPS-Empfängers mit Zeitstempel ist ein guter Ansatz. Beachten Sie jedoch, dass es nicht einfach sein wird, diese RMS-Genauigkeit von 30 ns unter realen Bedingungen zu erreichen. 30 ns entsprechen einer Positionsgenauigkeit von nur 9 m. Während die meisten Empfänger dies für eine Kalman-gefilterte Position leicht erreichen, werden Sie mehr Störungen bei Ihren Zeitstempeln feststellen (wobei der Empfänger kein Hidden-Markov-Modell verwenden kann ), es sei denn, Sie mitteln auch über mehrere Ereignisse.
Der Mehrwegempfang ist Ihr Hauptgegner (für Einheiten, die einige zehn Kilometer voneinander entfernt sind, und Ereignisse innerhalb von Sekundenbruchteilen). Multipath wird irgendwie vom Empfänger gemildert, aber das Beste, was Sie tun können, ist, eine gute Antenne (Drosselring oder ähnliches) zu verwenden und einen guten Ort zu wählen. Es kann auch helfen, es auf ein Stativ zu stellen.
Eine Gruppenverzögerungskalibrierung wird normalerweise für 30 ns nicht benötigt, wenn alle Ihre Module ein ähnliches Setup verwenden (Antennenkabellänge spielt eine Rolle, auch Verstärker oder ähnliches).
Eine weitaus bessere Genauigkeit kann erreicht werden, wenn Sie das Ereignis im Band mit den GPS-Signalen messen können , dh über das HF-Frontend des Empfängers . Dies setzt das Timing direkt mit den empfangenen Signalen in Beziehung und bietet die Möglichkeit, mehrere Fehlerquellen auszumerzen. Wenn Sie das Ergebnis nicht in nahezu Echtzeit benötigen, können Sie GPS-Signale zusammen mit Ihrem Trigger aufzeichnen und nachbearbeiten. Dies ergibt eine hohe Genauigkeit der relativen Position und Zeit (differenzielles GPS).
Ich bin mit dem Arduino Uno nicht vertraut, aber es hat wahrscheinlich ein Zählermodul, das Zeitintervalle festlegen kann. Aber es wird auf die Taktfrequenz beschränkt, die wahrscheinlich zu niedrig für das ist, was Sie wollen. Sie sollten besser zu einem Arduino Due wechseln, es hat sicherlich diese Fähigkeit und kann mit 96 MHz laufen. Studieren Sie das Zähler/Timer-Peripheriegerät (Datenblatt). Verwenden Sie es zum Erfassen
Aus diesen Zahlen können Sie den genauen Abstand zwischen dem letzten Impuls und dem Ereignis berechnen.
Beachten Sie, dass die Programmierung des Peripheriegeräts nicht einfach ist. Und wenn Ihre Erfahrung in der Programmierung von Mikrocontrollern null ist, müssen Sie sie zuerst auf ein vernünftiges Niveau bringen. Das lernt man nicht in einer Woche. Wenn Sie über grundlegende Programmierkenntnisse und einen guten Lehrer verfügen, ist ein Monat möglicherweise eine gute Schätzung. Und danach kommt das Verständnis des Timers.
Ich arbeitete mit einer R&D co. die früher ein Netzwerk mit ähnlichen Anforderungen für synchrones TDM in einem gemeinsam genutzten Netzwerk hatten. Der Upstream-Multiplexer maß den Phasenfehler eines schmalen Impulses von jedem „Sender“, sodass die Downstream-Ziele nicht nur in ihrem eigenen Zeitschlitz mit dem gemeinsam genutzten Bitstrom phasenverriegelt, sondern aufgrund von „Leitungsaufbau“ oder Latenz oder phasensynchronisiert werden konnten jeder andere Phasenfehler. Der Repeater sendete dann bei Bedarf Phasenkorrekturbefehle an jeden Sender, um sicherzustellen, dass der zentrale Punkt alles perfekt synchron empfing.
Um so etwas zu erreichen, muss Ihr Phasenfehlerdetektor eine höhere Auflösung als der erforderliche Fehler haben, und die zeitliche Drift eines nicht synchronisierten Senders muss in ein Zeitintervall übersetzt werden, das innerhalb der Phasendetektorspanne von +/- xx ns korrigiert werden kann. Die Verwendung von ULF/VLF-Phasenerkennung wie z. B. ergibt eine größere Phasenspanne, aber wenn sie bis zu einer Frequenzauflösung multipliziert wird, die eine Phasensynchronisation im Bereich von 10 ns ergibt, ist entweder ein sehr stabiler Takt mit niedrigem Phasenrauschen oder eine hohe Kanalbandbreite erforderlich.
WWVB ist sehr stabil <1e-12 in f, aber unzureichende Bandbreite, um besser als ein paar ms zu korrigieren, aufgrund des 60-kHz-Trägers mit einigen kHz Bw. Übertragen Sie dies auf ns und Ihre Netzwerkbandbreite muss zur Korrektur von Phasenfehlern eine um 1e6 höhere Frequenz aufweisen.
Beginnen Sie mit genauen Spezifikationen zu den Anforderungen für jeden Standort und bestimmen Sie Ihre Phasengenauigkeit, die Sie beim Erkennen von Phasenfehlern in ns erreichen können. Ich bezweifle, dass ein Arduino dies ohne spezielle Schnittstellenhardware lösen kann, um Phasenfehler in Nanosekunden zu messen.
Ich habe viele verschiedene Doppler-Instrumente von VLF bis UHF entwickelt, daher befasse ich mich hier nur mit allgemeinen Dingen.
jms
mkeith
Benutzer126881
Ale..chenski
Chris Stratton
mkeith
Benutzer126881
Chris Stratton
mkeith
Tomnexus
Benutzer126881
Tomnexus
Tomnexus
Benutzer126881
Andreas