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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 29-10-2007, 02:28 PM   #1
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Module Quadrature Encoder Interface (QEI)

Mở luồng này để các bạn thảo luận và trang bị những kiến thức cơ bản về QEI vì chưa thấy luồng thảo luận về vấn đề này được mở ra.

Chúc vui.

Tài liệu tham khảo:
[1] Section 16. Quadrature Encoder Interface (QEI) - dsPIC30F FRM
[2] Cảm biến encoder, dùng loại nào: Absolute - Incremental
[3] AN908: Using the dsPIC30F for Vector Control of an ACIM
[4] Datasheet dsPIC30F6010A

thay đổi nội dung bởi: falleaf, 30-10-2007 lúc 03:13 PM.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
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
Old 30-10-2007, 07:55 AM   #3
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
PIC/dsPIC có hỗ trợ module QEI thì ko việc gì phải dùng đến ngắt ngoài RB0 hay ngắt RB4-RB7, thế thì còn gì là module QEI.

Lật ngay datasheet con nào hỗ trợ QEI như PIC18F4331, dsPIC2010,...phần QEI rất rõ ràng.

Ko hiểu bạn đang thảo luận về module QEI hay cách đọc encoder.
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-12-2007, 10:46 AM   #4
bigtitan
Đệ tử 3 túi
 
Tham gia ngày: Oct 2005
Bài gửi: 47
:
Vậy dùng QEI như thế nào.Bác nào có thể cho xin code ví dụ được ko,ds hay 18F cũng đc.
bigtitan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-05-2008, 06:07 PM   #5
truongthont
Nhập môn đệ tử
 
Tham gia ngày: Jul 2007
Bài gửi: 1
:
Cho mình hỏi về cách thiết lập module QEI trong 30f4011,nhận xung encoder 2 pha từ động cơ.encoder của mình không có chân INDEX.
Mình thiết lập như thề này nhưng vẫn chưa đọc đuoc POSCNT
Ai biết thì chỉ dùm mình nhé.

Code:
void InitQEI(void) 
{
 
ADPCFG  |=  0x0038;    // Configure QEI pins as digital inputs
QEICONbits.QEIM  =  0; // Disable QEI Module
QEICONbits.CNTERR = 0;// Clear any count errors
QEICONbits.QEISIDL  =  0;// Continue operation during sleep
QEICONbits.SWPAB  =  0;  // QEA and QEB not swapped
QEICONbits.PCDOUT  =  0; // Normal I/O pin operation
QEICONbits.POSRES  =  1; // Index pulse resets position counter
DFLTCONbits.CEID  =  1;  // Count error interrupts disabled
DFLTCONbits.QEOUT  =  1; // Digital filters output enabled for QEn pins 
DFLTCONbits.QECK  =  5;  //  1:64 clock divide for digital filter for QEn 
//DFLTCONbits.INDOUT  =  1;// Digital filter output enabled for Index pin
//DFLTCONbits.INDCK  =  5;//  1:64 clock divide for digital filter for Index
POSCNT  =  0;			 // Reset position counter
QEICONbits.QEIM  =  6;   // X4 mode with position counter reset by Index 

}

thay đổi nội dung bởi: namqn, 05-05-2008 lúc 06:29 PM.
truongthont vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-05-2008, 01:16 AM   #6
scentoflove
Đệ tử 6 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 129
:
QEI của dspic 30f4011 có digital filter output. Em muốn hỏi hoạt động của bộ filter này như thế nào.
scentoflove vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-07-2008, 06:46 PM   #7
tungtuantu
Đệ tử 3 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 54
:
em thấy luồng này rất hay sao ko phát triển thêm hả anh F, bác viết bài huóng dẫn bọn em với
tungtuantu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-09-2008, 06:16 PM   #8
NGUYEN VU BAO
Nhập môn đệ tử
 
Tham gia ngày: Jun 2005
Bài gửi: 1
:
Dưới đây là cách khởi động QEI.
NHớ TRIS các chân A,B,và index
Giá trị xung nằm trong thanh ghi POSCNT

void setup_encoder(void)
{
ADPCFG = 0xffff; // all digital IO
MAXCNT = 0xffff; // (used as preset when index pulse seen)
POSCNT = 0x0000;
QEICON = 0; // clr CNTERR bit (among others)
QEICONbits.QEIM = 6; // x4 reset by index pulse
QEICONbits.POSRES = 0; // TRICK! dont allow index to reset counter
DFLTCON = 0; // digital filter set off
DFLTCONbits.IMV = 3; // in x4 mode,
DFLTCONbits.QEOUT = 1; // enable digital filter on phase a,b,i
/* set up interrupts for encoder */
IFS2bits.QEIIF = 0; // clear Interrupt flag
IPC10bits.QEIIP = 1; // bits <2:0> are the priority
IEC2bits.QEIIE = 1; // go live
}
NGUYEN VU BAO vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-09-2008, 12:55 AM   #9
lion
Đệ tử 6 túi
 
lion's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 127
:
em cũng đang tìm hiểu cái này , nhưng em biết ít tiếng anh chuyên ngành quá nên không cắt được nghĩa

bác nào tốt bụng thì có thể hướng dẫn cụ thể cho anh em trong bang học hỏi với .
Nếu dịch cái modul QEI ra tiếng việt thì càng tốt, để có cái sườn mà nghiên cứu
lion vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-03-2009, 11:42 PM   #10
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi lion View Post
em cũng đang tìm hiểu cái này , nhưng em biết ít tiếng anh chuyên ngành quá nên không cắt được nghĩa

bác nào tốt bụng thì có thể hướng dẫn cụ thể cho anh em trong bang học hỏi với .
Nếu dịch cái modul QEI ra tiếng việt thì càng tốt, để có cái sườn mà nghiên cứu
Thiết nghĩ QEI là module không thể thiếu để điều khiển động cơ có sử dụng thuật toán PID nên mong các anh (nhh...), các thầy (Thấy Nam hoặc F) hướng dẫn những người mới làm quen với PIC / dsPIC về module này kĩ hơn , như có một tutorial về QEI như Thầy Nam đã làm với các module ADC, PWM, I2C..., Em đã đọc dsPIC30 RMF document nhưng vẫn thấy trừu tượng với module này qua.
Em cảm ơn.
Trân trọng !.
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !.
Bạn có thể nếu bạn tin bạn có thể !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2010, 06:10 PM   #11
wakener_thesun
Nhập môn đệ tử
 
Tham gia ngày: Oct 2009
Bài gửi: 6
:
em đang làm về module này, nhưng gặp phải vấn đề ko biết phải viết CCS cho module này như thế nào. em đã đọc hết datasheet của con 18f4431, cũng biết được cách hoạt động của module này rồi. Nhờ các anh hướng dẫn giúp.

cụ thể là em đang viết chương trình nhận xung từ encoder. loại encoder em đang sử dụng là loại encoder 6 dây, bao gồm 1 dây nguồn, 1 dây mass, 2 dây là pha a và pha b, 2 dây còn lại không sử dụng. 2 dây pha này em nối vào 2 chân QEA và QEB của píc8F4431, em xin hỏi viết code như thế nào để có thể đếm xung nhận được từ 2 pha của encoder

Thanks

thay đổi nội dung bởi: wakener_thesun, 13-11-2010 lúc 06:20 PM.
wakener_thesun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2010, 09:29 PM   #12
ngcanh_dtdn
Nhập môn đệ tử
 
Tham gia ngày: Jul 2010
Bài gửi: 4
:
CCS phiên bản mới đã có lệnh hỗ trợ QEI nhưng mình chưa thử bao giờ, bạn vào đó đọc xem có thu được gì không.
__________________
ngcanhdtdn@gmail.com
ngcanh_dtdn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2010, 10:44 PM   #13
wakener_thesun
Nhập môn đệ tử
 
Tham gia ngày: Oct 2009
Bài gửi: 6
:
Trích:
Nguyên văn bởi ngcanh_dtdn View Post
CCS phiên bản mới đã có lệnh hỗ trợ QEI nhưng mình chưa thử bao giờ, bạn vào đó đọc xem có thu được gì không.
mình đang dùng version 4.074 mà ko thấy có. Version mà bạn nói là version bao nhiêu?

thanks
wakener_thesun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2010, 11:34 PM   #14
ngcanh_dtdn
Nhập môn đệ tử
 
Tham gia ngày: Jul 2010
Bài gửi: 4
:
Bản mình đang dùng là v4.107 trong Help có đoạn sau
Code:
setup_qei( )
--------------------------------------------------------------------------------
Syntax: setup_qei( [unit,]options, filter,maxcount );
 
Parameters: Options- The mode of the QEI module. See the devices .h file for all options

Some common options are:

  · QEI_MODE_X2

  · QEI_TIMER_GATED

  · QEI_TIMER_DIV_BY_1

filter- This parameter is optional and the user can specify the digital filter clock divisor.

maxcount- This will specify the value at which to reset the position counter.

unit- Optional unit number, defaults to 1.
 
Returns: void 
 
Function: Configures the Quadrature Encoder Interface. Various settings like modes, direction can be setup. 
 
Availability: Devices that have the QEI module.

Requires: Nothing.
 
Examples: setup_qei(QEI_MODE_X2|QEI_TIMER_INTERNAL,QEI_FILTER_DIV_2,QEI_FORWARD);

Example Files: None 

Also See:  qei_set_count() , qei_get_count() , qei_status().
__________________
ngcanhdtdn@gmail.com
ngcanh_dtdn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2010, 11:48 PM   #15
wakener_thesun
Nhập môn đệ tử
 
Tham gia ngày: Oct 2009
Bài gửi: 6
:
Trích:
Nguyên văn bởi ngcanh_dtdn View Post
Bản mình đang dùng là v4.107 trong Help có đoạn sau
Code:
setup_qei( )
--------------------------------------------------------------------------------
Syntax: setup_qei( [unit,]options, filter,maxcount );
 
Parameters: Options- The mode of the QEI module. See the devices .h file for all options

Some common options are:

  · QEI_MODE_X2

  · QEI_TIMER_GATED

  · QEI_TIMER_DIV_BY_1

filter- This parameter is optional and the user can specify the digital filter clock divisor.

maxcount- This will specify the value at which to reset the position counter.

unit- Optional unit number, defaults to 1.
 
Returns: void 
 
Function: Configures the Quadrature Encoder Interface. Various settings like modes, direction can be setup. 
 
Availability: Devices that have the QEI module.

Requires: Nothing.
 
Examples: setup_qei(QEI_MODE_X2|QEI_TIMER_INTERNAL,QEI_FILTER_DIV_2,QEI_FORWARD);

Example Files: None 

Also See:  qei_set_count() , qei_get_count() , qei_status().
vậy bạn gửi bộ setup cho mình qua mail được ko? mail mình là daovietkimlong@gmail.com

thanks
wakener_thesun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ð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à 04:06 PM.


Đượ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