Tam olarak 31,891,269,116 µHz'de çalışan küçük bir osilatörün çalışmasını nasıl sağlarım?


15

Mars zamanında çalışan Arduino için bir RTC modülü kurmak istiyorum. Dönüşüm faktörü 1.0274912510 Dünya saniyeden 1 Mars saniyesine.

Bu programlı bir normal RTC modülüne bağlı bir Arduino Uno üzerinde sabit nokta matematik kullanarak <2 saniyelik bir çözünürlükle (tam olarak ideal değil, 300 ms doğruluk gibi bir şey tercih ederim) başarmayı başarmış olsam da, standart bir 32 kHz saat kristali ile değiştirilebilir, ancak diğer fikirlere açık olacağım (31,891,269,116 µHz) (31.891269116 kHz) bir tür düşük voltajlı osilatörün tam olarak çalışmasının mümkün olup olmadığını merak ediyorum. engelleyici olarak pahalı olmadıkları sürece.)

Bunun nasıl mümkün olabileceği hakkında bir fikrin var mı? Alternatif olarak, her 1.0274912510 saniyede bir sönen bir tür zamanlayıcı da kabul edilebilir.


13
Neden garip birim (µHz?) Bu 31.891 kHz. Yani, muhtemelen 32kHz bir saat kristali arıyorsunuz.
JRE

21
Gereksinimlerinizle başlayın. Olağanüstü bir hassasiyet belirttiniz. Neden? Başka yerlerde Arduino ile istediğinizi yapabilirsiniz. Bunu söylediğim için üzgünüm, ama referans olarak rubidyum veya sezyum saati gibi bir şey kullanmadığınız sürece kendinizle dalga geçiyorsunuz. Bize ne yaptığınızı ve performans gereksinimlerinizin neler olduğunu söyleyin. Türetilen performansınız değil, fonksiyonel gereksinimler budur. Bir başkasına kilitlenmiş bir saat üretmeye çalışıyorsanız, söyleyin ve gereksinimlerinizin (ve toleranslarınızın) ne olduğunu bize bildirin.
WhatRoughBeast

46
Programlama becerisi eksikliğinizi çok pahalı ve özel donanımlarla çözmeye çalışıyorsunuz. Bir Arduino ya da istediğiniz hassasiyeti kolayca 256 bit kayan nokta dönüşümü uygulayabilirsiniz.
boru

14
Bence bu, daha fazla bilgi eklemenin insanların sizi doğru yöne yönlendirmesine neden olmasının harika bir örneği olduğunu düşünüyorum. Brian Drummond'un cevabı şimdi en iyisi ya da en azından bir amatör için ucuz ve uygulanabilir. Aynı zamanda, kesinlik ve doğruluk belirtirken neden dikkatli olmanız gerektiğinin iyi bir örneğidir - bir saatle potansiyel olarak ilgili birçok parametre vardır. Henüz sıcaklık telafisini veya titremesini tartışmadık.
pjc50

11
"Dönüşüm faktörü 1.0274912510 Dünya saniyeden 1 Mars saniyesine." - Mars ve Dünya arasındaki gün uzunluklarındaki farkı bir saniyeliğine karıştırıyor musunuz? Mars bir güneş günün uzunluğu 88 775 s, ya da 1,02749 toprak gün (86, 400 s) 'dir. Diğerinde ve ikincisi, sezyum atomu tarafından yayılan radyasyon tarafından tanımlanır ve hatta hesaplamak için zaman genişlemesi olsa bile,% 2.7'lik farkı elde etmek için yaklaşık 0.23 c'lik hızlara ihtiyacınız olacaktır.
ilkkachu

Yanıtlar:


41

Herkes gibi bir 32768kHz kristal kullanın, ancak bunun yerine -5.08ppm hatası vererek 33669'a bölün. (İsterseniz yükleme kapasitesini düzelterek bunu kaldırabilirsiniz).

O değil kesin ama Mars saati için herhangi Dünya'nın kuvars saat olarak iyi olarak olacak. Yani, Mars ortam sıcaklıkları için sıcaklık telafisi problemlerini göz ardı ederek, Marslı tedarikçileri bulamazsanız, saat kristallerinin çoğu sadece Dünya kullanımı için kesilebilir.

Bölmeyi yapmak için bir MSP430'daki sayaç zamanlayıcı çevre birimlerini kullanırım ve (standart bir kuvars mekanik saat hareketi sürdüğünüzü varsayarak) kabaca yapabileceğiniz orijinal zamanlamaları takip ederek her saniye çıkış pimlerinde bipolar 30ms darbeleri üreteceğim osiloskop üzerinde ölçüm.

Arduino veya benzeri işi yapacak, ancak MSP, LF osilatörü çalışırken 1uA altında tüketerek darbeler arasında uyuyabilir. İşte bir saat için kaynak kodu ve PCB ile örnek bir tasarım - şimdiye kadar sadece Dünya zamanı, ancak muhtemelen bir sabit değiştirilerek düzeltilebilir.


1
Teşekkür ederim! Diğer geri bildirimlere dayanarak, bunun atomik saatler alanına girmek zorunda kalmadan en uygun seçenek gibi geldiğini düşünüyorum, bu yüzden sorumun çözümü olarak seçtim. Bağlantı kurduğunuz tasarımı da özellikle takdir ediyorum.
renegadeds

Verdiğin önemli rakamlar olacaktır unutmayın değil , standart bir RTC kristal ile karşılanmalıdır. Matematikteki 5ppm hatası muhtemelen kristal toleransından daha az olacaktır.
user2943160

6
@ user2943160 Eğer iyi bir referansınız varsa, ilk kırpmayla 1 ppm'ye kadar vurabilirsiniz - birkaç yıl boyunca birkaç ppm kayma ve (çatal kristallerini ayarlamak için garip bir şekilde) sıcaklıkla parabolik bir varyans olacaktır. Evimdeki tüm ucuz kuvars saatler farklı oranlarda gidiyor, muhtemelen fabrikada hiç kesilmiyorlardı ve sıcaklık dengelemeli sarkaçlı saatten çok daha iyi değiller.
Brian Drummond

+1 sadece "Marslı tedarikçiler" için.
Olin Lathrop

41

Brian Drummond'un önerisinden daha iyisini yapabilirsiniz. Osilatörünüzün sistemdeki en büyük hata kaynağı olduğu doğru olsa da, yapmamak için yeterince kolay olduğunda ek sistematik hata eklemek için hiçbir neden yoktur.

Zamanlayıcı aralığınızı 33668 kenelere ayarlayın, 0'dan bir sayaç başlatın ve her zamanlayıcı kesintisinde sayacı 6754 arttırın.

Artıştan sonra, sayaç> = 8105 ise, daha sonra 8105'i çıkarın ve sonraki saniye için zamanlayıcı aralığını 33669 kenelere ayarlayın.

Aksi takdirde, sayacı yalnız bırakın ve sonraki saniye için zamanlayıcı aralığını 33668'e ayarlayın.

Bu size (mükemmel bir 32.768kHz kristal olduğu varsayılarak) ortalama bir aralık verir.

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

saniye (1.0274963378906 saniye yerine, (milyonda yaklaşık 5 parça hata). Bu, saatinizin uzun vadeli doğruluğunun gerçekten osilatörün doğruluğuna bağlı olacağı anlamına gelir; matematikten kaynaklanan hata, yılda bir hatadan daha az hataya neden olacaktır. Herhangi uzunluğu rağmen tek saniyede 25ppm kadar göreceli bir hata olacaktır, üzerinde daha uzun ve daha uzun ortalama aralıkları hata kaybolur.

Bu, Bresenham'ın zaman işleyişine uygulanan algoritmasıdır ve 6754/8105 fraksiyonu aşağıdaki gibi bulundu:

32768 * 1.027491251 = 33668.833312768

33668.833312768 için kesin devam eden fraksiyon [33668; 1, 4, 1, 1349, 1, 7].

Son terimi düşürmek, tüm parçalara 16 bite tam olarak uyan 33668 + 6754/8105 değerini verir.


16

10-1010-14


Mümkünse pahalı donanımlardan kaçınmayı umuyordum. Şu anda bunu düzenli bir RTC modülü ve bir Arduino ile gerçekleştiriyorum ve 1000ms ila 1027.4912510ms dönüşümü yapabiliyorum, ancak sadece kabaca 1-2 saniyelik bir çözünürlüğe sahibim, yani kendi kendini düzeltir, ancak çok hassas değil .
renegadeds

12
@renegadeds sonra sorunuzun hangi hassasiyetin kabul edilebilir olduğunu açıkça belirtmelisiniz. Ve lütfen bir bağlam sağlayın: tek bir [arduino] etiketi, yüksek hassasiyetli bir laboratuvar standı oluşturmamanız için iyi bir ipucu olacaktır.
Dmitry Grigoryev

1
Kaydetti, soruyu güncelledim ve Arduino etiketini ekledim.
renegadeds

15

10MHz'de bir rubidyum veya başka bir atomik referans saati, 100MHz vermek için belki bir PLL ile yapılabilir ve daha sonra 0.001Hz çözünürlük vermek için ~ 36 bit faz akümülatörü ile sayılabilir. İkincisi küçük bir FPGA ile yapılabilir.

Doğrudan Dijital Sentez (DDS) yöntemlerini okuyabilirsiniz. DDS yapan yongalar vardır, ancak bu kadar geniş bir bit genişliğine sahip olmayabilir.

Rubidyum saat modülleri artık piyasada veya Microsemi gibi üreticilerden temin edilebilir.


7

"Pahalı" tanımlamazsınız, bu yüzden bu karanlıkta bir çekimdir.

Ticari olarak (eBay dahil) 10 MHz jeneratör ile başlayın. Rubidyum seçim için, ancak ne kadar doğruluk elde ederseniz edin performansınızı ayarlar.

Şimdi 28 bit uzunluğunda programlanabilir bir bölücü oluşturun. 10 MHz'de 74HC CMOS mantığıyla kurtulabilirsiniz, ancak hızlı taşıma yapılandırması kullanmanız gerekir. Çıktı ayrıca, bit 29'u sağlayan iki flip-flop ile bir bölünmeyi tetikler.

Bölücü, bit 29'un durumuna bağlı olarak 10.274.912 veya 10.274.913 oranında çalışabilir. Mükemmel bir 10 MHz giriş için, bit 28 için etkin çıkış süresi yaklaşık 1 ppb veya yaklaşık 30 doğru olan 1.02749125 saniye olacaktır. msn / yıl. Elbette daha az hassas bir girdi daha az hassas bir çıktı üretecektir.

Bataklık standart 74HC161'leri kullanarak bunu 8 IC ile yapabilirsiniz ve eğer dikkatli olursanız, zemin sistemini güçlendirmek konusunda çok dikkatli olmak isteseniz de standart bir prototip şerit kartı kullanabilirsiniz. Perfboard daha ucuz, daha kompakt ve daha dayanıklı olurdu, ancak bağlantıları lehimlemeniz gerektiğinden kablolama daha az uygun olacaktır. Daha sonra elektronik sınıf RTV (donanım mağazasında aldığınız RTV değil) gibi bir şeye, osilatörü saymadan 2 x 2 x 1/2 inç aralığında son bir modül boyutu için kaplayabilirsiniz.

DÜZENLE

"Normal" RTC'lere bağlı performans standardınızın aslında 1 sn / gün doğruluk aralığında olduğunu ve bu yaklaşımdan 30 kat daha kötü olduğunu unutmayın. Yani, ilk önce, bit 29 aşamasını ortadan kaldırabilir veya alternatif olarak 10 MHz'inizi 5 MHz'e bölebilir ve 5.137.456 oranını kullanabilirsiniz. Sayaçlardaki bu düşük saat hızı, 10 MHz'de gerekli olacak hızlı taşımayı önleyerek daha basit bir taşıma yapısına izin verecektir. Mükemmel bir saat için hassasiyetiniz 60 milisaniye / yıl civarındadır.

DAHA FAZLA DÜZENLEME

EBay'e hızlı bir bakış, 20 doların altında çok sayıda 10 MHz OCXO gösterir. Bunlar tipik olarak 1 ppb veya daha iyi stabilitelere sahip olacaktır, 0.2 ppb oldukça yaygın bir spesifikasyondur. Bunlardan birini alın ve iyi durumda olmalısınız. Gerçek çıkış frekansını belirlemek için oldukça yüksek çözünürlüklü bir frekans / dönem ölçer ödünç almak ve ardından bölme oranını eşleştirmek için ayarlamak istersiniz.


Kabul edildi ve OCXO güç bütçesinde olmasa bile, bir TCXO bir saat kristali üzerinde hala gelişebilir.
ocaklar

4

"Tabaka 1" saatler, 10-11Kullanılmış satın almadığınız sürece ~ 250 $ VC-OCXO'larda (örneğin Vectron) kullanılan SC kesilmiş kristaller. Daha sonra WWV, VLF, GPS 10MHz veya 1pps saat gibi küresel saatlerle senkronize etmek için ayarlanarak10-14Atomik saatler "3 uyduya kilitli." Ardından,10-11 hata.

Frekansınız gibi başka bir f yapmak için, 1pps'nin% 2.07'lik bir ofsetini gerektirir, bu nedenle bu, bir saat kristalini 10-6 istikrar.

Bazı GPS birimlerinden 10MHz gibi bir referans oranını türetmek için bir "kesir N ​​synth" tipi PLL kullanılır.

Bir TCXO osilatörü 1 ppm'lik bir stabiliteye sahipse, sadece bundan biraz daha fazla ayarlanabilir ve 1 pps veya 1.0274912510 Hz'den% 2.07 ofset değil, bu nedenle kesirli N çip (ler) e sahip bir PLL bunu yapmanın bir yoludur. bir VC-OCXO veya ayarlanmış OCXO mekanik kapak.

katma - MAR zamanında 1pps üretmek için, bölünme oranı 5 tamsayı ve 5 basamaklı bir kalıntı kullanılarak 26.337.44856'dır.

  • Xtal'ı 0.01 ppm'ye ayarlayabiliyorsanız, Tempco genellikle MEM'ler değil, bazı XTALS için vücut ısısı çevresinde genellikle sıfır olduğu için ~ 30'C'de bir mikro fırın yapılmadığı sürece, genellikle sadece 1 ppm'ye kadar stabil olacaktır. Vcc ve sıcaklık 0.1 ° C içinde sabit değilse, 0.01 ppm'den daha iyi kalıntı hatasını düzeltmeye çalışan herhangi bir şey imkansızdır, 0.1ppm bile zor kısa süreli ve uzun süreli yaşlanma yılda en az 1 ppm olacaktır.

  • Bu nedenle teoride, 1ppm Dünya zamanını ayarlamak için bir GPS'den kalibre edilmiş 1ppm saatiniz varsa, artık için daha iyi doğruluk düzeltmesi beklemek imkansız olacaktır.

  • Saniyede bölücünün kalıntı hata değeri. 44856/100000 (+26,337)

  • 44856'yı ikiliye dönüştürme = 1010111100111000
  • Bu, / 44856 ve 45857 arasında geçiş yapmak için bir kalıntı sayacına ihtiyaç duyar

  • Bu kalıntı bölümünü ikili kalıntı sayısını 8 bite keserek, MSB LSB olacak şekilde bitleri döndürerek yaparız.

  • 10101111 11110101 olur

  • Her saniye 11110101'den bir kalan sayaç ve burada her "n" bit konumu = 1, bölme tamsayı oranının 44856 yerine 45857 olduğu ikili n ^ 2 sayım değeridir. LSB = 1 olduğu için, her 2 sayımın 101 saniye sonra bölücü seçimi sonraki 1pps sayısı için değiştirilir. Bu, sonraki saniye için hangi bölücünün kullanılacağını seçmek için tekrarlanır, daha sonra imleç sona erene ve sonraki 1pps dünya saatini bekleyene kadar imleci arttırır.

  • Bu işlem, bu döndürülmüş ikili tortunun veya 10101111> 11110101 = 245 saniyenin tüm sayımı için tekrarlanır, böylece her saniyede 245 saniyelik bir döngüde yapılan düzeltmelerle 1 saniyelik Mars zamanının kesirli bir N synth bölücüsü oluşturulur. uzun vadede.

-saat için kayan nokta bölücü oranı daha kolaydır.


2

İkili kesirleri kullanarak, donanımı hiç değiştirmeden (daha kararlı bir referans frekansı isteyebilirsiniz), bunu yazılımda oldukça önemsiz bir şekilde çözebilirsiniz ve bunu milisaniye çözünürlük verecek ve kolayca ücretsiz hale getirilebilecek şekilde yapabilirsiniz. Atom saati de dahil olmak üzere referans verebileceğiniz herhangi bir kaynağın temel doğruluğunu görmenizi sağlayacak kümülatif dönüşüm hataları.

Yapacağınız şey, çok geniş bir kayıtta birikmek için zamanlayıcı kesintinizi değiştirmek ve her kesmede, bir Dünya milisaniyesinin "Mars milisaniyesine" oranının tam olarak temsil edildiği oldukça uzun bir değer eklemek.

Diyelim ki dönüşüm için 32 bit çözünürlük istediğinizi iddia edelim. 64 bitlik bir akümülatör kullanabilirsiniz, en düşük 32 bit kesiri temsil eder. Yapacağınız şey, dönüşüm faktörünü temsil eden 2 ^ 32'den biraz daha düşük olan uygun değeri bulmaktır. Dünya milisaniye kesintisi her tetiklendiğinde, bu değeri akümülatöre eklersiniz. Saati sorgulamak istediğinizde, geçen 32 milisaniyenin tamamı olan üst 32 biti döndürürsünüz, alt 32 bit ise yuvarlama hatasını önlemek için sadece dahili olarak korunur.

Bunun gibi uzun ikili kesirler kullanmak, istediğiniz kadar doğrulukta bir dönüşüm gerçekleştirmenizi sağlar. 32 bit, kesir için neredeyse kesinlikle çok uzun, milisaniyenin tamamı için 32 bit çok kısa olabilir, ancak istediğiniz gibi ayarlayabilirsiniz.

Bu arada, uzun bir kayıtta biriken ancak sadece bazı en önemli bitleri bildiren bu teknik, doğrudan dijital sentezin nasıl son derece yüksek frekans çözünürlüğü üretebileceğidir.

Bölücünün oranını 8 veya 16 MHz sistem saatinden milisaniye kesintiye çevirerek ve bir "Mars milisaniye" aralığına yaklaştırarak dönüşümün bir bölümünü de yapabilirsiniz. Özellikle ucuz bir kristalden daha doğru bir şey istiyorsanız, bir GPS tarafından veya daha doğrudan bir atom saati ile disiplinli bir geleneksel 10 MHz referansı ile uğraşıyor olabilirsiniz, böylece normal AVR 8/16 MHz saat kaynağı yerine kullanılabilir ve yeniden hesaplayabilirsiniz buna göre bölücü oranları.


0

Doğrudan dijital sentez (DDS) veya Sayısal Kontrollü Osilatör yaklaşımı, saat frekansına bağımlı olmadan çıkış frekansının istenen çözünürlük seviyesini elde etmenin oldukça basit bir yoludur.

Bu yaklaşımda yüksek çözünürlüklü faz akümülatörünüz var. Etrafınızdaki her döngü, aynı zamanda iyi çözünürlüğe sahip bir faz artışı ekler. Çıktı akümülatörün en yüksek bitidir.

Bir kare dalga vermek için kullanılırken, kenarlar yalnızca giriş saati (veya yazılım döngü hızı) ile değişebilir, bu nedenle kenar olması gerektiği yerden titrer, ancak zamanla biriken bir hata yoktur - çözünürlüğü aşağıdaki gibi yapabilirsiniz istediğiniz kadar yüksek.

Bunu yazılımda oldukça kolay bir şekilde yapabilirsiniz (örneğin AVR'de) ve bazı mikrolar artık NCO donanımına sahiptir. http://ww1.microchip.com/downloads/en/AppNotes/90003131A.pdf Küçük bir PIC bunu 20bit (1ppm) çözünürlükte, 32kHz xtal'den veya doğru 10MHz fırından yapabilir.


0

İstediğiniz frekansın tamsayı katında çalışan bir fırınlanmış özel kuvars kristali elde etmeye bakın. Standart bir frekanstan daha pahalıya mal olmazlar. Websearch "özel kuvars kristali"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.