Inhoudsopgave:

GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig.: 3 stappen
GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig.: 3 stappen

Video: GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig.: 3 stappen

Video: GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig.: 3 stappen
Video: BG7TBL GPSDO (GPS Disciplined Oscillator) and 10 MHz Distribution Amplifier 2024, Juli-
Anonim
GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig
GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig
GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig
GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig
GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig
GPSDO YT, gedisciplineerde oscillator 10Mhz referentiefrequentie. Goedkoop. Nauwkeurig

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

STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP

Dit is een verouderd project.

Controleer in plaats daarvan mijn nieuwe 2x16 lcd-schermversie die hier beschikbaar is:

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

Ik heb de oude versie hier achtergelaten voor documentatie.

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

Hallo jongens, Wat is een GPSDO? GPSDO betekent: GPS-gedisciplineerde oscillator. GPS voor wereldwijd plaatsbepalingssysteem. Alle GPS-satellieten zijn uitgerust met een gesynchroniseerde atoomklok. GPS-module ontvangt deze signalen van verschillende satellieten. En door triangulatie weet hij zijn locatie. Maar wat ons hier interesseert, is de puls per seconde die op de module te vinden is. Met deze precieze puls (van de atoomklok) kunnen we een heel erg nauwkeurige oscillator maken. Waarvoor ? Ter referentie, voor kalibratie van frequentieteller of gewoon voor de lol om er een in zijn lab te hebben.

Op internet staan veel schema's. Ik heb wat geprobeerd. Sommige zijn goed, een met een tiny2313 was 5 hertz te traag. Maar de mijne is de meest eenvoudige, nuttige en handige. En ik geef je de.hex-code. Ze zijn geen VCO en geen divider. Circuit met VCO doet het goed. Maar het moet continu een pulssignaal van 10 kHz of meer hebben. Als de antenne te zwak wordt, puls mist of helemaal geen puls, draait de Oscillator (ocxo) vanzelf en is de VFC (Voltage Frequency Control) niet nauwkeurig meer. De VCO-feedback heeft een referentiefrequentie nodig om te blijven hangen. Zo niet, dan varieert het van 1 tot 2 Hertz! Ook werkt de goedkopere gps-module niet in deze configuratie. We moeten minimaal 10 kHz hebben om een VCO te maken. Ik heb het geprobeerd met 1000 hertz. De kloof was te groot. De frequentie varieerde. Dus met een ublox neo-6m kun je geen geweldige vco gpsdo doen omdat de maximale uitgangsfrequentie 1000Hz is. Je moet een neo-7m of hoger kopen.

Dit is hoe mijn GPSDO YT werkt. De controller vond de goede aanpassing voor elke OCXO met vfc 0 tot 5v. Als we het signaal van de huisarts verliezen, beweegt de frequentie helemaal niet. Wanneer het signaal opnieuw verschijnt, neemt de controller zijn laatst bekende goede waarde en gaat verder zoals voorheen. Op scope, met een referentieoscillator. We kunnen niet zeggen wanneer het signaal wegvalt of wanneer het terugkwam. Het signaal is hetzelfde.

Na kalibratie kunt u de gpsdo desgewenst zonder antenne gebruiken. Een paar mounts later heb je een heel klein beetje drift. Maar…. hoeveel groter? Het is tijd voor wat uitleg.

Hier is wat wiskunde … Gemakkelijke wiskunde, volg mij hiermee, het is gemakkelijk. Tot nu toe heeft het algoritme 6 fasen. Elke fase duurt een monster van 1 tot 1000 seconden, vond de goede pwm-aanpassing en ga naar de meeste langere monsters voor meer nauwkeurigheid.

Nauwkeurigheid = (((Aantal seconden x 10E6) + 1)/aantal seconden) - 10E6

Fase 1, 1 tweede monster voor 10, 000, 000 tellingen voor +- 1 Hz nauwkeurigheid

fase 2, 10 seconden monster voor 100, 000, 000 tellingen voor +-0.1Hz nauwkeurigheid

Fase 3, 60 seconden monster voor 600, 000, 000 tellingen voor +-0.01666 Hz nauwkeurigheid

Fase 4, 200 seconden Monster voor 2, 000, 000, 000 tellingen voor +-0,005 Hz nauwkeurigheid

Fase 5, 900 seconden monster voor 9, 000, 000, 000 tellingen voor +-0,001111 Hz nauwkeurigheid

Fase 6, monster van 1000 seconden voor 10 miljard tellingen voor een nauwkeurigheid van +-0,001 Hz

Het slechtste geval. Als we fase 6 krijgen, kan dit aantal elke 1000 seconden een beetje veranderen of niet. enige tijd zal het 10, 000, 000, 001 of 9, 999, 999, 999 zijn, dus + of - 0,0 000, 000.001 variatie voor 1000s. Nu moeten we de waarde voor 1 seconde weten.

10Mhz = 1 seconde

Voor 1 seconde = 10, 000, 000, 001 telling/1000s = 10, 000, 000.001 Hz (in het slechtste geval voor 1 seconde)

10, 000, 000.001 - 10, 000, 000 = 0,001 Hz/s sneller of langzamer

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

Dus onthoud, 10Mhz is 1 seconde, 31536Hz X 1/10E6 = 0, 0031536 seconde/jaar

Nog een snellere berekeningsmethode. een misser van 10E9Mhz is 1/10E9= 1E-10

1E-10 x 60x60x24x365 = 0, 0031536 seconde/jaar.

Is dat nauwkeurig genoeg voor u?

je moet echter een goede OXCO hebben. Ik geef de voorkeur aan Double Oven 12v Sinus-uitgang. Stabieler, stiller en nauwkeuriger. Maar ik heb hetzelfde resultaat met eenvoudige 5V. Een stp 2187 heeft bijvoorbeeld een stabiliteit korte tijd (allan deviatie) van 2x10-12 = 0.000, 000, 000, 002 Hz stabiliteit. Tegelijkertijd, wanneer gps-puls beschikbaar is, zal Avr altijd pwm (frequentie) corrigeren. De uC telt altijd… altijd. Dit betekent dat u op het display geen datum en tijd ziet. Wanneer uC 900s bemonstert, is deze 900 seconden bezig. Het moet alle klokken tellen. Het probleem is dat uC op 10Mhz draait. Elke klok moet worden geteld. Het telt zichzelf. Als er maar één klok ontbreekt, is het monster niet goed en is de pwm-aanpassing niet goed. Ik kan de weergave niet elke seconde vernieuwen.

Wanneer de bemonstering wordt gestart. Uc begint timer0 te tellen. Elke 256 klok genereert een onderbreking. X-register wordt verhoogd. wanneer het vol is, wordt het Y-register verhoogd en X opnieuw ingesteld op 0 enzovoort. Aan het einde, bij de laatste één gps-puls, wordt de telling gestopt. En nu en alleen nu kan ik de weergave bijwerken en wat wiskunde doen voor pwm-berekening.

wetende dat, ik heb slechts 25, 6 ons (256 klok voor onderbreking) om tijd of andere te lezen en weer te geven. Het is onmogelijk. Eén onderbreking kan worden gebufferd, niet 2. Ik zou de tijd na 1000s kunnen vernieuwen … maar het is niet praktisch om de tijd te zien met een interval van 15, 16 minuten. Ik heb een horloge, een klok, een mobiele telefoon om de tijd te weten:) Ik ben bezig met een 10Mhz-referentie. Geen klok.

Een ander probleem dat ik had, sommige avr-instructies hebben 2 cycli. Inclusief de rjmp instructie. Dit betekent dat als de eerste of laatste gps-puls op hetzelfde moment van een instructie van 2 cycli kwam, de uC een klok zal missen. Omdat uC de instructie afmaakt voordat de interrupt begint. De teller start of stopt dus een cyclus later. Dus ik kan geen tijd-wachtlus doen… Maar in feite heb ik geen andere keuze. Ik moest ergens een lus maken!! I Dus ik gebruik de instructie rjmp en nop (dit doe niets). Nop is een instructie van één cyclus. Ik heb 400 nop-instructies voor één rjmp op atmega48 gezet. 2000 op atmega88 en atmega328p-versie. Dus de kans is kleiner dat de eerste of laatste puls komt bij rjmp-instructie. Maar ja het is mogelijk en als dit gebeurt, zal deze fout bij de volgende bemonstering worden gecorrigeerd.

De weergave is optioneel. U kunt alleen circuits maken met uC, OCXO en laagdoorlaatfilter (weerstandscondensator), inschakelen en wachten. Na 1 uur heb je een acceptabele frequentie. Maar om fase 6 te bereiken, duurt het een paar uur.

Pwm is 16 bits. 65535 stap. 5v/65535 = 76, 295 uV

OCXO-variatie is 2Hz bij 1V. 1v/76, 295uV = 13107 stap voor 2 hz. 2/13107 = 152.59uHz per stap van pwm

De fase 5, verandert pwm door 3, fase 6 is 2. stap… Waarom 3? omdat 3 de frequentie verandert met 0.000, 000, 000, 4 op een schaal van 15 minuten. en 4 is mijn magische getal in mijn algoritme. Als de eerste frequentie bijvoorbeeld in fase één is, is de eerste gevonden frequentie 10.000, 003Mhz. Ik zak met 0,0 000, 000,4 stap naar beneden.

Een te grote stap kan gaan van 10.000003 naar 10.000001 en na 9, 999998Hz. Ik mis het doel.

Met 0, 0000004. Het is sneller dan 0, 1 en ik ben er zekerder van dat ik een nummer niet omzeil. Enzovoort. Ik doe hetzelfde met 10 seconden, 60 seconden en 200s fase en 900s. 1000s is actief en gebruik een pwm-stap van 2

Houd er rekening mee dat fase 5 langer duurt om te bereiken. De kloof tussen 4 en 5 is groter. Maar het helpt om sneller van 5 naar 6 te gaan.

Wanneer fase 6 precies 10 miljard heeft geteld, worden de pwm-waarden opgeslagen in eeprom. Nu is het tijd voor de hardloopmodus. Deze telt een monster van 1000 seconden, maar met alleen 2-staps pwm. In de bedrijfsmodus wordt de werkelijke frequentie weergegeven en bijgewerkt met een interval van 1000 seconden. Als het signaal verloren gaat in de bedrijfsmodus, gaat het vanzelf over. Geen verandering van pwm in deze modus. Wanneer het signaal terugkomt, keert het terug naar fase 5 om opnieuw te synchroniseren.

Als het circuit wordt losgekoppeld nadat eeprom is opgeslagen. Deze begint in fase 5 bij het inschakelen met de eeprom pwm-waarde.

Om de eeprom-waarde te wissen, drukt u gewoon op de knop bij het opstarten. Pwm 50% wordt belast en de kalibratie start vanaf fase 1.

Ik passeer vele uren om iets anders te proberen, configuratie van het circuit. Ik heb veel tests gedaan, met OP-versterker, buffer en andere chip. En aan het einde… het beste resultaat dat ik heb, heeft het niet nodig. Gewoon een goede stabiele voeding en wat filtercondensator. Dus ik hou het simpel.

Stap 1: Onderdelen kopen

Onderdelen kopen
Onderdelen kopen
Onderdelen kopen
Onderdelen kopen
Onderdelen kopen
Onderdelen kopen

Het eerste dat u moet doen, is de onderdelen kopen. Omdat de verzending vaak heel erg lang is.

Gps-module: ik gebruik een ublox neo-6m. Ik heb deze op ebay gekocht. Zoek eens op, het kost ongeveer 7 tot 10 dollar.

Standaard heeft deze ontvanger de 1 puls per seconde ingeschakeld. We hoeven niets te doen.

U kunt elke gps-module met een 1 Hertz pulsuitgang gebruiken. Jij hebt er een. Gebruik dat!

OCXO: Ik heb 2 oscillatoren geprobeerd. Een dubbele oven stp2187 12v sinusuitgang. En een ISOTEMP 131-100 5V, blokgolfuitgang. Beide komen van radioparts16 op ebay. Ik had een zeer goede service van hen en de prijs was goedkoper.

AVR: Code past op een beetje atmega48. Maar ik stel voor om een atmega88 of atmega328p te kopen. Het is bijna dezelfde prijs. Koop dit op digikey of ebay. Ik gebruik de dip-versie. U kunt een versie voor opbouwmontage kopen, maar let op, pinnen zijn niet hetzelfde als het schema.

Lcd-scherm: elk 4x20 HD44780-compatibel scherm werkt. Raad eens waar ik de mijne heb gekocht:) Ja op ebay een paar jaar geleden. Nu is het duurder dan voorheen. Maar beschikbaar onder $ 20 US.

Misschien zal ik in de nabije toekomst een code maken voor een 2x16 display. Die displays zijn slechts 4 $. En tussen jou en mij zou een weergave van 2 regels voldoende zijn.

U moet een AVR ISP-programmeur hebben. Het programmeren van een AVR is niet zoals een Arduino. Arduino is al geprogrammeerd om via de seriële poort te communiceren. Een gloednieuwe avr moet worden geprogrammeerd met ISP of Parallel High Voltage Programmer. We gebruiken isp hier.

Een 74hc04 of 74ac0, voltregelaar 7812 en 7805, weerstanden, condensator…. digikey, ebay

Stap 2: Hier is een schema en Gpsdo_YT_v1_0.hex

Image
Image
Hier is een schema en Gpsdo_YT_v1_0.hex
Hier is een schema en Gpsdo_YT_v1_0.hex
Hier is een schema en Gpsdo_YT_v1_0.hex
Hier is een schema en Gpsdo_YT_v1_0.hex

Ik denk dat het schema alles is wat je nodig hebt om dit project te realiseren. Je kunt een met koper beklede plaat gebruiken met etsmethode of gewoon een geperforeerde plaat als je wilt.

Je kunt elke doos gebruiken die je wilt, maar ik raad een metalen doos aan. Of gewoon op een breadboard voor de lol zoals de mijne:)

Ik wacht op antenneverlenging en bnc-connector om mijn project in een doos te stoppen.

U moet de juiste zekeringbit kiezen. Zorg ervoor dat de externe oscillator is geselecteerd. Als je problemen hebt met External Oscillator, probeer dan External Crystal. En de low.ckdiv8-klok is niet aangevinkt. Zie foto. Let op, wanneer de externe klok bit fuseert, moet u een externe klok leveren om de code te programmeren of uit te voeren. Met andere woorden, sluit de Oscillator aan op xtal1 pin.

Trouwens… je kunt dezelfde code gebruiken om een frequentieteller met 1 seconde poort te doen. Voer gewoon de klok in die moet worden gemeten in xtal1-pin en je hebt een +-1 Hz-frequentieteller.

Ik zal het project updaten zodra ik nieuwe dingen heb.

In de tussentijd, als het project je interesseert, heb je genoeg materiaal om het voor mij te beginnen en zelfs af te maken

Ik heb 2 video's geüpload, je kunt fase één en de laatste zien.

Ik ben beschikbaar voor vragen of opmerkingen. Bedankt.

26 februari 2017…. Versie 1.1 beschikbaar.

-atmega48 wordt niet meer ondersteund. Niet genoeg ruimte.

-Toegevoegd aantal vergrendelde satellieten.

-Ondersteuning 2x16 lcd. Als je een 4x20 hebt, zal het ook werken. Maar 2 laatste regel zal niets weergeven.

Stap 3: Logt in Eeprom

Inloggen Eeprom
Inloggen Eeprom

Hier is de dump van eeprom na een paar uur uf looptijd. Ik zal uitleggen hoe je dit moet lezen. Nogmaals, het is gemakkelijk:)

Op adres 00, 01 wordt de pwm-waarde opgeslagen. Zodra fase 5 9 miljard telt, wordt de pwm-waarde elke keer bijgewerkt als de teller precies 10 miljard bereikt.

Zodra we in fase 5 zijn, worden alle tellingen na pwm-waarde in eeprom opgeslagen. Begin op adres 02, na 03 enzovoort.

Dit voorbeeld kwam van mijn 5 volt ocxo. We kunnen de pwm-waarde van 0x9A73 = 39539 decimaal lezen op 65536. = 60, 33% of 3.0165 Volt.

Dus adres 00:01 is 0x9A73

Vervolgens kunt u 03 lezen. Voor 9, 000, 000, 003 wordt Pwm met 3 verlaagd omdat we nog in fase 5 zijn

00 voor 10, 000, 000.000 pwm verblijf is onaangeroerd en we gaan over naar running mode (fase 6)

02 voor 10, 000, 000.002 In dat geval wordt de pwm-waarde verlaagd van 2

01 voor 10, 000, 000.001 pwm-waarde wordt verlaagd van 2

01 voor 10, 000, 000.001 pwm-waarde wordt opnieuw verlaagd van 2

00 voor 10, 000, 000.000 pwm verblijf is onaangeroerd

00 voor 10, 000, 000.000 pwm verblijf is onaangeroerd

00 voor 10, 000, 000.000 pwm verblijf is onaangeroerd

Nu weet je hoe je de eeprom moet lezen. Elke 1000 seconden wordt er een nieuwe waarde in eeprom geschreven. Wanneer eeprom vol is, herstart het vanaf adres 2.

FF-waarde gemiddelde 9, 999, 999,999

U kunt met deze dump de nauwkeurigheid volgen, zonder enig LCD-scherm.

U kunt het eeprom-bestand dumpen met een isp-programmeur.

Ik hoop dat ik je voldoende informatie heb gegeven. Zo niet, laat het me weten. Advies, fout, wat dan ook.

Yannick

Aanbevolen: