Cuprins:

GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact .: 3 pași
GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact .: 3 pași

Video: GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact .: 3 pași

Video: GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact .: 3 pași
Video: BG7TBL GPSDO (GPS Disciplined Oscillator) and 10 MHz Distribution Amplifier 2024, Noiembrie
Anonim
GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact
GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact
GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact
GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact
GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact
GPSDO YT, oscilator disciplinat 10 MHz frecvență de referință. Cost scăzut. Exact

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

STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP

Acesta este un proiect învechit.

În schimb, verificați noua mea versiune de afișaj LCD 2x16 disponibilă aici:

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

Am lăsat aici versiunea veche pentru documentare.

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

Salut baieti, Ce este un GPSDO? GPSDO înseamnă: oscilator disciplinat GPS. GPS pentru sistemul de poziționare globală. Toți sateliții GPS sunt echipați cu ceas atomic sincronizat. Modulul GPS primește aceste semnale de la mai mulți sateliți. Și prin triangulare, își cunoaște locația. Dar aici, ceea ce ne interesează este pulsul pe secundă care se găsește pe modul. Cu acest impuls precis (de la ceasul atomic), putem realiza un oscilator foarte precis. Pentru ce ? Pentru referință, pentru calibrarea contorului de frecvență sau doar pentru distracție să aveți unul în laboratorul său.

Sunt multe scheme pe internet. Am încercat câteva. Unele sunt bune, una cu un mic 2313 era cu 5 hertz prea lent. Dar al meu este cel mai simplu, util și convenabil. Și îți dau codul.hex. Nu sunt VCO și nici un divizor. Circuitul cu VCO merge bine. Dar trebuie să aibă un semnal de impuls de 10 kHz sau mai continuu. Dacă antena devine prea slabă, lipsește impulsul sau nu are deloc impuls, oscilatorul (ocxo) funcționează singur și VFC (Voltage Frequency Control) nu mai este precis. Feedback-ul VCO necesită o frecvență de referință pentru a rămâne. Dacă nu, variază de la 1 la 2 Hz! De asemenea, modulul GPS mai ieftin nu funcționează în această configurație. Trebuie să avem cel puțin 10 kHz pentru a face un VCO. Am încercat cu 1000 de hertz. Decalajul a fost prea mare. Frecvența a variat. Deci, cu un ublox neo-6m nu puteți face un vco gpsdo grozav, deoarece frecvența maximă de ieșire este de 1000Hz. Trebuie să cumpărați un neo-7m sau superior.

Acesta este modul în care funcționează GPSDO YT. Controlerul a găsit ajustarea bună pentru orice OCXO cu vfc 0 la 5v. Dacă pierdem semnalul GP, frecvența nu se mișcă deloc. Când semnalul reapare, controlerul își ia ultima valoare bună cunoscută și continuă ca înainte. Pe scop, cu un oscilator de referință. Nu putem spune când s-a pierdut semnalul sau când s-a întors. Semnalul este același.

După calibrare, puteți utiliza gpsdo fără antenă, dacă doriți. Câteva monturi mai târziu veți avea o derivație foarte mică. Dar…. cu cat mai mare? Este timpul pentru unele explicații.

Iată câteva matematici … Matematică ușoară, urmează-mă cu asta este ușor. Până în prezent algoritmul are 6 faze. Fiecare fază ia un eșantion de 1 la 1000 de secunde, a găsit ajustarea bună a pwm și mergeți la cele mai multe eșantioane mai lungi pentru o mai mare precizie.

Precizie = ((((Număr de secundă x 10E6) + 1) / număr de secundă) - 10E6

Faza 1, eșantion de 1 secundă pentru 10 000 000 contează pentru o precizie de + - 1 Hz

faza 2, eșantion de 10 secunde pentru 100, 000, 000 contează pentru o precizie de + -0,1Hz

Faza 3, eșantion de 60 de secunde pentru 600, 000, 000 contează pentru o precizie de + -0,01666 Hz

Faza 4, 200 secunde Eșantion pentru 2, 000, 000, 000 contează pentru + -0,005 Hz precizie

Faza 5, eșantion de 900 de secunde pentru 9, 000, 000, 000 contează pentru o precizie de + -0,001111 Hz

Faza 6, eșantion de 1000 de secunde pentru 10 miliarde contează pentru o precizie de + -0,001 Hz

Cel mai rău caz. Când primim faza 6. Acest număr se poate schimba un pic la fiecare 1000 de secunde sau nu. cândva va fi 10, 000, 000, 001 sau 9, 999, 999, 999 Deci, + sau - 0, 000, 000.001 variație pentru 1000s. Acum trebuie să cunoaștem valoarea pentru 1 secundă.

10Mhz = 1 secundă

Pentru 1 secundă = 10, 000, 000, 001 număr / 1000s = 10, 000, 000,001 Hz (cel mai rău caz pentru 1 secundă)

10, 000, 000,001 - 10, 000, 000 = 0,001 Hz / s mai rapid sau mai lent

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

Deci, amintiți-vă, 10Mhz este 1 secundă, 31536Hz X 1 / 10E6 = 0, 0031536 secundă / an

O altă metodă mai rapidă de calcul. o dor de 10E9Mhz este 1 / 10E9 = 1E-10

1E-10 x 60x60x24x365 = 0, 0031536 secundă / an.

Este suficient de precis pentru tine?

cu toate acestea, trebuie să aveți un OXCO bun. Prefer ieșirea Sinus Double Oven 12v. Mai stabil, mai liniștit și mai precis. Dar am același rezultat cu 5V simple. De exemplu, un stp 2187 are un timp scurt de stabilitate (deviație totală) de 2x10-12 = 0,000, 000, 000, 002 Hz stabilitate. În același timp, când pulsul GPS este disponibil, Avr va corecta întotdeauna pwm (frecvența). UC contează întotdeauna … întotdeauna. Aceasta înseamnă că pe ecran nu veți vedea data și ora. Când uC eșantionează 900, acesta este ocupat timp de 900 de secunde. Trebuie să numere tot ceasul. Problema este că uC rulează la 10Mhz. Fiecare ceas trebuie să fie numărat. Se numără singură. Dacă lipsește un singur ceas, eșantionul nu va fi bun și ajustarea pwm nu va fi corectă. Nu pot reîmprospăta afișajul în fiecare secundă.

Când se începe prelevarea de probe. Uc începe să numere temporizatorul0. Fiecare ceas 256 generează o întrerupere. Registrul X este incrementat. când este plin, registrul Y este incrementat și X se resetează la 0 și așa mai departe. La sfârșit, la ultimul impuls GPS, numărul este oprit. Și acum și numai acum pot actualiza afișajul și pot face niște calcule pentru calculul pwm.

știind asta, am doar 25, 6 noi (256 de ceasuri înainte de întrerupere) pentru a citi și afișa ora sau altele. Este imposibil. O întrerupere poate fi rezolvată, nu 2. Aș putea reîmprospăta timpul după 1000 de ani … dar nu va fi practic să vezi timpul cu un interval de 15, 16 minute. Am un ceas, un ceas, un telefon mobil pentru a afla ora:) Fac o referință de 10Mhz. Nu un ceas.

O altă problemă pe care am avut-o, unele instrucțiuni avr au 2 cicluri. Inclusiv instrucțiunea rjmp. Aceasta înseamnă că dacă primul sau ultimul impuls GPS a apărut în același timp al unei instrucțiuni de 2 cicluri, uC va pierde un ceas. Deoarece uC va termina instrucțiunea înainte de a începe întreruperea. Deci, contorul va porni sau opri un ciclu mai târziu. Deci nu pot face o buclă de așteptare … Dar, de fapt, nu am altă opțiune. Trebuia să fac buclă undeva !! I Deci, folosesc instrucțiunile rjmp și nop (acest lucru nu face nimic). Nop este o instrucțiune cu un singur ciclu. Am pus instrucțiuni 400 nop pentru un rjmp pe atmega48. 2000 pe versiunea atmega88 și atmega328p. Deci, șansele sunt mai mici ca primul sau ultimul impuls să vină la instrucțiunile rjmp. Dar da, este posibil și dacă se întâmplă acest lucru, această eroare va fi corectată la următoarea eșantionare.

Afișajul este opțional. Puteți face circuit doar cu uC, OCXO și cu filtru low-pass (condensator rezistor), porniți și așteptați. După 1 oră veți avea o frecvență acceptabilă. Dar pentru a ajunge la faza 6. Este nevoie de câteva ore.

Pwm are 16 biți. 65535 pas. 5v / 65535 = 76, 295 uV

Variația OCXO este de 2Hz cu 1V. 1v / 76, 295uV = 13107 pas pentru 2 hz. 2/13107 = 152,59uHz pe pas de pwm

Faza 5 schimbă pwm cu 3, faza 6 este 2. pasul … De ce 3? deoarece 3 schimbă frecvența cu 0,000, 000, 000, 4 la scara de 15 minute. și 4 este numărul meu magic din algoritmul meu. De exemplu, dacă în prima fază, prima frecvență găsită este de 10.000, 003Mhz. Cobor cu 0, 000, 000,4 pas.

Pasul prea mare poate trece de la 10.000003 la 10.000001 și după 9, 999998Hz. Îmi lipsește ținta.

Cu 0, 0000004. Este mai rapid decât 0, 1 și sunt mai sigur că nu ocolesc un număr. Si asa mai departe. Fac același lucru cu faza de 10 secunde, 60 de secunde și 200s și 900s. 1000s este în modul de rulare și utilizați un pas pwm de 2

Vă rugăm să rețineți că faza 5 este mai lungă de realizat. Decalajul dintre 4 și 5 este mai mare. Dar ajută să treci de la 5 la 6 mai repede.

Când faza 6 a numărat exact 10 miliarde, valorile pwm sunt salvate în eeprom. Acum, este timpul pentru modul de rulare. Acesta contează eșantion de 1000 de secunde, dar numai cu 2 pași pwm. În modul de funcționare, frecvența reală este afișată și actualizată la un interval de 1000 de secunde. Dacă semnalul este pierdut în modul de funcționare, acesta trece în funcțiune automată. Nici o modificare a pwm în acest mod. Când semnalul revine, acesta revine la faza 5 la resincronizare.

Dacă circuitul este deconectat după ce eeprom este salvat. Acesta va începe în faza 5 la pornire cu valoarea eeprom pwm.

Pentru ștergerea valorii eeprom, trebuie doar să apăsați butonul la pornire. Pwm 50% va fi încărcat și calibrarea va începe de la faza 1.

Trec multe ore să încerc diferite lucruri, configurația circuitului. Am făcut multe teste, cu amplificator OP, tampon și alt chip. Și la final … cel mai bun rezultat pe care l-am obținut nu are nevoie de el. Doar o sursă de alimentare stabilă bună și un condensator de filtrare. Așa că păstrez acest lucru simplu.

Pasul 1: Cumpărați piese

Cumpărați piese
Cumpărați piese
Cumpărați piese
Cumpărați piese
Cumpărați piese
Cumpărați piese

Primul lucru de făcut este să cumpărați piesele. Deoarece deseori transportul este foarte foarte lung.

Modul GPS: folosesc un ublox neo-6m. L-am cumpărat pe eBay. Faceți o căutare, a costat aproximativ 7-10 dolari SUA.

În mod implicit, acest receptor are activat impulsul 1 la secundă. Nu trebuie să facem nimic.

Puteți utiliza orice modul GPS cu o ieșire de impuls de 1 Hz. Ai unul. Folosește asta!

OCXO: Am încercat 2 oscilatoare. Un cuptor dublu stp2187 12v ieșire cu undă sinusoidală. Și un ISOTEMP 131-100 5V, ieșire cu undă pătrată. Ambele provin de la radioparts16 pe eBay. Am avut un serviciu foarte bun de la ei și prețul a fost mai ieftin.

AVR: Codul se potrivește cu puțin atmega48. Dar sugerez să cumpărați un atmega88 sau atmega328p. Este aproape același preț. Cumpărați acest lucru pe digikey sau eBay. Folosesc versiunea dip. Puteți cumpăra versiunea de montare pe suprafață, dar fiți atenți, pinii nu sunt la fel cu schema.

Afișaj LCD: Orice afișaj compatibil 4x20 HD44780 va funcționa. Ghici de unde am cumpărat-o pe a mea:) Da pe eBay acum câțiva ani. Acum este mai scump decât înainte. Dar disponibil sub 20 USD.

Poate că în viitorul apropiat voi face un cod pentru un afișaj 2x16. Aceste afișaje sunt doar 4 $. Și între voi și mine, un afișaj de 2 linii ar fi suficient.

Trebuie să aveți un programator ISP AVR. Programarea unui AVR nu este ca un Arduino. Arduino a fost deja programat pentru a comunica pe portul serial. Un avr nou trebuie să fie programat cu ISP sau Parallel High Voltage Programer. Folosim isp aici.

A 74hc04 sau 74ac0, regulator de tensiune 7812 și 7805, rezistențe, condensator…. digikey, ebay

Pasul 2: aici este schematic și Gpsdo_YT_v1_0.hex

Image
Image
Iată Schematic și Gpsdo_YT_v1_0.hex
Iată Schematic și Gpsdo_YT_v1_0.hex
Iată Schematic și Gpsdo_YT_v1_0.hex
Iată Schematic și Gpsdo_YT_v1_0.hex

Cred că schema este tot ce aveți nevoie pentru a realiza acest proiect. Puteți utiliza o placă placată cu cupru cu metoda de gravare sau doar o placă perforată, dacă doriți.

Puteți folosi orice cutie doriți, dar vă sugerez o cutie metalică. Sau doar pe o tablă de calcul pentru distracție ca a mea:)

Aștept extensia antenei și conectorul bnc pentru a-mi pune proiectul într-o cutie.

Trebuie să alegeți bitul sigur sigur. Asigurați-vă că este selectat oscilatorul extern. Dacă aveți probleme cu oscilatorul extern, încercați External Crystal. Și ceasul low.ckdiv8 este debifat. Vezi poza. Acordați atenție, când ceasul extern fuzionează bit, trebuie să furnizați un ceas extern pentru a programa sau a rula codul. Cu alte cuvinte, conectați oscilatorul în pinul xtal1.

Apropo … puteți utiliza același cod pentru a face un contor de frecvență cu o poartă de 1 secundă. Introduceți doar ceasul pentru a fi măsurat în pin xtal1 și veți avea un contor de frecvență + -1 Hz.

Voi actualiza proiectul de îndată ce voi avea lucruri noi.

Între timp, dacă proiectul te interesează, ai suficient material pentru a începe și chiar a-l termina înaintea mea

Am încărcat 2 videoclipuri, puteți vedea prima fază și ultima.

Sunt disponibil pentru orice întrebări sau comentarii. Mulțumesc.

26 februarie 2017…. Versiunea 1.1 disponibilă.

-atmega48 nu mai este acceptat. Spatiu insuficient.

-Număr adăugat de satelit blocat.

-Suport 2x16 lcd. Dacă aveți un 4x20, va funcționa și el. Dar ultima 2 linie nu va afișa nimic.

Pasul 3: Conectare la Eeprom

Autentificări în Eeprom
Autentificări în Eeprom

Iată depozitul de eeprom după câteva ore de durată. Vă voi explica cum să citiți acest lucru. Din nou, este ușor:)

La adresa 00, 01 este stocată valoarea pwm. De îndată ce faza 5 numără 9 miliarde, valoarea pwm este actualizată de fiecare dată când contorul atinge exact 10 miliarde.

De îndată ce suntem în faza 5. Toate numărările sunt stocate în eeprom după valoarea pwm. Începeți la adresa 02, după 03 și așa mai departe.

Acest exemplu a venit din ocxo-ul meu de 5 volți. Putem citi valoarea pwm de 0x9A73 = 39539 zecimal pe 65536. = 60, 33% sau 3.0165 Volt.

Deci adresa 00:01 este 0x9A73

Apoi, puteți citi 03. Pentru 9, 000, 000, 003 Pwm este redus cu 3 deoarece suntem încă în faza 5

00 pentru 10, 000, 000.000 pwm stați neatins și trecem la modul de rulare (faza 6)

02 pentru 10, 000, 000.002 În acest caz, valoarea pwm este redusă de la 2

01 pentru 10, 000, 000.001 valoarea pwm este redusă de la 2

01 pentru 10, 000, 000.001 valoarea pwm este redusă din nou de la 2

00 pentru 10, 000, 000.000 șederea pwm este neatinsă

00 pentru 10, 000, 000.000 șederea pwm este neatinsă

00 pentru 10, 000, 000.000 ședere pwm este neatinsă

Acum știi cum să citești eeprom. Fiecare valoare nouă de 1000 de secunde este scrisă în eeprom. Când eeprom este plin, acesta repornește de la adresa 2.

Valoarea FF înseamnă 9, 999, 999,999

Cu acest dump puteți urmări precizia, fără niciun afișaj LCD.

Puteți descărca fișierul eeprom cu un programator isp.

Sper că ți-am dat suficiente informații. Dacă nu, anunțați-mă. Sfaturi, erori, orice.

Yannick

Recomandat: