Come farei per far funzionare un piccolo oscillatore esattamente a 31.891.269.116 µHz?


15

Sto cercando di costruire un modulo RTC per Arduino che gira su Marte. Il fattore di conversione è 1,0274912510 secondi terrestri in 1 secondo Mars.

Mentre sono riuscito a farlo a livello di programmazione con una risoluzione <2 secondi (che non è esattamente l'ideale, preferirei qualcosa come 300 ms di precisione) usando la matematica a punto fisso su un Arduino Uno collegato a un normale modulo RTC, sono chiedendosi se sarebbe possibile avere un qualche tipo di oscillatore a bassa tensione funzionante esattamente a 31.891.269.116 µHz (31.891269116 kHz) che, più o meno, sarebbe intercambiabile con un cristallo di orologio standard a 32 kHz (tuttavia, sarei aperto ad altre idee così purché non siano proibitivamente costosi.)

Qualche idea su come sia possibile? In alternativa, sarebbe accettabile anche un tipo di timer che si spegne una volta ogni 1.0274912510 secondi.


13
Perché la strana unità (µHz?) 31.891 kHz. Quindi, probabilmente stai cercando un cristallo da orologio a 32kHz.
JRE,

21
Inizia con le tue esigenze. Hai specificato una precisione straordinaria. Perché? Altrove dici che puoi fare quello che vuoi con un Arduino. Mi dispiace dirtelo, ma stai scherzando, a meno che tu non stia usando qualcosa come un orologio al rubidio o al cesio come riferimento. Quindi dicci cosa stai facendo e quali sono i tuoi requisiti di prestazione. Sono requisiti funzionali, non prestazioni derivate. Se stai cercando di produrre un orologio bloccato a un altro, dillo e facci sapere quali sono i tuoi requisiti (e tolleranze).
WhatRoughBeast,

46
Stai cercando di risolvere la tua mancanza di abilità di programmazione con hardware molto costoso e personalizzato. Puoi facilmente implementare una conversione in virgola mobile a 256 bit in un Arduino o qualsiasi precisione tu voglia.
pipe,

14
Penso che questo sia un ottimo esempio del perché includere più informazioni in anticipo consente alle persone di indicarti la direzione corretta. La risposta di Brian Drummond è ora la migliore, o almeno economica e fattibile per un dilettante. È anche un buon esempio del motivo per cui devi fare attenzione quando specifichi precisione e accuratezza: ci sono molti parametri che sono potenzialmente rilevanti per un orologio. Non abbiamo ancora discusso della compensazione della temperatura o del jitter.
pjc50,

11
"Il fattore di conversione è 1,0274912510 secondi terrestri in 1 secondo Mars." - stai confondendo la differenza nelle lunghezze del giorno tra Marte e la Terra con la lunghezza di un secondo? La durata di una giornata solare su Marte è di 88 775 s, ovvero 1.02749 giorni terrestri (di 86 400 s). Dall'altro e il secondo è definito dalla radiazione emessa da un atomo di cesio, e anche prendendo in considerazione la dilatazione del tempo, avresti bisogno di velocità di circa 0,23 c per ottenere quella differenza del 2,7%.
ilkkachu,

Risposte:


41

Usa un cristallo 32768kHz come tutti gli altri, ma dividi invece per 33669, dando un errore di -5,08 ppm. (Puoi rimuoverlo tagliando la capacità di carico se vuoi).

Non è preciso ma per un orologio su Marte sarà buono come qualsiasi altro orologio al quarzo terrestre. Cioè, ignorando i problemi di compensazione della temperatura per le temperature ambientali di Marte, la maggior parte dei cristalli di orologi sono disponibili solo tagliati per l'uso sulla Terra, a meno che non si possano trovare fornitori marziani ...

Userei le periferiche del contro-timer in un MSP430 per fare la divisione e (supponendo che tu stia guidando un movimento di orologio meccanico al quarzo standard) genererei impulsi bipolari di 30 ms sui suoi pin di uscita ogni secondo, seguendo approssimativamente i tempi originali che puoi misurare su un oscilloscopio.

Arduino o simili faranno il lavoro, ma l'MSP può essere messo in sospensione tra gli impulsi, consumando sotto 1uA con l'oscillatore LF in funzione. Ecco un esempio di progettazione con codice sorgente e PCB per un orologio - finora solo il tempo della Terra, sebbene ciò possa probabilmente essere risolto cambiando una costante.


1
Grazie! Sulla base di altri feedback, penso che questa sia l'opzione più praticabile senza dover approfondire il regno degli orologi atomici, quindi l'ho scelta come soluzione alla mia domanda. Apprezzo soprattutto il design che hai collegato.
rinnegati il

Tieni presente che le cifre significative che hai fornito non verranno soddisfatte con un cristallo RTC standard. L'errore di 5 ppm dalla matematica sarà probabilmente inferiore alla tolleranza del cristallo.
user2943160

6
@ user2943160 se hai un buon riferimento, puoi colpire 1ppm o giù di lì con il taglio iniziale - ci saranno alcuni ppm di deriva nel giro di pochi anni e (stranamente per sintonizzare i cristalli del diapason) una varianza parabolica con la temperatura. Tutti gli orologi al quarzo economici a casa mia vanno a ritmi diversi, probabilmente non sono mai stati tagliati in fabbrica e non sono molto meglio di un orologio a pendolo con compensazione della temperatura.
Brian Drummond,

+1 solo per i "fornitori marziani".
Olin Lathrop,

41

Puoi fare di meglio del suggerimento di Brian Drummond. Anche se può essere vero che il tuo oscillatore è la principale fonte di errore nel sistema, non c'è motivo di aggiungere un ulteriore errore sistematico quando è abbastanza facile non farlo.

Impostare l'intervallo del timer su 33668 tick, avviare un contatore su 0 e ad ogni interruzione del timer, incrementare il contatore di 6754.

Se, dopo l'incremento, il contatore è> = 8105, sottrarre 8105 e impostare l'intervallo del timer per il secondo successivo su 33669 tick.

Altrimenti, lasciare il contatore da solo e impostare l'intervallo del timer per il secondo successivo su 33668.

Questo ti darà (supponendo un cristallo 32.768kHz perfetto) un intervallo medio di

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

secondi (meno di un errore parte per trilione rispetto a 1.0274912510), invece di 1.0274963378906 secondi (quasi 5 errori parte per milione). Ciò significa che la precisione a lungo termine del tuo orologio dipenderà veramente dalla precisione dell'oscillatore; l'errore dovuto alla matematica contribuirà sostanzialmente meno di un tick di errore all'anno. Sebbene la lunghezza di ogni singolo secondo abbia un errore relativo fino a 25 ppm, su intervalli di media sempre più lunghi l'errore scompare.

Questo è l'algoritmo di Bresenham applicato al cronometraggio e la frazione 6754/8105 è stata trovata come segue:

32768 * 1.027491251 = 33668.833312768

La frazione esatta continuata per 33668.833312768 è [33668; 1, 4, 1, 1349, 1, 7].

La caduta dell'ultimo termine fornisce l'approssimativo 33668 + 6754/8105, che ha tutte le parti che si adattano perfettamente a 16 bit.


16

Un oscillatore che funziona esattamente a 31.891.269.116 µhz o un timer con un periodo di 1.0274912510 secondi richiederebbe una precisione di almeno10-10. La tua scommessa migliore è usare un orologio atomico che può essere preciso come10-14.


Speravo di evitare hardware costoso, se possibile. In questo momento sto raggiungendo questo obiettivo con un normale modulo RTC e un Arduino e sono in grado di effettuare la conversione da 1000ms a 1027.4912510ms, tuttavia ho solo una risoluzione di circa 1-2 secondi, il che significa che è auto-correttivo ma non è terribilmente preciso .
rinnegati il

12
@renegadeds allora dovresti chiarire nella tua domanda quale precisione è accettabile. E fornisci un po 'di contesto: un singolo tag [arduino] sarebbe un buon suggerimento che non stai costruendo uno stand di laboratorio ad alta precisione.
Dmitry Grigoryev,

1
Ho notato che ho aggiornato la domanda e aggiunto il tag Arduino.
rinnegati il

15

Potrebbe essere fatto con un rubidio o un altro orologio di riferimento atomico a 10MHz, forse un PLL per dare (diciamo) 100MHz, e quindi conteggiato con un accumulatore di fase ~ 36 bit per dare una risoluzione di 0.001Hz. Quest'ultimo potrebbe essere fatto con un piccolo FPGA.

Puoi leggere i metodi di sintesi digitale diretta (DDS). Ci sono chip che eseguono il DDS ma forse non con una larghezza di bit così ampia.

I moduli di orologio al rubidio sono disponibili sul mercato in eccedenza o da produttori come Microsemi.


7

Non definisci "costoso", quindi questa è una specie di colpo nel buio.

Inizia con un generatore commerciale da 10 MHz (incluso eBay). Il rubidio è una scelta, ma qualunque precisione tu possa ottenere imposta la tua performance.

Ora costruisci un divisore programmabile della lunghezza di 28 bit. A 10 MHz puoi cavartela con la logica CMOS 74HC, ma dovrai usare una configurazione carry veloce. L'uscita innesca anche una divisione per due flip-flop che fornisce il bit 29.

Il divisore può funzionare con un rapporto di 10.274.912 o 10.274.913, a seconda dello stato del bit 29. Per un ingresso a 10 MHz perfetto, il periodo di uscita effettivo per il bit 28 sarà quindi 1,02749125 secondi, che è approssimativamente accurato a 1 ppb, o circa 30 msec / anno. Un input meno accurato, ovviamente, produrrà un output meno accurato.

Usando il 74HC161 standard bog puoi farlo con 8 circuiti integrati e, se stai attento, potresti essere in grado di utilizzare una scheda di prototipazione standard, anche se vorresti stare molto attento a rinforzare il sistema di terra. Il pannello perforato sarebbe più economico, più compatto e più resistente, ma il cablaggio sarebbe meno conveniente, poiché sarebbe necessario saldare le connessioni. Potresti quindi inserirlo in qualcosa come RTV di livello elettronico (NON l'RTV che ottieni nel negozio di ferramenta), per una dimensione finale del modulo nell'intervallo di 2 x 2 x 1/2 pollici, senza contare l'oscillatore.

MODIFICARE

Si noti che lo standard di prestazione, essendo collegato a RTC "regolari", è in realtà nell'intervallo di precisione 1 secondo / giorno, che è 30 volte peggiore di questo approccio. Quindi, prima di tutto, puoi eliminare lo stage del bit 29 o, in alternativa, dividere i tuoi 10 MHz a 5 MHz e utilizzare un rapporto di 5.137.456. Questa frequenza di clock più bassa ai contatori consentirà una struttura di trasporto più semplice, evitando il trasporto rapido che sarebbe necessario a 10 MHz. La precisione è ora dell'ordine di 60 msec / anno per un orologio perfetto.

ULTERIORI MODIFICHE

Un rapido sguardo a eBay mostra un gran numero di OCXO a 10 MHz per meno di 20 dollari. Questi avranno tipicamente stabilità di 1 ppb o superiore, con 0,2 ppb una specifica abbastanza comune. Prendi uno di questi e dovresti essere in buona forma. Si vorrebbe prendere in prestito un misuratore di frequenza / periodo di risoluzione abbastanza elevata per determinare la frequenza di uscita effettiva, quindi regolare il rapporto di divisione in modo che corrisponda.


D'accordo, e anche se OCXO non è nel budget di potenza, un TCXO è e può ancora migliorare su un cristallo da orologio.
Hobbs,

4

Gli orologi "Stratum 1" sono derivati 10-11Cristalli tagliati SC usati in ~ $ 250 VC-OCXO (ad es. Vectron) a meno che non si acquisti usati. Quindi con la sintonizzazione per la sincronizzazione di orologi globali come WWV, VLF, GPS 10MHz o 1pps clock che sono a loro volta sincronizzati con10-14orologi atomici tramite "bloccato su 3 satelliti". Quindi è possibile calibrare su10-11 errore.

Per creare un'altra f, ad esempio la frequenza, è necessario un offset del 2,07% di 1 ppm, quindi ciò non è possibile regolando un cristallo dell'orologio su 10-6 stabilità.

Un PLL di tipo "synth N di frazione" viene utilizzato per derivare qualsiasi rapporto di un riferimento come 10 Mhz da alcune unità GPS.

Se un oscillatore TCXO ha una stabilità di 1 ppm, può essere sintonizzato solo un po 'più di questo e non un offset del 2,07% da 1 pps o 1,0274912510 Hz, quindi un PLL con un N chip frazionario è un modo per farlo con un VC-OCXO o un OCXO sintonizzato con cappuccio meccanico.

aggiunto - Per generare 1pps sul tempo MAR, il rapporto di divisione è 26.337.44856 usando 5 cifre intere e un residuo di 5 cifre.

  • Se riesci a regolare Xtal a 0,01 ppm, di solito sarà stabile solo a 1 ppm a meno che un micro-forno sia fatto a ~ 30 ° C poiché Tempco è solitamente nullo attorno alla temperatura corporea per alcuni XTALS non necessariamente MEM. A meno che Vcc e temperatura non siano in contrasto con 0,1 ° C, qualsiasi tentativo di correggere l'errore di residuo migliore di 0,01 ppm è impossibile, anche 0,1 ppm è difficile a breve termine e l'invecchiamento a lungo termine sarà di almeno 1 ppm all'anno.

  • Quindi, in teoria, se avessi un orologio calibrato 1ppm da un GPS per ottimizzare 1ppm di tempo terrestre, sarebbe impossibile aspettarsi una migliore precisione di correzione per i residui.

  • Valore di errore residuo del divisore al secondo. è 44856/100000 (+26.337)

  • Conversione di 44856 in binario = 1010111100111000
  • Ciò richiede un contatore di residui per alternare tra / 44856 e 45857

  • Facciamo questa divisione del residuo troncando il numero binario del residuo a 8 bit, quindi ruotando i bit in modo che MSB diventi LSB.

  • 10101111 diventa 11110101

  • Ogni secondo un contatore di residui da 11110101 e dove ogni posizione di bit "n" = 1 è il valore di conteggio in binario n ^ 2 dove il rapporto intero di divisione è 45857 anziché 44856. Dal momento che LSB = 1, significa che ogni secondo conteggio si attiva fino a 101 secondi, quindi la scelta del divisore viene attivata per il conteggio successivo di 1pps. Questo viene ripetuto per scegliere quale divisore viene utilizzato per il secondo successivo, quindi incrementare il puntatore, fino a quando il puntatore raggiunge la fine e attendere il prossimo 1pps di clock di terra.

  • Questo processo si ripete per l'intero conteggio di questo residuo binario ruotato o 10101111> 11110101 = 245 secondi in modo che un partitore N synth frazionario di 1 ppm di tempo di Marte venga creato ogni secondo con correzioni effettuate ogni ciclo di 245 secondi per rimanere in tempo. a lungo termine.

-perché il rapporto del divisore in virgola mobile per l'orologio è più semplice.


2

Puoi risolverlo abbastanza banalmente nel software senza cambiare affatto l'hardware (anche se potresti voler una frequenza di riferimento più stabile), usando le frazioni binarie, e puoi farlo in un modo che ti dà una risoluzione di millisecondi e può essere facilmente reso libero abbastanza errori cumulativi di conversione per farti vedere l'accuratezza fondamentale di qualsiasi fonte a cui potresti fare riferimento, incluso un orologio atomico.

Quello che faresti è modificare l'interruzione del timer in modo che si accumuli in un registro molto ampio e ad ogni interruzione aggiungere un valore abbastanza lungo che sia una rappresentazione precisa del rapporto tra un millisecondo terrestre e un "millisecondo Marte" come desideri.

Supponiamo che tu abbia voluto una risoluzione a 32 bit per la conversione. È possibile utilizzare un accumulatore a 64 bit, con i 32 bit inferiori che rappresentano la frazione. Ciò che si farebbe è capire il valore appropriato, leggermente inferiore a 2 ^ 32, che rappresenta il fattore di conversione. Ogni volta che il tuo millisecondo di fuoco si interrompe, aggiungi questo valore all'accumulatore. Ogni volta che si desidera interrogare l'orologio, si restituiscono i 32 bit superiori, ovvero il numero di millisecondi interi di Marte trascorsi, mentre i 32 bit inferiori vengono conservati solo internamente per evitare errori di arrotondamento.

L'uso di lunghe frazioni binarie come questa ti consente di eseguire una conversione con la precisione che desideri. 32 bit è quasi certamente troppo lungo per la frazione, mentre 32 bit per l'intero millisecondo potrebbero essere troppo brevi, ma è possibile regolare come desiderato.

Per inciso, questa tecnica di accumulo in un registro lungo ma che riporta solo un numero di bit più significativi è il modo in cui la sintesi digitale diretta può produrre una risoluzione di frequenza estremamente elevata.

Si potrebbe anche considerare di fare parte della conversione modificando il rapporto del divisore dall'orologio di sistema a 8 o 16 MHz all'interrupt di millisecondi, avvicinandolo all'intervallo di un "millisecondo di Marte". Soprattutto se vuoi qualcosa di più preciso di un cristallo economico potresti avere a che fare con un consueto riferimento a 10 MHz disciplinato da un GPS o più direttamente da un orologio atomico, quindi potresti sostituirlo con la solita sorgente di clock AVR 8/16 MHz e ricalcolare rapporti di divisione di conseguenza.


0

L'approccio della sintesi digitale diretta (DDS) o dell'oscillatore controllato numerico è un modo abbastanza semplice per ottenere qualsiasi livello desiderato di risoluzione di una frequenza di uscita senza alcuna dipendenza dalla frequenza di clock.

In questo approccio hai un accumulatore di fase ad alta risoluzione. Ogni ciclo intorno a te aggiunge un incremento di fase che ha anche una buona risoluzione. L'uscita è il bit più alto dell'accumulatore.

Quando lo si utilizza per dare un'onda quadra, i bordi possono cambiare solo con l'orologio di input (o la frequenza di loop del software), quindi i bordi si muovono da dove dovrebbe essere, ma nel tempo non si verifica alcun errore cumulativo: è possibile effettuare la risoluzione come alto come vuoi.

Puoi farlo abbastanza facilmente nel software (ad es. Su AVR) e alcuni micro ora hanno hardware NCO. http://ww1.microchip.com/downloads/en/AppNotes/90003131A.pdf Un piccolo PIC potrebbe farlo in hardware con risoluzione a 20 bit (1ppm), da un xtal a 32kHz o da un forno preciso da 10MHz.


0

Cerca di far funzionare un cristallo di quarzo personalizzato da forno con un multiplo intero della frequenza desiderata. Non costano molto più di una frequenza standard. Ricerca web "cristallo di quarzo personalizzato"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.