PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 29-10-2007, 11:55 PM   #2
huybo02
Đệ tử 4 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 61
:
QEI ( Quadrature Encoder Interface ) là module dùng để giao tiếp với Quadrature Encoder (hay còn gọi là incremental encoder ).

Thông tin về incremental encoder đã được anh F giới thiệu trong phần cảm biến:
http://www.picvietnam.com/forum//showthread.php?t=224
Incremental encoder có thể dùng để định vị và xác định vận tốc của một chuyển động quay quanh trục và được dùng phổ biến trong các động cơ do cấu tạo đơn giản,rẻ tiền và độ phân giải lớn.
Incremental encoder gồm 2 pha: pha A và pha B và có thể thêm pha index. Pha A và B để xác định vận tốc và chiều quay. Pha index dùng để đối chiếu, xác định số vòng quay và tham chiếu vị trí.

Để tính vận tốc ta có thể xác định số xung của encoder trong 1 khoảng thời gian và chia cho độ phân giải ta được vận tốc trong 1 đơn vị thời gian. Ví dụ encoder có độ phân giải 400pps (pulses per revolution) và trong 1s ta đếm được 1000 xung => tốc độ quay là 1000/400 = 2.5 vòng/giây. Để xác định vận tốc này trong PIC ta có thể dùng ngắt ngoài RB0, mỗi lần ngắt ta đếm thêm 1 xung và sau một khoảng thời gian ta xác định số xung, chia cho khoảng thời gian thì tìm được vận tốc.

Để xác định chiều quay ta dùng cả hai pha A và B. Nếu pha A nhanh hơn pha B => quay theo chiều thuận và ngược lại. Một cách khác để xác định chiều quay được anh F giới thiệu:

Trích:
http://i3.photobucket.com/albums/y64.../encoder_p.jpg

Hình trên là hình xung incremental encoder.

Các bạn thấy rằng nếu như khi xung A đang từ mức cao xuống mức thấp, mà lúc đó B đang ở mức thấp, thì chúng ta sẽ xác định được chiều chuyển động của encoder theo chiều mũi tên màu cam.

Nếu A đang từ mức cao xuống mức thấp, mà B đang ở mức cao, thì chúng ta sẽ biết encoder đang quay theo chiều màu nâu.
Ta có thể dùng phương pháp này để lập trình cho QEI bằng cách phát hiện cạnh xung xuống của pha A, cập nhật giá trị pha B và suy ra chiều quay.

Có thể nối pha A vào RB0 dùng ngắt ngoài theo cạnh xuống và lúc xảy ra ngắt kiểm tra giá trị của pha B (nối vào RB1 chẳng hạn và RB1 được khai báo là input):

Code:
#INT_EXT
void ngat_RB0()
{
xung++;                             // tăng biến xung
if (RB1 ==0) chieu =thuan;     // xét giá trị pha B nếu pha B ở mức thấp => chiều thuận 
else chieu = nguoc;               // ngược lại chiều ngược
}
hoặc dùng ngắt onchange RB với ngắt xảy ra cả hai cạnh lên và xuống. Bằng cách này ta có thể dùng encoder với độ phân giải gấp 4 lần độ phân giải danh định:

Code:
#INT_RB
void ngat_RB()
{
   xung++;
   n = m;             //giá trị trước của pha A
   m = RB7;          // giá trị hiện tại của pha A
   if (m<n)           // cạnh xuống pha A
   {
      if(RB6==1)    // xét giá trị pha B
      q=0;             // => chiều quay 
      else  q=1;
   }
}

thay đổi nội dung bởi: huybo02, 30-10-2007 lúc 12:06 AM.
huybo02 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:19 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam