Trích:
Nguyên văn bởi sandro_bk
đây là đoạn chương trình khởi tạo và đọc QEI,các bác xem tham khảo,khi đọc encoder thường sử dụng chế độ đọc xung khi ở tốc độ cao,còn đọc theo kiểu capture thời gian sử dụng Timer5 chỉ nên dùng ở tốc độ thấp.
#byte QEICON=0xFB6
#byte POSCNTH=0xF67
#byte POSCNTL=0xF66
#byte MAXCNTH=0xF65
#byte MAXCNTL=0xF64
int16 Read_QEI() //doc QEI
{
int16 tmp=0;
tmp = make16(POSCNTH, POSCNTL);
POSCNTH = 0x3F;
POSCNTL = 0xFF;
return tmp;
}
void Init_QEI() //khoi tao QEI
{
set_tris_A(0xFF);
MAXCNTL=0xFF;
MAXCNTH=0xFF;
POSCNTH = 0x3F;
POSCNTL = 0xFF;
QEICON = 0b10111000;
}
|
anh cho em hỏi. với đoạn chương trình trên nếu em muốn tính tốc độ của nó thì vẫn phài cần 1 timer để đến thời gian. khi mà POSCNT= MAXCNT.có phải anh dùng cờ ngắt để nhảy đến đoạn read_qei.nhưng như thế đâu biết thời gian bao nhiêu. trước đến h em cứ nghĩ tính vận tốc thì phải lấy mẫu thời gian rồi mới đọc xung.ko biết có ngược lại được ko.tức là lấy đủ xung rồi tính thời gian.nhưng như vậy ko hợp lý!! em chưa rõ mong anh chỉ giáo.
chúc anh luôn vui khỏe!!