정확히 31,891,269,116 µHz로 작동하는 소형 발진기를 얻으려면 어떻게해야합니까?


15

화성 시간에 실행되는 Arduino 용 RTC 모듈을 구축하려고합니다. 변환 계수는 1.0274912510 지구 초에서 1 화성 초입니다.

정규 RTC 모듈에 연결된 Arduino Uno에서 고정 소수점 수학을 사용하여 <2 초 해상도 (정확히 이상적이지는 않지만 300ms 정확도와 같은 것을 선호합니다)로 프로그래밍 방식 으로이 작업을 수행 할 수 있었지만 어떤 종류의 저전압 발진기가 정확히 31,891,269,116 µHz (31.891269116 kHz)에서 작동하여 표준 32 kHz 클록 크리스털과 교환 할 수 있는지 궁금합니다. 엄청나게 비싸지 않는 한)

이것이 어떻게 가능한지 아는 아이디어가 있습니까? 또는 1.0274912510 초마다 한 번씩 꺼지는 타이머도 허용됩니다.


13
왜 이상한 단위 (µHz?) 31.891 kHz입니다. 따라서 아마도 32kHz 시계 크리스탈을 찾고있을 것입니다.
JRE

21
요구 사항부터 시작하십시오. 탁월한 정밀도를 지정했습니다. 왜? 다른 곳에서는 Arduino로 원하는 것을 할 수 있다고 말합니다. 유감스럽게도 루비듐 또는 세슘 시계와 같은 것을 사용하지 않는 한 농담을하고 있습니다. 지금하고있는 일과 성능 요구 사항을 알려주십시오. 파생 된 성능이 아니라 기능적인 요구 사항입니다. 다른 시계에 고정 된 시계를 생산하려는 경우, 그렇게 말하고 요구 사항 (및 공차)이 무엇인지 알려주십시오.
WhatRoughBeast

46
매우 비싸고 맞춤형 하드웨어로 프로그래밍 기술 부족을 해결하려고합니다. Arduino 또는 원하는 정밀도로 256 비트 부동 소수점 변환을 쉽게 구현할 수 있습니다.
파이프

14
나는 이것이 더 많은 정보를 사전에 포함시켜 사람들이 당신을 올바른 방향으로 안내 할 수있게하는 좋은 예라고 생각합니다. Brian Drummond의 답변은 이제 최고의 답변이거나 적어도 저렴하고 실현 가능한 아마추어입니다. 또한 정밀도와 정확도를 지정할 때주의해야하는 이유에 대한 좋은 예입니다. 클럭과 관련이있는 많은 매개 변수가 있습니다. 온도 보상이나 지터에 대해서는 아직 논의하지 않았습니다.
pjc50

11
"변환 계수는 1.0274912510 지구 초에서 1 화성 초입니다." -화성과 지구의 하루 길이의 차이를 1 초의 길이와 혼동하고 있습니까? 화성의 태양 일길이는 88775 초 또는 1.02749 지구의 날 (86400 초)입니다. 다른 하나와 두 번째는 세슘 원자에 의해 방출되는 방사선에 의해 정의되며 심지어 시간 팽창을 고려하더라도 2.7 %의 차이를 얻으려면 약 0.23 c의 속도가 필요합니다.
ilkkachu

답변:


41

다른 사람들과 마찬가지로 32768kHz 수정을 사용하지만 대신 33669로 나누면 -5.08ppm 오류가 발생합니다. 원하는 경우로드 커패시턴스를 트리밍하여 제거 할 수 있습니다.

그것은 아니다 정확 하지만 화성 시계 것은 어떤 지구 쿼츠 시계 좋은으로 수 있습니다. 즉, 화성 대기 온도에 대한 온도 보상 문제를 무시하고 화성 공급 업체를 찾을 수 없다면 대부분의 시계 결정은 지구 사용을 위해 사용할 수 있습니다.

MSP430의 카운터 타이머 주변 장치를 사용하여 분할을 수행하고 (표준 쿼츠 기계식 클록 이동을 구동한다고 가정 할 때) 대략 1 초마다 출력 핀에서 바이폴라 30ms 펄스를 생성합니다. 오실로스코프에서 측정합니다.

Arduino 또는 이와 유사한 기능이 작동하지만 LF 발진기가 작동하는 상태에서 1uA 미만으로 소비되는 펄스 사이에서 MSP를 슬립 상태로 둘 수 있습니다. 다음 은 시계를위한 소스 코드와 PCB를 사용한 예제 디자인 입니다. 지금까지 지구 시간 만 있었지만 상수를 변경하면 수정 될 수 있습니다.


1
감사합니다! 다른 피드백을 바탕으로, 이것은 원자 시계 영역을 탐구하지 않고도 가장 실용적인 옵션처럼 보이므로 내 질문에 대한 해결책으로 선택했습니다. 또한 당신이 연결 한 디자인에 특히 감사합니다.
재협상 :

당신이 준 중요한 수치 는 표준 RTC 크리스탈과 맞지 않을 것입니다. 수학의 5ppm 오차는 수정 허용 오차보다 작을 수 있습니다.
user2943160

6
@ user2943160 좋은 참조가 있다면 초기 트리밍으로 1ppm 정도를 칠 수 있습니다. 몇 년 동안 몇 가지 ppm 드리프트가 있고 온도에 따라 포물선 분산이 (포드 크 튜닝을 위해 이상하게도) 있습니다. 우리 집의 모든 저렴한 쿼츠 시계는 다른 속도로 가고, 아마도 공장에서 손질되지 않았으며 온도 보상 진자 시계보다 훨씬 좋지 않습니다.
Brian Drummond

"화성 공급 업체"에 대해서만 +1
Olin Lathrop

41

Brian Drummond의 제안보다 더 잘 할 수 있습니다. 오실레이터가 시스템에서 가장 큰 오류의 원인이라는 것은 사실 일 수 있지만, 쉽게 할 수 없을 때 추가적인 시스템 오류를 추가 할 이유는 없습니다.

타이머 간격을 33668 틱으로 설정하고, 카운터를 0에서 시작하고, 타이머가 중단 될 때마다 카운터를 6754 씩 늘리십시오.

증분 후 카운터가> = 8105 인 경우 8105를 빼고 다음 초의 타이머 간격을 33669 틱으로 설정합니다.

그렇지 않으면 카운터를 그대로두고 다음 초 동안 타이머 간격을 33668로 설정하십시오.

이것은 당신에게 (완벽한 32.768kHz 크리스탈 가정)의 평균 간격을 줄 것입니다

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

1.0274963378906 초 (약 백만 분의 1 오류) 대신 초 (1.0274912510에 비해 1 조분의 1 미만의 오류). 즉, 시계의 장기 정확도는 오실레이터의 정확도에 크게 좌우됩니다. 수학으로 인한 오류는 연간 1 틱 미만의 오류를 유발합니다. 1 초의 길이는 최대 25ppm의 상대 오류를 갖지만 더 길고 평균 간격이 길어지면 오류가 사라집니다.

이것은 타임 키핑에 적용된 Bresenham의 알고리즘 이며, 분수 6754/8105는 다음과 같이 발견되었습니다.

32768 * 1.027491251 = 33668.833312768

33668.833312768의 정확한 연속 비율은 [33668; 1, 4, 1, 1349, 1, 7].

마지막 항을 떨어 뜨리면 근사치 인 33668 + 6754/8105가 나오고 16 비트에 깔끔하게 맞는 모든 부분이 있습니다.


16

10101014


가능하다면 값 비싼 하드웨어를 피하고 싶었습니다. 지금은 일반 RTC 모듈과 Arduino를 사용 하여이 작업을 수행하고 있으며 1000ms에서 1027.4912510ms로 변환 할 수는 있지만 대략 1-2 초의 해상도 만 가지고있어 자체 수정이지만 엄청나게 정확하지 않습니다. .
재개 :

12
@renegadeds 그렇다면 귀하의 질문에서 정밀도가 허용되는 것이 무엇인지 분명히해야합니다. 그리고 하나의 [arduino] 태그는 고정밀 실험실 스탠드를 만들지 않는 좋은 힌트가 될 것입니다.
Dmitry Grigoryev

1
질문을 업데이트하고 Arduino 태그를 추가했습니다.
재협상 :

15

10MHz에서 루비듐 또는 기타 원자 기준 클록, 아마도 PLL에 100MHz를 제공하는 PLL을 수행 한 다음 ~ 36 비트 위상 누산기로 카운트하여 0.001Hz 분해능을 얻을 수 있습니다. 후자는 작은 FPGA로 수행 할 수 있습니다.

DDS (Direct Digital Synthesis) 방법을 읽을 수 있습니다. DDS를 수행하는 칩이 있지만 비트 폭이 크지 않을 수 있습니다.

Rubidium 시계 모듈은 잉여 시장 또는 Microsemi와 같은 제조업체에서 구입할 수 있습니다.


7

당신은 "고가"를 정의하지 않기 때문에, 이것은 어둠 속에서 촬영 된 것입니다.

상용 (eBay 포함) 10MHz 생성기로 시작하십시오. 선택을위한 루비듐, 그러나 당신이 얻을 수있는 정확도는 당신의 성능을 설정합니다.

이제 28 비트 길이의 프로그램 가능 분배기를 구축하십시오. 10MHz에서는 74HC CMOS 로직으로 벗어날 수 있지만 빠른 캐리 구성을 사용해야합니다. 또한 출력은 비트 29를 제공하는 2 개의 플립 플롭으로 나누기를 트리거합니다.

분배기는 비트 29의 상태에 따라 10,274,912 또는 10,274,913의 비율로 작동 할 수 있습니다. 완벽한 10MHz 입력의 경우 비트 28의 유효 출력주기는 1.02749125 초이며 대략 1ppb 또는 30 정도입니다. msec / yr 물론 정확도가 떨어지는 입력은 정확도가 떨어지는 출력을 생성합니다.

bog 표준 74HC161을 사용하면 8 개의 IC로이 작업을 수행 할 수 있으며주의를 기울이면 표준 프로토 타입 스트립 보드를 사용할 수 있지만 지상 시스템 강화에 매우주의를 기울여야합니다. 퍼프 보드는 더 저렴하고, 더 작고, 더 튼튼하지만, 배선을 납땜해야하기 때문에 배선이 덜 편리 할 것입니다. 그런 다음 오실레이터를 계산하지 않고 2 x 2 x 1/2 인치 범위의 최종 모듈 크기를 위해 전자 제품 등급 RTV (철물점에서 구입 한 RTV가 아님)와 같은 방식으로 포팅 할 수 있습니다.

편집하다

"일반적인"RTC에 연결된 성능 표준은 실제로 1 초 / 일 정확도 범위에 있으며이 방법보다 30 배 더 나쁩니다. 따라서 먼저 29 비트를 제거하거나 10MHz에서 5MHz로 나누고 5,137,456의 비율을 사용할 수 있습니다. 카운터에서이 낮은 클럭 속도는 더 간단한 캐리 구조를 허용하여 10MHz에서 필요할 빠른 캐리를 피합니다. 완벽한 클럭을 위해 정확도는 현재 60msec / yr 정도입니다.

추가 편집

eBay를 간략히 살펴보면 20 달러 미만의 많은 10MHz OCXO가 표시됩니다. 이들은 일반적으로 1 ppb 이상의 안정성을 가지며 0.2 ppb는 상당히 일반적인 사양입니다. 이것들 중 하나를 얻으면 몸매가 좋아야합니다. 실제 출력 주파수를 결정하기 위해 상당히 높은 해상도의 주파수 /주기 미터를 빌린 다음 나눗셈 비율을 조정하십시오.


동의하며, OCXO가 전력 예산에 속하지 않더라도 TCXO는 여전히 시계 수정을 개선 할 수 있습니다.
hobbs

4

101110141011

106

"fraction N synth"유형 PLL은 일부 GPS 장치에서 10Mhz와 같은 기준의 비율을 도출하는 데 사용됩니다.

TCXO 발진기의 안정성이 1ppm 인 경우 1pps 또는 1.0274912510Hz에서 2.07 % 오프셋이 아닌이 값보다 약간만 튜닝 할 수 있으므로 소수 N 칩이있는 PLL을 사용하여이를 수행 할 수 있습니다. VC-OCXO 또는 기계적 캡 튜닝 된 OCXO.

추가 -MAR 시간에 1pps를 생성하기 위해 5 자리 정수와 5 자리 잔차를 사용하여 나누기 비율은 26,337.44856입니다.

  • Xtal을 0.01ppm으로 조정할 수 있다면 ~ 30 ℃에서 마이크로 오븐을 만들지 않는 한 일반적으로 1ppm까지 안정적입니다. Tempco가 일반적으로 MEM이 아닌 일부 XTAL에 대해 체온 주위에 null이기 때문입니다. Vcc와 온도가 0.1 ℃ 내에 머 무르지 않는 한, 0.01ppm보다 우수한 잔류 오차를 교정하려는 것은 불가능합니다. 0.1ppm조차 단단하고 장기적인 노화는 적어도 1ppm입니다.

  • 따라서 이론적으로 GPS에서 교정 된 1ppm 클록을 가지고 1ppm의 지구 시간을 조정하면 잔차에 대한 더 나은 정확도 교정을 기대할 수 없습니다.

  • 초당 분배기의 잔류 오차 값. 44856/100000 (+26,337)입니다

  • 44856을 이진수로 변환 = 1010111100111000
  • / 44856과 45857 사이를 전환하려면 잔여 카운터가 필요합니다

  • 우리는 이진 잔차 수를 8 비트로 자른 다음 비트를 회전시켜 MSB가 LSB가되도록이 잔차 분할을 수행합니다.

  • 10101111은 11110101이됩니다.

  • 매 초마다 11110101부터 잔류 카운터가 발생하고 각 "n"비트 위치 = 1은 이진수 n ^ 2의 카운트 값이며 나누기 정수 비율은 44856이 아닌 45857입니다. LSB = 1이므로 모든 두 번째 카운트가 전환 될 때까지 토글됩니다. 101 초 후 분배기 선택이 다음 1pps 카운트로 토글됩니다. 다음 초에 사용할 분배기를 선택한 다음 포인터가 끝까지 도달하고 다음 1pps 접지 클럭을 기다릴 때까지 포인터를 증가시키기 위해 반복됩니다.

  • 이 과정은이 회전 된 이진 잔기의 전체 카운트 또는 10101111> 11110101 = 245 초에 대해 반복되므로, 1pps 화성 시간의 부분 N 신 디바이스 디바이더는 매 초마다 245 초주기마다 수정이 이루어 지므로 정시에 유지됩니다. 장기적으로.

-아마도 시계의 부동 소수점 분배기 비율이 더 쉽습니다.


2

이진 분수를 사용하여 하드웨어를 전혀 변경하지 않고도 (보다 안정적인 참조 주파수를 원할 수도 있지만) 소프트웨어 에서이 문제를 상당히 간단하게 해결할 수 있으며 밀리 초 해상도를 제공하고 쉽게 무료로 만들 수 있습니다 원자 시계를 포함하여 참조 할 수있는 모든 소스의 기본 정확도를 볼 수있는 누적 변환 오류가 충분합니다.

타이머 인터럽트를 수정하여 매우 넓은 레지스터에 축적하고 각 인터럽트에서 지구 밀리 초 대 "화성 밀리 초"의 비율을 정확하게 표현하는 상당히 긴 값을 추가하십시오.

변환을 위해 32 비트 해상도를 원한다고 주장하기 위해 가정 해 봅시다. 64 비트 누산기를 사용할 수 있습니다. 32 비트가 낮을수록 분수를 나타냅니다. 2 ^ 32보다 약간 작은 적절한 값을 계산하여 변환 계수를 나타냅니다. Earth 밀리 초 인터럽트가 발생할 때마다이 값을 누산기에 추가합니다. 클럭을 쿼리하려고 할 때마다 상위 32 비트 (전체 화성 밀리 초 수)를 반환하는 반면 하위 32 비트는 반올림 오류를 방지하기 위해 내부적으로 만 보존됩니다.

이와 같이 긴 이진 분수를 사용하면 원하는만큼 정확하게 변환을 수행 할 수 있습니다. 32 비트는 분수에 비해 거의 너무 길지만 전체 밀리 초에 대한 32 비트는 너무 짧을 수 있지만 원하는대로 조정할 수 있습니다.

덧붙여서, 긴 레지스터에서 축적하지만 가장 중요한 비트 수만보고하는이 기술은 직접 디지털 합성이 매우 높은 주파수 해상도를 생성 할 수있는 방법입니다.

또한 8 또는 16 MHz 시스템 클록에서 밀리 초 인터럽트로 분배기의 비율을 변경하여 "화성 밀리 초"간격으로 더 가깝게 이동하여 변환의 일부를 수행 할 수도 있습니다. 특히 저렴한 크리스털보다 더 정확한 것을 원한다면 GPS로 또는 원자 시계로 직접 규정 된 10 MHz 기준을 처리 할 수 ​​있으므로 일반적인 AVR 8/16 MHz 클록 소스를 대체하고 다시 계산할 수 있습니다 그에 따라 분배기 비율.


0

DDS (Direct Digital Synthesis) 또는 Numerical Controlled Oscillator 방식은 클럭 주파수에 의존하지 않고 원하는 출력 주파수 분해능 수준을 얻는 간단한 방법입니다.

이 방법에는 고분해능 위상 누산기가 있습니다. 주변의 모든 루프는 미세한 해상도를 가진 위상 증분을 추가합니다. 출력은 누산기의 가장 높은 비트입니다.

구형파를 제공하기 위해 그것을 사용할 때, 에지는 입력 클록 (또는 소프트웨어 루프 속도)으로 만 변할 수 있으므로 에지 지터는 원래의 위치에서 벗어나지 만 시간이 지남에 따라 누적 오류는 없습니다. 당신이 원하는만큼.

소프트웨어 (예 : AVR)에서 쉽게 수행 할 수 있으며 일부 마이크로에는 NCO 하드웨어가 있습니다. http://ww1.microchip.com/downloads/en/AppNotes/90003131A.pdf 작은 PIC는 20 비트 (1ppm) 해상도의 하드웨어, 32kHz xtal 또는 정확한 10MHz 오븐에서이 작업을 수행 할 수 있습니다.


0

원하는 주파수의 정수 배로 작동하는 오븐 맞춤형 커스텀 쿼츠 크리스탈을 살펴보십시오. 표준 주파수 이상의 비용은 들지 않습니다. 웹 검색 "커스텀 쿼츠 크리스탈"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.