Inhaltsverzeichnis:

GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Genau.: 3 Schritte
GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Genau.: 3 Schritte

Video: GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Genau.: 3 Schritte

Video: GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Genau.: 3 Schritte
Video: GPS+D+O 2024, Juli
Anonim
GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Präzise
GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Präzise
GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Präzise
GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Präzise
GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Präzise
GPSDO YT, disziplinierter Oszillator 10Mhz Referenzfrequenz. Kostengünstig. Präzise

*******************************************************************************

STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP

Dies ist ein veraltetes Projekt.

Überprüfen Sie stattdessen meine neue 2x16-LCD-Display-Version, die hier verfügbar ist:

www.instructables.com/id/GPSDO-YT-10-Mhz-L…

Ich habe die alte Version hier zur Dokumentation gelassen.

*******************************************************************************

Hallo Leute, Was ist ein GPSDO? GPSDO bedeutet: GPS-disziplinierter Oszillator. GPS für globales Positionsbestimmungssystem. Alle GPS-Satelliten sind mit einer synchronisierten Atomuhr ausgestattet. Das GPS-Modul empfängt diese Signale von mehreren Satelliten. Und durch Triangulation kennt er seinen Standort. Aber hier interessiert uns der Puls pro Sekunde, der auf dem Modul zu finden ist. Mit diesem präzisen Impuls (von der Atomuhr) können wir einen sehr sehr genauen Oszillator herstellen. Wozu ? Als Referenz, zum Kalibrieren von Frequenzzählern oder einfach nur zum Spaß, um einen in seinem Labor zu haben.

Sie sind viele schematische im Internet. Ich habe einige probiert. Einige sind gut, einer mit einem tiny2313 war 5 Hertz zu langsam. Aber meine ist die einfachste, nützlichste und bequemste. Und ich gebe Ihnen den.hex-Code. Sie sind kein VCO und kein Teiler. Schaltung mit VCO läuft gut. Es muss jedoch kontinuierlich ein Pulssignal von 10 kHz oder mehr haben. Wenn die Antenne zu schwach wird, Puls fehlt oder gar kein Puls, läuft der Oszillator (ocxo) von selbst und die VFC (Voltage Frequency Control) ist nicht mehr genau. Das VCO-Feedback benötigt eine Referenzfrequenz, um anzuhalten. Wenn nicht, variiert es von 1 bis 2 Hertz! Außerdem funktioniert das billigere GPS-Modul in dieser Konfiguration nicht. Wir müssen mindestens 10 kHz haben, um einen VCO zu machen. Ich habe es mit 1000 Hertz versucht. Die Lücke war zu groß. Die Häufigkeit variierte. Mit einem ublox neo-6m können Sie also kein großartiges vco-gpsdo machen, da die maximale Ausgangsfrequenz 1000 Hz beträgt. Sie müssen ein Neo-7m oder ein Obermaterial kaufen.

So funktioniert mein GPSDO YT. Der Controller fand die gute Anpassung für jeden OCXO mit vfc 0 bis 5v. Wenn wir das GPs-Signal verlieren, ändert sich die Frequenz überhaupt nicht. Wenn das Signal wieder erscheint, nimmt der Controller seinen letzten bekannten guten Wert und fährt wie zuvor fort. Am Oszilloskop, mit einem Referenzoszillator. Wir können nicht sagen, wann das Signal verloren geht oder wann es zurückgekommen ist. Das Signal ist das gleiche.

Nach der Kalibrierung können Sie das GPSdo ohne Antenne verwenden, wenn Sie möchten. Ein paar Reittiere später werden Sie eine sehr kleine Drift haben. Aber…. wie viel größer? Es ist Zeit für eine Erklärung.

Hier ist etwas Mathe… Einfache Mathe, folge mir damit, es ist einfach. Bisher hat der Algorithmus 6 Phasen. Jede Phase nimmt eine Probe von 1 bis 1000 Sekunden, findet die gute PWM-Einstellung und geht zu den meisten längeren Proben für mehr Genauigkeit.

Genauigkeit = (((Anzahl Sekunden x 10E6) + 1)/Anzahl Sekunden) - 10E6

Phase 1, 1 Sekunde Abtastung für 10.000.000 Zählungen für eine Genauigkeit von +- 1 Hz

Phase 2, 10 Sekunden Abtastung für 100.000.000 Zählungen für eine Genauigkeit von +-0,1 Hz

Phase 3, 60 Sekunden Abtastung für 600 000 000 Zählungen für eine Genauigkeit von +-0,01666 Hz

Phase 4, 200 Sekunden Abtastung für 2 000 000 000 Zählungen für eine Genauigkeit von +-0,005 Hz

Phase 5, 900 Sekunden Abtastung für 9 000 000 000 Zählungen für eine Genauigkeit von +-0,001111 Hz

Phase 6, 1000 Sekunden Abtastung für 10 Milliarden Zählungen für eine Genauigkeit von +-0,001 Hz

Schlimmsten Fall. Wenn wir Phase 6 erreichen. Diese Zahl kann sich alle 1000 Sekunden ein wenig ändern oder nicht. irgendwann wird es 10, 000, 000, 001 oder 9, 999, 999, 999 sein, also + oder - 0, 000, 000.001 Variation für 1000s. Jetzt müssen wir den Wert für 1 Sekunde kennen.

10Mhz = 1 Sekunde

Für 1 Sekunde = 10.000.000, 001 Zähler/1000s = 10.000.000.001 Hz (schlimmster Fall für 1 Sekunde)

10.000.000.001 - 10.000.000 = 0,001 Hz/s schneller oder langsamer

0,001Hz X 60 X 60 X24 X365 = 31536 Hz/Jahr

Denken Sie also daran, 10Mhz ist 1 Sekunde, 31536Hz X 1 / 10E6 = 0,0031536 Sekunde/Jahr

Eine weitere schnellere Berechnungsmethode. ein Fehler bei 10E9Mhz ist 1/10E9 = 1E-10

1E-10 x 60x60x24x365 = 0, 0031536 Sekunde/Jahr.

Ist das genau genug für Sie?

Sie müssen jedoch einen guten OXCO haben. Ich bevorzuge Double Oven 12v Sinus-Ausgang. Stabiler, leiser und genauer. Aber ich habe das gleiche Ergebnis mit einfachen 5V. Zum Beispiel hat ein stp 2187 eine Stabilitätskurzzeit (Allan-Abweichung) von 2x10-12 = 0,000, 000, 000, 002 Hz Stabilität. Gleichzeitig korrigiert Avr immer die PWM (Frequenz), wenn GPS-Impulse verfügbar sind. Der uC zählt immer… immer. Das bedeutet, dass auf dem Display weder Datum noch Uhrzeit angezeigt werden. Wenn uC 900s abtastet, ist dieser für 900 Sekunden beschäftigt. Es muss die ganze Uhr zählen. Das Problem ist, dass uC mit 10Mhz läuft. Jede Uhr muss gezählt werden. Es zählt sich selbst. Wenn nur eine Uhr fehlt, ist das Sample nicht gut und die PWM-Anpassung ist nicht richtig. Ich kann die Anzeige nicht jede Sekunde aktualisieren.

Wenn die Probenahme gestartet wird. Uc beginnt Timer0 zu zählen. Jeder 256-Takt erzeugt eine Unterbrechung. X-Register wird inkrementiert. wenn es voll ist, wird das Y-Register inkrementiert und X auf 0 zurückgesetzt und so weiter. Am Ende, beim letzten GPS-Impuls, wird die Zählung gestoppt. Und jetzt und nur jetzt kann ich die Anzeige aktualisieren und etwas Mathe für die PWM-Berechnung machen.

da ich das weiß, habe ich nur 25, 6 uns (256 uhr vor dem unterbrechen) um die zeit abzulesen und anzuzeigen oder sonstiges. Es ist unmöglich. Eine Unterbrechung kann gebufft werden, nicht 2. Ich könnte die Zeit nach 1000s aktualisieren… aber es wird nicht praktikabel sein, die Zeit mit einem Intervall von 15, 16 Minuten zu sehen. Ich habe eine Uhr, eine Uhr, ein Handy, um die Zeit zu wissen:) Ich mache eine 10-MHz-Referenz. Keine Uhr.

Ein weiteres Problem, das ich hatte, einige avr-Anweisungen haben 2 Zyklen. Einschließlich der rjmp-Anweisung. Dies bedeutet, dass, wenn der erste oder letzte GPS-Impuls gleichzeitig mit einem 2-Zyklen-Befehl auftrat, der uC einen Takt verpasst. Weil uC den Befehl beendet, bevor der Interrupt beginnt. Der Zähler startet oder stoppt also einen Zyklus später. Ich kann also keine Zeitwarteschleife machen… Aber tatsächlich habe ich keine andere Wahl. Ich musste irgendwo loopen!! I Also verwende ich rjmp und nop (dies tut nichts) Anweisung. Nop ist ein Ein-Zyklus-Befehl. Ich habe 400 nop-Anweisungen für einen rjmp auf atmega48 gestellt. 2000 auf atmega88- und atmega328p-Version. Daher sind die Chancen geringer, dass der erste oder letzte Impuls beim rjmp-Befehl kommt. Aber ja, es ist möglich und wenn dies passiert, wird dieser Fehler bei der nächsten Probenahme korrigiert.

Die Anzeige ist optional. Sie können nur mit uC, OCXO und Tiefpassfilter (Widerstandskondensator) schalten, einschalten und warten. Nach 1 Stunde haben Sie eine akzeptable Frequenz. Aber um Phase 6 zu erreichen, dauert es ein paar Stunden.

PWM hat 16 Bit. 65535 Schritt. 5v/65535 = 76, 295 uV

Die OCXO-Variation beträgt 2 Hz mal 1 V. 1v/76, 295uV = 13107 Schritt für 2 Hz. 2/13107 = 152,59uHz in Schritten von pwm

Die Phase 5 ändert pwm um 3, Phase 6 ist 2. Schritt… Warum 3 ? weil 3 die Frequenz um 0,000, 000, 000, 4 auf einer 15-Minuten-Skala ändert. und 4 ist meine magische Zahl in meinem Algorithmus. Zum Beispiel, wenn in Phase eins, ist die erste gefundene Frequenz 10.000, 003 MHz. Ich senke um 0, 000, 000,4 Schritte nach unten.

Ein zu großer Schritt kann von 10.000003 bis 10.000001 und nach 9, 999998 Hz gehen. Ich verfehle das Ziel.

Mit 0, 0000004. Es ist schneller als 0, 1 und ich bin mir sicherer, eine Zahl nicht zu umgehen. Und so weiter. Ich mache das gleiche mit 10 Sekunden, 60 Sekunden und 200s Phase und 900s. 1000s läuft im Modus und verwende einen PWM-Schritt von 2

Bitte beachten Sie, dass Phase 5 länger zu erreichen ist. Der Abstand zwischen 4 und 5 ist größer. Aber es hilft, schneller von 5 auf 6 zu gehen.

Wenn Phase 6 genau 10 Milliarden gezählt hat, werden die PWM-Werte im eeprom gespeichert. Jetzt ist es Zeit für den Laufmodus. Dieser zählt 1000 Sekunden Sample, aber nur mit 2 Step PWM. Im Betriebsmodus wird die tatsächliche Frequenz angezeigt und in Intervallen von 1000 Sekunden aktualisiert. Wenn das Signal im laufenden Modus verloren geht, geht es im Selbstlauf weiter. Keine Änderung von PWM in diesem Modus. Wenn das Signal zurückkommt, kehrt es zu Phase 5 zur Neusynchronisierung zurück.

Wenn der Stromkreis nach dem Speichern des Eeproms getrennt wird. Dieser beginnt in Phase 5 beim Einschalten mit dem eeprom-pwm-Wert.

Um den Eeprom-Wert zu löschen, drücken Sie einfach die Taste beim Start. Pwm 50% wird geladen und die Kalibrierung beginnt mit Phase 1.

Ich verbringe viele Stunden damit, verschiedene Dinge auszuprobieren, die Konfiguration der Schaltung. Ich habe viele Tests mit OP-Verstärker, Puffer und anderen Chips durchgeführt. Und am Ende… das beste Ergebnis, das ich bekommen habe, braucht es nicht. Nur eine gute stabile Stromversorgung und ein Filterkondensator. Also halte ich es einfach.

Schritt 1: Teile kaufen

Teile kaufen
Teile kaufen
Teile kaufen
Teile kaufen
Teile kaufen
Teile kaufen

Als erstes müssen die Teile gekauft werden. Denn oft dauert der Versand sehr, sehr lange.

GPS-Modul: Ich verwende ein ublox neo-6m. Ich habe dieses hier bei ebay gekauft. Machen Sie eine Suche, es kostet ungefähr 7 bis 10 US-Dollar.

Standardmäßig ist bei diesem Empfänger der 1-Impuls pro Sekunde aktiviert. Wir brauchen nichts zu tun.

Sie können jedes GPS-Modul mit einem 1-Hertz-Impulsausgang verwenden. Du hast ein. Verwende das!

OCXO: Ich habe 2 Oszillatoren ausprobiert. Ein Doppelofen stp2187 12V Sinuswellenausgang. Und ein ISOTEMP 131-100 5V, Rechteckwellenausgang. Beide stammen von radioparts16 bei ebay. Ich hatte einen sehr guten Service von ihnen und der Preis war billiger.

AVR: Code passt auf ein wenig atmega48. Aber ich schlage vor, einen atmega88 oder atmega328p zu kaufen. Es ist fast der gleiche Preis. Kaufen Sie diese bei Digikey oder ebay. Ich verwende die Dip-Version. Sie können eine oberflächenmontierte Version kaufen, aber achten Sie darauf, dass die Pins nicht mit dem Schaltplan identisch sind.

LCD-Display: Jedes 4x20 HD44780-kompatible Display funktioniert. Ratet mal, wo ich meine gekauft habe:) Ja bei ebay vor ein paar Jahren. Jetzt ist es teurer als zuvor. Aber verfügbar unter 20 US-Dollar.

Vielleicht werde ich in naher Zukunft einen Code für ein 2x16-Display erstellen. Diese Displays kosten nur 4$. Und zwischen dir und mir würde ein 2-zeiliges Display ausreichen.

Sie müssen über einen AVR ISP-Programmierer verfügen. Die Programmierung eines AVR ist nicht wie ein Arduino. Arduino wurde bereits für die Kommunikation über die serielle Schnittstelle programmiert. Ein brandneuer AVR muss mit ISP oder Parallel High Voltage Programmer programmiert werden. Wir verwenden hier isp.

Ein 74hc04 oder 74ac0, Voltregler 7812 und 7805, Widerstände, Kondensator…. digikey, ebay

Schritt 2: Hier ist Schema und Gpsdo_YT_v1_0.hex

Image
Image
Hier ist Schema und Gpsdo_YT_v1_0.hex
Hier ist Schema und Gpsdo_YT_v1_0.hex
Hier ist Schema und Gpsdo_YT_v1_0.hex
Hier ist Schema und Gpsdo_YT_v1_0.hex

Ich denke, dass der Schaltplan alles ist, was Sie brauchen, um dieses Projekt zu realisieren. Sie können eine kupferplattierte Platte mit Ätzverfahren oder nur eine perforierte Platte verwenden, wenn Sie möchten.

Sie können jede beliebige Box verwenden, aber ich empfehle eine Metallbox. Oder einfach auf einem Steckbrett zum Spaß wie meinem:)

Ich warte auf Antennenverlängerung und BNC-Anschluss, um mein Projekt in eine Box zu stecken.

Sie müssen das richtige Sicherungsbit auswählen. Stellen Sie sicher, dass der externe Oszillator ausgewählt ist. Wenn Sie Probleme mit dem externen Oszillator haben, versuchen Sie es mit External Crystal. Und der low.ckdiv8-Takt ist deaktiviert. Siehe Bild. Beachten Sie, dass Sie, wenn der externe Takt das Bit verschmilzt, einen externen Takt bereitstellen müssen, um den Code zu programmieren oder auszuführen. Mit anderen Worten, schließen Sie den Oszillator an den xtal1-Pin an.

Übrigens… Sie können den gleichen Code verwenden, um einen Frequenzzähler mit 1-Sekunden-Tor zu erstellen. Geben Sie einfach den zu messenden Takt in den xtal1-Pin ein und Sie haben einen +-1 Hz-Frequenzzähler.

Ich werde das Projekt aktualisieren, sobald ich neue Sachen habe.

In der Zwischenzeit haben Sie, wenn Sie das Projekt interessiert, genug Material, um es vor mir zu beginnen und sogar abzuschließen

Ich habe 2 Videos hochgeladen, Sie können Phase eins und das letzte sehen.

Für Fragen oder Anmerkungen stehe ich gerne zur Verfügung. Dankeschön.

26. Februar 2017…. Version 1.1 verfügbar.

-atmega48 wird nicht mehr unterstützt. Nicht genug Platz.

-Anzahl der gesperrten Satelliten hinzugefügt.

-Unterstützt 2x16 LCD. Wenn Sie ein 4x20 haben, funktioniert es auch. Aber 2 letzte Zeile zeigt nichts an.

Schritt 3: Logs in Eeprom

Meldet sich in Eeprom. an
Meldet sich in Eeprom. an

Hier ist der Dump von Eeprom nach ein paar Stunden Laufzeit. Ich werde erklären, wie man das liest. Wieder ist es einfach:)

An Adresse 00, 01 ist der PWM-Wert gespeichert. Sobald Phase 5 9 Milliarden zählt, wird der PWM-Wert jedes Mal aktualisiert, wenn der Zähler genau 10 Milliarden erreicht.

Sobald wir in Phase 5 sind. Alle Zählerstände werden nach dem PWM-Wert im eeprom gespeichert. Beginnen Sie bei Adresse 02, nach 03 usw.

Dieses Beispiel kam von meinem 5 Volt ocxo. Wir können den PWM-Wert von 0x9A73 = 39539 dezimal auf 65536 lesen. = 60, 33% oder 3,0165 Volt.

Adresse 00:01 ist also 0x9A73

Als nächstes können Sie 03 lesen. Für 9.000.000.003 wird Pwm um 3 gesenkt, da wir uns noch in Phase 5 befinden

00 für 10.000, 000.000 pwm bleibt unangetastet und wir gehen in den Laufmodus (Phase 6) über

02 für 10.000, 000.002 In diesem Fall wird der PWM-Wert von 2. gesenkt

01 für 10.000, 000.001 PWM-Wert wird von 2. gesenkt

01 für 10.000, 000.001 PWM-Wert wird von 2 wieder gesenkt

00 für 10.000, 000.000 pwm bleiben unberührt

00 für 10.000, 000.000 pwm bleiben unberührt

00 für 10.000, 000.000 pwm bleiben unberührt

Jetzt wissen Sie, wie man das eeprom liest. Alle 1000 Sekunden wird ein neuer Wert in das Eeprom geschrieben. Wenn das eeprom voll ist, startet es von Adresse 2 neu.

FF-Wert Mittelwert 9, 999, 999,999

Sie können mit diesem Dump die Genauigkeit verfolgen, ohne LCD-Display.

Sie können die eeprom-Datei mit einem ISP-Programmierer sichern.

Ich hoffe, dass ich Ihnen genügend Informationen gegeben habe. Wenn nicht, lass es mich wissen. Ratschläge, Fehler, alles.

Yannick

Empfohlen: