- Bộ mã hóa quay và các loại của nó
- Sơ đồ và mô tả của bộ mã hóa quay KY-040
- Cách hoạt động của bộ mã hóa quay
- Thành phần bắt buộc
- Sơ đồ mạch giao diện bộ mã hóa quay PIC16F877A
- Giải thích mã
Một encoder Rotary là một thiết bị đầu vào mà giúp người dùng tương tác với hệ thống. Nó trông giống như một chiết áp Radio nhưng nó tạo ra một chuỗi các xung làm cho ứng dụng của nó trở nên độc đáo. Khi núm của Bộ mã hóa được xoay, nó sẽ xoay theo các bước nhỏ giúp nó được sử dụng để điều khiển động cơ bước / Servo, điều hướng qua một chuỗi menu và Tăng / giảm giá trị của một số và hơn thế nữa.
Trong bài viết này, chúng ta sẽ tìm hiểu về các loại Rotary Encoders khác nhau và cách hoạt động của nó. Chúng tôi cũng sẽ giao tiếp nó với Vi điều khiển PIC PIC16F877A và điều khiển giá trị của một số nguyên bằng cách xoay Bộ mã hóa và hiển thị giá trị của nó trên màn hình LCD 16 * 2. Vào cuối hướng dẫn này, bạn sẽ cảm thấy thoải mái với việc sử dụng Bộ mã hóa quay cho các dự án của mình. Vậy hãy bắt đầu…
Bộ mã hóa quay và các loại của nó
Bộ mã hóa quay thường được gọi là bộ mã hóa trục. Nó là một bộ chuyển đổi cơ điện, có nghĩa là nó chuyển đổi các chuyển động cơ học thành các xung điện tử hay nói cách khác nó chuyển đổi vị trí góc hoặc chuyển động hoặc vị trí trục sang tín hiệu số hoặc tương tự. Nó bao gồm một núm mà khi xoay sẽ di chuyển từng bước và tạo ra một chuỗi các tàu xung với độ rộng được xác định trước cho mỗi bước.
Có nhiều loại bộ mã hóa quay trên thị trường, nhà thiết kế có thể chọn một loại tùy theo ứng dụng của mình. Các loại phổ biến nhất được liệt kê dưới đây
- Mã hóa gia tăng
- Bộ mã hóa tuyệt đối
- Bộ mã hóa từ tính
- Bộ mã hóa quang học
- Bộ mã hóa Laser
Các bộ mã hóa này được phân loại dựa trên công nghệ cảm biến và tín hiệu đầu ra, bộ mã hóa tăng dần và mã hóa tuyệt đối được phân loại dựa trên tín hiệu đầu ra và bộ mã hóa từ tính, quang học và laser được phân loại dựa trên công nghệ cảm biến. Bộ mã hóa được sử dụng ở đây là Bộ mã hóa kiểu tăng dần.
Bộ mã hóa tuyệt đối lưu trữ thông tin vị trí ngay cả sau khi nguồn điện được rút ra và thông tin vị trí sẽ có sẵn khi chúng tôi áp dụng lại nguồn điện cho nó.
Loại cơ bản khác, Bộ mã hóa tăng dần cung cấp dữ liệu khi bộ mã hóa thay đổi vị trí của nó. Nó không thể lưu trữ thông tin vị trí.
Sơ đồ và mô tả của bộ mã hóa quay KY-040
Sơ đồ chân của bộ mã hóa quay kiểu tăng dần KY-040 được hiển thị bên dưới. Trong dự án này, chúng tôi sẽ giao diện Bộ mã hóa quay này với bộ vi điều khiển phổ biến PIC16F877A từ vi mạch.
Hai chân đầu tiên (Ground và Vcc) được sử dụng để cấp nguồn cho Bộ mã hóa, thường sử dụng nguồn + 5V. Ngoài việc xoay núm theo hướng khôn ngoan và ngược chiều kim đồng hồ, bộ mã hóa còn có một công tắc (Hoạt động thấp) có thể được nhấn bằng cách nhấn vào núm bên trong. Tín hiệu từ công tắc này được thu qua chân 3 (SW). Cuối cùng nó có hai chân đầu ra (DT và CLK) tạo ra các dạng sóng như đã thảo luận bên dưới. Chúng tôi đã giao tiếp Bộ mã hóa quay này trước đây với Arduino.
Cách hoạt động của bộ mã hóa quay
Đầu ra hoàn toàn phụ thuộc vào các miếng đồng bên trong cung cấp kết nối với GND và VCC với trục.
Có hai phần của Bộ mã hóa quay. Bánh xe trục được kết nối với trục và quay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ tùy thuộc vào chuyển động quay của trục và đế nơi kết nối điện được thực hiện. Đế có các cổng hoặc điểm được kết nối với DT hoặc CLK theo cách mà khi trục quay, nó sẽ kết nối các điểm cơ sở và cung cấp sóng vuông trên cả cổng DT và CLK.
Đầu ra sẽ giống như khi trục quay-
Hai cổng cung cấp sóng vuông nhưng có một chút khác biệt về thời gian. Do đó, nếu chúng ta chấp nhận đầu ra là 1 và 0, chỉ có thể có bốn trạng thái, 0 0, 1 0, 1 1, 0 1. Trình tự của đầu ra nhị phân xác định chiều quay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ. Chẳng hạn như, nếu Bộ mã hóa quay cung cấp 1 0 ở điều kiện không hoạt động và cung cấp 1 1 sau đó, điều đó có nghĩa là bộ mã hóa thay đổi vị trí của nó một bước theo chiều kim đồng hồ, nhưng nếu nó cung cấp 0 0 sau 1 0 không hoạt động, có nghĩa là trục đang thay đổi vị trí của nó theo hướng ngược chiều kim đồng hồ với một bước.
Thành phần bắt buộc
Đây là lúc để xác định những gì chúng ta cần để giao tiếp Bộ mã hóa quay với Bộ vi điều khiển PIC,
- PIC16F877A
- Điện trở 4,7k
- Điện trở 1k
- Hủ 10k
- Tụ đĩa gốm 33pF - 2 cái
- Tinh thể 20Mhz
- Màn hình 16x2
- Bộ mã hóa quay
- Bộ đổi nguồn 5V.
- Bảng bánh mì
- Dây móc.
Sơ đồ mạch giao diện bộ mã hóa quay PIC16F877A
Dưới đây là hình ảnh thiết lập cuối cùng sau khi kết nối các thành phần theo Sơ đồ mạch:
Chúng tôi đã sử dụng một điện trở 1K duy nhất cho độ tương phản của màn hình LCD thay vì sử dụng một chiết áp. Ngoài ra, hãy kiểm tra toàn bộ video hoạt động được đưa ra ở cuối.
Giải thích mã
Mã PIC hoàn chỉnh được đưa ra ở phần cuối của dự án này với một video trình diễn, ở đây chúng tôi sẽ giải thích một số phần quan trọng của mã. Nếu bạn chưa quen với Vi điều khiển PIC thì hãy làm theo các hướng dẫn về PIC của chúng tôi ngay từ đầu.
Như chúng ta đã thảo luận trước đó, chúng ta cần kiểm tra đầu ra và phân biệt đầu ra nhị phân cho cả DT và CLK, vì vậy chúng tôi đã tạo một phần if-else cho hoạt động.
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); bộ đếm ++; // Tăng bộ đếm sẽ được in trên lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, bộ đếm); } else { // lcd_com (0x01); lcd_com (0xC0); quầy tính tiền--; // giảm bộ đếm lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, bộ đếm); // lcd_puts ("Left"); } }
Chúng ta cũng cần lưu trữ vị trí trên mỗi bước. Để làm điều này, chúng tôi đã sử dụng một biến "vị trí" lưu trữ vị trí hiện tại.
vị trí = Bộ mã hóa_CLK; // Nó là để lưu trữ vị trí xung nhịp mã hóa trên biến. Có thể là 0 hoặc 1.
Khác với tùy chọn này, một tùy chọn được cung cấp để thông báo về việc nhấn công tắc trên màn hình LCD.
if (Encoder_SW == 0) { sw_delayms (20); // độ trễ gỡ lỗi if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("công tắc được nhấn"); // itoa (counter, value, 10); // lcd_puts (giá trị);
Các system_init chức năng được sử dụng để khởi tạo pin I / O hoạt động, màn hình LCD và để lưu trữ vị trí Rotary Encoder.
void system_init () { TRISB = 0x00; // Cổng B làm đầu ra, Cổng này được sử dụng cho LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Thao tác này sẽ Khởi tạo vị trí LCD = Encoder_CLK; // Đã chọn vị trí CLK trên hệ thống init, trước khi bắt đầu vòng lặp while. }
Hàm LCD được viết trên thư viện lcd.c và lcd.h, nơi khai báo lcd_puts (), lcd_cmd ().
Đối với khai báo biến, các bit cấu hình và các đoạn mã khác, vui lòng tìm mã đầy đủ bên dưới.