İçindekiler:

GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Doğru.: 3 Adım
GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Doğru.: 3 Adım

Video: GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Doğru.: 3 Adım

Video: GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Doğru.: 3 Adım
Video: BG7TBL GPSDO (GPS Disciplined Oscillator) and 10 MHz Distribution Amplifier 2024, Temmuz
Anonim
GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Kesin
GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Kesin
GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Kesin
GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Kesin
GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Kesin
GPSDO YT, Disiplinli Osilatör 10Mhz Referans Frekansı. Düşük maliyetli. Kesin

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

DUR DUR DUR DUR DUR DUR DUR DUR DUR DUR DUR

Bu eski bir projedir.

Bunun yerine burada bulunan yeni 2x16 lcd ekran versiyonumu kontrol edin:

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

Dokümantasyon için eski sürümü burada bıraktım.

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

Merhaba millet, GPSDO nedir? GPSDO şu anlama gelir: GPS disiplinli osilatör. Küresel konumlandırma sistemi için GPS. Tüm GPS uyduları senkronize atom saati ile donatılmıştır. GPS modülü bu sinyalleri birkaç uydudan alır. Ve nirengi yoluyla yerini biliyor. Ancak burada bizi ilgilendiren, modülde bulunan saniyedeki nabızdır. Bu hassas darbe ile (atom saatinden), çok hassas bir osilatör yapabiliriz. Ne için ? Referans için, frekans sayacının kalibrasyonu için veya sadece eğlence için laboratuvarında bir tane olması.

İnternette birçok şematik var. Bazılarını denedim. Bazıları iyidir, minik2313'lü biri 5 hertz çok yavaştı. Ama benimki en basit, kullanışlı ve kullanışlı. Ve sana.hex kodunu veriyorum. VCO ve bölücü değiller. VCO'lu devre iyi gidiyor. Ancak sürekli olarak 10 khz veya daha fazla darbe sinyaline sahip olmalıdır. Anten çok zayıfsa, nabız eksikse veya hiç nabız yoksa Osilatör (ocxo) kendi kendine çalışıyor ve VFC (Voltaj Frekans Kontrolü) artık doğru değil. VCO geri bildiriminin bağlı kalması için referans frekansına ihtiyacı vardır. Değilse, 1 ila 2 Hertz arasında değişir! Ayrıca, daha ucuz gps modülü bu konfigürasyonda çalışmaz. Bir VCO yapmak için en az 10khz'ye sahip olmalıyız. 1000 hertz ile denedim. Boşluk çok büyüktü. Frekans değişiyordu. Yani bir ublox neo-6m ile harika bir vco gpsdo yapamazsınız çünkü maksimum çıkış frekansı 1000Hz'dir. Bir neo-7m veya üstü satın almalısınız.

GPSDO YT'm bu şekilde çalışıyor. Kontrolör, 0 ila 5v vfc ile herhangi bir OCXO için iyi bir ayar buldu. GP sinyalini kaybedersek, frekans hiç hareket etmez. Sinyal yeniden göründüğünde, kontrolör bilinen en son iyi değerini alır ve eskisi gibi devam eder. Kapsamda, bir referans osilatörü ile. Sinyalin ne zaman kaybolduğunu veya ne zaman geri geldiğini bilemeyiz. Sinyal aynı.

Kalibrasyondan sonra gpsdo'yu dilerseniz antensiz de kullanabilirsiniz. Birkaç binek sonra çok az bir sürüklenme yaşayacaksınız. Fakat…. ne kadar büyük? Biraz açıklama zamanı.

İşte biraz Matematik… Kolay matematik, bununla beni takip edin, çok kolay. Şimdiye kadar algoritmanın 6 aşaması var. Her aşama 1 ila 1000 saniyelik bir örnek alır, iyi pwm ayarını bulur ve daha fazla doğruluk için en uzun örneklere gider.

Doğruluk = (((Saniye sayısı x 10E6) + 1)/saniye sayısı) - 10E6

Faz 1, +- 1 Hz doğruluk için 10.000, 000 sayım için 1 saniyelik örnek

faz 2, +-0.1Hz doğruluk için 100.000, 000 sayım için 10 saniyelik örnek

Faz 3, +-0.01666 Hz doğruluk için 600.000, 000 sayım için 60 saniyelik örnek

Faz 4, 200 saniye +-0,005 Hz doğruluk için 2.000.000 sayım için örnek

+-0,001111 Hz doğruluk için 9, 000, 000, 000 sayım için 5, 900 saniyelik faz örneği

Faz 6, +-0,001 Hz doğruluk için 10 milyar sayım için 1000 saniyelik örnek

En kötü durumda. 6. aşamaya geldiğimizde bu sayı her 1000 saniyede bir bit değişip değişmeyebilir. bir zaman 10, 000, 000, 001 veya 9, 999, 999, 999 Yani, 1000'ler için + veya - 0, 000, 000.001 varyasyon olacaktır. Şimdi 1 saniyenin değerini bilmeliyiz.

10Mhz = 1 saniye

1 saniye için = 10, 000, 000, 001 sayı/1000 s = 10, 000, 000.001 Hz (1 saniye için en kötü durum)

10, 000, 000,001 - 10, 000, 000 = 0,001 Hz/s daha hızlı veya daha yavaş

0.001Hz X 60 X 60 X24 X365 = 31536 Hz/yıl

Unutmayın, 10Mhz 1 saniye, 31536Hz X 1 / 10E6 = 0, 0031536 saniye/yıl

Hesaplama için başka bir daha hızlı yöntem. 10E9Mhz için bir özledim 1/10E9= 1E-10

1E-10 x 60x60x24x365 = 0, 0031536 saniye/yıl.

Bu senin için yeterince doğru mu?

ancak, iyi bir OXCO'nuz olmalıdır. Double Oven 12v Sinus çıkışını tercih ederim. Daha kararlı, sessiz ve doğru. Ama basit 5V ile aynı sonuca sahibim. Örneğin, bir stp 2187, 2x10-12 = 0,000, 000, 000, 002 Hz'lik bir kararlılık kısa süresine (allan sapması) sahiptir. Aynı zamanda, gps darbesi mevcut olduğunda, Avr her zaman pwm'yi (frekansı) düzeltecektir. UC her zaman sayar… her zaman. Bu, ekranda tarih ve saati görmeyeceğiniz anlamına gelir. UC 900'leri örneklediğinde, bu 900 saniye boyunca meşguldür. Tüm saati saymalıdır. Sorun şu ki, uC 10Mhz'de çalışıyor. Her saat sayılmalıdır. Kendini sayıyor. Sadece bir saat eksik ise numune iyi olmaz ve pwm ayarı doğru olmaz. Her saniye ekranı yenileyemiyorum.

Örnekleme başladığında. Uc timer0'ı saymaya başlar. Her 256 saat bir kesinti oluşturur. X kaydı artırılır. dolduğunda Y kaydı artırılır ve X 0'a sıfırlanır vb. Sonunda, son bir gps darbesinde sayım durdurulur. Ve şimdi ve sadece şimdi ekranı güncelleyebilir ve pwm hesaplaması için biraz matematik yapabilirim.

Bunu bilerek, zamanı veya diğerlerini okumak ve görüntülemek için sadece 25, 6 bize (kesmeden önce 256 saat) sahibim. Bu imkansız. Bir kesinti 2 değil, buff yapılabilir. 1000 saniye sonra zamanı yenileyebilirim… ama zamanı 15, 16 dakika aralıklarla görmek pratik olmaz. Zamanı bilmek için saatim, saatim, cep telefonum var:) 10Mhz referans yapıyorum. Saat değil.

Sahip olduğum başka bir problem, bazı avr talimatlarının 2 döngüsü var. rjmp talimatı dahil. Bu, ilk veya son gps sinyalinin 2 döngü talimatıyla aynı anda gelmesi durumunda, uC'nin bir saati kaçıracağı anlamına gelir. Çünkü uC, kesmeye başlamadan önce talimatı bitirecektir. Böylece sayaç bir döngü sonra başlayacak veya duracaktır. Yani bir bekleme döngüsü yapamam… Ama aslında başka seçeneğim yok. Bir yerde döngüye ihtiyacım vardı!! Bu yüzden rjmp ve nop (bu hiçbir şey yapmaz) talimatını kullanıyorum. Nop, tek döngülü bir talimattır. Atmega48'e bir rjmp için 400 nop talimatı koydum. 2000, atmega88 ve atmega328p versiyonunda. Bu nedenle, rjmp talimatında ilk veya son darbeye gelme şansı daha azdır. Ama evet bu mümkün ve bu olursa, bu hata bir sonraki örneklemede düzeltilecektir.

Ekran isteğe bağlıdır. Devreyi sadece uC, OCXO ve low-pass filtre (direnç kondansatör) ile yapabilir, açıp bekleyin. 1 saat sonra kabul edilebilir bir frekansa sahip olacaksınız. Ancak 6. aşamaya ulaşmak birkaç saat sürer.

Pwm 16 bittir. 65535 adım. 5v/65535 = 76, 295 uV

OCXO varyasyonu 2Hz'e 1V'dir. 1v/76, 295uV = 2 hz için 13107 adım. 2/13107 = 152.59uHz, adım adım pwm

