|
Tài trợ cho PIC Vietnam |
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 |
29-10-2007, 11:55 PM | #2 | |
Đệ 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:
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 } 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. |
|
Ðiều Chỉnh | |
Xếp Bài | |
|
|