Cách đọc phản hồi từ cảm biến quang học

Cảm biến quang học

Cảm biến quang học, khi sử dụng với thiết bị truyền động tuyến tính,chức năng rất giống với cảm biến hiệu ứng Hall, ngoại trừ việc chúng phát hiện ra ánh sáng thay vì từ trường [1]. Cảm biến quang hoạt động bằng cách sử dụng ánh sáng từ đèn LED hoặc một số nguồn sáng khác được truyền qua đĩa mã hóa. Đĩa mã hóa này có rãnh để cho phép ánh sáng đi qua nó một cách định kỳ. Ở phía bên kia của đĩa là bộ tách sóng quang, có nhiệm vụ phát hiện ánh sáng khi nó đi qua các khe trên đĩa và tạo ra tín hiệu đầu ra [1]. Khi bộ truyền động di chuyển, đĩa mã hóa sẽ quay và ánh sáng được phát hiện bởi bộ tách sóng quang, tạo ra một xung điện áp vuông. Các xung này có thể được sử dụng tương tự như các xung của cảm biến hiệu ứng Hall để xác định xem bộ truyền động đã di chuyển được bao xa.

Cảm biến quang học

Phản hồi vị trí từ cảm biến quang học

Vì cảm biến quang học hoạt động khá giống với cảm biến hiệu ứng Hall về đầu ra nên bài đăng trên blog này sẽ trình bày ngắn gọn cách đọc đầu ra của chúng để có phản hồi vị trí. Nếu bạn đang tìm kiếm thêm chi tiết, hãy xem bài đăng của chúng tôi về cách đọc phản hồi vị trí từ cảm biến hiệu ứng Hall vì nhiều điều sẽ tương tự.

Giống như cảm biến hiệu ứng Hall, cảm biến quang học sẽ có 3 chân để kết nối; một là điện áp đầu vào, một là mặt đất và cuối cùng là tín hiệu đầu ra. Để sử dụng các xung trên tín hiệu đầu ra cho phản hồi vị trí, bạn cần sử dụng vi điều khiển để đếm các xung được tạo ra. Bạn sẽ muốn sử dụng các chân ngắt bên ngoài của bộ vi điều khiển để đếm chính xác các xung này. Vì các ngắt bên ngoài được kích hoạt bởi sự thay đổi điện áp nên chúng có thể được sử dụng để phát hiện từng xung khi chúng xuất hiện. Khi bạn đã thiết lập ngắt trong mã của bộ vi điều khiển, bạn sẽ cần thiết lập quy trình dịch vụ ngắt để đếm các xung khi chúng xuất hiện. Hàm countSteps() trong ví dụ mã bên dưới được sử dụng để đếm số xung từ cảm biến quang.

Để sử dụng các xung này nhằm xác định giá trị vị trí, bạn cần biết vị trí trước đó của bộ truyền động tuyến tính và hướng mà bộ truyền động tuyến tính đang di chuyển. Khi bạn điều khiển cách bộ truyền động tuyến tính di chuyển, bạn có thể chỉ cần thiết lập một biến để theo dõi hướng của bộ truyền động trong mã của bạn. Biến này có thể được sử dụng để xác định xem bạn có cần thêm hoặc bớt các xung khỏi vị trí trước đó hay không. Khi bạn đã cập nhật vị trí của mình, bạn sẽ cần đặt lại các xung đã đếm về 0. Ví dụ mã bên dưới hiển thị cho bạn một hàm cập nhật vị trí dựa trên số xung được đếm. Khi bạn đã xác định được vị trí về mặt xung, bạn có thể chuyển đổi thành inch bằng cách sử dụng thông số xung trên mỗi inch của bộ truyền động tuyến tính của bạn.

Hướng dẫn thiết bị truyền động tuyến tính của bạn

Để sử dụng chính xác phản hồi vị trí từ cảm biến quang, bạn cần luôn biết vị trí bắt đầu của bộ truyền động tuyến tính. Mặc dù khi bạn bật hệ thống lần đầu tiên, bộ vi điều khiển của bạn sẽ không thể biết liệu bộ truyền động có được mở rộng hay không. Điều này sẽ yêu cầu bạn đưa bộ truyền động tuyến tính của mình về một vị trí đã biết. Về nhà của bạn thiết bị truyền động tuyến tính, bạn sẽ cần phải lái nó đến một vị trí đã biết, chẳng hạn như được rút lại hoàn toàn. Lấy mã Arduino bên dưới làm ví dụ, chúng tôi đã thiết lập vòng lặp WHILE sẽ điều khiển bộ truyền động tuyến tính hướng tới vị trí đã biết. Trong ví dụ này, chúng ta sẽ biết rằng mình đang ở vị trí đã biết bằng cách kiểm tra xem liệu ngắt có được kích hoạt hay không bằng cách kiểm tra xem biến số bước có thay đổi hay không. Chúng ta cũng cần đảm bảo rằng đã có đủ thời gian trôi qua để dự kiến ​​ngắt sẽ được kích hoạt, để làm được điều này, chúng ta sử dụng hàm millis() và so sánh nó với dấu thời gian trước đó. Khi chúng tôi đã xác định rằng bộ truyền động tuyến tính ở vị trí ban đầu, chúng tôi dừng điều khiển bộ truyền động, đặt lại biến số bước và thoát khỏi vòng lặp WHILE.

Xử lý các yếu tố kích hoạt sai

Mặc dù cảm biến quang học không nhạy cảm với nhiễu điện như chiết áp, nhưng nhiễu điện và độ nảy của công tắc vẫn có thể tác động đến tín hiệu đầu ra và có thể kích hoạt các xung sai cần được đếm. Một vài xung bổ sung sẽ không ảnh hưởng nhiều đến việc định vị, nhưng theo thời gian, nó có thể trở thành vấn đề lớn hơn. Bạn có thể giải quyết những vấn đề này bằng cách sử dụng bộ hẹn giờ bên trong để lọc ra các tác nhân kích hoạt sai. Vì bạn có thể xác định tần suất bạn mong đợi các xung mới được phát hiện, bạn có thể lọc ra thời điểm ngắt được kích hoạt bởi nhiễu. Trong mẫu mã bên dưới, trigDelay là độ trễ thời gian giữa mỗi xung. Nếu ngắt được kích hoạt trước độ trễ này thì xung sẽ không được tính. Khoảng thời gian trễ này sẽ khác nhau tùy theo ứng dụng của bạn, nhưng nếu quá ngắn, nó sẽ không lọc nhiễu đúng cách và nếu quá dài, nó sẽ bỏ lỡ các xung thực tế từ cảm biến quang.

Một cách khác để chống lại các kích hoạt sai là sửa giá trị vị trí mỗi khi bộ truyền động đạt đến một vị trí đã biết. Giống như điều khiển bộ truyền động tuyến tính, nếu bạn đã điều khiển bộ truyền động tuyến tính đến vị trí thu lại hoặc mở rộng hoàn toàn hoặc nếu bạn sử dụng các công tắc giới hạn bên ngoài, bạn sẽ biết cần bao nhiêu xung để đạt được vị trí đó. Sau đó, bạn có thể chỉ cần sửa giá trị vị trí bằng giá trị đó khi bạn đạt đến vị trí đã biết đó. Trong mẫu mã bên dưới, việc này được thực hiện cho các vị trí được mở rộng hoàn toàn và được rút lại hoàn toàn. Phương pháp này cung cấp giải pháp thiết thực để đảm bảo giá trị vị trí của bạn luôn chính xác.

Bản tóm tắt

Cảm biến quang học được sử dụng cho phản hồi vị trí mang lại độ chính xác và độ phân giải cao hơn so với cảm biến hiệu ứng Hall và chiết áp, đồng thời có những điểm mạnh và nhược điểm tương tự như cảm biến hiệu ứng Hall. Mặc dù chúng không đo vị trí tuyệt đối và yêu cầu vị trí bắt đầu đã biết để cung cấp giá trị vị trí, số lượng xung lớn trên mỗi inch cho phép độ tin cậy trong việc định vị và đảm bảo nhiều bộ truyền động tuyến tính di chuyển đồng thời. Sử dụng của chúng tôi FA-SYNC-X bộ điều khiển truyền động hoặc thông qua mã bổ sung, bạn thậm chí có thể đảm bảo các bộ truyền động chuyển động đồng bộ bất kể tải trọng.

Để có ví dụ mã hoàn chỉnh, hãy xem blog của chúng tôi trên cách đọc phản hồi vị trí từ cảm biến hiệu ứng Hall bao nhiêu cũng sẽ giống nhau. Các giá trị như xung trên mỗi inch và độ trễ thời gian giữa các xung là một số thay đổi bạn cần thực hiện để sử dụng mã đó nhằm sử dụng chính xác cảm biến quang của mình.

 

[1] Paschotta, R. Bài viết về Cảm biến quang học. Lấy ra từ:https://www.rp-photonics.com/optical_sensors.html

Share This Article
Tags: