Forum: Mikrocontroller und Digitale Elektronik GPSDO Fragen


von Tobias P. (hubertus)


Angehängte Dateien:

Lesenswert?

Hallo Mikrocontrollerfreunde

ich habe mir einen GPSDO gebaut, und dieser scheint eigentlich auch 
recht gut zu funktionieren. Im Anhang mal der Teil mit dem Quarzofen und 
dem DAC, wo ich eine Frage dazu habe.
Und zwar habe ich heute meinen GPSDO nach einer Stunde Warmlaufzeit mit 
einem professionellen GPSDO von Meinberg verglichen. Ich frage mich, was 
ich da erwarten kann; die beiden Oszillatoren werden ja nie exakt die 
selbe Frequenz haben, da sie ja nicht wirklich gegeneinander gelockt 
sind. Jedenfalls habe ich festgestellt, dass im Vergleich zum Meinberg 
mein Oszillator immer noch ein wenig driftet; manchmal ist er ein 
bisschen schneller, dann wieder etwas langsamer.

Der OCXO treibt einen Mikrocontroller (STM32F303) an. Die PLL setzt den 
Takt der CPU und der Timer auf 60 MHz hoch. Im Mikrocontroller lasse ich 
einen 32 Bit Timer laufen, und mit dem PPS-Puls von einem LEA-8 Modul 
wird ein Capture Ereignis ausgelöst. Ich bilde im Interrupt dann jeweils 
die Differenz aus dem aktuellen Capturewert und dem Vorhergehenden. Da 
der Timer mit 60 MHz läuft, müssen zwischen zwei Pulsen somit genau 60 
Mio. Perioden liegen. Ich hab dann einen Counter gemacht, welchen ich um 
1 hoch zähle, wenn die Frequenz zu tief ist, und um 1 runter zähle, wenn 
die Frequenz zu hoch ist. Der Counter wird dann noch durch 10 geteilt 
und auf den DAC gegeben.

Das Problem ist, dass die Frequenz nicht richtig stabil wird. Ich 
triggere mein Oszilloskop auf den Meinberg-GPSDO; mein eigener GPSDO 
rennt dann immer ein wenig nach rechts oder nach links, ich würde aber 
erwarten, dass er genau still steht. Wenn ich annehme, dass der 
Meinberg exakt stabil ist (hat einen neuen Kalibrierkleber drauf), dann 
driftet die Phase meines GPSDO um ca. +/- 5..10 ns pro Minute hin und 
her. Ob das wohl akzeptabel ist für ein Frequenznormal?

Ich habe auch festgestellt, dass bei einem DAC-Wert von 29797 die 
Frequenz etwas zu tief ist - wird auf den DAC aber der Wert 29798 
ausgegeben, also nur ein Count mehr, dann ist die Frequenz gerade ein 
kleines bisschen zu hoch. Wie löst man das Problem? Die Abstimmspannung 
vom OCXO wird sowieso nie exakt zu dem passen, was der DAC kann.

Ich muss aber anmerken, dass ich meinen OCXO, der nigelnagelneu ist, nur 
1 Stunde aufgewärmt hatte. Vielleicht ist das zu kurz. (Ich brauchte 
einen speziellen OCXO, da ich etwas hohe Anforderungen an das 
Phasenrauschen habe.)

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Wahrscheinlich können die hier http://leapsecond.com/time-nuts.htm dir 
besser helfen.

von Wolfgang (Gast)


Lesenswert?

Tobias P. schrieb:
> Ich habe auch festgestellt, dass bei einem DAC-Wert von 29797 die
> Frequenz etwas zu tief ist - wird auf den DAC aber der Wert 29798
> ausgegeben, also nur ein Count mehr, dann ist die Frequenz gerade ein
> kleines bisschen zu hoch. Wie löst man das Problem?

Indem du die Verstärkung in deinem Regelkreis verringerst. Oder du 
erhöhst die Auflösung von deinem DAC z.B. durch PWM, i.e. schnelles hin- 
und herspringen zwischen zwei benachbarten Werten mit dem passenden 
Tastverhältnis.

von Stampf (Gast)


Lesenswert?

Du benoetigst einen langsameren Regler mit PI-Charakteristik. Die 
Regelzeitkonstante sollte um die 15 Minuten betragen. Bedeutet, der DAC 
muss noch ein Stueck langsamer werden. Und ich wuerde auf 16 Bit gehen. 
Mein OCXO zB hat einen Regelbereich von +-1.0ppm, die 16Bit werden auf 
diesen Bereich abgebildet.

Die LM4040 ist leider ein Fehlgriff. Der TK ist 100ppm/K.

von G. H. (schufti)


Lesenswert?

oder die Pufferstufe so auslegen, dass sie default die ermittelte 
mittlere Abstimmspannung liefert und mit dem DAC nurmehr einen Offset 
erzeugen.

von Schorsch X. (bastelschorsch)


Lesenswert?

Tobias P. schrieb:
> Ob das wohl akzeptabel ist für ein Frequenznormal?

Kommt drauf an, was man will. Das sind 166e-12 oder 0.166€-9. Was schon 
sehr , sehr gut ist. Ich denke ein Axiom75 vielleicht noch ein bisschen 
besser sein .
Angefangen bei der Referenz LM4040. Die hat eine Drift von 100ppm und 
Rauschen von 35uV, was schon sehr grenzwertig sein dürfte. Dann wäre die 
Frage, welcher GPS Empfänger. Da reden wir über ca. 10-50ns Jitter, aber 
nur wenn die Antenne passt. Da wirst du mit 1s Messzeit nicht auskommen 
, denn das wären dann nur 10-50 ppb. Bei einem HP10811 sind es mal 
mindestens 2000s im Vergleich dazu. Soweit ich Meinberg verstehe, sind 
die schon noch besser (je nach Modell).
Ohne dass du den DAC veränderst sollte auch die Frequenz stehen bleiben.

Wie ist das ganze (thermisch) eingepackt ?

Schau mal wie genau der Meinberg ist ?

von Tobias P. (hubertus)


Lesenswert?

Ja, das mit dem LM4040 habe ich auch eben erst bemerkt. Allerdings denke 
ich, ist es doch nicht so schlimm - wenn der LM um 100 ppm wegdriftet, 
sind das ja grade mal 250 uV. Da ist die Drift der anderen Elemente noch 
nicht drin....
Werde noch eine bessere Referenzdiode suchen. Im Moment hab ich noch 
kein Gehäuse, d.h. die Diode ist dem Luftzug vom offenen Fenster usw. 
ausgesetzt, sicher auch nicht optimal.
Obs wohl noch bessere Dioden als den 4040er im SOT23 gibt? hätte noch 
ADR5040 da, aber das sieht nicht wesentlich besser aus.
Gut das mit der Temperatur wird sich ein bisschen entschärfen wenn das 
Gehäuse da ist.
Das GPS-Modul ist ein LEA-8, mit einem vorgeschalteten LNA und einer 
selber gebauten quadrifilaren Helixantenne, montiert auf dem Fenstersims 
(innen). Er trackt bis zu 12 Satelliten, also auch recht gut :-)

von Gerd E. (robberknight)


Lesenswert?

Der LEA-8 kann nur einen 1PPS ausgeben. Dabei gibt es immer etwas Jitter 
im Vergleich zu der echten Frequenz vom GPS.

Wenn Du einen LEA-8T nehmen würdest, hättest Du die Möglichkeit entweder 
eine UART-Nachricht zu bekommen, in der der Versatz des 1PPS zum echten 
Signal aufgeführt ist, oder aber die Frequenz des Timpulse zu verändern 
(bis 10 MHz hoch). Da würdest Du mehr Messwerte bekommen und kannst 
damit die Abweichung genauer bestimmen. Der LEA-8T ist halt extra für 
Timing-Applikationen vorgesehen, der normale LEA-8 eher für 
Positionserkennung.

von Schorsch X. (bastelschorsch)


Lesenswert?

Tobias P. schrieb:
> Obs wohl noch bessere Dioden als den 4040er im SOT23 gibt?

Ich verwende häufiger den MAX6070 (Rauschen ca. 5uV, 6ppm max, 0.04% 
genauigkeit und <3€). Besser geht natürlich immer (dann meist aber auch 
teurer). Dabei die Widerstände nicht vergessen, 100ppm sind bei SMD 
"normal", alles bessere muss man aussuchen.

Wenn ich das Datenblatt vom Axiom75-11 auf die Schnelle richtig 
verstehe, ist der Abgleich +-1ppm mit +-2.25V (bei 2.5V) gemacht. Das 
bedeutet, dass ca. 20uV notwendig sind für 1e-12 Einstellung der 
Frequenz. Dann bedeuten 250uV bereits > 1e-11. Das alles muss aber auch 
erst mal durch den Rest erreicht werden.

Es bleibt spannend.

von ZF (Gast)


Lesenswert?

Hallo Tobias,

Stampf schrieb:
> Du benoetigst einen langsameren Regler mit PI-Charakteristik. Die
> Regelzeitkonstante sollte um die 15 Minuten betragen. Bedeutet, der DAC
> muss noch ein Stueck langsamer werden.
15 Minuten Zeitkonstante ist ein guter Startwert. Wenn es genauer sein 
soll: Allan devation von OCXO und NAVSAT Epfänger ermitteln, 
Schnittpunkt der beiden Kurven als Zeitkonstante des Reglers wählen. Zum 
Einlesen: http://www.ulrich-bangert.de/AMSAT-Journal.pdf

Ansonsten wurde schon genannt: LM4040 ist nicht die beste Wahl, LEA8T 
ist besser als LEA8 für Timinganwendungen.

von Pandur S. (jetztnicht)


Lesenswert?

Falls der Controller etwas mehr wie nur zaehlen sollte, kann man den PLL 
Lock auch an einen Chip auslagern. zB einen AD9548, oder aehnlich.

von Tobias P. (hubertus)


Lesenswert?

Hi allerseits,

der Fehler scheint darin zu liegen, dass ich die PLL verwendet habe, um 
den Mikrocontroller höher zu takten. Der Jitter ist einfach zu gross. 
Ich habe die PLL nun weg genommen, sodass der Mikrocontroller nun mit 
den 10 MHz direkt angetrieben wird. Als Referenzdiode dient ein REF3225, 
von dem ich noch ein Kistchen gefunden habe.
Jetzt habe ich den professionellen GPSDO als Referenz für einen HP 
53131A Counter mit 11 Stellen benutzt. Mein eigener GPSDO schwingt im 
Verlauf ca. eines halben Tages auf exakt 10.000 000 000 MHz ein und 
bleibt dort - auf dem Scope sehe ich ein stehendes Bild. Werde dann noch 
mit meiner GoPro eine Zeitrafferaufnahme erstellen.

Jetzt werde ich noch das Gehäuse fertig fräsen und ein LCD einbauen :-) 
Danach habe ich einen frontseitigen und 3 rückseitige 10 MHz Ausgänge 
mit je 7 dBm, was für praktisch alle Specis, NWAs und dergleichen 
ausreicht. Das Phasenrauschen werde ich auch noch messen, sollte aber um 
die -150 dBc @100Hz sein.

von Gerd E. (robberknight)


Lesenswert?

Tobias P. schrieb:
> Das Phasenrauschen werde ich auch noch messen, sollte aber um
> die -150 dBc @100Hz sein.

Mit welchem Verfahren/Geräten willst Du das in dem von Dir erwarteten 
Wertebereich messen?

von Tobias P. (hubertus)


Lesenswert?

Gerd E. schrieb:
> Tobias P. schrieb:
>> Das Phasenrauschen werde ich auch noch messen, sollte aber um
>> die -150 dBc @100Hz sein.
>
> Mit welchem Verfahren/Geräten willst Du das in dem von Dir erwarteten
> Wertebereich messen?

habs noch nicht genau angeschaut, aber ich werds mal mit dem HP 8662A 
Signalgenerator, dem 11729C Carrier Noise Test Set und dem 8568B Speci 
versuchen. Wenn mich nicht alles täuscht bilden die zusammen den HP 
3048A Phasenrauschmessplatz.
Die Frequenz habe ich ja bereits mit einem professionellen GPSDO 
gemessen. Ich werd demnächst noch Zugang zu einem Cs Normal haben und 
das mal vergleichen :-)

von Schorsch X. (bastelschorsch)


Lesenswert?

Tobias P. schrieb:
> Das Phasenrauschen werde ich auch noch messen, sollte aber um
> die -150 dBc @100Hz sein.

Das dürfte nicht klappen, da der Axiom 75-11 -140dBc @ 100Hz (was ein 
phantatischer Wert ist) hat und dieser bestimmt das Kurzzeitrauschen.

Insgesamt ca. 1^10 ist doch schon sehr schön für den geringen Aufwand.

von Tobias P. (hubertus)


Lesenswert?

Schorsch X. schrieb:
> da der Axiom 75-11 -140dBc @ 100Hz (was ein phantatischer Wert ist) hat
> und dieser bestimmt das Kurzzeitrauschen

das stimmt, gemäss Datenblatt. Bernd Neubig hat mir aber einen 
selektiert und mir den Testreport zukommen lassen. Meiner hat gemäss dem 
Testreport -154dBc @100Hz, was unheimlich toll ist :-) denn ich gedenke 
ihn als externe Referenz für den HP 8568B Speci zu verwenden. Dieser 
verlangt ein Phasenrauschen besser -140dBc @100Hz - daher kommt also 
meine 'Messlatte', die der GPSDO einhalten sollte :-) ich befürchte 
noch, dass die ganzen Verstärker und die Spannungsversorgung und 
HF-Sauereien des Mikrocontrollers das Phasenrauschen verschlechtern, 
weshalb eine Nachmessung sicher sinnvoll ist.

von Proletus (Gast)


Lesenswert?

Das Cs Normal fuer die Frequenz kannst du vergessen, denn hinter GPS 
steht auch ein Cs Normal. Sprich du misst GPS gegen ein anderes Cs 
Normal.
Und die 150dBc @ 100Hz erscheinen mir sehr sportlich. Interessiert mich 
aber. Das waer dann ja besser wie ein Rb.

von Tobias P. (hubertus)


Lesenswert?

Proletus schrieb:
> Das waer dann ja besser wie ein Rb.

wieso? ein Rb hat von sich aus auch nicht so ein super Phasenrauschen. 
Da wird meist auch ein OCXO verbaut, welcher mittels PLL am Rb 
angebunden ist. Damit wird das Phasenrauschen des Outputs im 
Wesentlichen durch den OCXO vorgegeben, und die Frequenzgenauigkeit 
durch das Rb.

von Schorsch X. (bastelschorsch)


Lesenswert?

Es ist immer so, dass ein OCXO für das Kurzzeitverhalten verantwortlich 
ist, egal of Cs oder Rb Normal. Und da kann man den unterschiedlichsten 
Aufwand treiben. Die alten HP5065 hatte so ziemlich das ordentlichste an 
Board, was es in den letzten Jahrzehnten dazu gab.

Tobias P. schrieb:
> Testreport -154dBc @100Hz

Das ist dann natürlich eine sehr schöne Unterstützung. Wird aber nicht 
einfach werden, das nachzumessen.

von ZF (Gast)


Lesenswert?

Langfristig musst du dir um die Genauigkeit vom GPSDO keine Gedanken 
machen, weil die Uhren in den Satelliten an die "offizielle Zeit" 
angebunden sind. Auf kleine Tau musst du dagegen achten, damit der GNSS 
Empfänger nicht die in diesem Bereich bessere Stabilität des OCXO kaputt 
macht. Das passiert, wenn die Reglerzeitkonstante zu kurz gewählt ist.

von m.n. (Gast)


Lesenswert?

Zitronen F. schrieb:
> Falls der Controller etwas mehr als nur zaehlen sollte, kann man den PLL
> Lock auch an einen Chip auslagern. zB einen AD9548, oder aehnlich.

Oder man verwendet einen zusätzlichen Interpolator, um ganz von der PLL 
des µC wegzukommen.
Wenn 'mrt12' mich fragen würde, würde ich einen TDC7200 empfehlen ;-)

von Tobias P. (hubertus)


Lesenswert?

m.n. schrieb:
> Wenn 'mrt12' mich fragen würde, würde ich einen TDC7200 empfehlen ;-)

ja, Zufälle gibt, nicht zwar? ;-)
zugegeben, ich habe im EEVBlog Forum einen verwandten Thread erstellt. 
Hätte ich evt. erwähnen sollen.
Falls es jemand interessiert:
Mit einer noch besseren Spannungsreferenz und einem besseren 
Antennenstandort habe ich nach 4 Stunden 'Warmlaufzeit' 10.000000000 
MHz, also <1mHz Abweichung. Gemessen habe ich dies mit einem HP 53131A 
Counter, als Referenz diente ein Meinberg GPS Frequenznormal, welches im 
Februar kalibriert worden ist und seither im Dauerbetrieb läuft.
Die Allan Variance habe ich auch bestimmt. Sie liegt bei rund 1e-11 bei 
ca. 1000s Beobachtungszeit. Länger habe ich nicht gemessen, ich würde 
aber erwarten, dass der Wert noch weiter sinkt. Der HP 10811 wird ja um 
1800s herum erst richtig gut :-)

Das Phasenrauschen konnte ich nicht messen - es liegt unter dem 
Noisefloor meines Equipments (-:

Habe noch ein Grafik-LCD angeschlossen, wo die wichtigsten Infos 
angezeigt werden.

Ich glaub, ich werd eine Version 2.0 planen, wo alle Fehler behoben sind 
und noch ein Interpolator dazu kommt, um innert kurzer Zeit hohe 
Auflösungen zu erhalten, damit der GPSDO schneller lockt.

von Tobias P. (hubertus)


Lesenswert?

Hallo allerseits

ich habe an meinem GPSDO noch weiter herum gepröbelt, unter anderem eine 
saubere Ansteuerung eines LCD-Graphikdisplays, wo die die Frequenz usw. 
angezeigt wird, und auch am Regelungsalgorithmus habe ich noch versucht 
herum zu feilen.

Ich denke, dass ich im Moment das beste erreicht habe, was meine 
beschränkte Hardware hergibt. Ich habe ja einen Timer, der von den 10 
MHz angetrieben wird, und der 1PPS dient als Capture-Signal. Es wird 
dann laufend die Differenz zweier aufeinander folgender 
Capture-Ereignisse gebildet.

Zu beginn wird der OCXO im Sekundentakt nachgeregelt, sobald die 
Frequenz innerhalb +/- 1 Count stabil ist für längere Zeit, wird die 
Zeitkonstante erhöht usw. bis man bei 1000 Sekunden ist. Ich habe die 
Frequenzstabilität mit einem Trimble Thunderbolt verglichen und habe ein 
stehendes Bild auf dem Oszilloskop erhalten. Leider hat mein bester 
Counter, zu dem ich momentan Zugang habe, nur 1 mHz Auflösung, sodass 
ich die Abweichungen zwischen Trimble und meinem GPSDO nicht feststellen 
kann.

Und leider ist es wirklich so, dass aufgrund der schlechten Auflösung 
von halt nur 100 ns die Zeit, bis der OCXO wirklich gelockt ist, extrem 
lange dauert. Ich wollte daher, wie oben vorgeschlagen, einen bzw. zwei 
TDC7200 als Interpolator hinzufügen und eine Version 2 realisieren.

Ich dachte mir folgendes:
Man könnte einen TDC7200 als Start-Interpolator verwenden, und einen 
weiteren als Stop-Interpolator.
Der Start-Interpolator wird mit dem 1PPS gestartet und mit der 
steigenden Flanke vom OCXO gestoppt. Umgekehrt wird der 
Stop-Interpolator von der steigenden Flanke vom OCXO gestartet und mit 
der steigenden Flanke vom PPS gestoppt.
Der Capture-Timer wird weiterhin beibehalten!
Mit den beiden Interpolatoren kann ich doch jetzt herausfinden, der 
wievielte Bruchteil einer Periode nach dem Start und vor dem Stop 
verstrichen sind.
Würde das gehen?
Wenn der TDC wirklich mit einigen 10ps Auflösung misst, dann würde das 
ja bedeuten, dass man die Anzahl Perioden während einer Sekunde mit 
einer Auflösung von ca. 1/1000 messen könnte (was gegenüber jetzt eine 
Verbesserung um Faktor 1000 wäre ;-)).

Was mir nicht klar ist, ob der TDC das wirklich kann. Was passiert, wenn 
am START-Eingang mehrere Start-Pulse kommen, bevor ein Stop-Puls 
erscheint? zählt der 1. Puls, oder der letzte?

von Purzel H. (hacky)


Lesenswert?

Alternativ empfehle ich den Zaehler anders zu benutzen. Du kannst mit 
dem 1PPS den Zaehler triggern und so den 100ns Jitter behalten.

Du kannst den Zaehler aber auch weiterlaufen lassen und den Zaehler nur 
sampeln. So wird der Langzeit Jitter immer kleiner. Du bekommst im 
Wesentlichen eine Gerade, die durch approximierende Punkte definiert 
ist. Und du kannst jederzeit, aus der Liste der Timersamples jede 
gewuenschte Korreltion rausrechnen.

Klar ? Die Ungenauigkeit von 100ns verteilt sich auf immer mehr Samples. 
Bei stabilem Oszillator sind die Samples auf +1, -1 gleichverteilt.
Nach 100sek ist der 10MHz Zaehler bei 10^9, bei 100'000 sek (1.4Tage) 
bei 10^12

: Bearbeitet durch User
von Tobias P. (hubertus)


Lesenswert?

Jetzt ist G. schrieb:
> Du kannst den Zaehler aber auch weiterlaufen lassen und den Zaehler nur
> sampeln

yo, genauso mache ich das ja - Stichwort Capture. Der Zähler läuft 
dauernd durch! ich betreibe ihn als 32 Bit Counter und lese ihn als 
Vorzeichenbehaftete Zahl aus. So muss man die Überläufe nicht extra 
behandeln.
Es funktioniert ja, aber eben, bis ich 10e-12 erreicht habe dauert es 
Tage....

von m.n. (Gast)


Lesenswert?

Hallo Tobias,

ich habe von Dir noch eine Nachricht bekommen, auf die ich hier eingehen 
werde.

Du mußt beachten, daß ein TDC7200 im Modus 1 Zeiten von 12 ns - 500 ns 
zwischen Start-Stopp messen kann. Im Modus 2 sind es rund 200 ns -> 
einige ms. Daher kann man das 1 pps Signal nicht direkt als 
Start-Stopp-Signal verwenden, da 1 s Abstand viel zu lang ist. Die 10 
MHz auf 1 s herunterzuteilen bringt ebensfalls keine sinnvolle Lösung.

Da Du schon mit der Capture-Funktion arbeitest, hast Du schon einmal die 
Grundauflösung von 100 ns @ 10 MHz. Die 10 MHz kannst Du gerne für den 
µC per PLL auf eine höhere Frequenz bringen, die aber nicht für die 
Zeitmessung verwendet werden sollte: nimm einen Timer mit Zählereingang, 
an den die 10 MHz gelegt werden, und dazu einen weiteren Eingang, der 
als Capture-Eingang dient.
Der TDC kann Dir jetzt den Phasenversatz zwischen dem 10 MHz und 1 pps 
Signal messen, womit der Capture-Wert feiner aufgelöst wird. Geeignet 
dafür ist Modus 1, wobei die 10 MHz verzögert werden müssen, damit die 
Zeitdifferenz immer > 12 ns ist. Mit einer Verzögerung von einer Periode 
(100 ns) bekommt man vom TDC Ergebnisse zwischen 100 - 200 ns.

Da das Stoppsignal des 1 pps Impulses gleichzeitig auch das Startsignal 
für die nächste Messung ist, braucht man lediglich einen einzigen TDC. 
Durch fortlaufende Differenzbildung Stoppzeitpunkt - alter 
Startzeitpunkt, hebt sich die Verzögerung von 100 ns wieder auf.

Bei Verwendung des TDC, der abgesehen von Eigenrauschen, Auflösungen von 
< 100 ps liefert, ist der Jitter des 1 pps Signals die Hauptfehlerquelle 
bei dieser Messung, weshalb auch über einen längeren Zeitraum gemittelt 
werden muß. Ohne TDC sind es die 100 ns Unsicherheit des 10 MHz Signals.

Um alles im Detail zu erklären, müßte man ein Buch schreiben, was mir zu 
aufwendig ist. Auch wenn es knapp gehalten ist, versuche das von mir 
Geschriebene zu verstehen.
Selber verwende ich den TDC für Frequenzzähler, dessen Schaltplan Du 
hier sehen kannst: http://mino-elektronik.de/FM_407/fmeter_407.htm#c3
Dabei sind die DFFs IC7, IC8 und IC9 für Synchronisierung und 
Verzögerung des Eingangssignals (bei Dir konstant 10 MHz) zuständig. Die 
'grobe' Zeit wird mit Timer 1 gemessen (PA8 und PA9); die feinere 
Auflösung mit dem TDC.
Viel mehr kann ich Dir nicht erzählen, aber ich hoffe, es hilft Dir ein 
wenig weiter.

Falls Dir der TDC ein doch zu großer Aufwand ist, wäre eine einfachere 
Möglichkeit, ggf. einen schnelleren µC zu verwenden. Beim STM32F7xx zum 
Beispiel laufen die Timer mit bis zu 216 MHz und liefern eine Auflösung 
besser 5 ns. Dieser Wert ist sicherlich kleiner als der Jitter des 1 pps 
Signals.

von Tobias P. (hubertus)


Angehängte Dateien:

Lesenswert?

Hi m.n.,

danke für deine Ausführungen. Zuerst zum Thema PLL: ich verwende einen 
STM32F303. Ich hatte zuerst auch die Idee, die Auflösung zu erhöhen, 
indem ich die PLL verwende und z.B. einen Takt von 50MHz aus den 10MHz 
vom OCXO erzeuge. Das hat aber leider nicht funktioniert, die PLL hat 
gemäss Datenblatt zwar nur 300ps Jitter (dann steht da noch frech: 
guaranteed by design), aber dass da eine Sägezahnförmige FM-Modulation 
mit drauf ist, steht nirgends. Somit ist der per PLL vervielfachte 
Quarztakt unbrauchbar. Man könnte höchstens extern mit einem ADF5..... 
IC eine PLL aufbauen und hoffen, dass diese dann besser ist und man 
nicht unnötig Stabilität bzw. Genauigkeit vom OCXO verschenkt. Oder aber 
man würde mit diskreten Verdoppler- oder Verfielfacherstufen arbeiten, 
wie in einigen HP Countern, wo aus den 10 MHz ohne PLL, nur mit 
Vervielfachern, bis zu 500MHz erzeugt werden. Aber das wäre dann eine 
komplett andere Baustelle :-)

Ich interessiere mich mehr für den Einsatz eines TDC als Interpolator. 
Danke auch hier für deine diesbezüglichen Ausführungen. Mir leuchtet 
noch nicht ganz ein, weshalb nur ein einziger Interpolator genügt. Ich 
habe im Anhang eine Skizze von einem Zeitdiagramm beigefügt.

Zuoberst sehen wir den 10MHz Takt. Das dürfte klar sein.

Auf der Zeile darunter kommt das 1PPS Signal. Ich habe versucht extra 
hervor zu heben, dass es gänzlich asynchron zum OCXO-Takt sein kann!

Zeile 3 ist der Zählerstand meines Timers. (Da ich ihn durchgängig 
laufen lasse, habe ich nicht 0 als Startwert gewählt. Der 1. PPS-Puls 
kann ja bei einem beliebigen Zählerstand auftreten).

So, bei meinem aktuellen Design würde mit dem 1. PPS der Wert 11 in das 
Capture-Register geladen, und mit dem nächsten PPS der Wert 17. Die 
Differenz wäre 6, und das entspricht ja genau der Anzahl voller Perioden 
innerhalb des Messintervalls, soweit so gut. Jetzt habe ich angenommen, 
dass mit der steigenden Flanke des 1PPS nicht nur der Capture ausgelöst 
wird, sondern auch noch der TDC gestartet wird. Mit den steigenden 
Flanken des OCXO-Takts wird der TDC wieder gestoppt.

Die erste Messung des TDC wird z.B. 90ns liefern, die zweite Messung 
wird ca. 40ns liefern, wenn man so grob schätzt anhand meiner Skizze. 
Aber nun habe ich doch 2 Probleme:

a) ich kenne den genauen Quarztakt nicht. Es sind ja vielleicht 
10.000000001 MHz - dann wird der TDC für die selbe Messdauer einen 
anderen Wert ausgeben, als wenn der Takt 9.999999999 MHz gewesen wäre. 
(Logisch)
b) wieso geht es mit einem TDC? ich habe doch einen Start- und einen 
Stopzeitpunkt des 1PPS, die beide relativ zum OCXO versetzt sein können.

Ich habe noch nicht ganz verstanden, wie der TDC die Messwerte ausgibt. 
Ich denke mal, die sind wahrscheinlich auf eine Periode vom Referenztakt 
normiert, sodass der Referenztakt im Prinzip egal ist und man einfach 
einen Messwert bekommt, wie viele 'angebrochene' Perioden verstrichen 
sind?

von Klonophon (Gast)


Lesenswert?

Du startest den TDC mit dem 1PPS, und misst die Distanz zu naechsten 
10MHz, und schreibst die den Count des Counters auch auf. Jetzt nimmst 
du ein Histogramm auf.

von Chris (Gast)


Lesenswert?

Mir hat dies Seite sehr geholfen, hatte aber auch diese Pics und pic 
Erfahrung. http://www.leapsecond.com/pic/picdiv.htm
Bei Interesse kann ich picPET.hex schicken.

von m.n. (Gast)


Lesenswert?

Tobias P. schrieb:
> Das hat aber leider nicht funktioniert, die PLL hat
> gemäss Datenblatt zwar nur 300ps Jitter (dann steht da noch frech:
> guaranteed by design), aber dass da eine Sägezahnförmige FM-Modulation
> mit drauf ist, steht nirgends.

Davon war an anderer Stelle schon einmal zu lesen, ob hier oder auf 
einen anderen Erdteil. Beim F4xx konnte ich solch ein Verhalten nicht 
feststellen.

Tobias P. schrieb:
> Die erste Messung des TDC wird z.B. 90ns liefern, die zweite Messung
> wird ca. 40ns liefern, wenn man so grob schätzt anhand meiner Skizze.
> Aber nun habe ich doch 2 Probleme:
>
> a) ich kenne den genauen Quarztakt nicht. Es sind ja vielleicht
> 10.000000001 MHz - dann wird der TDC für die selbe Messdauer einen
> anderen Wert ausgeben, als wenn der Takt 9.999999999 MHz gewesen wäre.
> (Logisch)

Der TDC bringt bezogen auf 100 ns eine ca. 1800-fache Auflösung. Da 
fallen die minimalen Abweichungen bei der Referenzfrequenz nicht ins 
Gewicht.
Ferner wird nach jeder Messung automatisch eine Vermessung des internen 
Ringoszillators (ca. 18 GHz) durchgeführt, mit der die genaue 
Start-Stopp-Zeit ermittelt werden kann. (Datenblatt)


> b) wieso geht es mit einem TDC? ich habe doch einen Start- und einen
> Stopzeitpunkt des 1PPS, die beide relativ zum OCXO versetzt sein können.

Das hast Du schon selber aufgezeichnet ;-)
Der TDC mißt immer nur den Versatz zwischen den steigenden Flanken der 
beiden Signale immer beginnend mit 1 pps. Der Start-Versatz (links) mit 
87,5 ns wird zum groben Intervall T18-T12 addiert. Der Stopp-Versatz am 
Ende mit rund 37 ns wird hingegen abgezogen: 87,5 ns + 600 ns - 37 ns = 
650,5 ns.

Da lückenlos gemessen wird - so machst Du es ja schon mit den 
Capture-Werten des Timers - wird der Stopp-Versatz am Ende zum 
Start-Versatz des nächsten Intervalls und der Stopp-Versatz neu 
ermittelt.

von Dirk S. (Firma: Messtechnik Mittelstand) (schabadu)


Lesenswert?

Hi Tobias (hubertus)

Auch ich werde auf Deine Mail hier antworten, da es ja zum Thema passt.
alter Beitrag - Beitrag "Re: Noch ein anderer GPSDO"
Da mein Projekt ja von extremer Langsamkeit leben soll, ist noch nicht 
so viel passiert.
Das Konzept steht, die einzelnen Baugruppen bis auf Stromversorgung 
soweit fertig und getestet, die SW noch im Kopf und das Gehäuse in 
Planung.
Ich kann also hier noch nicht viel beitragen.
Nur das ich grundsätzlich einen gut abgelagerten Quarzofen mit einer 
extrem langsamen (Mittelung über Tage/Wochen) Regelung kombinieren 
möchte um Langzeitdrift und Alterung zu kompensieren.
Was ich noch nicht im Blick habe sind die Ausgangstreiber (75/50 ohm)
--Ideen?

Ansonnsten ist es sehr interesant hier mitzulesen wie mit Picosekunden 
und Auflösungen im mH Bereich gehandelt wird.
Ihr dürft mein Projekt dann gerne mal vermessen.

schönen Tag noch

von Tobias P. (hubertus)


Lesenswert?

Dirk S. schrieb:
> Was ich noch nicht im Blick habe sind die Ausgangstreiber (75/50 ohm)
> --Ideen?

Hallo Dirk

ich habe in meinem GPSDO einen Distributor eingebaut, sodass ich bis zu 
4 Ausgänge von 10MHz Sinus habe und einen 1PPS Ausgang. Ich habe die 
Ausganstreiber mit einem Video-OpAmp gemacht.

Der Erfinder von Stable32 (Software zur Stabilitätsmessung an 
Oszillatoren) hat seinen Distributor hier beschrieben

http://www.stable32.com/An%20Octal%2010%20MHz%20Distribution%20Amplifier.pdf

ich habe es ähnlich realisiert, nur habe ich einen anderen OpAmp 
verwendet (AD9631; ich habe noch LMH6714 getestet, funktioniert gleich 
gut. Meine Schaltung ist aber noch ein wenig verbessert gegenüber 
derjenigen von Wriley, da ich nur eine einzige Versorgungsspannung 
nutzen wollte habe ich den nichtinvertierenden Eingang der OpAmps auf 
halbe Betriebsspannung gelegt und dann einen AC-gekoppelten 
invertierenden Verstärker realisiert. Dieser ist so dimensioniert, dass 
eine einzelne Verstärkerstufe eine Eingangsimpedanz von ca. 220 Ohm hat; 
wenn ich dann die 4 Verstärker parallel schalte, habe ich ungefähr die 
50 Ohm, die der OCXO gerne sieht. Vom OCXO habe ich mit ein paar pF noch 
eine Abzweigung zum Mikrocontroller gemacht, um diesen so mit dem Takt 
zu versorgen.

An den Outputs der OpAmps habe ich dann auch wieder eine AC-Kopplung 
reslieirt, sowie einen 50 Ohm Seriewiderstand, sodass man 50 Ohm 
Ausgänge erhält. Die Verstärkung ist so gewählt, dass genau 8 dBm an 
allen Ausgängen anliegen, und das hält die Schaltung auch sehr genau 
ein. Wichtig ist, wie auch in dem verlinkten Papier steht, dass die 
Outputs voneinander gut rückwärts isoliert sind, sodass ein Gerät, das 
am Output 1 angeschlossen ist, nicht 'merkt', ob am Output 2 was 
passiert, und dass keine Sauereien, die ein Gerät evt. erzeugt durch den 
Distributor zu einem anderen Output gelangen.

Ich habe das Schema jetzt nicht hier, aber ich glaube, es ist ziemlich 
klar, wie ich es gemeint habe.

Für den 1PPS output wollte ich ein TTL-mässiges Signal. Ich habe dazu 
einfach einen Bustreiber 74AC541 benutzt und dessen 8 Ausgänge über je 
390 Ohm parallel geschaltet. Das funktioniert bei mir tadellos und gibt 
ein Rechtecksignal wie aus dem Bilderbuch, mit guten Flanken.

(Da das 1PPS-Signal nicht direkt vom GPS-Modul abgenommen wird, sondern 
per Timer im Mikrocontroller erzeugt wird, kann man auch andere 
Frequenzen erzeugen).

Dirk S. schrieb:
> Auflösungen im mH*z* Bereich

Ich hoffe, dass mein GPSDO von der Genauigkeit her irgendwann in 
Richtung Stratum 1 geht, also 1 mHz wäre mir noch ein bisschen zu viel. 
Es müsste noch besser werden. Ich will bei meinem Frequenzzähler auch 
bei 20 GHz keine der 11 Stellen wackeln sehen.



m.n. schrieb:
> Davon war an anderer Stelle schon einmal zu lesen, ob hier oder auf
> einen anderen Erdteil. Beim F4xx konnte ich solch ein Verhalten nicht
> feststellen.

ja, im EEVBlog hat einer ein paar Messungen dazu gepostet. Hat der F4 
eine andere PLL als der F3? ich dachte, das RCC-Modul wäre das selbe.

m.n. schrieb:
> Das hast Du schon selber aufgezeichnet ;-)
> Der TDC mißt immer nur den Versatz zwischen den steigenden Flanken der
> beiden Signale immer beginnend mit 1 pps. Der Start-Versatz (links) mit
> 87,5 ns wird zum groben Intervall T18-T12 addiert. Der Stopp-Versatz am
> Ende mit rund 37 ns wird hingegen abgezogen: 87,5 ns + 600 ns - 37 ns =
> 650,5 ns.
>
> Da lückenlos gemessen wird - so machst Du es ja schon mit den
> Capture-Werten des Timers - wird der Stopp-Versatz am Ende zum
> Start-Versatz des nächsten Intervalls und der Stopp-Versatz neu
> ermittelt.

Danke :-) da bin ich echt auf dem Schlauch gestanden.
Ich lasse mal meinen jetzigen Entwurf des GPSDO noch ein weilchen 
laufen, um länger mit dem Trimble vergleichen zu können, und denke mal 
über die Version 2 nach.

Du hast ja bereits Erfahrung mit dem TDC. Funktioniert es tatsächlich, 
das Signal des OCXO am STOP-Eingang einzuspeisen? der TDC hat kein 
Problem damit, wenn da dauernd ein Signal anliegt? im Datenblatt habe 
ich leider keine Aussage darüber gefunden, was passiert, wenn das 
Startsignal mehrmals hintereinander aktiviert wird, oder was passiert, 
wenn das Stopsignal schon mehrmals aktiviert wurde, bevor der Timer 
überhaupt gestartet ist. Rein von der Applikation, für die der TDC 
gedacht ist, kann das ja normalerweise auch gar nicht passieren, daher 
war bzw. ist es für mich nicht klar, was er dann in einem solchen Fall 
macht.



Grüsse,
Tobias

von Dirk S. (Firma: Messtechnik Mittelstand) (schabadu)


Lesenswert?

> http://www.stable32.com/An%20Octal%2010%20MHz%20Distribution%20Amplifier.pdf
Danke, kannte ich noch nicht.
> Ich habe das Schema jetzt nicht hier, aber ich glaube, es ist ziemlich
> klar, wie ich es gemeint habe.
Glasklar.
> Für den 1PPS output wollte ich ein TTL-mässiges Signal. Ich habe dazu
> einfach einen Bustreiber 74AC541 benutzt und dessen 8 Ausgänge über je
> 390 Ohm parallel geschaltet. Das funktioniert bei mir tadellos und gibt
> ein Rechtecksignal wie aus dem Bilderbuch, mit guten Flanken.
Ok, das wäre dann mein umschaltbarer Ausgang der Teilerkette.

> Ich hoffe, dass mein GPSDO von der Genauigkeit her irgendwann in
> Richtung Stratum 1 geht, also 1 mHz wäre mir noch ein bisschen zu viel.
> Es müsste noch besser werden. Ich will bei meinem Frequenzzähler auch
> bei 20 GHz keine der 11 Stellen wackeln sehen.
Extremist! Ist aber OK, möchte meinen GPSDO ja auch mal extrem genau 
vermessen haben.

von W.S. (Gast)


Lesenswert?

Tobias P. schrieb:
> Ich hab dann einen Counter gemacht, welchen ich um
> 1 hoch zähle, wenn die Frequenz zu tief ist, und um 1 runter zähle, wenn
> die Frequenz zu hoch ist. Der Counter wird dann noch durch 10 geteilt
> und auf den DAC gegeben.

Mache das lieber anders:
Bringe einen Spannungsteiler aus zwei Festwiderständen am OCXO an, den 
du nach Messen der benötigten Steuerspannung so gut es geht auf diese 
Spannung einstellst.

Damit hast du quasi den analogen Grobabgleich.

Sodann führst du den Ausgang deines DAC's über einen Vorwiderstand an 
den Steiereingang des OCXO und du nimmst das "Counter durch 10" heraus. 
Damit wird der überstreichbare Frequenzbereich des OCXO zwar eingeengt 
abe zugleich die Feinheit der Einstellung erhöht.

Das hilft schon mal um einen geschätzten Faktor 10, denn dein OCXO wird 
nicht erst dann verstellt, wenn dein Vergleichsergebnis um +/- 10 sich 
geändert hat, sondern er wird bereits nachgestellt, wenn es sich um +/- 
1 geändert hat. Ansonsten solltest du an den DAC-Ausgang noch einen 
dezenten Tiefpaß setzen, damit der Sprung beim Ändern sachte erfolgt. 
Aber die Zeitkonstante noch deutlich unter 1 Sekunde halten, sonst 
wird's instabil.

Nochwas:
Deine Idee mit dem Timer/Capture ist von hause aus gut und schwingt auch 
wesentlich schneller ein als eine simple PLL, da sie ja auf fast jede 
Phasenlage einrasten kann.

Aber bedenke, daß alles, was du in einem µC hast, getaktete Logik ist. 
Auch die Signale, die du an den Pins des µC anliegen hast, werden zuerst 
mit dem zugehörigen Systemtakt in Samples verwandelt, bevor sie im µC 
irgend etwas bewirken können.

Tobias P. schrieb:
> Die PLL setzt den
> Takt der CPU und der Timer auf 60 MHz hoch.

Eben.
Damit kriegst du die Samples des 1PPS eben auch nur im Takte von 1/60 
µs, also ca. alle 17 ns. Feiner wird's nicht, solange du µC interne 
Logik verwendest. Wenn du da raus willst, dann wird das Ganze 
aufwendiger, denn du mußt es dann mit externer Logik tun.

W.S.

von Purzel H. (hacky)


Lesenswert?

Nochmals zum TDC. Damit moechte man den Versatz zwischen 1PPS und dem 
OCXO messen. Die beiden sind voellig asynchron. Gemaess Datenblatt sind 
mehrere Stop zulaessig. Die minimale Zeit zwischen 2 Stops ist 67ns, was 
den Clock, welcher sinnvollerweise auch grad gleich dem OCXO ist, auf 
16MHz limitiert.

Es bleiben 2 Fragen.
- Was geschieht wenn der Stop (next OCXO up) naeher
   wie die spezifizierten 12ns ist.
=> vielleicht.. Gemaess 8.3.3.3 werden vorherige Stops ignoriert

- Der OCXO laeuft und wird gezehlt. Auf welche OXCO
   Flanke wurde nun gemessen?

Auf Synchronizitaet zwischen 1PPS und dem OXCO zu regeln bedeutet den 
Versatz auf gemittelt Null zu bringen. Sinnvollerweise regelt man auf 
konstanden TDC Wert zwischen zwei OCXO pulsen bei gleichem OCXO 
Clockcount.

: Bearbeitet durch User
von Tobias P. (hubertus)


Lesenswert?

Dirk S. schrieb:
> Extremist! Ist aber OK, möchte meinen GPSDO ja auch mal extrem genau
> vermessen haben.

eben ;-)

W.S. schrieb:
> Mache das lieber anders:
> Bringe einen Spannungsteiler aus zwei Festwiderständen am OCXO an, den
> du nach Messen der benötigten Steuerspannung so gut es geht auf diese
> Spannung einstellst.

ja, man könnte sich sogar überlegen, da ein kleines Poti einzubauen, 
denn wenn der OCXO irgendwann aufgrund Alterung ausserhalb des 
Einstellbereichs gedriftet ist, dann kann man ihn nicht mehr auf die 
Sollfrequenz ziehen. Mit dem Poti könnte man das dann noch retten. Aber 
ja, die erzielbare Genauigkeit dürfte so wohl besser sein, denn der 
Einstellbereich wird schmaler.

W.S. schrieb:
> Ansonsten solltest du an den DAC-Ausgang noch einen
> dezenten Tiefpaß setzen, damit der Sprung beim Ändern sachte erfolgt.

jup, das habe ich gemacht. 1k / 10uF. Ich habe es allerdings weniger 
gemacht, um den Sprung abzufedern, sondern um etwaiges Rauschen, welches 
dann vom OpAmp ja noch verstärkt wird, vom EFC-Eingang des OCXOs 
fernzuhalten. Der Cap ist so nah wie möglich am Pin des OCXO, um die 
Leitung so kurz zu halten wie es nur geht.

W.S. schrieb:
> Deine Idee mit dem Timer/Capture ist von hause aus gut und schwingt auch
> wesentlich schneller ein als eine simple PLL, da sie ja auf fast jede
> Phasenlage einrasten kann.

hmm ob das wirklich schneller als eine PLL ist, bezweifle ich eben :-) 
ich hatte es zu Anfang auch für eine besonders gute Idee gehalten, und 
ich bin nach wie vor der Meinung, dass man so, da der Timer 
kontinuierlich durch läuft, beliebig kleine Frequenzfehler messen kann, 
aber die Zeit, bis die Frequenz halt wirklich gelockt ist, kann sehr 
lange dauern.

Prinzipiell bekomme ich ja jede Sekunde einen neuen Messwert - würdest 
du dann auch wirklich jede Sekunde den OCXO nachstellen? Es kann ja 
sein, dass man aufgrund einer kleinen Phasenverschiebung zwischen 1PPS 
und dem OCXO in der einen Sekunde mal 9999999 Counts hat und dann dafür 
in der nächsten 10000001. Dann würde man zweimal am OCXO 'wackeln', was 
natürlich unschön ist, denn am Ende landet man wieder am selben Ort, 
aber hat dafür einen kleinen Frequenzsprung erzeugt.

Jetzt ist G. schrieb:
> Auf Synchronizitaet zwischen 1PPS und dem OXCO zu regeln bedeutet den
> Versatz auf gemittelt Null zu bringen. Sinnvollerweise regelt man auf
> konstanden TDC Wert zwischen zwei OCXO pulsen bei gleichem OCXO
> Clockcount.

hmm ja das hatte ich mir auch gedacht - quasi die Phase zwischen OCXO 
udn 1PPS soll auf 0 geregtlt werden. Damit hätte man eine PLL. Aber ich 
stehe immer noch ein wenig auf dem Schlauch, wie ich das dann 
implementiere. Nur die Phase auf 0 regeln heisst ja nicht, dass die 
Frequenz dann stimmt, denn die PLL kann, wie du ja auch schon gesagt 
hast, auf jede beliebige steigende Flanke der 10 MHz einrasten, da man 
nicht weiss, welche Flanke man erwischt hat :-/

von Schorsch X. (bastelschorsch)


Lesenswert?

Tobias P. schrieb:
> Nur die Phase auf 0 regeln heisst ja nicht, dass die
> Frequenz dann stimmt, denn die PLL kann, wie du ja auch schon gesagt
> hast, auf jede beliebige steigende Flanke der 10 MHz einrasten, da man
> nicht weiss, welche Flanke man erwischt hat

Wenn die Abweichung gering genug ist, dürfte es da keine 
Mehrdeutigkeiten geben. 100ns wären 10^-7 Abweichung bei 10 MHz. Du 
kannst ja auch die 10MHz mitzählen, dann ist klar wie groß die 
Abweichung ist.

Je kleiner die Abweichung, umso länger muss dann die Messdauer sein. Für 
10^-10 dann z.B. mindestens 1000 Sekunden oder 1000x den PPS Impuls vom 
GPS.

von G. H. (schufti)


Lesenswert?

wäre es nicht auch denkbar nach einer groben Annäherung über den µC TC, 
diesen danach als "Fenstersteuerung" für den TDC nur rund um den 
10E7-ten Takt zu verwenden? Quasi "Flankenlupe"?

von m.n. (Gast)


Lesenswert?

G. H. schrieb:
> wäre es nicht auch denkbar ...

Warum so kompliziert, wenn es doch noch den NE555 gibt.

Schorsch X. schrieb:
> Da reden wir über ca. 10-50ns Jitter

Denkt noch jemand daran?

Beitrag #5615266 wurde von einem Moderator gelöscht.
von m.n. (Gast)


Lesenswert?

G. H. schrieb im Beitrag #5615266:
> m.n. schrieb:
>> Warum so kompliziert, wenn es doch noch den NE555 gibt.
>
> DEPP

Wieso?
Wenn man schon eine unwirksame Lösung plant, ist die mit einem NE555 
doch viel einfacher.

von Tobias P. (hubertus)


Lesenswert?

m.n. schrieb:
> Wenn man schon eine unwirksame Lösung plant, ist die mit einem NE555
> doch viel einfacher.

Wieso? er will doch auch den TDC benutzen. Ich hab zwar nicht verstanden 
wie, aber wieso sollte das unwirksam sein?

von Chris (Gast)


Lesenswert?

Gibt es schon Ergebniss ?
Zum Einrasten des pps Pulses auf den 10Mhz Clock, gewöhnlich teilt man
den 10Mhz Clk auf 10khz oder beim TDC auf 100Khz und verwendet den
pps Puls als Start sowie den 10 oder 100khz als Stop.

Macht aber auch nur Sinn, wenn die Sawtooth correction des GPS Receivers
benutzt wird, und dies in HW oder SW korrigiert wird.

von Klonophon (Gast)


Lesenswert?

Nee. Der erste Ansatz ist mit dem 1PPS puls einen Zaehler zu starten, 
der bei einem 10MHz Clock auf 10'000'000 zaehlt. Dann weiss man ob der 
Zaehler zu schnell uder zu langsam zaehlt und kann nachregeln.

Nun hat der 1PPS puls aber bis zu 40ns Jitter, dazu kommt, dass der 
10MHz und der 1PPS asynchron zueinander sind. Bedeutet der 10MHz kann 
bis zu 100ns zu spaet starten.
Die naechste Loesung ist dann den 10MHz zaehler durchlaufen zu lassen 
und mit dem 1PPS den Zaehler zu sampeln. Das Histogramm ueber eine 
laengere Zeit zeigt dann bei welcher Frequenz der Zaehler effektiv 
laeuft. Die Werte schwanken idealerweise +-1 Count um 10'000'000. 
zumindest kann man so darauf regeln.

von W.S. (Gast)


Lesenswert?

Tobias P. schrieb:
> ja, man könnte sich sogar überlegen, da ein kleines Poti einzubauen,
> denn wenn der OCXO irgendwann aufgrund Alterung ausserhalb des
> Einstellbereichs gedriftet ist,

Bloß kein Poti. Sowas bringt eine Instabilität herein, die du auf gar 
keinen Fall haben willst.

Du mußt die Bereichseinengung auch nicht übermäßig weit treiben. Nur 
soweit, daß ein einzelner Schritt aus deinem DAC in seiner Wirkung 
deutlich kleiner ist als das LSB bei deinem Vergleich zwischen 1PPS und 
Timerstand. Dann macht ein DAC-Schritt von 1 auch keine Verwerfung, die 
du direkt schon bei dem nächsten Vergleich messen kannst.

Ich selber hab das durch, allerdings nicht per OCXO, sondern mit nem 
billigen TCXO. Das Verfahren, auf konstante Phasenlage zwischen Timer 
und 1PPS zu steuern, ist tatsächlich schneller als wenn man beide 
Signale auf eine feste Phasenlage (0 oder 180° oder 90° oder so) 
einregeln wollte. Aber da man gut dran tut, pro Sekunde eben nur mit 1 
LSB nachzustimmen und keinen Proportionalteil zu haben, dauert es 
trotzdem lange. Das Problem bei der Sache ist ja eigentlich, daß man 
eben nur 1 Regel-Ereignis pro Sekunde hat - und das macht dann eben eine 
saulangsame Regelzeit aus.

W.S.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Wie bekommt man den das GPS Signal an den Arbeitsplatz? Oder muss das 
GPSDO Teil am Fenster oder gar besser draussen stehen?

von Chris (Gast)


Lesenswert?

Ich verwende ein günstiges TCVCXO und mein Regelkreis ist
30/40/50/60/100/360 Sekunden verschieden gewichtet. 360 hat die 
Gewichtung
1 , 30 sowie 40 Sek verändern den 16bit PWM um 177 Werte.
Die Werte sind jeweils 177/177/63/17/3/1
Gemessen wird vom verlängerten PPS impuls (~150ms) auf einen 5uS 
verzögerten  pps Puls (100ms) des  XO mittels Xor Glied. Auflösung ist 
sub ns und das Sawtooth compensierte Resultat wird stark gefiltert um 
den Jitter loszuwerden, aber es funktioniert auch ohne Sawtooth 
compensation.

von Tobias P. (hubertus)


Lesenswert?

Uwe B. schrieb:
> Wie bekommt man den das GPS Signal an den Arbeitsplatz? Oder muss das
> GPSDO Teil am Fenster oder gar besser draussen stehen?

draussen ist besser, da in Innenräumen der Jitter grösser ist. Beispiel: 
LEA8 hat einen spezifizierten Jitter von <22ns wenn die Antenne draussen 
platziert ist mit guter Sicht auf den Himmel. In Innenräumen kann der 
Jitter bis 100ns betragen, wenn ich mich richtig erinnere.

Ich betreibe aber meinen GPSDO auf der Fensterbank (Suboptimal, zB. auch 
wegen Temperaturschwankungen) mit einer selber gebauten Helix-Antenne 
(https://hb9fsx.ch/wordpress/index.php/2018/01/31/a-homebrew-gps-antenna/ 
) und einem mit MMIC aufgebauten LNA mit 22dB Gain. Das funktioniert 
bisher sehr gut.

Bemerkenswert ist, dass ich mit dem LEA8 Empfänger auf der Fensterbank 
bis zu 12 Sats gleichzeitig empfange, während zwei kommerzielle (aber 
ältere) GPSDOs am selben Antennenstandort mit ach und Krach einen bis 
zwei Sats sehen:

- ein GPSDO von Jackson Labs hat selbst nach einer Woche keinen Lock, da 
er zu wenig Sats sieht. Bringt man die aktive Patchantenne nach draussen 
(Kabel durch einen Spalt im Fenster gefädelt) wird es besser, immerhin 
2..3 Sats, aber kein Lock.
- ein Trimble Thunderbolt sieht nach ca. 15min mit der Antenne im 
Innenraum 4 Sats und versucht zu disziplinieren, schlägt aber fehl und 
lockt auch nicht sauber.

Also heisst das meiner Meinung nach:
- wenn man sehr moderne Empfänger wie uBlox LEA8 verwendet, dann kann es 
in Innenräumen funktionieren, aber ein Fenster braucht es schon.
- die mitgelieferten Patchantennen zum Trimble/Jackson Labs GPSDO sind 
grottig, oder
- die Empfänger sind schlicht noch nicht modern genug, um auch unter 
erschwerten Bedingungen empfangen zu können oder
- beide meine Vergleichs-GPSDOs haben einen Schuss.

Chris schrieb:
> TCVCXO

ist sicher von der Stabilität und Phasenrauschen schlechter als ein 
OCXO. Ich hatte meinen OCXO nach geringstem Phasenrauschen ausgewählt. 
Hast du Zahlen, was dein TCVCXO kann?

Chris schrieb:
> 30/40/50/60/100/360 Sekunden verschieden gewichtet. 360 hat die
> Gewichtung
> 1 , 30 sowie 40 Sek verändern den 16bit PWM um 177 Werte. Die Werte sind
> jeweils 177/177/63/17/3/1
> Gemessen wird vom verlängerten PPS impuls (~150ms) auf einen 5uS
> verzögerten  pps Puls (100ms) des  XO mittels Xor Glied.

das hab ich nicht ganz verstanden, aber klingt interessant - kannst du 
es nochmals genauer erklären?

Chris schrieb:
> Sawtooth compensation

wieso sprechen eigentlich immer alle davon? ich habe irgendwo gelesen, 
dass das bei neueren Empfängern nicht nötig sein soll (?).

von Chris (Gast)


Lesenswert?

Tobias P. schrieb:
> Chris schrieb:
>> TCVCXO
>
> ist sicher von der Stabilität und Phasenrauschen schlechter als ein
> OCXO. Ich hatte meinen OCXO nach geringstem Phasenrauschen ausgewählt.
> Hast du Zahlen, was dein TCVCXO kann?
>
Nicht wirklich. Ich benutze den hier: ASVTX-12-A-40.000MHZ-I15-T
an einem Pic cpu über cap angeschlossen und wird in der pic cpu durch 4 
geteilt, am clkout Ausgang sind dann 10Mhz vorhanden.

Im Datenblatt sind Werte des 19.2Mhz angegeben.

Phase Noise @ 19.2MHz
100Hz offset from the carrier -115 -100
1kHz offset from the carrier -135 -125 dB/Hz
10kHz offset from the carrier -150 -140

Datenblatt hier: 
https://www.mouser.it/datasheet/2/3/ASTX12_ASVTX12-8609.pdf

Für mich war niedrige Temperatur und geringe Stromaufnahme wichtig.

> Chris schrieb:
>> 30/40/50/60/100/360 Sekunden verschieden gewichtet. 360 hat die
>> Gewichtung
>> 1 , 30 sowie 40 Sek verändern den 16bit PWM um 177 Werte. Die Werte sind
>> jeweils 177/177/63/17/3/1
>> Gemessen wird vom verlängerten PPS impuls (~150ms) auf einen 5uS
>> verzögerten  pps Puls (100ms) des  XO mittels Xor Glied.
>
> das hab ich nicht ganz verstanden, aber klingt interessant - kannst du
> es nochmals genauer erklären?
>
Die Schaltung benutzt einen 16bit pwm mit 6ppm Einstellungsbereich, 
+-3ppm.
Der Korrekturalgorithmus misst jede Sekunde die Zeitdifferenz zwischen
GPS und XO. Dazu wird das pps Signal mit einem 74HC123 auf ca 150ms 
verlängert und mittels Xor wird der um ca 5uS zum gps pps Impuls 
zeitversetzte
100ms pps Puls verodert um T1 und T2 im sub ns Bereich zu messen, Die 
Messmethode welche ich verwende kann 1-10uS messen. Auflösung ist ca 
80ps
bei 40Mhz.
Diese Daten werden mit einem Zeitinterval von etwas weniger als 5min 
gemittelt. Dies ist für die fine adjustment, coarse benutzt XO Takte
als Zeiteinheit.
Der Algorithmus vergleicht 30 Sek bei zuviel Abweichung wird der pwm 
Wert
um 177 incrementiert oder decrementiert. Ist der XO in sync, wird bei
40 Sek sowie 50 Sek usw kontrolliert.
Kommt der Algorithmus auf 100 Sekunden und ist falsch, wird der pwm wert
um 3 verändert. Wenn der Algorithmus 360 Sekunden erreicht, egal of 
korrekt oder falsch, heisst dies
10Mhz ist auf 12 Stellen stabil. Nach jeder Korrektur oder bei 360 
Sekunden
beginnt die Zählung wieder von 0 Sekunden.

> Chris schrieb:
>> Sawtooth compensation
>
> wieso sprechen eigentlich immer alle davon? ich habe irgendwo gelesen,
> dass das bei neueren Empfängern nicht nötig sein soll (?).
Das stimmt, neuere Empfänger mit der T(ime) Firmware machen dies,
nicht aber die normale Firmware.

Es geht darum dass der Empfänger den PPS Impulse mittels Bresenham 
Algorithmus ausgegeben und dieser eine Art Sägezahn Artifakt generiert
mit einen Kegel bei Vorzeicheninversion. Der gps Empfänger weiss wie 
viel
diese Approximation falsch liegt. Das ist die sogenannte Sawtooth 
correction. Das Rauschen wird dadurch erheblich reduziert und dieser 
Artifakt eliminiert.
Macht erst Sinn, wenn man die Zeit genauer als 40ns misst.

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

Die Vergessenen Bilder.

von ULP Zeitnuß (Gast)


Lesenswert?

Chris schrieb:

> Für mich war niedrige Temperatur und geringe Stromaufnahme wichtig.

Wie viel mW zieht denn die gesamte Schaltung im Schnitt?

Lässt du das GPS Modul einschlafen wenn die Verhältnisse stabil sind (T, 
Δf)?

von Chris (Gast)


Lesenswert?

Mit 3v TTL output  46mW .  gps Modul bleibt eingeschalten aber im low 
power modus mit nur 1hz update, keine T Firmware.

von Tobias P. (hubertus)


Lesenswert?

W.S. schrieb:
> Du mußt die Bereichseinengung auch nicht übermäßig weit treiben. Nur
> soweit, daß ein einzelner Schritt aus deinem DAC in seiner Wirkung
> deutlich kleiner ist als das LSB bei deinem Vergleich zwischen 1PPS und
> Timerstand. Dann macht ein DAC-Schritt von 1 auch keine Verwerfung, die
> du direkt schon bei dem nächsten Vergleich messen kannst.

Hallo hallo,
ich habe die Bereichseinengung nun so dimensioniert, dass man in beide 
Richtungen nur ca. 1 Hz den OCXO ziehen kann. Vorher waren es 10 Hz - 
ich müsste also somit noch eine um Faktor 10 bessere Auflösung bekommen 
;-) soweit jedenfalls in der Theorie. Mein HP 34401 sagt, dass der OCXO 
nun in Schritten von gut 10 Mikrovolt nachgeführt wird - vielleicht 
etwas gar extrem, aber schauen wir mal, wo es hin führt.


@Chris: bin grade unterwegs und schreibe vom Smartphone aus - daher muss 
ich mich kurz fassen, ich meld mich nochmal. Danke jedenfalls für deine 
Ausführungen, sehr hilfreich, wenn ich v2.0 entwerfe.

ULP Zeitnuß schrieb:
> Lässt du das GPS Modul einschlafen wenn die Verhältnisse stabil sind (T,
> Δf)?

das sollte man tunlichst vermeiden, denn sonst bekommt man es nicht mit, 
wenn der Taktgeber (OCXO, TCXO, ...)  z.B. aufgrund von Alterung 
driftet.

von Tobias P. (hubertus)


Angehängte Dateien:

Lesenswert?

Chris schrieb:
> 100Hz offset from the carrier -115 -100

ja, sieht ganz brauchbar aus. Für Spektrumanalyzer als Referenz wohl 
begrenzt brauchbar, aber für alles andere sicher mehr als OK, z.B. für 
Counter und dergleichen. Ein HP 8568B Spektrumanalyzer verlangt < 
-140dBc @ 100Hz, da gibt es nur wenige OCXOs, die das können.

Chris schrieb:
> Dies ist für die fine adjustment, coarse benutzt XO Takte
> als Zeiteinheit.

interessant. Ich habe mir auch ähnliches überlegt, z.B. zu Beginn eine 
"grobe" Abstimmung, wo jede Sekunde justiert wird, und wenn er eine 
Minute in Folge stabil war, dann den Counter-Wert über z.B. eine Minute 
mitteln. Man sollte ja eigentlich nicht zu oft nachregeln, denn wie 
das berühmte AMSAT-Paper von Ulrich Bangert gezeigt hat, hat z.B. ein HP 
10811A OCXO seine beste Stabilität bei einer Beobachtungszeit von ca. 
einer halben Stunde.

Ich habe jetzt erst mal die "Bereichseinengung" von W.S. vorgeschlagen 
implementiert. Der EFC-Eingang wird mittels Spannugnsteiler in die Mitte 
gezogen, der DAC kann so die Spannung nicht mehr von 0 bis 5 Volt 
verändern, sondern nur noch von ca. 2.2V bis ca. 3V oder so. Damit kann 
ich den OCXO in beide Richtungen um max. ca. 1Hz verstimmen - das gibt 
eine viel bessere Auflösung.

Im Moment lasse ich ihn so laufen und korrigiere, falls nötig, jede 
Sekunde. Den Counter-Wert lasse ich mir auf dem Display anzeigen, so 
habe ich dann auch beobachten können, dass es Momente gibt, wo er 
10000001 Counts hat, dann den EFC-Wert um 1 nach unten korrigiert und im 
nächsten Moment dann 9999999 Counts hat, und sodann die EFC wieder um 1 
erhöht - sehr merkwürdig. Leider habe ich keine USB-Schnittstelle 
implementiert, um alles mitzuloggen - das muss ich bei der nächsten 
Version auch anpassen.

Im Anhang noch 2 Bilder von meinem Gerät. Die beiden BNC-Buchsen auf der 
Front stellen einmal 10 MHz und einmal einen 1PPS zur Verfügung. Der 
1PPS wird vom Mikrocontroller über einen Timer erzeugt und ist nicht 
der selbe 1PPS, wie der vom GPS-Modul, damit ich den Jitter los bin. Das 
PWM-Modul ist so konfiguriert, dass ich jede Sekunde einen 100ms langen 
Puls bekomme. Mittels Counter habe ich verifiziert, dass in einer 
Periode exakt 10000000 Pulse vom 10MHz anliegen. Das 1PPS-Signal ist 
wichtig, wenn man den GPSDO mit einem anderen vergleichen will, dann 
möchte ich mittels TIC (Time Interval Counter) die Allan-Deviation 
bestimmen. Mein bester Counter ist ein HP 5335A, von daher weiss ich 
nicht, ob es mit diesem überhaupt möglich sein wird, gemäss Datenblatt 
kann er angeblich eine Single-Shot Auflösung von 100ps, da er auch über 
analoge Interpolatoren verfügt, aber ich habe nicht den Eindruck, dass 
er bei mir wirklich mit 100ps Auflösung misst - da muss ich noch ein 
bisschen graben.

Auf der Rückwand sind dann nochmals 3 10MHz-Ausgänge sowie ein Anschluss 
für eine 12V Wandwarze und natürlich die Antennenbuchse. Im Hintergrund 
kann man meine selber gezimmerte, aus einem Stück Semirigid-Koax 
zusammengelötete Helix-Antenne sehen.

von Purzel H. (hacky)


Lesenswert?

Jede sekunde zu reagieren ist sinnlos. Denn dann kriegst du ein 
unruhiges System. Dass es zustaende wie -1,0, resp 0,+1 geben kann ist 
klar. Die Frage ist dann was passiert, wenn du auf 10 sekunden misst, 
ist es dann immer noch -1,0, resp 0,+1  ? Und was ist wenn du 100 
sekunden misst ? Immer noch -1,0, resp 0,+1 ? Was ist wenn du 1000 sek 
misst ?
Alle diese Aussagen gleichzeitig werden erreicht wenn man einen 
durchlaufenden Zaehler alle Sekunden latcht und speichert. Du brauchst 
keinen TDC.
Zum Vergleichen von 2 solchen Geraeten. Kann man qualitativ mit dem 
Oszilloskop machen. Wann laeuft einer dem anderen um einen Count weg.

Unbemannt : Man merkt sich alle diese -1,0,+1 und wertet aus. Eigentlich 
benoetigt man keinen Vergleich. Denn das GPS haengt an einem Cluster von 
CS Uhren, welche per Definition die korrekte Zeit anzeigen. Wenn man auf 
allen Zeitskalen immer bei -1,0,+1 liegt, ist eigentlich gut.

von Tobias P. (hubertus)


Lesenswert?

Jetzt ist G. schrieb:
> enn man einen
> durchlaufenden Zaehler alle Sekunden latcht und speichert

:-) ich kann schon fast nicht mehr zählen, wie oft ich schon gesagt 
habe, dass ich genau das mache ;-) Stichwort Input Capture.
Den 1PPS erzeugt ich mit Output Compare.

Jetzt ist G. schrieb:
> Zum Vergleichen von 2 solchen Geraeten. Kann man qualitativ mit dem
> Oszilloskop machen.

ja, das stimmt wohl. So habe ich auch ermittelt, ob mein GPSDO im 
Vergleich zu einem Trimble still steht oder irgendwo hin driftet. Aber 
die Allan Deviation bekommt man mit dieser Art von Messung nicht. Diese 
sagt aber etwas über die Stabilität des Oszillators aus.

Jetzt ist G. schrieb:
> Eigentlich
> benoetigt man keinen Vergleich. Denn das GPS haengt an einem Cluster von
> CS Uhren, welche per Definition die korrekte Zeit anzeigen.

JA! aber einen Vergleich benötigt man dennoch. Sonst könnte man ja auch 
einen LC-Oszillator nehmen und diesen disziplinieren - auf lange Sicht 
wird dieser auch die "richtige" Frequenz haben. Aber man hat dann doch 
noch deutlich höhere Ansprüche, wie z.B. Kurzzeitstabilität, 
Phasenrauschen - der Oszillator könnte ja eine halbe Sekunde lang 
10.0000001 MHz machen und eine halbe Sekunde lang 9.9999999 MHz. Auf dem 
Oszilloskop sieht man das nicht, im Phasenrauschen sieht man es 
vielleicht, aber bei der Allan Deviation sieht man das ganz sicher. 
Daher muss man alle drei Messungen machen - Test, ob mit dem Oszilloskop 
die Schwingungen der beiden Prüflinge relativ zueinander still stehen, 
Phasenrausch-Test, und Allan Deviation Test. Dass GPS auf Cs-Uhren 
basiert, ist ja grade der Witz an der Sache, deshalb will man ja das 
machen.

Das NIST sagt sogar, dass man GPSDOs nicht kalibrieren muss, da sie als 
Primärstandards taugen.

https://ws680.nist.gov/publication/get_pdf.cfm?pub_id=842479

Jetzt ist G. schrieb:
> Jede sekunde zu reagieren ist sinnlos.

Wenn die Frequenzänderung, die der DAC bewirken kann, nur im ein- bis 
zweistelligen Mikrohertz-Bereich ist, ist die Unrihigkeit des Systems 
noch tolerierbar. Stratum 1 verlangt eine Frequenzgenauigkeit von 1e-11, 
also 100 Mikrohertz.

: Bearbeitet durch User
von Tobias P. (hubertus)


Lesenswert?

Hallo allerseits,

mittlerweile läuft mein GPSDO schon eine ganze Weile. In der 
Zwischenzeit habe ich mir noch einen Oscilloquartz STAR4 zugelegt, um 
die Frequenzen vergleichen zu können. Die 1PPS Signale vom STAR4 und von 
meinem GPSDO kann man mit einem TIC gut vermessen. So sieht man, dass 
mein GPSDO selbst nach ein paar Tagen immer noch eine leichte Abweichung 
zum STAR4 hat.

Das dürfte halt daran liegen, dass meine Messmethode in der Tat nicht 
ideal ist. Ausserdem möchte ich gerne, wie bei den richtigen GPSDOs, den 
1PPS Ausgang auf UTC synchronisiert haben. Also werde ich nun eine 
Version 2 bauen müssen, und hier möchte ich gern eine PLL benutzen.

Ich dachte mir, dass ich den OCXO wie bisher herunter Teile auf 1PPS, 
und dann einen Phasen-Frequenz-Detektor verwende, so wie diesen hier:

https://electronics.stackexchange.com/questions/301402/phase-frequency-detector-in-pll

So könnte man den Versatz der beiden 1PPS messen. Danach dachte ich, 
dass ich mit den Signalen "UP" und "DN" einen Counter im Mikrocontroller 
ansteuere, und den Counterwert dann dem DAC zuführe der den OCXO dann 
ansteuert. So müsste es dann ja möglich sein, die beiden 1PPS signale 
zeitlich zu synchronisieren, sodass der OCXO auch auf die richtige 
Frequenz kommt. Also eigentlich schon eine Art PLL. Nur, wo würde man 
das Loopfilter hier einbauen? ich glaube, eigentlich müsste ich die 
Pulsdauer der Signale UP und DN messen, oder nicht?

Angenommen, ich initialisiere einen 16 Bit Counter mit 32767. Und immer, 
wenn bei UP ein Impuls kommt, wird der Counter erhöht, und bei einem 
Impuls an DN wird der Counter 1 erniedrigt. Der Counterwert wird mittels 
DAC dem OCXO zugeführt.
a) kann das funktionieren,
b) theoretisch dauert das ja immer noch 32768 Sekunden = 9 Stunden, bis 
diese primitive PLL gelockt ist. Wie kann man das verbessern?

Grüsse
Tobias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.