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.
Odpowiedzi:
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łą.
źródło
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
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.
źródło
źródło
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.
źródło
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ć.
źródło
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)
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.
źródło
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.
źródło
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.
źródło
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”
źródło