Làm thế nào để đồng bộ hóa hai bộ vi điều khiển với độ chính xác micro-giây?


37

Tôi cần phải đồng bộ hóa hai bộ điều khiển vi mô để chúng có thể đo tốc độ truyền sóng. Các phép đo độ trễ thời gian cần có độ chính xác micro giây (sai số nhỏ hơn 1/2 micro giây).

Tôi có hai bộ điều khiển vi mô ( ATmega328 ) sử dụng tinh thể 12 MHz.

Cả hai đều được trang bị bộ thu phát Bluetooth. Bộ thu phát Bluetooth gửi và nhận các gói với độ biến động ~ 15 mili giây.

Tôi hy vọng sẽ đồng bộ hóa các bộ điều khiển vi mô bằng bộ thu phát Bluetooth hoặc một số phương pháp sáng tạo khác.

Tôi đã thử đồng bộ hóa chúng bằng cách chạm chúng lại với nhau, nhưng tôi cần chúng được đồng bộ hóa trong khoảng 10 phút và đồng hồ của chúng trôi quá nhanh. Có lẽ nếu có thể dự đoán chính xác độ trôi của đồng hồ, phương pháp này sẽ hoạt động.

Làm thế nào tôi nên đi về việc đạt được sự đồng bộ này?


2
Bạn có thể cho chúng tôi biết bạn đang cố gắng làm gì và tại sao các đơn vị phải được đồng bộ hóa? Có thể, các chi tiết cụ thể của ứng dụng của bạn có thể chỉ ra một giải pháp. Như một vấn đề chung, đây không phải là một vấn đề rất dễ dàng, đặc biệt là đối với các thiết bị không dây nhỏ.
Nick Alexeev

2
Không thể đạt được đồng bộ hóa dựa trên Bluetooth. Jitter 15 ms chỉ là quá nhiều để có được 0,5 chúng tôi đồng bộ hóa. Bạn cần một cái gì đó với độ trễ rất thấp và độ trễ cố định có thể được sửa chữa. Sẽ dễ dàng hơn nếu bạn có thể lấy một đồng hồ duy nhất cho cả hai và đệm đồng hồ để cân bằng độ trễ.
travisbartley

Xin lỗi vì đã trì hoãn. Mục tiêu của dự án là loại bỏ dây ra khỏi thiết kế hiện có của các công cụ đo kỹ thuật số cầm tay. Người dùng muốn có một thiết kế không dây, vì chúng làm hỏng các dây hiện tại. Các đơn vị đang đo sự lan truyền của sóng trong các cây đứng, đủ nhanh để cần đồng bộ hóa 0,5us giữa cả hai cảm biến.
Kevin

Không dây giá rẻ: Hồng ngoại. Một xung IR có thể đủ để đồng bộ hóa lại các đồng hồ khi chúng bị tách ra một chút.
JimmyB

1
Bài viết này đề xuất một hệ thống Bluetooth 4.0 với đồng bộ hóa ~ 10uS, với thử nghiệm thử nghiệm.
dùng2943160

Câu trả lời:


23

Tôi không có ý mưa trên cuộc diễu hành không dây của bạn. Bạn đã gặp phải một yêu cầu khó khăn nhưng bất ngờ. Một cái gì đó như thế đảm bảo đánh giá lại toàn bộ thiết kế hệ thống.

Điều đầu tiên bạn nghĩ đến là đồng hồ cả hai đơn vị tắt một bộ dao động. Bạn có giao tiếp Bluetooth, gợi ý rằng phạm vi này ở mức 10m. Bạn có thể kết nối các thiết bị của mình với cáp đồng trục RG174 hoặc cáp quang, có thể mang đồng hồ.

Thứ 2 , có dao động chính xác. Để tăng độ chính xác và chi phí.

  • TCXO (dao động tinh thể bù nhiệt độ). Thông thường 1 đến 3 ppm trôi.
  • OCXO (dao động tinh thể điều khiển lò). Trôi theo thứ tự 0,02ppm. Một số OCXO đã trôi xuống 0,0001 ppm.
  • Đồng hồ nguyên tử ( ví dụ tiêu chuẩn Rubidium ). Tôi đang đề cập đến đồng hồ nguyên tử chủ yếu để đưa ra một khung tham chiếu. Thêm về điều đó ở đây .

