Cách thức hoạt động của bộ mã hóa quay và giao diện với Arduino

Cach Thuc Hoat Dong Cua Bo Ma Hoa Quay Va Giao Dien Voi Arduino



Bộ mã hóa quay là một thiết bị cơ điện quan trọng có ứng dụng đa dạng trong lĩnh vực điện tử. Bài viết này sẽ giải thích các loại và hoạt động của bộ mã hóa vòng quay cùng với giao diện của nó với Arduino.

Bộ mã hóa quay là gì

Bộ mã hóa vòng quay là thiết bị đầu vào kỹ thuật số cảm nhận vị trí góc của núm xoay và gửi tín hiệu đến bộ vi điều khiển hoặc bất kỳ thiết bị nào khác mà chúng được kết nối. Chúng có thể xoay 360° mà không dừng lại. Nó còn được gọi là bộ mã hóa trục. Nó được sử dụng trong máy in, thiết bị điện tử âm thanh, động cơ và bộ điều khiển.









Các loại bộ mã hóa quay

Chủ yếu có hai loại bộ mã hóa vòng quay được quyết định dựa trên tín hiệu đầu ra do chúng tạo ra. Các loại này được đặt tên:



Bộ mã hóa quay tăng dần

Loại encoder này đếm số vòng quay của núm xoay dưới dạng xung. Khi núm được xoay một lần, một xung được tạo ra. Đối với mỗi xung, bộ đếm tăng lên để chỉ vị trí góc của trục.





Bộ mã hóa quay tuyệt đối

Loại bộ mã hóa này cung cấp vị trí góc tuyệt đối của trục, vì nó có một mã riêng cho từng vị trí trục và nó đo góc thông qua mã đó. Nó không cần bộ đếm để đưa ra đầu ra của vị trí góc. Ngay cả khi bộ mã hóa vòng quay tuyệt đối bị ngắt điện, các giá trị tương ứng cho các vị trí góc vẫn được giữ lại. Nó cũng là một bộ mã hóa chi phí thấp.



Hoạt động của bộ mã hóa quay

Bộ mã hóa vòng quay bao gồm một đĩa có các vùng cách đều nhau được kết nối với chân C chung được nối đất. Hai chốt khác A và B là các chốt tiếp xúc tiếp xúc với C khi xoay núm xoay. Khi chân A hoặc B được nối đất, tín hiệu sẽ được tạo ra. Các tín hiệu này được tạo ra từ các chân đầu ra lệch pha 90°. Điều này là do chân A được nối đất khi xoay núm xoay theo chiều kim đồng hồ và chân B được nối đất trước khi xoay núm xoay ngược chiều kim đồng hồ. Do đó, hướng xoay của núm được xác định thông qua các kết nối này.

Nếu trạng thái của b Không bằng MỘT , thì núm đã xoay theo chiều kim đồng hồ.


Nếu trạng thái của B bằng A tức là núm đã quay ngược chiều kim đồng hồ.

Cấu hình chân của bộ mã hóa quay

Sơ đồ dưới đây đưa ra sơ đồ chân của bộ mã hóa vòng quay hiển thị các chân đầu ra A và B, một công tắc xoay có thể được sử dụng làm nút ấn và các chân để cấp nguồn.

Mô tả chân của Bộ mã hóa quay

Sau đây là mô tả đã cho về tất cả các chân của bộ mã hóa vòng quay.

Ra B hoặc CLK

Chân này cung cấp đầu ra về số lần núm hoặc bộ mã hóa vòng quay đã quay. Mỗi khi xoay núm này, CLK sẽ hoàn thành một chu kỳ CAO và THẤP. Nó được tính là một vòng quay.

Ra A hoặc DT

Đây là chân đầu ra thứ hai của bộ mã hóa vòng quay xác định hướng quay. Nó trễ 90° so với tín hiệu CLK. Do đó, nếu trạng thái của nó không bằng trạng thái của CLK thì hướng quay theo chiều kim đồng hồ, ngược lại, ngược chiều kim đồng hồ.

Công tắc

Chốt công tắc dùng để kiểm tra xem nút nhấn có được nhấn hay không.

VCC

Chân này được kết nối với nguồn 5V

GND

Chân này được nối với Đất

Kết nối bộ mã hóa vòng quay với Arduino

Bộ mã hóa quay có năm chân. VCC và GND của bộ mã hóa quay được kết nối với Arduino. Các chân còn lại CLK, DT và SW được kết nối với các chân đầu vào kỹ thuật số của Arduino.

Mã Arduino cho bộ mã hóa quay

// Đầu vào bộ mã hóa quay
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
bộ đếm int = 0 ;
int currentCLKState;
int lastCLKState;
Chuỗi hướng hiện tại = '' ;
unsigned long lastButtonPressTime = 0 ;
thiết lập vô hiệu ( ) {
// Đặt chân bộ mã hóa BẰNG đầu vào
    chế độ ghim ( CLK_PIN, ĐẦU VÀO ) ;
    chế độ ghim ( DT_PIN, ĐẦU VÀO ) ;
    chế độ ghim ( SW_PIN, INPUT_PULLUP ) ;
// Thiết lập màn hình nối tiếp
Nối tiếp.bắt đầu ( 9600 ) ;
// Đọc trạng thái ban đầu của CLK
lastCLKState = đọc kỹ thuật số ( CLK_PIN ) ;
}
vòng lặp trống ( ) {
// Đọc trạng thái hiện tại của CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Nếu cuối cùng và trạng thái hiện tại của CLK là khác nhau, sau đó một xung xảy ra
// Chỉ phản ứng với 1 thay đổi trạng thái để tránh tính hai lần
nếu như ( hiện tạiCLKState ! = lastCLKState && currentCLKState == 1 ) {
// Nếu trạng thái DT khác với trạng thái CLK, sau đó
// Bộ mã hóa đang quay ngược chiều kim đồng hồ, vì vậy mức giảm
nếu như ( kỹ thuật sốĐọc ( DT_PIN ) ! = currentCLKState ) {
quầy tính tiền--;
hiện tạiDirection = 'CCW' ;
} khác {
// Bộ mã hóa đang quay theo chiều kim đồng hồ, vì vậy hãy tăng
bộ đếm ++;
hiện tạiDirection = 'CW' ;
}
nối tiếp.print ( 'Hướng quay: ' ) ;
nối tiếp.print ( hướng hiện tại ) ;
nối tiếp.print ( ' | Giá trị bộ đếm: ' ) ;
Nối tiếp.println ( quầy tính tiền ) ;
}
// Nhớ cái gì đó cuối cùng trạng thái CLK
lastCLKState = currentCLKState;
// Đọc trạng thái nút
int buttonState = digitalRead ( SW_PIN ) ;
// Nếu chúng tôi phát hiện tín hiệu THẤP, nút sẽ được nhấn
nếu như ( buttonState == THẤP ) {
// Nếu 50ms đã trôi qua kể từ khi cuối cùng Xung THẤP, điều đó có nghĩa là
// nút đã được nhấn, nhả và nhấn lại
nếu như ( millis ( ) - lastButtonPressTime > năm mươi ) {
Nối tiếp.println ( 'Ấn nút!' ) ;
}
// Nhớ cái gì đó cuối cùng sự kiện bấm nút thời gian
lastButtonPressTime = millis ( ) ;
}
// Đặt TRONG một chút chậm trễ để giúp đỡ ra mắt bài đọc
trì hoãn ( 1 ) ;
}


Trong đoạn mã trên, trạng thái của chân CLK được kiểm tra trong hàm loop(). Nếu nó không bằng trạng thái trước đó, chứng tỏ núm xoay đã xoay. Bây giờ, để kiểm tra hướng xoay của núm, trạng thái hiện tại của CLK được so sánh với trạng thái của DT. Nếu cả hai trạng thái không bằng nhau, điều đó cho thấy núm xoay đã quay theo chiều kim đồng hồ và bộ đếm tăng giá trị của nó để hiển thị vị trí của núm xoay. Trong trường hợp ngược lại, truy cập giảm.

Phần kết luận

Bộ mã hóa quay là cảm biến vị trí tiên tiến có thể xoay liên tục. Chúng có sẵn trong hai loại: gia tăng và tuyệt đối. Bộ mã hóa vòng quay hoạt động bằng cách đếm các xung được tạo ra do vòng quay của núm. Nó có các ứng dụng đa dạng trong điện tử đời sống hàng ngày đến tự động hóa công nghiệp.