Đọc Encoder Bằng Arduino

Share:

Blog tags

arduino arduino với encoder Arduino và Rotary Encoder Module encoder Hiển Thị Tốc Độ Trên Màn Hình LCD kit arduino giá tốt Rotary Encoder Module đo tốc dộ hộp động cơ bằng arduino
Lập Trình Hiển Thị Tốc Độ Trên Màn Hình LCD bằng Arduino với Rotary Encoder

Rotaty Encoder Module trông giống nhưđổi mới trlàm việc dẫu vậy tất cả ngõ ra dạng xung số. Bằng Việc chuyển phiên cầm căn vặn, ngõ ra xung của 2 kênh vẫn biến đổi với cùng một độ lệch sóng xác minh (90 độ) giúp rõ ràng được chiều xoay.

Bạn đang đọc: Đọc encoder bằng arduino

Đếm số lượng xung ngõ ra đã cho biết thêm vị trí góc luân phiên, vị trí này là không giới hạn. Đồng thời module cũng hỗ trợ 1 nút ít nhận có thể được thiết kế nhằm biến chuyển 1 nút remix quý hiếm đếm.

Linh kiện bắt buộc chuẩn bị:

Arduino UNO.Dây gặm breadboard.Module LCD 16x02 hoặc LCD 20x04.Module I2C đến LCD.Encoder quay như hình trên.

Encoder quay.

*

Thông số kỹ thuật: • Điện áp cung cấp: 3.3V • Độ phân giải 20 xung/vòng.

• Các chân tín hiệu: + : chân cấp nguồn dương GND: chân cấp cho nguồn âm CLK: phase A DT: phase B SW: button.

Xem thêm: Marvelous Designer 10 V6 - Marvelous Designer Crack 10 V6

*

Để tinh chỉnh và điều khiển số vòng quay giỏi gia tốc động cơ thì chúng ta tuyệt nhất thiết phải đọc được góc con quay của motor.

*

Encoder thường xuyên bao gồm kênh A, kênh B. Trong hình chúng ta thấy hãy để ý một lỗ nhỏ bên phía trong của đĩa xoay cùng một cặp phat-thu giành riêng cho lỗ nhỏ tuổi này. Cữ những lần motor xoay được một vòng. Bên xung quanh đĩa xoay được tạo thành các rãnh nhỏ dại và một cặp thu-phạt khác dành riêng cho các rãnh này. Đây là kênh A của encoder.

Mỗi các loại encoder có độ sắc nét khác nhau, tất cả Khi trên từng đĩa chĩ gồm vài rãnh tuy nhiên cũng có thể có trường hòa hợp đến hàng nghìn rãnh được phân chia. Để tinh chỉnh hộp động cơ, bạn phải ghi nhận độ phân giải của encoder vẫn sử dụng. Độ phân giải ảnh hưởng mang lại độ đúng chuẩn tinh chỉnh và điều khiển với cả cách thức điều khiển tuy nhiên bên trên các encoder còn có một cặp thu phân phát không giống được để lên trên thuộc con đường tròn với

kênh A dẫu vậy lệch một ít (lệch M+0,5 rãnh), đây là kênh B của encoder. Tín hiệu xung tự kênh B bao gồm cùng tần số cùng với kênh A nhưng mà lệch sóng 90 độ. Bằng phương pháp kết hợp kênh A cùng B bạn phát âm đang biết chiều tảo của hộp động cơ.

*

Hình trên mô tả sự bộ trí của 2 cảm ứng kênh A với B lệch sóng nhau. khi cảm biến A ban đầu bị bít thì cảm biến B hoàn toàn nhận thấy hồng ngoại xuyên thẳng qua, cùng trở lại. Hình rẻ là dạng xung ngõ ra bên trên 2 kênh. Xét trường đúng theo motor tảo cùng chiều klặng đồng hồ đeo tay, biểu hiện “đi” từ bỏ trái lịch sự yêu cầu.

quý khách hãy quan liêu liền kề thời gian biểu lộ A gửi trường đoản cú nút cao xuống rẻ (cạnh xuống) thì kênh B đã ở mức tốt. Ngược lại, giả dụ hộp động cơ quay trái chiều kim đồng hồ thời trang, bộc lộ “đi” trường đoản cú nên qua trái. Trong thời điểm này, tại cạnh xuống của kênh A thì kênh B đã ở tại mức cao.

Vậy nên, bằng phương pháp kết hợp 2 kênh A và B bọn họ ko hầu hết xác minh được góc con quay (thông qua số xung) hơn nữa hiểu rằng chiều tảo của động .

Cách đọcencoder bằng Arduino.

Sử dụng ngắt ngoài: đấy là phương thức dễ dàng dẫu vậy đúng mực để phát âm encoder và cũng là phương thức được sử dụng vào bài học này. Ý tưởng của phương pháp cực kỳ đơn giản, họ nối kênh A của encoder với 1 ngắt bên cạnh (INT2 chẳng hạn) với kênh B với một chân như thế nào đó bất kỳ (chưa phải chân ngắt). Cứ các lần ngắt không tính xảy ra, tức có một xung xuất hiện thêm trên ở kênh A thì trình phục vụ ngắt không tính tự động hóa được điện thoại tư vấn. Trong trình giao hàng ngắt này họ bình chọn mức của kênh B, tùy theo nấc của kênh B họ đang tăng đổi thay đếm xung lên 1 hoặc giảm sút 1. Tuy nhiên, bạn cần phải tính toán khôn cùng cẩn thận khi thực hiện phương thức này.

Trong bài xích này, chúng ta lựa chọn độ phân giải của encoder là 20 (đôi mươi xung bên trên mỗi vòng quay, loại encoder đơn giản và dễ dàng nhất).

Module I2C mang đến LCD.

*

trước hết ta bắt buộc add tlỗi viện I2C mang đến arduino IDE.

Tải thư viện theo link sau: http://www.mediafire.com/file/d401tink3h316vr/I2C.rar

Cách add thư viện mang lại Arduino IDE :

http://bugthecao.com/huong-dan-cai-thu-vien-vao-arduino-ide-ho-tro-cho-viec-lap-trinh

Lắp mạch:

*

Tấm hình thực tế:

*

Lập trình: ( Upload code cho arduino cùng thuộc coi công dụng nhé )

#include

#include

LiquidCrystal_I2C lcd(0x3F,16,2);

// Cách nối những chân trên Encoder quay

#define encoderPinA 2 // Tương ứng chân DT trên Encoder quay

#define encoderPinB 3 // Tương ứng chân CLK bên trên Encoder quay

// Chân + nối mối cung cấp 3.3V cùng chân GND nối cực âm

volatile int encoderPos = 0; // Cho vị trí đầu bởi 0

int lastReportedPos = 1; // Vị trí cuối bởi 1

static boolean rotating=false; // Quản lý debounce (y hệt như là phòng nhiễu)

// các trở thành đến trình giao hàng ngắt interrupt service routine vars

boolean A_phối = false;

boolean B_phối = false;

//Đo tốc độ

int newposition;

int oldposition=0;

long newtime;

long oldtime=0;

int vantoc = 0;

int ganvantoc = 0;

int ganxung = 0;

int sovong = 0;

void setup()

lcd.begin(20,4);

lcd.init(); // initialize the lcd

lcd.backlight();

pinMode(encoderPinA, INPUT_PULLUP); // INPUT-PULLUP.. tương đương Mode INPUT cùng auto nhận tâm trạng HIGH hoặc LOW

pinMode(encoderPinB, INPUT_PULLUP);

// Chân encoder bên trên ngắt 0 (chân 2)

attachInterrupt(0, doEncoderA, CHANGE);

// Chân encoder trên ngắt 1 (chân 3)

attachInterrupt(1, doEncoderB, CHANGE);

Serial.begin(9600); // gửi dữ liệu lên cổng Serial Port

lcd.setCursor(0,1);

lcd.print("SO VONG = ");

// Vòng lặp bao gồm, các bước được thực hiện vày trình phục vụ ngắt

void loop()

delay(1000);

rotating = true; // Khởi đụng cỗ debounce (hoàn toàn có thể gọi nhỏng bộ phòng nhiễu)

newtime=millis();

newposition=encoderPos;

detachInterrupt(0);

detachInterrupt(1);

vantoc = (newposition-oldposition)*60/20;

Serial.print("vantoc=");

Serial.println(vantoc,DEC);

oldposition=newposition;

oldtime=newtime;

lcd.clear();

lcd.setCursor(0,0);

lcd.print("TOC DO = ");

lcd.setCursor(11,0);

lcd.print(vantoc);

lcd.print(" RPM");

lcd.setCursor(0,1);

lcd.print("SO VONG = ");

lcd.setCursor(11,1);

lcd.print(sovong,DEC);

attachInterrupt(0, doEncoderA, CHANGE);

attachInterrupt(1, doEncoderB, CHANGE);

// Ngắt khi chuyển tâm lý của A

void doEncoderA(){

// debounce

if ( rotating ) delay (1); // Chờ 1 chút

// Kiểm tra vấn đề thay đổi tâm trạng, xem bao gồm thật sự chuyển đổi tâm lý chưa

Bài viết liên quan