Sommario:

GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Preciso.: 3 passaggi
GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Preciso.: 3 passaggi

Video: GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Preciso.: 3 passaggi

Video: GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Preciso.: 3 passaggi
Video: Low Pass Filter in an Altoids Tin for FlexRadio 10 MHz External Frequency Reference (CC) 2024, Luglio
Anonim
GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Accurato
GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Accurato
GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Accurato
GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Accurato
GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Accurato
GPSDO YT, frequenza di riferimento dell'oscillatore disciplinato 10Mhz. Basso costo. Accurato

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

STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP

Questo è un progetto obsoleto.

Invece controlla la mia nuova versione con display LCD 2x16 disponibile qui:

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

Ho lasciato la vecchia versione qui per la documentazione.

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

Ciao ragazzi, Che cos'è un GPSDO? GPSDO significa: oscillatore disciplinato GPS. GPS per il sistema di posizionamento globale. Tutti i satelliti GPS sono dotati di orologio atomico sincronizzato. Il modulo GPS riceve questi segnali da diversi satelliti. E per triangolazione, conosce la sua posizione. Ma qui, quello che ci interessa è l'impulso al secondo che si trova sul modulo. Con questo preciso impulso (dall'orologio atomico), possiamo fare un oscillatore molto molto accurato. Per che cosa ? Per riferimento, per la calibrazione del frequenzimetro o semplicemente per divertirsi ad averne uno nel suo laboratorio.

Ci sono molti schemi su internet. ne ho provati alcuni. Alcuni sono buoni, uno con un tiny2313 era di 5 hertz troppo lento. Ma il mio è il più semplice, utile e conveniente. E ti sto dando il codice.hex. Non sono VCO e nessun divisore. Il circuito con VCO sta andando bene. Tuttavia, deve avere un segnale a impulsi di 10 khz o più continuamente. Se l'antenna diventa troppo debole, manca l'impulso o nessun impulso, l'oscillatore (ocxo) funziona da solo e il VFC (Voltage Frequency Control) non è più preciso. Il feedback VCO ha bisogno di una frequenza di riferimento per rimanere attivo. In caso contrario, varia da 1 a 2 Hertz! Inoltre, il modulo gps più economico non funziona in questa configurazione. Dobbiamo avere almeno 10khz per fare un VCO. Ho provato con 1000 hertz. Il divario era troppo grande. La frequenza variava. Quindi con un ublox neo-6m non puoi fare un ottimo vco gpsdo perché la frequenza di uscita massima è 1000Hz. È necessario acquistare un neo-7m o superiore.

Ecco come funziona il mio GPSDO YT. Il controller ha trovato la buona regolazione per qualsiasi OCXO con vfc da 0 a 5v. Se perdiamo il segnale del GP, la frequenza non si sposta affatto. Quando il segnale riappare, il controllore prende il suo ultimo buon valore noto e continua come prima. In oscilloscopio, con un oscillatore di riferimento. Non possiamo dire quando il segnale è perso o quando è tornato. Il segnale è lo stesso.

Dopo la calibrazione, se lo desideri, puoi utilizzare il gpsdo senza antenna. Pochi montaggi dopo avrai una piccolissima deriva. Ma…. quanto più grande? È tempo di qualche spiegazione.

Ecco un po' di matematica… Facile matematica, seguimi con questo è facile. Finora l'algoritmo ha 6 fasi. Ogni fase richiede un campione da 1 a 1000 secondi, ha trovato la buona regolazione del pwm e passa ai campioni più lunghi per una maggiore precisione.

Precisione = (((Numero di secondi x 10E6) + 1)/numero di secondi) - 10E6

Fase 1, campione di 1 secondo per 10.000 conteggi per una precisione di +- 1 Hz

fase 2, campione di 10 secondi per 100, 000, 000 conteggi per una precisione di +-0.1Hz

Fase 3, campione di 60 secondi per 600, 000, 000 conteggi per una precisione di +-0,01666 Hz

Fase 4, 200 secondi Campione per 2, 000, 000, 000 conteggi per una precisione di +-0,005 Hz

Fase 5, campione di 900 secondi per 9, 000, 000, 000 conteggi per una precisione di +-0,001111 Hz

Fase 6, campione di 1000 secondi per 10 miliardi di conteggi per una precisione di +-0,001 Hz

Caso peggiore. Quando otteniamo la fase 6. Questo numero può cambiare un po' ogni 1000 secondi o meno. qualche volta sarà 10, 000, 000, 001 o 9, 999, 999, 999 Quindi, + o - 0, 000, 000.001 variazione per 1000s. Ora dobbiamo conoscere il valore per 1 secondo.

10 Mhz = 1 secondo

Per 1 secondo = 10.000, 000, 001 conteggi/1000 s = 10.000, 000.001 Hz (caso peggiore per 1 secondo)

10.000, 000.001 - 10.000, 000 = 0,001 Hz/s più veloce o più lento

0,001 Hz X 60 X 60 X 24 X 365 = 31536 Hz/anno

Quindi ricorda, 10Mhz è 1 secondo, 31536Hz X 1/10E6 = 0, 0031536 secondi/anno

Un altro metodo più veloce per il calcolo. un errore per 10E9Mhz è 1/10E9= 1E-10

1E-10 x 60x60x24x365 = 0, 0031536 secondo/anno.

È abbastanza preciso per te?

tuttavia, devi avere un buon OXCO. Preferisco l'uscita Sinus Double Oven 12v. Più stabile, silenzioso e preciso. Ma ho lo stesso risultato con un semplice 5V. Ad esempio, uno stp 2187 ha un breve tempo di stabilità (deviazione allan) di 2x10-12 = 0.000, 000, 000, 002 Hz di stabilità. Allo stesso tempo, quando è disponibile l'impulso GPS, Avr correggerà sempre pwm (frequenza). L'uC conta sempre… sempre. Ciò significa che sul display non vedrai data e ora. Quando uC sta campionando 900s, questo è occupato per 900 secondi. Deve contare tutto l'orologio. Il problema è che uC funziona a 10 Mhz. Ogni orologio deve essere contato. Conta se stesso. Se manca solo un orologio, il campione non sarà buono e la regolazione pwm non sarà corretta. Non riesco ad aggiornare il display ogni secondo.

Quando viene avviato il campionamento. Uc inizia a contare il timer0. Ogni clock 256 genera un'interruzione. Il registro X viene incrementato. quando è pieno, il registro Y viene incrementato e X reimpostato a 0 e così via. Alla fine, all'ultimo impulso del gps, il conteggio viene interrotto. E ora e solo ora posso aggiornare il display e fare un po' di matematica per il calcolo pwm.

sapendo questo, ho solo 25, 6 us (256 orologio prima dell'interruzione) per leggere e visualizzare l'ora o altro. È impossibile. Un'interruzione può essere migliorata, non 2. Potrei aggiornare il tempo dopo 1000 secondi… ma non sarà pratico vedere il tempo con intervalli di 15, 16 minuti. Ho un orologio, un orologio, un cellulare per sapere l'ora:) Sto facendo un riferimento a 10Mhz. Non un orologio.

Un altro problema che ho avuto, alcune istruzioni avr hanno 2 cicli. Inclusa l'istruzione rjmp. Ciò significa che se il primo o l'ultimo impulso GPS è arrivato contemporaneamente a un'istruzione a 2 cicli, l'uC mancherà un orologio. Perché uC finirà l'istruzione prima di iniziare l'interruzione. Quindi il contatore si avvierà o si fermerà un ciclo dopo. Quindi non posso fare un ciclo di attesa del tempo… Ma in realtà, non ho altra scelta. Avevo bisogno di loop da qualche parte!! Quindi sto usando le istruzioni rjmp e nop (questo non fa nulla). Nop è un'istruzione a un ciclo. Ho messo 400 istruzioni nop per un rjmp su atmega48. 2000 su atmega88 e versione atmega328p. Quindi le probabilità sono minori che il primo o l'ultimo impulso arrivino all'istruzione rjmp. Ma sì, è possibile e se ciò accade, questo errore verrà corretto al prossimo campionamento.

Il display è opzionale. Puoi fare un circuito solo con, uC, OCXO e filtro passa basso (condensatore resistore), accendi e attendi. Dopo 1 ora avrai una frequenza accettabile. Ma per raggiungere la fase 6. Ci vogliono un paio d'ore.

Pwm è 16 bit. 65535 passo. 5v/65535 = 76, 295 uV

La variazione OCXO è di 2Hz per 1V. 1v/76, 295uV = 13107 step per 2 hz. 2/13107 = 152.59uHz per passo di pwm

La fase 5, sta cambiando pwm di 3, la fase 6 è 2. passo… Perché 3 ? perché 3 sta cambiando la frequenza di 0,000, 000, 000, 4 su una scala di 15 minuti. e 4 è il mio numero magico nel mio algoritmo. Ad esempio, se in fase uno, la prima frequenza rilevata è 10.000, 003Mhz. Scendo di 0, 000, 000,4 step.

Un passo troppo grande può passare da 10.000003 a 10.000001 e dopo 9, 999998Hz. Mi manca l'obiettivo.

Con 0, 0000004. È più veloce di 0, 1 e sono più sicuro di non ignorare un numero. E così via. Sto facendo lo stesso con 10 secondi, 60 secondi e fase 200 e 900. 1000s è in modalità di esecuzione e usa un passo pwm di 2

Si prega di notare che la fase 5 è più lunga da raggiungere. Il divario tra 4 e 5 è maggiore. Ma aiuta a passare da 5 a 6 più velocemente.

Quando la fase 6 ha contato esattamente 10 miliardi, i valori pwm vengono salvati in eeprom. Ora è il momento per la modalità di esecuzione. Questo conta 1000 secondi di campionamento ma solo con 2 step pwm. In modalità di funzionamento, la frequenza reale viene visualizzata e aggiornata a intervalli di 1000 secondi. Se il segnale viene perso in modalità di funzionamento, passa in modalità di funzionamento automatico. Nessun cambio di pwm in questa modalità. Quando il segnale ritorna, ritorna alla fase 5 per la risincronizzazione.

Se il circuito viene scollegato dopo il salvataggio della eeprom. Questo inizierà alla fase 5 all'accensione con il valore di eeprom pwm.

Per cancellare il valore della eeprom è sufficiente premere il pulsante at all'avvio. Pwm 50% sarà caricato e la calibrazione partirà dalla fase 1.

Passo molte ore a provare cose diverse, configurazione del circuito. Ho fatto molti test, con amplificatore operazionale, buffer e altri chip. E alla fine… il miglior risultato che ho ottenuto non ne ha bisogno. Solo un buon alimentatore stabile e qualche condensatore di filtraggio. Quindi mantengo questo semplice.

Passaggio 1: acquistare le parti

Acquista parti
Acquista parti
Acquista parti
Acquista parti
Acquista parti
Acquista parti

La prima cosa da fare è acquistare i pezzi. Perché spesso la spedizione è molto molto lunga.

Modulo GPS: sto usando un ublox neo-6m. Ho comprato questo su ebay. Fai una ricerca, costa dai 7 ai 10 dollari americani.

Per impostazione predefinita, questo ricevitore ha l'1 impulso al secondo abilitato. Non abbiamo bisogno di fare nulla.

È possibile utilizzare qualsiasi modulo gps con uscita a impulsi da 1 Hertz. Ne hai uno. Usa quello!

OCXO: Ho provato 2 oscillatori. Un doppio forno stp2187 uscita sinusoidale 12v. E un ISOTEMP 131-100 5V, uscita ad onda quadra. Entrambi provengono da radioparts16 su ebay. Ho ricevuto un ottimo servizio da loro e il prezzo era più conveniente.

AVR: Il codice si adatta a un piccolo atmega48. Ma suggerisco di acquistare un atmega88 o un atmega328p. È quasi lo stesso prezzo. Compralo su digikey o ebay. Sto usando la versione dip. Puoi acquistare la versione a montaggio superficiale, ma fai attenzione, i pin non sono gli stessi dello schema.

Display LCD: qualsiasi display compatibile 4x20 HD44780 funzionerà. Indovina dove ho comprato il mio:) Sì su ebay un paio di anni fa. Ora è più costoso di prima. Ma disponibile sotto $ 20 US.

Forse in un prossimo futuro farò un codice per un display 2x16. Quei display costano solo 4$. E detto tra me e te, sarebbe sufficiente un display a 2 righe.

È necessario disporre di un programmatore ISP AVR. La programmazione di un AVR non è come un Arduino. Arduino è già programmato per comunicare su porta seriale. Un nuovo avr deve essere programmato con ISP o Parallel High Voltage Programmer. Stiamo usando ISP qui.

Un 74hc04 o 74ac0, regolatore di volt 7812 e 7805, resistori, condensatore…. digikey, ebay

Passaggio 2: ecco lo schema e Gpsdo_YT_v1_0.hex

Image
Image
Ecco schematico e Gpsdo_YT_v1_0.hex
Ecco schematico e Gpsdo_YT_v1_0.hex
Ecco schematico e Gpsdo_YT_v1_0.hex
Ecco schematico e Gpsdo_YT_v1_0.hex

Penso che lo schema sia tutto ciò che serve per realizzare questo progetto. Puoi usare una scheda rivestita in rame con il metodo di incisione o semplicemente una scheda perforata, se lo desideri.

Puoi usare qualsiasi scatola tu voglia, ma io suggerisco una scatola di metallo. O semplicemente su una breadboard per divertimento come il mio:)

Sto aspettando l'estensione dell'antenna e il connettore bnc per mettere il mio progetto in una scatola.

Devi scegliere il fusibile giusto. Assicurarsi che sia selezionato l'oscillatore esterno. Se hai problemi con l'oscillatore esterno, prova External Crystal. E l'orologio low.ckdiv8 è deselezionato. Guarda l'immagine. Prestare attenzione, quando l'orologio esterno si fonde a bit, è necessario fornire un orologio esterno per programmare o eseguire il codice. In altre parole, collegare l'oscillatore nel pin xtal1.

A proposito… puoi usare lo stesso codice per fare un frequenzimetro con gate di 1 secondo. Basta inserire l'orologio da misurare nel pin xtal1 e avrai un frequenzimetro +-1 Hz.

Aggiornerò il progetto non appena avrò nuove cose.

Nel frattempo, se il progetto ti interessa, hai abbastanza materiale per iniziarlo e anche finirlo prima di me

Ho caricato 2 video, puoi vedere la prima fase e l'ultima.

Sono disponibile per qualsiasi domanda o commento. Grazie.

26 febbraio 2017…. Disponibile la versione 1.1.

-atmega48 non è più supportato. Non abbastanza spazio.

-Aggiunto numero di satelliti bloccati.

-Supporto LCD 2x16. Se hai un 4x20, funzionerà anche tu. Ma l'ultima riga 2 non visualizzerà nulla.

Passaggio 3: accede a Eeprom

Accedi a Eeprom
Accedi a Eeprom

Ecco il dump di eeprom dopo un paio d'ore di tempo di esecuzione. Ti spiego come leggere questo. Di nuovo, è facile:)

All'indirizzo 00, 01 è memorizzato il valore pwm. Non appena la fase 5 conta 9 miliardi, il valore pwm viene aggiornato ogni volta che il contatore raggiunge esattamente 10 miliardi.

Non appena siamo alla fase 5. Tutti i conteggi vengono memorizzati in eeprom dopo il valore pwm. Inizia dall'indirizzo 02, dopo 03 e così via.

Questo esempio è venuto dal mio ocxo da 5 volt. Possiamo leggere il valore pwm di 0x9A73 = 39539 decimale su 65536. = 60, 33% o 3.0165 Volt.

Quindi l'indirizzo 00:01 è 0x9A73

Successivamente, puoi leggere 03. Per 9, 000, 000, 003 Pwm è ridotto di 3 perché siamo ancora nella fase 5

00 per 10.000, 000.000 pwm rimane intatto e si passa alla modalità di esecuzione (fase 6)

02 per 10.000, 000.002 In tal caso, il valore pwm viene ridotto da 2

01 per 10.000, 000.001 il valore pwm viene ridotto da 2

01 per 10, 000, 000.001 il valore pwm viene nuovamente ridotto da 2

00 per 10.000, 000.000 pwm soggiorno è intoccabile

00 per 10.000, 000.000 pwm soggiorno è intoccabile

00 per 10.000, 000.000 pwm soggiorno è intoccabile

Ora sai come leggere l'eeprom. Ogni 1000 secondi un nuovo valore viene scritto in eeprom. Quando la eeprom è piena, riparte dall'indirizzo 2.

Valore FF significa 9, 999, 999.999

Con questo dump puoi monitorare la precisione, senza alcun display LCD.

Puoi scaricare il file eeprom con un programmatore ISP.

Spero di averti dato abbastanza informazioni. In caso contrario, fammi sapere. Consigli, errori, qualsiasi cosa.

Yannick

Consigliato: