1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo thực hành cảm biến trong điều khiển đọc xung encoder

7 75 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 435,15 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Báo cáo thực hành cảm biến trong điều khiển đọc xung encoder cung cấp cho các bạn sơ đồ nguyên lý cảm biến trong điều khiển đọc xung encoder, lập trình trên arduino,... Với các bạn chuyên ngành Điện - Điện tử thì đây là tài liệu tham khảo hữu ích.

Trang 1

GIÁO D C VÀ ĐÀO T O Ụ Ạ

TR ƯỜ NG Đ I H C NÔNG LÂM THÀNH PH  H  CHÍ MINH Ạ Ọ Ố Ồ

KHOA C  KHÍ – CÔNG NGH Ơ Ệ

—–¯—–

  

   BÁO CÁO TH C HÀNH C M BI N Ự Ả Ế  TRONG ĐI U KHI N Ề Ể

Đ C XUNG ENCODER

          

      

GVHD : Ths. LÊ VĂN B N

SVTH  : Tr n Đ c B oầ ứ ả

LỚP     : DH12TD MSSV  : 12138017

Thang ́ 6 năm 2015

Trang 2

I. GI I THI U ENCODER:Ớ Ệ

II. S  Đ  NGUYÊN LÝ:Ơ Ồ

Trang 3

III. L P TRÌNH TRÊN ARDUINO:

/*

 Chương trình ng t cho Encoder quayắ

 M t encoder quay thông thộ ường có 3 chân, nhìn t  m t trừ ặ ước là A C B

 Quay theo chi u kim đ ng h  A(on)>B(on)>A(off)­>B(off)ề ồ ồ

 Quay ngược chi u kim đ ng h  B(on)>A(on)>B(off)­>A(off)ề ồ ồ

 Ngoài ra còn có m t chân có nút nh n và 2 chân ngu nộ ấ ồ

*/

#define  encoderPinA  2   // Tương  ng chân DT trên Encoder:    right (labeled ứ

DT on our decoder, yellow wire)

Trang 4

#define  encoderPinB  3   // Tương  ng chân CLK trên Encoder:   left (labeled ứ CLK on our decoder, green wire)

#define  clearButton  8    // Chân c a nút nh n switch (labeled SW on our ủ ấ

decoder, orange wire)

// Chân + n i ngu n 5V và chân GND n i c c âm connect the +5v and gnd ố ồ ố ự appropriately

volatile unsigned int encoderPos = 0;  // Cho v  trí đ u b ng 0 a counter for the ị ầ ằ dial

unsigned int lastReportedPos = 1;   // V  trí cu i b ng 1 i change managementị ố ằ static boolean rotating=false;      // Qu n lý debounce (gi ng nh  là ch ng nhi u)ả ố ư ố ễ   debounce management

// các bi n cho trình ph c v  ng t interrupt service routine varsế ụ ụ ắ

boolean A_set = false;      

boolean B_set = false;

void setup() {

  pinMode(encoderPinA, INPUT_PULLUP); // INPUT­PULLUP tương đương  Mode INPUT và t  đ ng nh n tr ng thái HIGH ho c LOWự ộ ậ ạ ặ

  pinMode(encoderPinB, INPUT_PULLUP);

  pinMode(clearButton, INPUT_PULLUP);

 

// Chân encoder trên ng t 0 (chân 2): encoder pin on interrupt 0 (pin 2)ắ

  attachInterrupt(0, doEncoderA, CHANGE);

Trang 5

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

  attachInterrupt(1, doEncoderB, CHANGE);

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

}

// Vòng l p chính, công vi c đặ ệ ược th c hi n b i trình ph c v  ng t: main loop, ự ệ ở ụ ụ ắ work is done by interrupt service routines, this one only prints stuff

void loop() {

  rotating = true;  // Kh i đ ng b  debounce (có th  hi u nh  b  ch ng nhi u): ở ộ ộ ể ể ư ộ ố ễ reset the debouncer

  if (lastReportedPos != encoderPos) {

    Serial.print("Index:");

    Serial.println(encoderPos, DEC);

    lastReportedPos = encoderPos;

  }

  if (digitalRead(clearButton) == LOW )  {

    encoderPos = 0;

  }

}

// Ng t khi chuy n tr ng thái c a A: Interrupt on A changing stateắ ể ạ ủ

void doEncoderA(){

  // debounce

  if ( rotating ) delay (1);  // Ch  1 chút wait a little until the bouncing is doneờ

Trang 6

  // Ki m tra vi c chuy n đ i tr ng thái, xem có th t s  thay đ i tr ng thái ể ệ ể ổ ạ ậ ự ổ ạ

ch a: Test transition, did things really change?ư

  if( digitalRead(encoderPinA) != A_set ) {  // debounce m t l n n a: debounce ộ ầ ữ once more

    A_set = !A_set;

    // C ng 1 n u có tín hi u A r i có tín hi u B: adjust counter + if A leads Bộ ế ệ ồ ệ

    if ( A_set && !B_set )

      encoderPos += 1;

    rotating = false;  // Không c n debounce n a cho đ n khi đầ ữ ế ược nh n l n n a: ấ ầ ữ

no more debouncing until loop() hits again

  }

}

// Ng t khi thay đ i tr ng thái   B, tắ ổ ạ ở ương t  nh    A: Interrupt on B changing ự ư ở state, same as A above

void doEncoderB(){

  if ( rotating ) delay (1);

  if( digitalRead(encoderPinB) != B_set ) {

    B_set = !B_set;

    //  Tr  1 n u B r i đ n A: adjust counter ­ 1 if B leads Aừ ế ồ ế

    if( B_set && !A_set )

      encoderPos ­= 1;

Trang 7

    rotating = false;   }

}

Ngày đăng: 13/01/2020, 16:53

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w