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 đề:
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.
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.
Đâ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.