Đo thời gian rất chính xác


13

Tôi sẽ đo thời gian rất ngắn càng chính xác càng tốt. Thiết bị sẽ nhận được một xung đầu tiên và trong vòng 150 micro giây nữa, mỗi xung trên dây riêng của chúng. Thời gian giữa tín hiệu đầu tiên và từng tín hiệu trong sáu tín hiệu khác phải được đo chính xác nhất có thể. Độ chính xác phải đạt ít nhất 100 nano giây nhưng càng nhiều càng tốt.

Vi điều khiển nào sẽ là tốt nhất cho việc này? Tôi đã tìm thấy cái này . Họ dường như có một bộ đếm thời gian với thời gian 4 nano giây. Nó sẽ đủ chính xác cho tôi.

Một số vi điều khiển khác sẽ tốt hơn để làm điều này? Điều này có thể được thực hiện với AVR?


2
Tôi nghĩ bạn đang nói về độ chính xác, không chính xác. Điều gì sẽ xảy ra nếu bạn có độ chính xác nano giây, nhưng đồng hồ cơ bản bị tắt 10%? Sau đó, các phép đo không chính xác.
Kaz

Sáu xung cách nhau bao xa? Họ đến trên một đầu vào chung hoặc trên sáu đầu vào riêng biệt?
starblue

Họ có tất cả đầu vào của riêng họ. Các xung đôi khi có thể đến tất cả cùng một lúc nhưng thường thì chúng đến vào những thời điểm khác nhau.
Kestis

Câu trả lời:


8

Tốc độ của vi điều khiển không phải lúc nào cũng là yếu tố giới hạn. MSP430 có thể là một giải pháp thích hợp, không phải vì thực tế nó chỉ chạy tối đa 25 MHz mà bởi vì một số thiết bị MSP430 có thiết bị ngoại vi Timer D cho phép khoảng thời gian lên đến 4ns (256 MHz). Điều này nhanh hơn hầu hết tất cả các vi điều khiển ngoài kia. Ngay cả STM32 trong các phiên bản mới nhất (F4) chỉ có thể làm 180 MHz.

Timer D khả dụng trên các thiết bị MSP430F51x1 và MSP43051x2 như MSP430F5131.

Tuy nhiên, điều đó chỉ giải quyết được khả năng nắm bắt thời gian. Câu hỏi lớn là bạn sẽ làm gì với nó vì việc xử lý sẽ chậm hơn. Bạn có thể lấy mẫu thời gian giữa hai xung, nhưng bạn sẽ không thể thực hiện bất kỳ xử lý nào giữa chúng, nếu đó là ý bạn.


Thật tệ, tôi đã không hoàn toàn RTFM của MSP430, chủ yếu là do trang web của TI kích hoạt các cơn co giật của pavlovian.
John U

@ John: Không bao giờ có phản ứng đó. Sự thật là OP đã không chỉ định nhiều thông tin về những gì anh ấy đang làm nên thật khó để đưa ra một gợi ý thích hợp.
Gustavo Litovsky

Xử lý không phải là vấn đề. Có nhiều giây để thực hiện các phép tính một khi thời gian đã được ghi lại và các thuật toán thậm chí không phức tạp. Một MSP430 có thể xử lý tất cả sáu xung hay có nên có nhiều xung hơn không?
Kestis

@Kestis: Timer D chứa 6 thanh ghi so sánh chụp và một số MSP430 có nhiều hơn một mô-đun Timer D, do đó, nó phải phù hợp với yêu cầu của bạn.
Gustavo Litovsky

4

Thời gian đến độ phân giải 100ns yêu cầu bộ hẹn giờ chạy ở tốc độ 10 MHz. Nhiều bộ vi điều khiển nên có khả năng chạy bộ đếm thời gian nhanh như vậy.

Vấn đề xảy ra khi bạn đang cố gắng để thời gian đến của 6 tín hiệu. Có phải tất cả các tín hiệu trên cùng một dây, hoặc mỗi tín hiệu trên một dây khác nhau?

Nếu tất cả chúng nằm trên cùng một dây, thì có thể thực hiện điều này một cách chính xác trên bất kỳ MCU nào với một bộ định thời 10 MHz. Ngây thơ, mã để làm điều này sẽ trông giống như thế này:

wait for trigger signal
reset timer

wait for first signal
save timer value
reset timer

....

wait for sixth signal
save timer value
reset timer

Vấn đề là phải mất một khoảng thời gian hữu hạn để đặt lại bộ hẹn giờ. Điều này gây ra hai vấn đề:

  1. Thời gian đo sẽ bị sai bởi một vài 100ns, tùy thuộc vào việc thực hiện của bạn. Tuy nhiên, họ nên liên tục sai. IE sai chính xác cùng một số tiền mỗi lần. Điều này có nghĩa là bạn có thể dễ dàng bù cho nó bằng cách thêm một lượng nhỏ vào mỗi phép đo.

  2. Sẽ có một thời gian tối thiểu bạn có thể đo lường. Nếu bất kỳ xung nào đến 100ns sau xung trước, thì có lẽ bạn sẽ bỏ lỡ nó. Tôi không biết nếu có bất cứ điều gì bạn có thể làm về điều đó trên phần mềm. Bạn sẽ phải tìm một vi điều khiển có thể xử lý nhiều xung trong phần cứng.


Vi điều khiển nào có thể xử lý nhiều xung trong phần cứng? Các Cypress PSoC ! Đây là một vi điều khiển cũng chứa các khối kỹ thuật số có thể định cấu hình, có nghĩa là bạn có thể dễ dàng có 6 bộ định thời riêng biệt đang chạy, mỗi bộ có tốc độ 60 MHz, cho bạn độ phân giải tốt hơn 20ns.

6 bộ đếm thời gian PSoC Cypress

Đây là một ví dụ tôi gõ nhanh để chỉ cho bạn loại việc bạn có thể làm với nó. Tôi đã có 6 bộ tính giờ riêng biệt, tất cả đều chạy trên đồng hồ xe buýt, có thể lên tới 67 MHz. Có một chân kích hoạt bắt đầu tất cả các bộ định thời đang chạy và 6 chân khác, mỗi chân gây ra một sự kiện chụp trong bộ hẹn giờ. Một thanh ghi trạng thái cho phép mã của bạn giám sát bộ định thời nào đã bắt được xung. Mã có thể đọc các giá trị trong bộ định thời.


Điều đó có vẻ rất thú vị. Tuy nhiên, tôi thích AVR hoặc MSP430 hơn vì chúng phổ biến hơn nhiều.
Kestis

0

Câu trả lời sửa đổi : Máy hiện sóng lưu trữ kỹ thuật số nhanh hoặc có thể là thiết bị đếm tần số.

Câu trả lời cũ :

Nói một cách đơn giản, "vi điều khiển nhanh nhất bạn có thể tìm thấy", với lý do đồng hồ / lấy mẫu của bạn càng nhanh, bạn càng có thể chính xác hơn. MSP430 không phải là thiết bị nhanh.

STM32 là 32 bit và sẽ chạy nhanh hơn, cộng với có sẵn các bảng & công cụ dev giá rẻ tương tự, nhưng thậm chí nó còn khá chậm so với một số thứ mạnh hơn hiện có (Raspberry Pi @ 800 MHz - 1GHz (Ép xung)). Nói chung, mặc dù bạn đi càng nhanh thì bộ xử lý càng phức tạp nên có thể có sự đánh đổi trong quá trình học tập.

Đã thêm: Benji đúng, bạn (có thể) cũng cần một bộ dao động chính xác cho micro nếu bạn muốn các phép đo rất chính xác (bạn không thực sự chỉ định giới hạn lỗi trong câu hỏi của mình).


Về cơ bản, có các loại bộ định thời khác, ngoài vi điều khiển lấy mẫu tín hiệu trong một vòng lặp.
Nick Alexeev

Và nó sẽ có ích nếu vi điều khiển có bộ dao động / tinh thể ngoài rất chính xác kèm theo.
BenjiWiebe

Bạn đều đúng, tôi đã chỉnh sửa.
John U
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.