Faz 5, pwm'yi 3 ile değiştiriyor, faz 6 ise 2. adım… Neden 3 ? çünkü 3 frekansı 15 dakika ölçeğinde 0,000, 000, 000, 4 değiştiriyor. ve 4 benim algoritmamdaki sihirli sayım. Örneğin 1. fazda ise ilk bulunan frekans 10.000, 003Mhz'dir. 0, 000, 000,4 adım aşağı indiriyorum.

Çok büyük adım 10.000003'ten 10.000001'e ve 9,999998Hz'den sonra geçebilir. Hedefi kaçırıyorum.

0, 0000004 ile. 0, 1'den daha hızlı ve bir sayıyı atlamayacağımdan daha eminim. Ve bunun gibi. Aynısını 10 saniye, 60 saniye ve 200s fazı ve 900s ile yapıyorum. 1000s çalışma modudur ve 2'lik bir pwm adımı kullanın

Lütfen 5. aşamanın elde edilmesinin daha uzun olduğunu unutmayın. 4 ile 5 arasındaki boşluk daha büyüktür. Ancak 5'ten 6'ya daha hızlı geçmek yardımcı olur.

Faz 6 tam olarak 10 milyar saydığında, pwm değerleri eeprom'da kaydedilir. Şimdi koşu moduna geçme zamanı. Bu, 1000 saniyelik numuneyi sayar, ancak yalnızca 2 adımlı pwm ile. Çalışma modunda, gerçek frekans 1000 saniye aralıklarla görüntülenir ve güncellenir. Çalışma modunda sinyal kaybolursa, kendi kendine çalışır duruma geçer. Bu modda pwm değişikliği yok. Sinyal geri geldiğinde, yeniden senkronizasyon için faz 5'e döner.

Eeprom kaydedildikten sonra devrenin fişi çekilirse. Bu, eeprom pwm değeri ile açılışta 5. fazda başlayacaktır.

Eeprom değerini silmek için açılışta butona basmanız yeterlidir. Pwm %50 yüklenecek ve kalibrasyon 1. aşamadan başlayacaktır.

Farklı bir şey denemek için saatlerce geçiyorum, devrenin konfigürasyonu. OP amp, tampon ve diğer çip ile birçok test yaptım. Ve sonunda… aldığım en iyi sonucun buna ihtiyacı yok. Sadece iyi bir kararlı güç kaynağı ve bir miktar filtreleme kapasitörü. Bu yüzden bunu basit tutuyorum.

Adım 1: Parça Satın Alın

Parça Satın Al
Parça Satın Al
Parça Satın Al
Parça Satın Al
Parça Satın Al
Parça Satın Al

Yapılacak ilk şey parçaları satın almak. Çünkü genellikle nakliye çok çok uzundur.

Gps modülü: Bir ublox neo-6m kullanıyorum. Bunu ebay'den aldım. Bir arama yapın, maliyeti yaklaşık 7 ila 10 ABD doları.

Varsayılan olarak, bu alıcıda saniyede 1 darbe etkindir. Hiçbir şey yapmamıza gerek yok.

1 Hertz darbe çıkışı olan herhangi bir gps modülünü kullanabilirsiniz. Sende bir tane var. Bunu kullan!

OCXO: 2 osilatör denedim. Çift fırın stp2187 12v sinüs dalgası çıkışı. Ve bir ISOTEMP 131-100 5V, kare dalga çıkışı. Her ikisi de ebay'deki radioparts16'dan geliyor. Onlardan çok iyi bir hizmet aldım ve fiyatı daha ucuzdu.

AVR: Kod biraz atmega48'e uyuyor. Ama atmega88 veya atmega328p almanızı öneririm. Neredeyse aynı fiyat. Bunu digikey veya ebay'den satın alın. Dip sürümünü kullanıyorum. Yüzeye monte versiyonunu satın alabilirsiniz, ancak dikkat edin, pinler şematik ile aynı değildir.

Lcd ekran: Herhangi bir 4x20 HD44780 uyumlu ekran çalışacaktır. Bil bakalım benimkini nereden aldım:) Evet, birkaç yıl önce ebay'de. Şimdi eskisinden daha pahalı. Ancak 20 ABD dolarının altında kullanılabilir.

Belki yakın gelecekte 2x16 ekran için bir kod yapacağım. Bu ekranlar sadece 4$. Ve seninle benim aramda 2 satırlık bir ekran yeterli olacaktır.

Bir AVR ISP Programlayıcınız olmalıdır. Bir AVR programlamak Arduino gibi değildir. Arduino zaten seri portta iletişim kurmak için programlanmıştır. ISP veya Paralel Yüksek Gerilim Programlayıcı ile yepyeni bir avr programlanmalıdır. Burada isp kullanıyoruz.