Thứ 3 , dao động chính xác được đào tạo với GPS. Mỗi vệ tinh GPS có một số đồng hồ nguyên tử trên tàu. Thông thường, có rất nhiều vệ tinh GPS trong tầm nhìn. GPS được sử dụng để định thời chính xác rất nhiều (sử dụng ít được biết đến so với sat nav). Hầu hết các máy thu GPS có đầu ra 1PPS (một xung mỗi giây), cung cấp thời gian chính xác đến 50ns.
Để có độ trôi 0,5s trong hơn 600 giây (10 phút), đồng hồ của bạn (đồng hồ 12 MHz trong thiết kế hiện tại của bạn) phải có độ trôi dưới 0,0008ppm. Nhưng nếu bạn có thể sửa lỗi thời gian thường xuyên từ một nguồn bên ngoài có độ trôi thấp, thì yêu cầu về độ trôi trong đồng hồ có thể được nới lỏng hơn. Nếu bạn có thể sửa mỗi giây, thì đồng hồ của bạn có thể bị trôi 0,5ppm.


Tôi đã từng làm việc trong một dự án nơi chúng tôi phải có được độ chính xác này trên các máy chủ chạy trong các trung tâm dữ liệu trên toàn cầu. Cách dễ nhất là sử dụng GPS. Hóa ra không phải tất cả các máy móc / trung tâm dữ liệu đều có thể truy cập GPS nên giải pháp của chúng tôi cuối cùng là một thách thức khá lớn. Làm điều này với vi điều khiển sẽ còn khó khăn hơn.
NomadAlien

4
+1 cho "đảm bảo đánh giá lại toàn bộ thiết kế hệ thống".

1
Tùy thuộc vào ngân sách của bạn, bạn có thể mua các đơn vị GPS phát ra tần số có thể lập trình (0-10 Mhz) được căn chỉnh theo pha với tín hiệu GPS với giá ~ 150 đô la. Nhìn vào uBlox LEA-6T. Họ yêu cầu đầu ra timepulse lỗi 30 nS RMS, 99% <60 nS.
Sói Connor

9

Các mô-đun GPS với đầu ra 1pps là có sẵn và không tốn kém.

Không thực sự cần thiết phải kỷ luật bộ dao động của CPU với GPS (ví dụ: với PLL). Miễn là bạn có thể "đánh dấu thời gian" các sự kiện bên ngoài so với đồng hồ CPU, thì việc nội suy thời gian truyền sóng và nhận các sự kiện giữa hai sự kiện PPS là tương đối đơn giản.

Bạn thường có thể sử dụng kết hợp bộ hẹn giờ phần cứng trên vi điều khiển, cùng với bộ đếm phần mềm cho các sự kiện tràn của nó, để tạo bộ đếm chu kỳ CPU có chiều rộng tùy ý. Có thể rất khó để xử lý chính xác các sự kiện tái đầu tư, cả bộ đếm phần cứng và bộ đếm phần mềm, nhưng cuối cùng, bạn có thể có bộ đếm 32 bit tính theo tốc độ của xung nhịp CPU (cho độ phân giải cao ) và cuộn lại với khoảng thời gian dài hơn các khoảng thời gian bạn đang cố đo (ví dụ: 429 giây @ 10 MHz).

Bạn có thể sử dụng bộ đếm này để đánh dấu thời gian các sự kiện bên ngoài khác nhau. Nếu một trong những sự kiện đó là xung 1 pps từ máy thu GPS, thì độ chính xác cơ bản lâu dài của đồng hồ CPU sẽ trở nên không cần quan tâm. Điều duy nhất quan trọng là sự ổn định ngắn hạn của nó. Bạn có thể lưu dấu thời gian GPS trong bộ đệm FIFO và so sánh dấu thời gian của các sự kiện khác với các giá trị trong bộ đệm đó. Vì bạn biết các xung GPS cách nhau chính xác một giây, bạn có thể tìm thấy thời gian chính xác của bất kỳ sự kiện nào khác bằng cách nội suy.

Giả sử và là các dấu thời gian của đồng hồ CPU cho hai xung GPS liên tiếp. Bạn cũng biết thời gian thực tế (đồng hồ nguyên tử) được liên kết với từng xung đó (từ các thông báo GPS), và . Nếu là dấu thời gian của đồng hồ CPU cho một số sự kiện bên ngoài mà bạn muốn đo nằm giữa và , thì thời gian chính xác của nó là: G P S n + 1 T i m e n T i m e n + 1 E x t G P S n G P S n + 1GPSnGPSn+1TimenTimen+1ExtGPSnGPSn+1

Timen+ExtGPSnGPSn+1GPSn

Cuối cùng, nếu bạn có thiết lập này chạy trên hai hệ thống riêng biệt, mỗi hệ thống có bộ thu GPS riêng, bạn có thể so sánh thời gian được tính cho các sự kiện khác nhau trên hai hệ thống với độ chính xác cao (thường là theo thứ tự ± 100 ns), ngay cả khi Đồng hồ CPU của hai hệ thống không được đồng bộ hóa.


Bạn có thể nói rõ hơn một chút về cách thức hoạt động của nó không? Tôi đang gặp khó khăn để hiểu từ lời giải thích hiện tại.
NickHalden

@NickHalden: OK, xong rồi.
Dave Tweed

Hmmm ok, điều này không phụ thuộc vào tần số của đồng hồ cpu không đổi giữa hai xung 1 giây chứ? Ví dụ, lấy một mạch dao động tinh thể đặc biệt khủng khiếp trong đó 99% các xung xảy ra trong khoảng từ 0,00 đến 0,05 giây, và sau đó 1% cuối cùng xảy ra trong khoảng 0,05 đến 1,00 giây. Chẳng phải cái ví dụ được xây dựng bệnh lý này sẽ làm tôi thất vọng sao?
NickHalden

Vâng, đó là những gì "ổn định ngắn hạn" có nghĩa là.
Dave Tweed

Oh, yike là ở đó khi tôi nhận xét? Haha thật xấu hổ. Dù sao, cảm ơn lời giải thích +1 từ tôi.
NickHalden

8

Tôi đã thực hiện đồng bộ hóa đồng hồ không dây cho vi điều khiển trước đây, nhưng chỉ với độ chính xác mili giây, đủ tốt cho ứng dụng. Từ bài đọc của tôi, bài viết này giải thích đồng bộ hóa micro giây khá tốt: http://www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/raftp.pdf

Về cơ bản, nếu bạn có kiến ​​thức về sự kiện truyền và sự kiện đến của gói vô tuyến trên máy phát và máy thu tương ứng, bạn có một sự kiện có thể quan sát chung (giả sử bạn bỏ qua thời gian lan truyền của sóng vô tuyến) giữa hai hệ thống có thể dùng làm tài liệu tham khảo. Tính năng gọn gàng khác được đề cập trong bài báo là ước lượng sai lệch đồng hồ sử dụng hồi quy tuyến tính.


Độ chính xác của 1,5 Lời nói trong kịch bản nhảy đơn và độ chính xác trung bình 0,5 Lời / bước nhảy trong trường hợp đa bước nhảy được thể hiện bằng cách cung cấp kết quả thử nghiệm. Tốt đẹp.
Li-aung Yip

1
Điều này cũng có thể được quan tâm: Giao thức đồng bộ hóa thời gian cho Mạng cảm biến
Nick Alexeev

3

Kiểm tra Giao thức đồng bộ hóa đồng hồ Bluetooth (CSP), một phần tùy chọn của Cấu hình thiết bị y tế (HDP) Các phần trong tài liệu đó có liên quan đến CSP là 2.1 & 8.

Tôi chưa có cơ hội để thử bản thân mình, nhưng theo như tôi có thể nói, BlueZ (ngăn xếp giao thức Bluetooth chính thức của Linux) chỉ bổ sung hỗ trợ cho HDP , bao gồm hỗ trợ cho CSP. Vì vậy, mặc dù có vẻ như bạn sẽ không chạy trên nền tảng hỗ trợ ngăn xếp BlueZ, nhưng có lẽ mã ít nhất sẽ cung cấp một triển khai tham chiếu tốt.

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.