Wie würde ich einen kleinen Oszillator mit genau 31.891.269.116 µHz zum Laufen bringen?


15

Ich suche nach einem RTC-Modul für Arduino, das auf dem Mars läuft. Der Umrechnungsfaktor beträgt 1,0274912510 Erdsekunden in 1 Marssekunde.

Obwohl ich es geschafft habe, dies programmgesteuert mit einer Auflösung von <2 Sekunden (was nicht gerade ideal ist, ich würde eine Genauigkeit von 300 ms vorziehen) unter Verwendung von Festkomma-Mathematik auf einem Arduino Uno zu erreichen, der an ein reguläres RTC-Modul angeschlossen ist, bin ich es Ich frage mich, ob es möglich wäre, eine Art Niederspannungsoszillator mit genau 31.891.269.116 µHz (31.891269116 kHz) zu betreiben, der mehr oder weniger mit einem Standard-32-kHz-Taktquarz austauschbar wäre (ich wäre jedoch offen für andere Ideen) solange sie nicht unerschwinglich teuer sind.)

Irgendwelche Ideen, wie das möglich sein könnte? Alternativ wäre auch eine Art Timer akzeptabel, der alle 1,0274912510 Sekunden einmal abläuft.


13
Warum die seltsame Einheit (µHz?) Das sind 31,891 kHz. Sie suchen also wahrscheinlich nach einem 32-kHz-Uhrenkristall.
JRE

21
Beginnen Sie mit Ihren Anforderungen. Sie haben außergewöhnliche Präzision angegeben. Warum? An anderer Stelle sagst du, du kannst mit einem Arduino tun, was du willst. Es tut mir leid, Ihnen das zu sagen, aber Sie machen Witze, es sei denn, Sie verwenden eine Rubidium- oder Cäsiumuhr als Referenz. Sagen Sie uns also, was Sie tun und welche Leistungsanforderungen Sie haben. Das sind funktionale Anforderungen, nicht Ihre abgeleitete Leistung. Wenn Sie versuchen, eine Uhr zu produzieren, die an eine andere Uhr gebunden ist, sagen Sie dies und teilen Sie uns Ihre Anforderungen (und Toleranzen) mit.
WhatRoughBeast

46
Sie versuchen, Ihren Mangel an Programmierkenntnissen mit sehr teurer und kundenspezifischer Hardware zu beheben. Sie können problemlos eine 256-Bit-Gleitkommakonvertierung in einem Arduino oder mit einer beliebigen Genauigkeit implementieren.
Pipe

14
Ich denke, dies ist ein großartiges Beispiel dafür, warum es den Leuten ermöglicht, durch die Aufnahme von mehr Informationen im Voraus in die richtige Richtung zu weisen. Brian Drummonds Antwort ist jetzt die beste, oder zumindest billig und machbar für einen Amateur. Dies ist auch ein gutes Beispiel dafür, warum Sie bei der Angabe von Präzision und Genauigkeit vorsichtig sein müssen - es gibt viele Parameter, die für eine Uhr möglicherweise relevant sind. Wir haben noch nicht einmal über Temperaturkompensation oder Jitter gesprochen.
pjc50

11
"Der Umrechnungsfaktor beträgt 1,0274912510 Erdsekunden in 1 Marssekunde." - Verwechseln Sie den Unterschied der Tageslängen zwischen Mars und Erde mit der Länge einer Sekunde? Die Länge eines Sonnentages auf dem Mars beträgt 88.775 s oder 1.02749 Erdentage (von 86.400 s). Zum anderen wird die Sekunde durch die Strahlung definiert, die von einem Cäsiumatom abgegeben wird, und selbst unter Berücksichtigung der Zeitdilatation würde man Geschwindigkeiten von etwa 0,23 c benötigen, um diesen Unterschied von 2,7% zu erhalten.
Ilkkachu

Antworten:


41

Verwenden Sie wie alle anderen einen 32768-kHz-Kristall, aber dividieren Sie stattdessen durch 33669, was zu einem Fehler von -5,08 ppm führt. (Sie können das entfernen, indem Sie die Ladekapazität verringern, wenn Sie möchten).

Es ist nicht präzise, aber für eine Marsuhr ist es genauso gut wie für jede Erdquarzuhr. Abgesehen von den Problemen der Temperaturkompensation bei Mars-Umgebungstemperaturen sind die meisten Uhrenkristalle nur für den Einsatz auf der Erde erhältlich, es sei denn, Sie finden marsianische Lieferanten ...

Ich würde die Zähler-Timer-Peripherie in einem MSP430 verwenden, um die Division durchzuführen, und (vorausgesetzt, Sie fahren ein mechanisches Standard-Quarzuhrwerk) jede Sekunde bipolare 30-ms-Impulse an seinen Ausgangspins erzeugen, die ungefähr den ursprünglichen Timings folgen, die Sie können auf einem Oszilloskop messen.

Arduino oder ähnliches erledigt die Aufgabe, aber der MSP kann zwischen den Impulsen in den Ruhezustand versetzt werden und verbraucht bei laufendem LF-Oszillator weniger als 1 uA. Hier ist ein Beispieldesign mit Quellcode und Platine für eine Uhr - bisher nur die Erdzeit. Dies kann jedoch wahrscheinlich durch Ändern einer Konstante behoben werden.


1
Vielen Dank! Aufgrund anderer Rückmeldungen halte ich dies für die sinnvollste Option, ohne in den Bereich der Atomuhren eintauchen zu müssen, und habe sie daher als Lösung für meine Frage ausgewählt. Ich schätze auch besonders das Design, das Sie verlinkt haben.
Renegadeds

Beachten Sie, dass die von Ihnen angegebenen signifikanten Zahlen nicht mit einem Standard-RTC-Kristall erreicht werden. Der 5-ppm-Fehler aus der Mathematik wird wahrscheinlich geringer sein als die Kristalltoleranz.
user2943160

6
@ user2943160 Wenn Sie eine gute Referenz haben, können Sie beim anfänglichen Trimmen etwa 1 ppm erreichen - es kommt über ein paar Jahre zu einer Drift von einigen ppm und (seltsamerweise zum Stimmen von Gabelkristallen) zu einer parabolischen Abweichung von der Temperatur. Alle billigen Quarzuhren in meinem Haus sind unterschiedlich schnell, sie wurden wahrscheinlich nie in der Fabrik getrimmt und sind nicht viel besser als eine temperaturkompensierte Pendeluhr.
Brian Drummond

+1 nur für die "Marslieferanten".
Olin Lathrop

41

Sie können es besser machen als Brian Drummonds Vorschlag. Obwohl Ihr Oszillator die häufigste Fehlerquelle im System ist, gibt es keinen Grund, einen zusätzlichen systematischen Fehler hinzuzufügen, wenn es einfach genug ist, dies nicht zu tun.

Stellen Sie Ihr Timer-Intervall auf 33668 Ticks ein, starten Sie einen Zähler bei 0 und erhöhen Sie den Zähler bei jedem Timer-Interrupt um 6754.

Wenn der Zähler nach dem Inkrementieren> = 8105 ist, subtrahieren Sie 8105 und stellen Sie das Timer-Intervall für die folgende Sekunde auf 33669 Ticks ein.

Andernfalls lassen Sie den Zähler in Ruhe und stellen Sie das Timer-Intervall für die folgende Sekunde auf 33668 ein.

Dies ergibt (unter der Annahme eines perfekten 32,768-kHz-Quarzes) ein durchschnittliches Intervall von

(33668 + 6754 / 8105) / 32768 ~= 1.0274912510006

Sekunden (weniger als ein Teil pro Billion Fehler in Bezug auf 1.0274912510) anstelle von 1.0274963378906 Sekunden (fast 5 Teile pro Million Fehler). Dies bedeutet, dass die Langzeitgenauigkeit Ihrer Uhr wirklich von der Genauigkeit des Oszillators abhängt. Der Fehler aufgrund der Mathematik wird wesentlich weniger als einen Tick Fehler pro Jahr beisteuern. Obwohl die Länge einer einzelnen Sekunde einen relativen Fehler von bis zu 25 ppm aufweist, verschwindet der Fehler über immer längere Mittelungsintervalle.

Dies ist Bresenhams Algorithmus, der auf die Zeitmessung angewendet wird, und der Bruchteil 6754/8105 wurde wie folgt gefunden:

32768 * 1.027491251 = 33668.833312768

Der genaue fortgesetzte Bruch für 33668.833312768 ist [33668; 1, 4, 1, 1349, 1, 7].

Das Löschen des letzten Terms ergibt den Approximanten 33668 + 6754/8105, der alle Teile enthält, die ordentlich in 16 Bits passen.


16

10-1010-14


Ich hatte gehofft, teure Hardware möglichst zu vermeiden. Im Moment erreiche ich dies mit einem normalen RTC-Modul und einem Arduino und bin in der Lage, die Konvertierung von 1000 ms in 1027,4912510 ms durchzuführen. Allerdings habe ich nur eine Auflösung von ungefähr 1 bis 2 Sekunden, was bedeutet, dass es sich selbst korrigiert, aber nicht sonderlich genau ist .
Renegadeds

12
@renegadeds dann solltest du in deiner frage klarstellen, welche präzision akzeptabel ist. Und geben Sie bitte einen Kontext an: Ein einzelnes [arduino] -Tag wäre ein guter Hinweis darauf, dass Sie keinen hochpräzisen Laborstand aufbauen.
Dmitry Grigoryev

1
Zur Kenntnis genommen habe ich die Frage aktualisiert und das Arduino-Tag hinzugefügt.
Renegadeds

15

Dies könnte mit einem Rubidium- oder einem anderen Atomreferenztakt bei 10 MHz geschehen, vielleicht mit einer PLL, um (sagen wir) 100 MHz zu ergeben, und dann mit einem ~ 36-Bit-Phasenakkumulator gezählt werden, um eine Auflösung von 0,001 Hz zu ergeben. Letzteres könnte mit einem kleinen FPGA erfolgen.

Sie können sich über Direct Digital Synthesis (DDS) -Methoden informieren. Es gibt Chips, die DDS unterstützen, aber möglicherweise nicht mit einer so großen Bitbreite.

Rubidium-Uhrenmodule sind auf dem Überschussmarkt oder bei Herstellern wie Microsemi erhältlich.


7

Sie definieren nicht "teuer", also ist dies eine Art Schuss im Dunkeln.

Beginnen Sie mit einem kommerziellen (einschließlich eBay) 10-MHz-Generator. Rubidium für die Wahl, aber welche Genauigkeit Sie auch bekommen können, bestimmt Ihre Leistung.

Bauen Sie nun einen programmierbaren Teiler mit einer Länge von 28 Bit. Bei 10 MHz können Sie mit der 74HC-CMOS-Logik davonkommen, aber Sie müssen eine schnelle Übertragungs- konfiguration verwenden. Der Ausgang löst auch eine Division durch zwei Flip-Flops aus, die das Bit 29 liefert.

Der Teiler kann je nach Zustand von Bit 29 mit einem Verhältnis von 10.274.912 oder 10.274.913 betrieben werden. Für eine perfekte 10-MHz-Eingabe beträgt die effektive Ausgangsperiode für Bit 28 dann 1.02749125 Sekunden, was ungefähr einer Genauigkeit von 1 ppb oder ungefähr 30 entspricht ms / Jahr Eine weniger genaue Eingabe führt natürlich zu einer weniger genauen Ausgabe.

Mit den 74HC161s von bog-standard können Sie dies mit 8 ICs tun. Wenn Sie vorsichtig sind, können Sie möglicherweise eine Standard-Prototyp-Leiterplatte verwenden, obwohl Sie sehr vorsichtig mit der Auffrischung des Bodensystems sein möchten. Perfboard wäre billiger, kompakter und langlebiger, aber die Verkabelung wäre weniger bequem, da Sie die Verbindungen löten müssten. Sie könnten es dann in so etwas wie elektronisches RTV (NICHT das RTV, das Sie im Baumarkt erhalten) eintopfen, für eine endgültige Modulgröße im Bereich von 2 x 2 x 1/2 Zoll, ohne den Oszillator.

BEARBEITEN

Beachten Sie, dass Ihr Leistungsstandard, der mit "normalen" RTCs verknüpft ist, tatsächlich im Bereich von 1 Sek./Tag liegt, was 30-mal schlechter ist als dieser Ansatz. Als erstes können Sie also die Bit-29-Stufe beseitigen oder alternativ Ihre 10 MHz auf 5 MHz aufteilen und ein Verhältnis von 5.137.456 verwenden. Diese niedrigere Taktrate an den Zählern ermöglicht eine einfachere Übertragstruktur und vermeidet den schnellen Übertrag, der bei 10 MHz notwendig wäre. Ihre Genauigkeit liegt jetzt in der Größenordnung von 60 ms / Jahr für eine perfekte Uhr.

WEITERE BEARBEITUNG

Ein kurzer Blick auf eBay zeigt eine große Anzahl von 10-MHz-OCXOs für weniger als 20 Dollar. Diese haben typischerweise Stabilitäten von 1 ppb oder besser, wobei 0,2 ppb eine ziemlich übliche Spezifikation sind. Holen Sie sich eines davon und Sie sollten in guter Verfassung sein. Sie möchten ein Frequenz- / Periodenmessgerät mit einer relativ hohen Auflösung ausleihen, um die tatsächliche Ausgangsfrequenz zu bestimmen, und dann das Teilungsverhältnis anpassen, um es anzupassen.