Bir 74hc04 veya 74ac0, volt regülatörü 7812 ve 7805, dirençler, kapasitör…. digikey, ebay

2. Adım: İşte Şematik ve Gpsdo_YT_v1_0.hex

Image
Image
İşte Şematik ve Gpsdo_YT_v1_0.hex
İşte Şematik ve Gpsdo_YT_v1_0.hex
İşte Şematik ve Gpsdo_YT_v1_0.hex
İşte Şematik ve Gpsdo_YT_v1_0.hex

Bu projeyi gerçekleştirmek için ihtiyacınız olan tek şeyin şematik olduğunu düşünüyorum. Dilerseniz dağlama yöntemiyle bakır kaplı bir tahta veya sadece delikli bir tahta kullanabilirsiniz.

İstediğiniz kutuyu kullanabilirsiniz ama ben metal kutu öneririm. Ya da sadece benimki gibi eğlenmek için bir breadboard üzerinde:)

Projemi bir kutuya koymak için anten uzantısı ve bnc konektörü bekliyorum.

Doğru sigorta bitini seçmelisiniz. Harici osilatörün seçili olduğundan emin olun. Harici Osilatör ile ilgili sorun yaşıyorsanız, Harici Kristal'i deneyin. Ve low.ckdiv8 saati işaretlenmemiş. Resmi görmek. Dikkat edin, harici saat bittiği zaman, kodu programlamak veya çalıştırmak için harici bir saat sağlamanız gerekir. Başka bir deyişle, Osilatörü xtal1 pinine bağlayın.

Bu arada… aynı kodu 1 saniyelik kapılı bir frekans sayacı yapmak için kullanabilirsiniz. Sadece xtal1 pininde ölçülecek saati girin ve +-1 Hz frekans sayıcıya sahip olacaksınız.

Yeni şeyler buldukça projeyi güncelleyeceğim.

Bu arada proje ilginizi çekiyorsa benden önce başlayıp bitirecek kadar malzemeniz var.

2 video yükledim, birinci aşamayı ve sonuncuyu görebilirsiniz.

Herhangi bir sorunuz veya yorumunuz için hazırım. Teşekkürler.

26 Şubat 2017…. Sürüm 1.1 mevcut.

-atmega48 artık desteklenmiyor. Yeterli alan yok.

- Kilitli uydu sayısı eklendi.

-Destek 2x16 lcd. Bir 4x20'niz varsa, siz de çalışacaktır. Ancak son 2 satır hiçbir şey göstermeyecek.

Adım 3: Eeprom'da oturum açar

Eeprom'da Günlükler
Eeprom'da Günlükler

İşte birkaç saatlik çalışma süresinden sonra eeprom dökümü. Bunun nasıl okunacağını açıklayacağım. Yine kolay:)

00 adresinde 01 kayıtlı pwm değeridir. Faz 5 9 milyar sayıldığında, sayaç tam olarak 10 milyara ulaştığında pwm değeri güncellenir.

Aşama 5'e gelir gelmez tüm sayımlar pwm değerinden sonra eeprom'da saklanır. 02 adresinden başlayın, 03'ten sonra vb.

Bu örnek benim 5 voltluk ocxo'mdan geldi. 65536'da 0x9A73 = 39539 ondalık pwm değerini okuyabiliyoruz. = 60, %33 veya 3.0165 Volt.

Yani 00:01 adresi 0x9A73

Daha sonra 03'ü okuyabilirsiniz. 9.000.000.003 için Pwm 3 azaldı çünkü henüz 5. aşamadayız

10, 000, 000.000 pwm kalmak için 00'a dokunulmaz ve çalışma moduna geçiyoruz (faz 6)

10, 000, 0000.002 için 02 Bu durumda pwm değeri 2'den düşürülür.

10, 000, 000.001 pwm değeri için 01 2'den düşürüldü

10, 000, 000.001 pwm değeri için 01 tekrar 2'den düşürüldü

10, 000, 000.000 pwm kalmak için 00 dokunulmaz

10, 000, 000.000 pwm kalmak için 00 dokunulmaz

10, 000, 000.000 pwm kalmak için 00 dokunulmaz

Artık eeprom'u nasıl okuyacağınızı biliyorsunuz. Her 1000 saniyede bir yeni değer eeprom'a yazılır. Eeprom dolduğunda adres 2'den yeniden başlar.

FF değeri ortalama 9, 999, 999.999

Bu döküm ile, herhangi bir LCD ekran olmadan doğruluğu takip edebilirsiniz.

Eeprom dosyasını bir ISP programcısı ile atabilirsiniz.

Umarım yeterince bilgi vermişimdir. Değilse, bana bildirin. Tavsiye, hata, herhangi bir şey.

Yannick

Önerilen: