Ich denke, diese Art von passt kaum in die Regeln, aber es ist interessant genug, dass ich es sowieso posten würde.
Hochpräziser, GPS-synchronisierter Zeitstempelgenerator für Datenerfassungszwecke.
Dies ist ein ziemlich interessantes Projekt, das verwendet werden soll, um auf einfache Weise mehrere unabhängige Datenerfassungssysteme zu synchronisieren.
Grundsätzlich arbeite ich in einem Forschungslabor und wir haben oft Instrumente mit mehreren unabhängigen Datenerfassungssystemen, die physisch um bis zu 50 Fuß voneinander getrennt sein können. Wir müssen in der Lage sein, den Zeitpunkt der Probenahme aus jedem System zu korrelieren. Dies kann schwierig sein, wenn Sie die Probenahmezeiten mit einem hohen Maß an Präzision auflösen möchten. Wenn Sie so etwas wie ein USB-Datenerfassungssystem verwenden, kann nur die USB-Latenz mehrere hundert Millisekunden unbekannte Latenz einleiten, die von Erfassung zu Erfassung variieren kann.
Die vorherige Lösung war ein 24-Bit-Parallelzähler, der einfach über alle Bereiche verteilt war, einen enormen Kabelbaum erforderte und den Hintern quälte.
Dieses System verwendet ein spezielles GPS-Zeitsteuerungsmodul , das beliebige Frequenztakte synthetisieren kann, die mit den Atomuhren in den GPS-Satelliten phasen- und frequenzverriegelt sind.
Die MCU ist für das Zusammenbinden der GPS-Datennachrichten verantwortlich (ich musste einen vorhandenen Protokollparser für die GPS-Daten stark erweitern und optimieren). Das GPS ist für die Verwendung eines proprietären Binärprotokolls konfiguriert und wird vom von mir geschriebenen Parser analysiert.
Das Projekt wurde mehrfach überarbeitet (siehe Abbildung unten).
Design
Revisionen!

Rev. 1: Hat nie funktioniert, da ich ursprünglich gehofft hatte, mit einer Software-dPLL von einem viel günstigeren GPS einen höherfrequenten Takt nur aus dem 1-PPS-Ausgang zu synthetisieren. Es ist wahrscheinlich möglich, es zum Laufen zu bringen, aber die Zeitinvestition hat sich einfach nicht gelohnt. (Und ich bin zu beschissen ein Kodierer)
Benutzte einen Parallaxenpropeller MCU. Das Fehlen anständiger kompilierter Sprachen war ebenfalls ein großes Problem.

Rev 2: Auf einen ATmega2560 umgestellt. Arbeitete, hatte viele funky Design-Aspekte aus der ersten rev geerbt. In erster Linie die fortgesetzte Verwendung von Schieberegistern für die 32-Bit-Ausgabe, trotz der mehr als ausreichenden Anzahl von E / A auf dem ATmega2560.
Das erste Board, auf dem Optiboot lief und das vollständig mit der Standard-Arduino-Toolchain programmiert wurde, bevor ich mich darüber ärgerte und anfing, die Toolchain zu modifizieren, um sie meinen Zwecken besser anzupassen.

Rev. 3: Funktionierte auch. Die fehlerhafte Verkabelung ist darauf zurückzuführen, dass diese Karte einen integrierten USB-Hub enthält, um die Anzahl der erforderlichen USB-Anschlüsse zu verringern (die FTDI-Schnittstelle erfordert 1 USB und das GPS verfügt auch über eine USB-Schnittstelle). Leider konnte das GPS nicht richtig aufgezählt werden, obwohl das FTDI-Gerät einwandfrei funktioniert hat und ich diesen Hub ohne Probleme an anderer Stelle verwendet habe. Seltsam.
Ich habe keinen richtigen USB-Debugger, also habe ich den USB-Hub einfach ganz fallen gelassen, anstatt zu versuchen, das Problem zu beheben. Der GPS - USB ist nicht wirklich viel außerhalb von Set-up sowieso verwendet.

Rev 4: Halbfinale ATmega2560-Version. Es wurde ein LCD für den GPS-Status hinzugefügt, das mit LEDs und so weiter gespielt wird. Bessere Stellfläche für die möglichen Superkondensatoren zur Aufrechterhaltung des GPS-Status im stromlosen Zustand.
Dies ist die letzte Optiboot-Version.
MStimeist die MSTOWoder Millisekunden-Zeit der Woche, die der Name des GPS-Datenwerts ist, der auf dem Zeitstempel-Ausgang ausgegeben wird. Es handelt sich um eine 32-Bit-Variable, die einmal pro Millisekunde inkrementiert und jede Woche aktualisiert wird. Es ist ein undurchsichtigerer Teil des GPS-Standards.
ITOWist ein weiterer GPS-bezogener Wert, der dem 1PPS-Signal entspricht. Die Korrelation zwischen den beiden wird auf dem LCD nicht richtig wiedergegeben, da ich nicht die CPU-Zeit habe, um das LCD mit der von mir gewünschten Geschwindigkeit zu aktualisieren. Dies war tatsächlich eines der wichtigsten Dinge, die beim Upgrade auf die Xmega-Geräte verbessert wurden.

Rev 5: Vollständiger Architekturwechsel. Verwendet jetzt einen ATxmega128A1U-Prozessor. Nicht mehr wirklich "Arduino", aber die Möglichkeit, mehrere Interrupt-Levels für die xmega-Prozessorserie zu haben, ermöglichte es mir, die Codestruktur erheblich zu verbessern.
Die beiden Drähte von mir haben experimentiert, das Board hat auch ohne funktioniert.
Ich freue mich auf:
Rev 6!

Fügen Sie die Möglichkeit hinzu, unterschiedliche LCD-Größen zu verwenden, den ESD-Schutz beim Anschluss der GPS-Antenne zu erhöhen (das war ein Problem) und die Möglichkeit, anstelle von Superkondensatoren eine CR2032-Batterie zur Aufrechterhaltung der GPS-Uhr zu verwenden.
Auch die Beschriftung von Debug- und Status-LEDs wurde deutlich verbessert.

Und Bonus Nyan-Cat!

(Diese Boards werden gerade hergestellt. Wenn ich sie bekomme, füge ich Bilder des echten Boards hinzu.)
Ich habe einige Langzeittests zwischen zwei ATmega2560-Platinen durchgeführt, und über 72 Stunden betrug der RMS-Zeitfehler zwischen den beiden Einheiten ~ 20 us. Dies geschah auch mit zwei völlig unabhängigen Antennen. Mein gestalterisches Ziel war <1 ms, also bin ich ziemlich zufrieden damit.
Insgesamt denke ich, dass dies eine gute Arbeit leistet, um zu veranschaulichen, wie Arduino ein nützliches Werkzeug für das frühe Prototyping von "echten" Produkten / Systemen sein kann. Ich verwende es, um eine erste Testversion mit minimalem Aufwand zum Laufen zu bringen, und wenn ich sicher bin, dass die Idee funktioniert, setze ich die Arbeit tatsächlich ein, um zu einer vollständig benutzerdefinierten, zweckspezifischen Implementierung zu migrieren.
Designdateien:
https://fake-server.no-ip.org/svn/FPGAStuff/DAQ%20systems/
(In der Reihe der Verzeichnisse "GPS Timestamp").
(Hinweis: Dateien stammen aus Altium Designer. Es handelt sich nicht um Eagle-Dateien.)
Quellcode:
https://fake-server.no-ip.org/svn/Programming/Code/AVR/
Wieder in der "gpsTimeStamp" -Verzeichnisreihe.
Entschuldigung für die beschissenen Handybilder.