Einverstanden, und selbst wenn OCXO nicht im Leistungsbudget enthalten ist, kann ein TCXO einen Uhrenkristall noch verbessern.
Hobbs

4

"Stratum 1" Uhren werden von abgeleitet 10-11Kristalle mit SC-Schliff, die in VC-OCXOs (z. B. Vectron) für 250 USD verwendet werden, sofern Sie keine gebrauchten kaufen. Dann mit Tuning für die Synchronisierung mit globalen Uhren wie WWV, VLF, GPS 10MHz oder 1pps Clock, die wiederum synchronisiert werden10-14Atomuhren über "an 3 Satelliten gebunden". Dann können Sie auf kalibrieren10-11 Error.

Um ein anderes f zu erzeugen, wie z. B. Ihre Frequenz, ist ein Offset von 2,07% von 1pps erforderlich, sodass dies nicht durch Abstimmen eines Uhrenkristalls auf möglich ist 10-6 Stabilität.

Eine PLL vom Typ "Fraktion N-Synth" wird verwendet, um ein beliebiges Verhältnis einer Referenz, wie beispielsweise 10 MHz, von einigen GPS-Einheiten abzuleiten.

Wenn ein TCXO-Oszillator eine Stabilität von 1 ppm hat, kann er nur ein wenig mehr als dies eingestellt werden und nicht um 2,07% von 1 pps oder 1,0274912510 Hz versetzt werden. Daher ist eine PLL mit einem gebrochenen N-Chip (n) eine Möglichkeit, dies zu tun ein VC-OCXO oder ein mechanisch abgestimmter OCXO.

added - Um die 1pps für die MARs-Zeit zu generieren, beträgt das Teilungsverhältnis 26.337.44856, wobei 5 ganzzahlige Ziffern und ein Rest von 5 Ziffern verwendet werden.

  • Wenn Sie den Xtal auf 0,01 ppm einstellen können, ist er in der Regel nur bis zu 1 ppm stabil, es sei denn, ein Mikroofen wird bei ~ 30 ° C hergestellt, da Tempco für einige XTALs, nicht unbedingt MEMs, normalerweise null ist. Wenn Vcc und Temp nicht innerhalb von 0,1 ° C konstant sind, ist es unmöglich, Rückstandsfehler besser als 0,01 ppm zu korrigieren. Selbst 0,1 ppm sind kurzfristig hart und die langfristige Alterung beträgt mindestens 1 ppm pro Jahr.

  • Wenn Sie also theoretisch eine kalibrierte 1-ppm-Uhr von einem GPS-Gerät zur Einstellung einer 1-ppm-Erdzeit hätten, wäre es unmöglich, eine bessere Genauigkeit bei der Korrektur von Residuen zu erwarten.

  • Restfehlerwert des Teilers pro Sek. ist 44856/100000 (+26,337)

  • Umwandlung von 44856 in binär = 1010111100111000
  • Dies erfordert einen Restzähler, um zwischen / 44856 und 45857 umzuschalten

  • Wir führen diese Residuenteilung durch, indem wir die binäre Residuenzahl auf 8 Bits kürzen und dann die Bits drehen, sodass aus MSB LSB wird.

  • 10101111 wird zu 11110101

  • Jede Sekunde ein Restezähler von 11110101 und wobei jede "n" Bitposition = 1 der Zählwert in binärem n ^ 2 ist, wobei das ganzzahlige Teilungsverhältnis 45857 statt 44856 ist. Da das LSB = 1 bedeutet, dass jede zweite Zählung umschaltet bis 101 Sekunden, dann wird die Teilerwahl für die nächste 1pps-Zählung umgeschaltet. Dies wird wiederholt, um auszuwählen, welcher Teiler für die nächste Sekunde verwendet wird, und dann den Zeiger zu erhöhen, bis der Zeiger das Ende erreicht, und auf die nächste 1pps-Erduhr zu warten.

  • Dieser Vorgang wird für die gesamte Anzahl dieser gedrehten binären Residuen oder 10101111> 11110101 = 245 Sekunden wiederholt, sodass jede Sekunde ein gebrochener N-Synth-Teiler mit 1pps Mars-Zeit erstellt wird, wobei alle 245 Sekunden Korrekturen vorgenommen werden, um die Zeit einzuhalten. auf lange Sicht.

- Möglicherweise ist das Gleitkomma-Teilerverhältnis für die Uhr einfacher.


2

Sie können dies in Software ziemlich trivial lösen, ohne die Hardware zu ändern (obwohl Sie möglicherweise eine stabilere Referenzfrequenz wünschen), indem Sie binäre Brüche verwenden, und Sie können dies auf eine Weise tun, die Ihnen eine Millisekundenauflösung gibt und leicht frei gemacht werden kann genug von kumulativen Konvertierungsfehlern, damit Sie die grundlegende Genauigkeit jeder Quelle sehen, auf die Sie verweisen könnten, einschließlich einer Atomuhr.

Ändern Sie Ihren Timer-Interrupt so, dass er sich in einem sehr breiten Register ansammelt, und fügen Sie zu jedem Interrupt einen ziemlich langen Wert hinzu, der das gewünschte Verhältnis von Erdmillisekunde zu "Marsmillisekunde" genau wiedergibt.

Nehmen wir als Argument an, Sie wollten eine 32-Bit-Auflösung für die Konvertierung. Sie könnten einen 64-Bit-Akkumulator verwenden, wobei die unteren 32 Bit den Bruch darstellen. Sie würden lediglich den entsprechenden Wert ermitteln, der etwas kleiner als 2 ^ 32 ist und den Umrechnungsfaktor darstellt. Bei jedem Auslösen Ihres Erd-Millisekunden-Interrupts addieren Sie diesen Wert zum Akku. Jedes Mal, wenn Sie die Uhr abfragen möchten, geben Sie die oberen 32 Bit zurück, dh die Anzahl der gesamten verstrichenen Mars-Millisekunden, während die unteren 32 Bit nur intern beibehalten werden, um Rundungsfehler zu vermeiden.

Wenn Sie lange binäre Brüche wie diese verwenden, können Sie eine Konvertierung mit beliebig hoher Genauigkeit durchführen. 32 Bit ist mit ziemlicher Sicherheit zu lang für den Bruch, während 32 Bit für die gesamten Millisekunden zu kurz sein können, Sie können sie jedoch nach Bedarf anpassen.

Übrigens kann durch diese Technik der Akkumulation in einem langen Register, bei der jedoch nur einige höchstwertige Bits gemeldet werden, eine äußerst hohe Frequenzauflösung durch direkte Digitalsynthese erzielt werden.

Sie können auch einen Teil der Konvertierung in Betracht ziehen, indem Sie das Verhältnis des Teilers vom 8- oder 16-MHz-Systemtakt zum Millisekunden-Interrupt ändern und es näher an das Intervall einer "Mars-Millisekunde" heranrücken. Vor allem, wenn Sie etwas genaueres als einen billigen Quarz wollen, haben Sie es möglicherweise mit einer üblichen 10-MHz-Referenz zu tun, die von einem GPS oder direkt von einer Atomuhr diszipliniert wird. Sie könnten also die übliche AVR-8/16-MHz-Taktquelle ersetzen und neu berechnen Teilerverhältnisse entsprechend.


0

Der Ansatz der direkten digitalen Synthese (DDS) oder des numerisch gesteuerten Oszillators ist ein recht einfacher Weg, um jedes gewünschte Auflösungsniveau einer Ausgangsfrequenz ohne Abhängigkeit von der Taktfrequenz zu erhalten.

Bei diesem Ansatz haben Sie einen hochauflösenden Phasenakku. Jede Schleife um Sie herum fügt ein Phaseninkrement hinzu, das ebenfalls eine feine Auflösung hat. Die Ausgabe ist das höchste Bit des Akkus.

Wenn Sie es verwenden, um eine Rechteckwelle zu erzeugen, können sich die Flanken nur mit dem Eingangstakt (oder der Software-Schleifenrate) ändern, sodass die Flanken an der Stelle juckeln, an der sie sich befinden sollten. Mit der Zeit tritt jedoch kein kumulativer Fehler auf hoch wie du willst.

Sie können dies ganz einfach in Software (z. B. auf AVR) tun, und einige Mikros verfügen jetzt über NCO-Hardware. http://ww1.microchip.com/downloads/en/AppNotes/90003131A.pdf Ein kleiner PIC kann dies in Hardware mit einer Auflösung von 20 Bit (1 ppm), von einem 32-kHz-xtal oder von einem genauen 10-MHz-Ofen tun.


0

Sehen Sie sich an, wie Sie einen speziellen Quarzkristall mit einem ganzzahligen Vielfachen Ihrer gewünschten Frequenz zum Laufen bringen. Sie kosten nicht viel mehr als eine Standardfrequenz. Websuche "custom quartz crystal"

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.