Jak mógłbym zacząć od małego oscylatora pracującego z dokładnością 31 891,269,116 µHz?

15

Chcę zbudować moduł RTC dla Arduino, który działa na czas Marsa. Współczynnik konwersji wynosi 1,0274912510 sekund ziemskich na 1 sekundę marsjańską.

Chociaż udało mi się to osiągnąć programowo z rozdzielczością <2 sekundy (co nie jest idealnie idealne, wolałbym około 300 ms dokładności) za pomocą matematyki stałopunktowej na Arduino Uno podłączonym do zwykłego modułu RTC, jestem zastanawiam się, czy byłoby możliwe, aby jakiś oscylator niskiego napięcia działał dokładnie z 31 891,269,116 µHz (31,891269116 kHz), który mniej więcej byłby wymienny ze standardowym kryształem zegara 32 kHz (jednak byłbym otwarty na inne pomysły, więc o ile nie są one zbyt drogie).

Wszelkie pomysły, jak to możliwe? Alternatywnie, pewien rodzaj timera, który uruchamia się raz na 1,0274912510 sekund, byłby również dopuszczalny.

renegaci
źródło
13
Dlaczego dziwna jednostka (µHz?) To 31,891 kHz. Prawdopodobnie szukasz kryształu zegarka 32 kHz.
JRE
21
Zacznij od swoich wymagań. Podałeś niezwykłą precyzję. Dlaczego? Gdzie indziej mówisz, że możesz robić co chcesz z Arduino. Przykro mi to mówić, ale sam sobie żartujesz, chyba że używasz czegoś takiego jak zegar rubidowy lub cezowy. Powiedz nam, co robisz i jakie są Twoje wymagania dotyczące wydajności. To wymagania funkcjonalne, a nie twoja wydajność. Jeśli próbujesz stworzyć zegar, który jest zablokowany na innym, powiedz tak i daj nam znać, jakie są twoje wymagania (i tolerancje).
WhatRoughBeast
46
Próbujesz rozwiązać problem braku umiejętności programowania przy pomocy bardzo drogiego i niestandardowego sprzętu. Możesz łatwo wdrożyć 256-bitową konwersję zmiennoprzecinkową w Arduino lub dowolną precyzję.
rura
14
Myślę, że to świetny przykład tego, dlaczego podanie większej ilości informacji z góry pozwala ludziom skierować Cię we właściwym kierunku. Odpowiedź Briana Drummonda jest teraz najlepsza, a przynajmniej tania i wykonalna dla amatora. To także dobry przykład tego, dlaczego należy zachować ostrożność przy określaniu precyzji i dokładności - istnieje wiele parametrów, które potencjalnie mogą mieć znaczenie dla zegara. Nie dyskutowaliśmy jeszcze o kompensacji temperaturowej ani o wahaniach.
pjc50,
11
„Współczynnik konwersji wynosi 1,0274912510 sekund ziemskich na 1 sekundę marsjańską”. - czy mylisz różnicę długości dnia między Marsem a Ziemią z długością sekundy? Długość słonecznego dnia na Marsie wynosi 88 775 S lub 1.02749 ziemskich dni (z 86 400 s). Z drugiej i drugiej jest zdefiniowane przez promieniowanie emitowane przez atom cezu, a nawet biorąc pod uwagę rozszerzenie czasu, potrzebujesz prędkości około 0,23 c, aby uzyskać różnicę 2,7%.
ilkkachu

Odpowiedzi:

41

Użyj kryształu 32768 kHz jak wszyscy inni, ale zamiast tego podziel przez 33669, dając błąd -5,08ppm. (Możesz to usunąć, przycinając pojemność ładowania, jeśli chcesz).

Nie jest precyzyjny, ale dla zegara Marsa będzie tak dobry, jak każdy zegar kwarcowy Ziemi. Oznacza to, że ignorując problemy z kompensacją temperatury dla temperatur otoczenia Marsa, większość kryształów zegarków jest dostępna tylko do cięcia na Ziemię, chyba że można znaleźć dostawców marsjańskich ...

Używałbym urządzeń peryferyjnych licznika w MSP430, aby wykonać podział, i (zakładając, że napędzasz standardowy kwarcowy mechanizm zegara mechanicznego) generuję dwubiegunowe impulsy 30 ms na jego pinach wyjściowych co sekundę, mniej więcej zgodnie z oryginalnymi taktowaniami, które możesz zmierzyć na oscyloskopie.

Arduino lub podobny wykona zadanie, ale MSP można uśpić między impulsami, zużywając poniżej 1uA przy pracującym oscylatorze LF. Oto przykładowy projekt z kodem źródłowym i płytką drukowaną do zegarka - jak dotąd tylko czas ziemski, choć prawdopodobnie można to naprawić, zmieniając stałą.

Brian Drummond
źródło
1
Dziękuję Ci! Opierając się na innych opiniach, myślę, że wygląda to na najbardziej opłacalną opcję bez konieczności zagłębiania się w sferę zegarów atomowych, więc wybrałem ją jako rozwiązanie mojego pytania. Szczególnie doceniam projekt, który połączyłeś.
renegadeds
Pamiętaj, że podane przez ciebie znaczące liczby nie zostaną spełnione ze standardowym kryształem RTC. Błąd 5ppm z matematyki będzie prawdopodobnie mniejszy niż tolerancja kryształu.
user2943160,
6
@ user2943160, jeśli masz dobre referencje, możesz osiągnąć około 1ppm przy wstępnym przycinaniu - w ciągu kilku lat nastąpi kilka ppm dryfu i (co dziwne w przypadku strojenia kryształów widelca) paraboliczna wariancja z temperaturą. Wszystkie tanie zegary kwarcowe w moim domu mają różne stawki, prawdopodobnie nigdy nie zostały przycięte w fabryce i nie są o wiele lepsze niż zegar wahadłowy z kompensacją temperatury.
Brian Drummond
+1 tylko dla „dostawców marsjańskich”.
Olin Lathrop,
41

Możesz zrobić lepiej niż sugestia Briana Drummonda. Chociaż może być prawdą, że Twój oscylator jest największym źródłem błędów w systemie, nie ma powodu, aby dodawać dodatkowy błąd systematyczny, gdy nie jest to łatwe.

Ustaw interwał timera na 33668 tyknięć, uruchom licznik od 0, a przy każdym przerwaniu timera zwiększ licznik o 6754.

Jeśli po zwiększeniu licznik wynosi> = 8105, odejmij 8105 i ustaw odstęp czasowy dla następnej sekundy na 33669 tyknięć.

W przeciwnym razie pozostaw licznik w spokoju i ustaw interwał timera na następną sekundę na 33668.

To da ci (przy założeniu idealnego kryształu 32,768 kHz) średni odstęp

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

sekund (mniej niż jeden błąd części na bilion w stosunku do 1,0274912510), zamiast 1,0274963378906 sekund (błąd prawie 5 części na milion). Oznacza to, że długoterminowa dokładność zegara będzie naprawdę zależeć od dokładności oscylatora; błąd wynikający z matematyki spowoduje znacznie mniej niż jeden błąd błędu rocznie. Chociaż długość dowolnego singla sekundy będzie miała błąd względny do 25 ppm, to w coraz dłuższych odstępach czasu błąd znika.

To jest algorytm Bresenhama zastosowany do pomiaru czasu, a frakcja 6754/8105 została znaleziona w następujący sposób:

32768 * 1,027491251 = 33668,833312768

Dokładna kontynuowana część dla 33668.833312768 wynosi [33668; 1, 4, 1, 1349, 1, 7].

Porzucenie ostatniego terminu daje przybliżoną wartość 33668 + 6754/8105, która zawiera wszystkie części, które pasują do 16 bitów.

Hobbs
źródło
16

10101014

Dmitrij Grigoriew
źródło
Miałem nadzieję uniknąć drogiego sprzętu, jeśli to możliwe. W tej chwili osiągam to dzięki zwykłemu modułowi RTC i Arduino, i jestem w stanie wykonać konwersję 1000ms do 1027.4912510ms, ale mam tylko około 1-2 sekundową rozdzielczość, co oznacza, że ​​jest ono samokorekcyjne, ale nie jest strasznie precyzyjne .
renegadeds
12
@renegadeds, powinieneś wyjaśnić w swoim pytaniu, jaka precyzja jest dopuszczalna. I proszę podać kontekst: pojedynczy tag [arduino] byłby dobrą wskazówką, że nie budujesz precyzyjnego stanowiska laboratoryjnego.
Dmitrij Grigoryev
1
Zauważyłem, że zaktualizowałem pytanie i dodałem tag Arduino.
renegadeds
15

Można to zrobić za pomocą rubidowego lub innego atomowego zegara odniesienia przy 10 MHz, być może PLL, aby dać (powiedzmy) 100 MHz, a następnie zliczyć z ~ 36 bitowym akumulatorem fazowym, aby uzyskać rozdzielczość 0,001 Hz. To ostatnie można zrobić za pomocą małego FPGA.

Możesz przeczytać o metodach bezpośredniej syntezy cyfrowej (DDS). Są układy, które wykonują DDS, ale może nie o tak dużej szerokości bitów.

Moduły zegara Rubidium są dostępne na rynku nadwyżek lub od producentów takich jak Microsemi.

Spehro Pefhany
źródło
7

Nie definiujesz słowa „drogi”, więc jest to coś w rodzaju ujęcia w ciemności.

Zacznij od komercyjnego (w tym na eBayu) generatora 10 MHz. Rubidium do wyboru, ale bez względu na to, jaką dokładność możesz uzyskać, określasz swoją wydajność.

Teraz stwórz programowalny dzielnik o długości 28 bitów. Przy 10 MHz można uniknąć logiki CMOS 74HC, ale musisz użyć konfiguracji szybkiego przenoszenia. Wyjście wyzwala również podział przez dwa przerzutniki, co zapewnia bit 29.

Dzielnik może działać w stosunku 10 274 ​​912 lub 10 274 ​​913, w zależności od stanu bitu 29. Dla idealnego wejścia 10 MHz efektywny okres wyjściowy dla bitu 28 wyniesie wówczas 1,02749125 sekund, co jest w przybliżeniu dokładnością do 1 ppb lub około 30 ms / rok Oczywiście mniej dokładne dane wejściowe spowodują, że dane wyjściowe będą mniej dokładne.

Używając standardowych 74HC161 z torfowiska, możesz to zrobić za pomocą 8 układów scalonych, a jeśli będziesz ostrożny, możesz użyć standardowej płytki prototypowej, chociaż bardzo ostrożnie podchodzisz do rozbudowywania systemu naziemnego. Perfboard byłby tańszy, bardziej kompaktowy i bardziej wytrzymały, ale okablowanie byłoby mniej wygodne, ponieważ trzeba by lutować połączenia. Możesz następnie włożyć go do RTV klasy elektronicznej (NIE RTV, który dostajesz w sklepie ze sprzętem), aby uzyskać ostateczny rozmiar modułu w zakresie 2 x 2 x 1/2 cala, nie licząc oscylatora.

EDYTOWAĆ

Zauważ, że twój standard wydajności, powiązany z „zwykłymi” RTC, w rzeczywistości mieści się w zakresie dokładności 1 s / dzień, co jest 30 razy gorsze niż to podejście. Po pierwsze, możesz pozbyć się stopnia bitów 29 lub alternatywnie podzielić swoje 10 MHz na 5 MHz i zastosować współczynnik 5,137,456. Ta niższa częstotliwość taktowania w licznikach pozwoli na prostszą strukturę przenoszenia, unikając szybkiego przenoszenia, które byłoby konieczne przy 10 MHz. Twoja dokładność wynosi teraz 60 ms / rok dla idealnego zegara.

DALSZA EDYCJA

Szybkie spojrzenie na eBay pokazuje dużą liczbę 10 MHz OCXO za mniej niż 20 dolców. Zazwyczaj mają one stabilność 1 ppb lub lepszą, przy 0,2 ppb dość powszechną specyfikacją. Zdobądź jeden z nich i powinieneś być w dobrej formie. Chcesz pożyczyć miernik częstotliwości / okresu o dość wysokiej rozdzielczości, aby określić rzeczywistą częstotliwość wyjściową, a następnie dopasuj współczynnik podziału, aby dopasować.

WhatRoughBeast
źródło
Zgadzam się, a nawet jeśli OCXO nie mieści się w budżecie mocy, TCXO jest i może ulepszyć kryształ zegarka.
hobbs
4

101110141011

106

PLL typu „ułamkowy syntezator N” służy do wyprowadzania dowolnego stosunku odniesienia, takiego jak 10 MHz z niektórych jednostek GPS.

Jeśli oscylator TCXO ma stabilność 1ppm, można go dostroić tylko nieco więcej, a nie przesunięcie 2,07% od 1 pps lub 1,0274912510 Hz, więc PLL z ułamkowym układem (-ami) N jest jednym ze sposobów, aby to zrobić z VC-OCXO lub tuning mechaniczny OCXO.

dodano - Aby wygenerować 1pps na czas MARs, wówczas współczynnik podziału wynosi 26 337,44856 przy użyciu 5 cyfr całkowitych i reszty 5 cyfr.

  • Jeśli możesz dostroić Xtal do 0,01 ppm, będzie on stabilny zwykle tylko do 1 ppm, chyba że mikrok piekarnik zostanie wykonany w temperaturze ~ 30 ° C, ponieważ Tempco jest zwykle zerowy w pobliżu temperatury ciała dla niektórych XTALS niekoniecznie MEM. O ile Vcc i temperatura nie utrzymają się w granicach 0,1 ° C, nic nie jest w stanie poprawić błędu pozostałości powyżej 0,01 ppm, nawet 0,1 ppm jest trudne w krótkim okresie, a długotrwałe starzenie będzie wynosić co najmniej 1 ppm rocznie.

  • Tak więc teoretycznie, gdybyś miał skalibrowany zegar 1ppm z GPS do dostrojenia 1ppm czasu ziemskiego, nie można oczekiwać lepszej korekcji dokładności dla pozostałości.

  • Wartość błędu pozostałości dzielnika na sekundę wynosi 44856/100000 (+26 337)

  • Konwertowanie 44856 na binarne = 1010111100111000
  • To wymaga licznika pozostałości do przełączania między / 44856 i 45857

  • Dokonujemy tego podziału reszt poprzez obcięcie binarnej liczby reszt do 8 bitów, a następnie obrócenie bitów, aby MSB stał się LSB.

  • 10101111 staje się 11110101

  • Co sekundę licznik reszt z 11110101 i gdzie każda pozycja bitu „n” = 1 jest wartością zliczania w binarnej n ^ 2, gdzie stosunek całkowitej liczby dzielonej wynosi 45857 zamiast 44856. Ponieważ LSB = 1, oznacza to, że każda druga liczba zmienia się do 101 sekund, następnie wybór dzielnika jest przełączany na kolejne zliczanie 1pps. Czynność tę powtarza się, aby wybrać, który dzielnik będzie używany przez następną sekundę, a następnie zwiększaj wskaźnik, aż wskaźnik osiągnie koniec i zaczekaj na następny zegar uziemienia 1pps.

  • Proces ten powtarza się dla całej liczby tej obróconej reszty binarnej lub 10101111> 11110101 = 245 sekund, tak że ułamkowy dzielnik syntezowy N 1 pps czasu Marsa jest tworzony co sekundę z poprawkami wprowadzanymi co 245 sekund cyklu, aby pozostać na czas. na dłuższą metę.

- być może współczynnik dzielnika zmiennoprzecinkowego dla zegara jest łatwiejszy.

Tony Stewart Sunnyskyguy EE75
źródło
2

Możesz dość trywialnie rozwiązać to w oprogramowaniu, nie zmieniając w ogóle sprzętu (choć możesz chcieć bardziej stabilnej częstotliwości odniesienia), używając ułamków binarnych, i możesz to zrobić w sposób, który daje rozdzielczość milisekundową i może być łatwo uwolniony wystarczająco dużo skumulowanych błędów konwersji, aby zobaczyć podstawową dokładność dowolnego źródła, do którego można by się odwoływać, w tym zegara atomowego.

Zmodyfikuj przerwanie czasomierza, aby gromadziło się w bardzo szerokim rejestrze, a do każdego przerwania dodaj dość długą wartość, która jest tak dokładnym odwzorowaniem stosunku milisekundy Ziemi do „milisekundy Marsa”, jak chcesz.

Powiedzmy dla argumentu, że chciałeś 32-bitowej rozdzielczości do konwersji. Możesz użyć 64-bitowego akumulatora, z dolnymi 32 bitami reprezentującymi ułamek. Musisz zrobić, aby znaleźć odpowiednią wartość, nieco mniejszą niż 2 ^ 32, która reprezentuje współczynnik konwersji. Za każdym razem, gdy Twoje milisekundowe przerwanie Ziemi strzela, dodajesz tę wartość do akumulatora. Za każdym razem, gdy chcesz zapytać o zegar, zwracasz górne 32 bity, czyli liczbę pełnych milisekund, które upłynęły, podczas gdy dolne 32 bity są zachowywane tylko wewnętrznie, aby uniknąć błędu zaokrąglania.

Używanie długich ułamków binarnych, takich jak ten, pozwala wykonać konwersję z taką dokładnością, jak chcesz. 32 bity są prawie na pewno za długie na ułamek, podczas gdy 32 bity na całe milisekundy mogą być za krótkie, ale można je dostosować według potrzeb.

Nawiasem mówiąc, ta technika akumulacji w długim rejestrze, ale zgłaszająca tylko pewną liczbę najbardziej znaczących bitów, jest sposobem, w jaki bezpośrednia synteza cyfrowa może wytwarzać bardzo wysoką rozdzielczość częstotliwości.

Można również rozważyć wykonanie części konwersji, zmieniając stosunek dzielnika z zegara systemowego 8 lub 16 MHz na przerwanie milisekundowe, przybliżając go do przedziału „milisekundy Marsa”. Zwłaszcza jeśli chcesz czegoś dokładniejszego niż tani kryształ, możesz mieć do czynienia ze zwykłym źródłem odniesienia 10 MHz dyscyplinowanym przez GPS lub bardziej bezpośrednio przez zegar atomowy, więc możesz zastąpić to zwykłym źródłem zegara AVR 8/16 MHz i przeliczyć go ponownie odpowiednio współczynniki podziału.

Chris Stratton
źródło
0

Metoda bezpośredniej syntezy cyfrowej (DDS) lub oscylatora sterowanego numerycznie jest dość prostym sposobem na uzyskanie dowolnego pożądanego poziomu rozdzielczości częstotliwości wyjściowej bez zależności od częstotliwości taktowania.

W tym podejściu masz akumulator fazowy o wysokiej rozdzielczości. Każda pętla wokół ciebie dodaje przyrost fazowy, który ma również dobrą rozdzielczość. Moc wyjściowa jest najwyższym bitem akumulatora.

Gdy używasz go do nadania fali kwadratowej, krawędzie mogą się zmieniać tylko z zegarem wejściowym (lub częstotliwością pętli programowej), więc krawędzie drgają z miejsca, w którym powinny być, ale z czasem nie ma skumulowanego błędu - możesz zrobić rozdzielczość jako wysoko jak chcesz.

Możesz to zrobić w oprogramowaniu dość łatwo (np. Na AVR), a niektóre mikroskopy mają teraz sprzęt NCO. http://ww1.microchip.com/downloads/en/AppNotes/90003131A.pdf Mały PIC mógłby to zrobić sprzętowo w rozdzielczości 20bitów (1ppm), z xtal 32kHz lub z dokładnego piekarnika 10MHz.

Henry Crun
źródło
0

Zobacz, jak powstaje niestandardowy kryształ kwarcu, który działa przy jakiejś całkowitej wielokrotności żądanej częstotliwości. Nie kosztują dużo więcej niż standardowa częstotliwość. Wyszukiwarka „niestandardowy kryształ kwarcu”

D Kaczka
źródło