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.