Làm thế nào tôi có thể có được một bộ dao động nhỏ chạy chính xác 31,891,269,1616Hz?


15

Tôi đang tìm cách xây dựng một mô-đun RTC cho Arduino chạy trên thời gian sao Hỏa. Hệ số chuyển đổi là 1.0274912510 giây Trái đất thành 1 Sao Hỏa.

Trong khi tôi đã xoay sở để hoàn thành chương trình này với độ phân giải <2 giây (không chính xác lý tưởng, tôi thích thứ gì đó như độ chính xác 300 ms) bằng cách sử dụng toán học điểm cố định trên Arduino Uno được kết nối với mô đun RTC thông thường, tôi là tự hỏi liệu có thể có một loại dao động điện áp thấp nào đó chạy chính xác ở 31,891,269,1616HzHz (31,891269116 kHz), ít nhiều, có thể hoán đổi với một tinh thể đồng hồ 32 kHz tiêu chuẩn (tuy nhiên, tôi sẽ mở cho các ý tưởng khác miễn là chúng không quá đắt.)

Bất kỳ ý tưởng làm thế nào điều này có thể có thể? Ngoài ra, một số loại hẹn giờ tắt cứ sau 1.0274912510 giây cũng có thể được chấp nhận.


13
Tại sao đơn vị kỳ lạ (Tối thiểu?) Đó là 31.891 kHz. Vì vậy, có lẽ bạn đang tìm kiếm một tinh thể đồng hồ 32kHz.
JRE

21
Bắt đầu với yêu cầu của bạn. Bạn đã chỉ định độ chính xác phi thường. Tại sao? Ở những nơi khác bạn nói bạn có thể sắp xếp làm những gì bạn muốn với Arduino. Tôi rất tiếc phải nói với bạn điều này, nhưng bạn đang tự đùa, trừ khi bạn sử dụng thứ gì đó như đồng hồ rubidium hoặc Caesium làm tài liệu tham khảo. Vì vậy, hãy cho chúng tôi biết bạn đang làm gì và yêu cầu về hiệu suất của bạn là gì. Đó là yêu cầu chức năng, không phải hiệu suất xuất phát của bạn. Nếu bạn đang cố gắng sản xuất đồng hồ bị khóa với đồng hồ khác, hãy nói như vậy và cho chúng tôi biết yêu cầu của bạn (và dung sai) là gì.
WhatRoughBeast

46
Bạn đang cố gắng giải quyết sự thiếu kỹ năng lập trình của mình bằng phần cứng rất đắt tiền và tùy chỉnh. Bạn có thể dễ dàng thực hiện chuyển đổi điểm nổi 256 bit trong Arduino hoặc bất kỳ độ chính xác nào bạn muốn.
đường ống

14
Tôi nghĩ rằng đây là một ví dụ tuyệt vời về lý do tại sao bao gồm nhiều thông tin trả trước cho phép mọi người chỉ cho bạn đi đúng hướng. Câu trả lời của Brian Drumond hiện là câu trả lời hay nhất, hoặc ít nhất là rẻ và khả thi cho một người nghiệp dư. Đó cũng là một ví dụ tốt về lý do tại sao bạn phải cẩn thận khi chỉ định độ chính xác và độ chính xác - có rất nhiều thông số có khả năng liên quan đến đồng hồ. Chúng tôi thậm chí chưa thảo luận về bù nhiệt độ hoặc jitter.
pjc50

11
"Hệ số chuyển đổi là 1.0274912510 giây Trái đất thành 1 Sao Hỏa." - bạn có nhầm lẫn giữa sự khác biệt về độ dài ngày giữa Sao Hỏa và Trái Đất với độ dài của một giây không? Độ dài của một ngày mặt trời trên Sao Hỏa là 88 775 giây, tương đương 1.02749 ngày Trái đất (là 86 400 giây). Mặt khác và thứ hai được xác định bởi bức xạ phát ra từ một nguyên tử xê-ri và thậm chí mất cả thời gian để tính toán, bạn cần vận tốc khoảng 0,23 c để có được sự chênh lệch 2,7% đó.
ilkkachu

Câu trả lời:


41

Sử dụng một tinh thể 32768kHz như mọi người khác, nhưng thay vào đó chia cho 33669, gây ra lỗi -5,08ppm. (Bạn có thể loại bỏ điều đó bằng cách cắt điện dung tải nếu bạn muốn).

Nó không chính xác nhưng đối với đồng hồ sao Hỏa, nó sẽ tốt như bất kỳ đồng hồ thạch anh Trái đất nào. Đó là, bỏ qua các vấn đề bù nhiệt độ cho nhiệt độ môi trường xung quanh sao Hỏa, hầu hết các tinh thể đồng hồ chỉ có sẵn để cắt cho Trái đất, trừ khi bạn có thể tìm thấy các nhà cung cấp sao Hỏa ...

Tôi sẽ sử dụng các thiết bị ngoại vi bộ đếm thời gian trong MSP430 để thực hiện phân chia và (giả sử bạn đang lái một chuyển động đồng hồ cơ thạch anh tiêu chuẩn) tạo ra các xung lưỡng cực 30ms trên các chân đầu ra của nó mỗi giây, gần như theo thời gian ban đầu mà bạn có thể đo trên máy hiện sóng.

Arduino hoặc tương tự sẽ thực hiện công việc, nhưng MSP có thể được đưa vào trạng thái ngủ giữa các xung, tiêu thụ dưới 1uA với bộ dao động LF đang chạy. Đây là một thiết kế ví dụ với mã nguồn và PCB cho đồng hồ - chỉ có thời gian Trái đất cho đến nay, mặc dù điều đó có thể được sửa bằng cách thay đổi hằng số.


1
Cảm ơn bạn! Dựa trên những phản hồi khác, tôi nghĩ rằng đây có vẻ là lựa chọn khả thi nhất mà không cần phải đi sâu vào lĩnh vực đồng hồ nguyên tử nên tôi đã chọn nó làm giải pháp cho câu hỏi của mình. Tôi cũng đặc biệt đánh giá cao thiết kế bạn đã liên kết.
renegadeds

Xin lưu ý rằng các số liệu quan trọng mà bạn đưa ra sẽ không được đáp ứng với tinh thể RTC tiêu chuẩn. Lỗi 5ppm từ toán học có thể sẽ nhỏ hơn dung sai tinh thể.
dùng2943160

6
@ user2943160 nếu bạn có một tài liệu tham khảo tốt, bạn có thể đạt 1ppm hoặc hơn với việc cắt tỉa ban đầu - sẽ có một vài ppm trôi trong vài năm và (kỳ lạ là điều chỉnh các tinh thể ngã ba) một phương sai parabol với nhiệt độ. Tất cả các đồng hồ thạch anh giá rẻ trong nhà tôi đều có các mức giá khác nhau, có lẽ chúng không bao giờ được cắt tại nhà máy, và không tốt hơn nhiều so với đồng hồ quả lắc bù nhiệt độ.
Brian Drumond

+1 chỉ dành cho "nhà cung cấp sao Hỏa".
Olin Lathrop

41

Bạn có thể làm tốt hơn đề xuất của Brian Drumond. Mặc dù có thể đúng là bộ tạo dao động của bạn là nguồn lỗi lớn nhất trong hệ thống, không có lý do gì để thêm lỗi hệ thống bổ sung khi nó đủ dễ để không xảy ra.

Đặt khoảng thời gian hẹn giờ của bạn thành 33668 tick, bắt đầu bộ đếm ở mức 0 và trên mỗi ngắt hẹn giờ, hãy tăng bộ đếm lên 6754.

Nếu, sau khi tăng, bộ đếm là> = 8105, sau đó trừ 8105 và đặt khoảng thời gian hẹn giờ cho giây sau thành 33669 tick.

Nếu không, hãy để bộ đếm một mình và đặt khoảng thời gian hẹn giờ cho giây sau thành 33668.

Điều này sẽ cung cấp cho bạn (giả sử một tinh thể 32.768kHz hoàn hảo) một khoảng trung bình là

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

giây (ít hơn một lỗi một phần nghìn tỷ so với 1.0274912510), thay vì 1.0274963378906 giây (gần 5 lỗi một phần triệu). Điều này có nghĩa là độ chính xác lâu dài của đồng hồ của bạn sẽ thực sự phụ thuộc vào độ chính xác của bộ dao động; lỗi do toán học sẽ đóng góp đáng kể ít hơn một đánh dấu lỗi mỗi năm. Mặc dù độ dài của bất kỳ một giây nào cũng sẽ có lỗi tương đối lên tới 25ppm, nhưng các khoảng thời gian trung bình dài hơn và dài hơn thì lỗi sẽ biến mất.

Đây là thuật toán của Bresenham được áp dụng cho chấm công và phân số 6754/8105 được tìm thấy như sau:

32768 * 1.027491251 = 33668.833312768

Phân số tiếp tục chính xác cho 33668.833312768 là [33668; 1, 4, 1, 1349, 1, 7].

Việc bỏ thuật ngữ cuối cùng cung cấp xấp xỉ 33668 + 6754/8105, có tất cả các phần vừa vặn thành 16 bit.


16

10101014


Tôi đã hy vọng tránh được phần cứng đắt tiền nếu có thể. Ngay bây giờ tôi đang đạt được điều này với một mô-đun RTC thông thường và một Arduino, và tôi có thể thực hiện chuyển đổi 1000ms thành 1027,4912510ms, tuy nhiên tôi chỉ có độ phân giải khoảng 1-2 giây nghĩa là nó tự sửa nhưng không chính xác khủng khiếp .
renegadeds

12
@renegadeds thì bạn nên làm rõ trong câu hỏi của bạn về độ chính xác nào được chấp nhận. Và vui lòng cung cấp một số ngữ cảnh: một thẻ [arduino] sẽ là một gợi ý hay rằng bạn không xây dựng một phòng thí nghiệm có độ chính xác cao.
Dmitry Grigoryev

1
Lưu ý, tôi đã cập nhật câu hỏi và thêm thẻ Arduino.
renegadeds

15

Nó có thể được thực hiện với rubidium hoặc đồng hồ tham chiếu nguyên tử khác ở tốc độ 10 MHz, có lẽ là PLL để cung cấp (giả sử) 100 MHz, sau đó được tính với bộ tích lũy pha ~ 36 bit để cho độ phân giải 0,001Hz. Điều thứ hai có thể được thực hiện với một đồ họa nhỏ.

Bạn có thể đọc lên các phương pháp Tổng hợp kỹ thuật số trực tiếp (DDS). Có những con chip làm DDS nhưng có thể không có chiều rộng bit như vậy.

Các mô-đun đồng hồ Rubidium có sẵn trên thị trường thặng dư, hoặc từ các nhà sản xuất như microsemi.


7

Bạn không định nghĩa "đắt tiền", vì vậy đây là thứ gì đó trong bóng tối.

Bắt đầu với một máy phát 10 MHz thương mại (bao gồm cả eBay). Rubidium cho sự lựa chọn, nhưng bất cứ độ chính xác nào bạn có thể nhận được sẽ thiết lập hiệu suất của bạn.

Bây giờ xây dựng một bộ chia progammable có độ dài 28 bit. Với tốc độ 10 MHz, bạn có thể thoát khỏi logic 74HC CMOS, nhưng bạn sẽ cần sử dụng cấu hình mang nhanh. Đầu ra cũng kích hoạt sự phân chia bởi hai flip-flop cung cấp bit 29.

Bộ chia có thể chạy ở tỷ lệ 10,274,912 hoặc 10,274,913, tùy thuộc vào trạng thái của bit 29. Đối với đầu vào 10 MHz hoàn hảo, thời gian đầu ra hiệu quả cho bit 28 sau đó sẽ là 1.02749125 giây, tương đương chính xác đến 1 ppb, hoặc khoảng 30 ms / năm Tất nhiên, một đầu vào kém chính xác sẽ tạo ra đầu ra kém chính xác hơn.

Sử dụng 74HC161 tiêu chuẩn, bạn có thể thực hiện việc này với 8 IC và nếu bạn cẩn thận, bạn có thể sử dụng bảng tạo mẫu chuẩn, mặc dù bạn muốn rất cẩn thận trong việc tăng cường hệ thống mặt đất. Perfboard sẽ rẻ hơn, gọn hơn và bền hơn, nhưng hệ thống dây điện sẽ không thuận tiện hơn, vì bạn cần hàn các kết nối. Sau đó, bạn có thể đặt nó trong một cái gì đó giống như RTV cấp điện tử (KHÔNG phải RTV bạn có tại cửa hàng phần cứng), cho kích thước mô-đun cuối cùng trong phạm vi 2 x 2 x 1/2 inch, không tính bộ dao động.

BIÊN TẬP

Lưu ý rằng tiêu chuẩn hiệu suất của bạn, được liên kết với các RTC "thông thường", thực sự nằm trong phạm vi chính xác 1 giây / ngày, tệ hơn 30 lần so với phương pháp này. Vì vậy, trước hết, bạn có thể loại bỏ giai đoạn bit 29 hoặc, thay vào đó, chia 10 MHz của bạn thành 5 MHz và sử dụng tỷ lệ 5.137.456. Tốc độ xung nhịp thấp hơn tại các quầy sẽ cho phép cấu trúc mang đơn giản hơn, tránh việc mang nhanh sẽ cần thiết ở mức 10 MHz. Độ chính xác của bạn hiện ở mức 60 ms / năm cho một chiếc đồng hồ hoàn hảo.

EDIT THÊM

Nhìn nhanh vào eBay cho thấy một số lượng lớn 10 MHz OCXO với giá dưới 20 đô la. Chúng thường có độ ổn định từ 1 ppb trở lên, với 0,2 ppb một thông số khá phổ biến. Có được một trong những điều này và bạn nên có hình dạng tốt. Bạn muốn mượn một máy đo tần số / chu kỳ có độ phân giải khá cao để xác định tần số đầu ra thực tế, sau đó điều chỉnh tỷ lệ phân chia cho phù hợp.


Đồng ý và ngay cả khi OCXO không có trong ngân sách năng lượng, TCXO vẫn có thể cải thiện trên tinh thể đồng hồ.
hobbs

4

Đồng hồ "Stratum 1" có nguồn gốc từ 10-11Các tinh thể cắt SC được sử dụng trong ~ $ 250 của VC-OCXO (ví dụ Vectron) trừ khi bạn mua sử dụng. Sau đó, với việc điều chỉnh để đồng bộ hóa với các đồng hồ toàn cầu như WWV, VLF, GPS 10 MHz hoặc đồng hồ 1pps lần lượt được đồng bộ hóa với10-14đồng hồ nguyên tử thông qua "khóa đến 3 vệ tinh." Sau đó, bạn có thể hiệu chỉnh để10-11 lỗi.

Để tạo một f khác, chẳng hạn như tần số của bạn yêu cầu độ lệch 2,07% của 1pps, vì vậy điều này là không thể thực hiện được bằng cách điều chỉnh một tinh thể đồng hồ tại 10-6 ổn định.

PLL loại "phân số N synth" được sử dụng để lấy bất kỳ tỷ lệ nào của tham chiếu, chẳng hạn như 10Mhz từ một số đơn vị GPS.

Nếu bộ tạo dao động TCXO có độ ổn định 1ppm, nó chỉ có thể được điều chỉnh nhiều hơn một chút so với mức này và không phải bù 2,07% từ 1 pps hoặc 1.0274912510 Hz, do đó, PLL với chip N phân đoạn là một cách để làm điều này với một VC-OCXO hoặc nắp cơ khí được điều chỉnh OCXO.

đã thêm - Để tạo 1pps vào thời gian MAR, khi đó tỷ lệ chia là 26.337.44856 sử dụng 5 chữ số nguyên và phần dư là 5 chữ số.

  • Nếu bạn có thể điều chỉnh Xtal thành 0,01 ppm, nó sẽ chỉ ổn định ở mức 1ppm trừ khi một lò vi sóng được tạo ra ở ~ 30'C vì Tempco thường không có xung quanh nhiệt độ cơ thể đối với một số XÁC ĐỊNH không nhất thiết phải là MEM. Trừ khi Vcc và temp là contant trong vòng 0,1 độ C, bất cứ điều gì cố gắng sửa lỗi dư lượng tốt hơn 0,01 ppm là không thể, thậm chí 0,1ppm là khó khăn ngắn hạn và lão hóa dài hạn sẽ ít nhất là 1ppm mỗi năm.

  • Do đó, theo lý thuyết, nếu bạn có đồng hồ 1ppm được hiệu chỉnh từ GPS để điều chỉnh thời gian Trái đất 1ppm, sẽ không thể mong đợi việc hiệu chỉnh chính xác tốt hơn cho phần dư.

  • Giá trị lỗi dư của bộ chia mỗi giây. là 44856/100000 (+26.337)

  • Chuyển đổi 45056 thành nhị phân = 1010111100111000
  • Điều này cần một bộ đếm dư lượng để chuyển đổi giữa / 44856 và 45857

  • Chúng tôi thực hiện phân chia dư lượng này bằng cách cắt bớt số dư nhị phân thành 8 bit sau đó xoay các bit để MSB trở thành LSB.

  • 10101111 trở thành 11110101

  • Mỗi giây một bộ đếm dư từ 11110101 và trong đó mỗi vị trí bit "n" = 1 là giá trị đếm trong nhị phân n ^ 2 trong đó tỷ lệ số nguyên chia là 45857 thay vì 44856. Vì LSB = 1, có nghĩa là mỗi lần đếm thứ 2 sẽ chuyển sang 101 giây sau đó lựa chọn bộ chia được bật cho số đếm 1pps tiếp theo. Điều này được lặp đi lặp lại để chọn bộ chia nào được sử dụng cho giây tiếp theo, sau đó tăng con trỏ, cho đến khi con trỏ kết thúc và chờ đồng hồ trái đất 1pps tiếp theo.

  • Quá trình này được lặp lại cho toàn bộ số dư lượng nhị phân xoay vòng này hoặc 10101111> 11110101 = 245 giây để một bộ chia N synth phân đoạn của 1pps Thời gian sao Hỏa được tạo ra mỗi giây với các hiệu chỉnh được thực hiện trong mỗi chu kỳ 245 giây. về lâu dài.

tỷ lệ chia điểm nổi cho đồng hồ dễ dàng hơn.


2

Bạn hoàn toàn có thể giải quyết vấn đề này trong phần mềm mà không cần thay đổi phần cứng (mặc dù bạn có thể muốn có tần số tham chiếu ổn định hơn), bằng cách sử dụng phân số nhị phân và bạn có thể thực hiện theo cách cung cấp cho bạn độ phân giải mili giây và có thể dễ dàng được giải phóng đủ các lỗi chuyển đổi tích lũy để cho phép bạn thấy độ chính xác cơ bản của bất kỳ nguồn nào bạn có thể tham chiếu đến nó, bao gồm cả đồng hồ nguyên tử.

Những gì bạn sẽ làm là sửa đổi ngắt hẹn giờ của mình để tích lũy thành một thanh ghi rất rộng và trên mỗi ngắt thêm một giá trị khá dài, chính xác như biểu thị tỷ lệ của một mili giây Trái đất thành "mili giây sao hỏa" như bạn mong muốn.

Giả sử vì lý do rằng bạn muốn có độ phân giải 32 bit cho chuyển đổi. Bạn có thể sử dụng bộ tích lũy 64 bit, với 32 bit thấp hơn đại diện cho phân số Những gì bạn sẽ làm là tìm ra giá trị phù hợp, nhỏ hơn 2 ^ 32, đại diện cho hệ số chuyển đổi. Mỗi lần Trái đất của bạn gián đoạn bắn ra, bạn thêm giá trị này vào bộ tích lũy. Bất cứ khi nào bạn muốn truy vấn đồng hồ, bạn trả lại 32 bit trên, đó là số lượng toàn bộ mili giây trên sao Hỏa trôi qua, trong khi 32 bit thấp hơn chỉ được bảo toàn bên trong để tránh lỗi làm tròn.

Sử dụng phân số nhị phân dài như thế này cho phép bạn thực hiện chuyển đổi với độ chính xác như bạn mong muốn. 32 bit gần như chắc chắn là quá dài đối với phân số, trong khi 32 bit cho toàn bộ mili giây có thể quá ngắn, nhưng bạn có thể điều chỉnh theo ý muốn.

Ngẫu nhiên, kỹ thuật tích lũy này trong một thanh ghi dài nhưng chỉ báo cáo một số bit quan trọng nhất là cách tổng hợp kỹ thuật số trực tiếp có thể tạo ra độ phân giải tần số cực cao.

Bạn cũng có thể xem xét thực hiện một phần của chuyển đổi bằng cách thay đổi tỷ lệ của dải phân cách từ đồng hồ hệ thống 8 hoặc 16 MHz thành ngắt mili giây, di chuyển nó gần hơn với khoảng "mili giây sao hỏa". Đặc biệt, nếu bạn muốn thứ gì đó chính xác hơn một tinh thể rẻ tiền, bạn có thể xử lý một tham chiếu 10 MHz thông thường được xử lý bằng GPS hoặc trực tiếp hơn bằng đồng hồ nguyên tử, vì vậy bạn có thể thay thế bằng nguồn đồng hồ AVR 8/16 MHz thông thường và tính toán lại tỷ lệ chia cho phù hợp.


0

Phương pháp tổng hợp kỹ thuật số trực tiếp (DDS) hoặc Bộ điều khiển dao động điều khiển số là một cách khá đơn giản để có được bất kỳ mức độ phân giải mong muốn nào của tần số đầu ra mà không phụ thuộc vào tần số xung nhịp.

Trong phương pháp này, bạn có một bộ tích lũy pha độ phân giải cao. Mỗi vòng lặp xung quanh bạn thêm một bước tăng cũng có độ phân giải tốt. Đầu ra là bit cao nhất của bộ tích lũy.

Khi sử dụng nó để cung cấp cho squarewave, các cạnh chỉ có thể thay đổi theo đồng hồ đầu vào (hoặc tốc độ vòng lặp phần mềm), do đó, các jitter cạnh từ nơi cần có, nhưng theo thời gian, không có lỗi tích lũy - bạn có thể giải quyết như cao như bạn muốn

Bạn có thể làm điều đó trong phần mềm khá dễ dàng (ví dụ như trên AVR) và một số micros hiện có phần cứng NCO. http://ww1.microchip.com/doads/en/AppNotes/90003131A.pdf Một PIC nhỏ có thể làm điều này trong phần cứng với độ phân giải 20bit (1ppm), từ xtal 32kHz hoặc từ lò 10 MHz chính xác.


0

Xem xét để có được một tinh thể thạch anh tùy chỉnh lò nướng chạy ở một số bội số nguyên của tần số mong muốn của bạn. Họ không chi phí nhiều hơn một tần số tiêu chuẩn. Websearch "tinh thể thạch anh tùy chỉnh"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.