Mục lục:

Bộ giải mã vòng quay đơn giản: 4 bước
Bộ giải mã vòng quay đơn giản: 4 bước

Video: Bộ giải mã vòng quay đơn giản: 4 bước

Video: Bộ giải mã vòng quay đơn giản: 4 bước
Video: Các Loại Bộ Mã Hóa Vòng Xoay - Hungphu.com.vn 2024, Tháng mười một
Anonim
Image
Image
Bộ giải mã vòng quay đơn giản
Bộ giải mã vòng quay đơn giản

Hướng dẫn này mô tả một phương pháp đơn giản để giải mã bộ mã hóa quay tuần tự bằng Arduino Uno R3.

Các quy trình phần mềm nhỏ gọn được sử dụng để đếm số lần chuyển đổi, loại bỏ hiện tượng nảy tiếp xúc và xác định hướng quay. Các thành phần bổ sung và bảng tra cứu không bắt buộc.

Các phiên bản ngắt và không ngắt của mã được cung cấp.

Phiên bản ngắt của mã chỉ yêu cầu một chân ngắt duy nhất.

Hình ảnh:

  • Hình ảnh mở đầu cho thấy bộ mã hóa đã lắp ráp.
  • Ảnh chụp màn hình hiển thị mã cho phiên bản ngắt và số đếm khi trục bộ mã hóa được quay theo chiều kim đồng hồ và ngược chiều kim đồng hồ.
  • Video hiển thị số đếm trong quá trình quay nhanh.

Bước 1: Sơ đồ mạch

Sơ đồ mạch
Sơ đồ mạch

Sơ đồ đấu dây bộ mã hóa được hiển thị trong hình 1.

Các dây jumper được hàn trực tiếp vào các chân của bộ mã hóa.

Trao đổi hai dây màu xanh nếu hướng đếm bị đảo ngược.

Bước 2: Danh sách bộ phận

Các phần sau được lấy từ

  • 1 duy nhất Arduino UNO R3 với cáp USB.
  • 1 bộ mã hóa quay tuần tự duy nhất (EC11 hoặc tương đương) có công tắc.
  • 1 núm duy nhất cho phù hợp với trục.
  • 3 dây nhảy nam sang nam duy nhất của Arduino.

Bước 3: Lý thuyết

Học thuyết
Học thuyết

Các bộ mã hóa quay tuần tự tạo ra hai sóng vuông, mỗi sóng được dịch chuyển 90 độ như thể hiện trong Hình 1.

Các mẫu logic tại Tiếp điểm A và Tiếp điểm B khác nhau khi trục quay theo chiều kim đồng hồ (CW) và ngược chiều kim đồng hồ (CCW) qua các vị trí từ 1 đến 6.

Các phương pháp phổ biến để xác định hướng quay bao gồm:

  • phần cứng
  • ngắt đôi
  • bảng tra cứu mẫu

Dự án này sử dụng một phương pháp phần mềm không yêu cầu bảng tra cứu. [1]

Phương hướng

Thay vì xem xét các mẫu đầu ra từ Liên hệ A và Liên hệ B, hãy tập trung vào Liên hệ A.

Nếu chúng tôi lấy mẫu Liên hệ B sau mỗi lần chuyển đổi Liên hệ A, chúng tôi lưu ý rằng:

  • Tiếp điểm A và tiếp điểm B có trạng thái logic ngược nhau khi bộ mã hóa được xoay CW
  • Tiếp điểm A và Tiếp điểm B có cùng trạng thái logic khi bộ mã hóa được xoay CCW

Mã thực tế:

// ----- Đếm quá trình chuyển đổi

CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Đếm--; LastStateA = CurrentStateA; }

Phương pháp này mang lại những ưu điểm sau:

  • bảng tra cứu không bắt buộc
  • chỉ cần một dòng ngắt duy nhất

Debounce

Tất cả các bộ mã hóa cơ học đều bị "trả lại tiếp xúc".

Nếu một tiếp điểm công tắc không thực hiện / ngắt một cách sạch sẽ thì trạng thái logic của nó sẽ dao động nhanh chóng từ CAO đến THẤP cho đến khi tiếp điểm công tắc ổn định. Điều này dẫn đến số lượng sai.

Một phương pháp để triệt tiêu tiếp xúc nảy là thêm một tụ điện nhỏ trên mỗi tiếp điểm của công tắc. Tụ điện và điện trở kéo lên được kết hợp tạo thành một bộ tích hợp có hiệu quả làm giảm tần số cao và cho phép điện áp chuyển đổi tăng / giảm một cách duyên dáng.

Nhược điểm của phương pháp này là có thể bỏ sót quá trình chuyển đổi nếu trục bộ mã hóa quay nhanh.

Debouncing phần mềm

Phương pháp này sử dụng hai bộ đếm (Mở, Đóng) đã được đặt thành 0. [2]

Sau khi phát hiện thấy quá trình chuyển đổi trên Liên hệ A:

  • Liên tục thăm dò Liên hệ A.
  • Tăng bộ đếm Mở và đặt lại bộ đếm Đóng, bất cứ khi nào Tiếp điểm A ở mức CAO.
  • Tăng bộ đếm Đóng và đặt lại bộ đếm Mở, bất cứ khi nào Tiếp điểm A ở mức THẤP.
  • Thoát khỏi vòng lặp khi một trong các bộ đếm đạt đến số đếm định trước. Chúng tôi đang tìm kiếm hiệu quả khoảng thời gian trạng thái ổn định sau bất kỳ số liên lạc nào bị trả lại.

Mã thực tế:

// ----- Liên hệ Debounce A

while (1) {if (digitalRead (ContactA)) {// ----- ContactA is Open Closed = 0; // Bộ tích phân đối diện rỗng Open ++; // Tích hợp if (Open> MaxCount) return HIGH; } else {// ----- ContactA is Closed Open = 0; // Bộ tích phân đối diện rỗng Đóng ++; // Tích hợp if (Closed> MaxCount) return LOW; }}

Không cần phải loại bỏ Tiếp điểm B vì việc chuyển đổi Tiếp điểm A và Tiếp điểm B không trùng khớp với nhau.

Đếm

Một "detent" cơ học tăng gấp đôi số của bạn một cách hiệu quả khi hai số được đăng ký giữa các lần nhấp (xem hình 1).

Có thể xác định số lượng "phần tử" bằng cách sử dụng số học modulo 2 như hình dưới đây.

Mã thực tế:

// ----- Đếm "detents"

if (Đếm% 2 == 0) {Serial.print ("Đếm:"); Serial.println (Số lượng / 2); }

Người giới thiệu

Thông tin thêm có thể được tìm thấy tại:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

Bước 4: Phần mềm

Dự án này yêu cầu phiên bản gần đây của Ardino Uno R3 IDE (môi trường phát triển tích hợp) có sẵn tại

Tải xuống từng bản phác thảo Arduino sau (đính kèm)

  • rotary_encoder_1.ino (phiên bản thăm dò ý kiến)
  • rotary_encoder_2.no (phiên bản ngắt)

Nhấp đúp vào phiên bản ưa thích của bạn và làm theo hướng dẫn trên màn hình.

Thưởng thức …

Nhấn vào đây để xem các tài liệu hướng dẫn khác của tôi.

Đề xuất: