Rotary Encoder กับ PIC18F2431 โดยใช้ QEI Module
การใช้งาน Quadrature Encoder ในบทความก่อนหน้านี้นั้นได้ใช้วิธีการประมวลผลจากการตรวจจับ Interrupt ของขอบสัญญาณ ซึ่งเป็นวิธีการที่ไม่ดีนัก ดังนั้น Microcontroller บางตัวจึงได้ใส่ module ที่ทำหน้าที่ประมวลผลสัญญาณของ Quadrature Encoder มาให้เลย
Quadrature Encoder Interface (QEI) ของ PIC18F2431 นั้นมีแผนภาพดังนี้

ความสามารถของ QEI Module
ตัวอย่างโปรแกรม QEI Test.c << Click to download
Quadrature Encoder Interface (QEI) ของ PIC18F2431 นั้นมีแผนภาพดังนี้

ความสามารถของ QEI Module
- ตรวจจับทิศทางของการหมุุนโดยการ interrupt (ICDRIF)
- 16-bit up/down position counter (POSCNT)
- สามารถตรวจนับได้ทั้งแบบ x2 และ x4
- สามารถวัดความเร็วได้
- สามารถตรวจจับตำแหน่งได้ด้วย Interrupt (IC2QEIF)
- การตรวจจับเมื่อหมุนครบรอบโดยใช้สัญญาณจาก index (สัญญาณ Z) ให้ตรวจจับ interrupt โดยให้ทำการเซ็ต QEICON:QEIM เป็น 001 (โหมด x2) และ 101 (โหมด x4)
- การตรวจจับโดยนับถึงตำแหน่งที่ต้องการ (POSCNT = MAXCNT) เช่น ถ้าต้องการให้นับถึงตำแหน่งที่ 4000 ให้ทำการเซ็ต MAXCNTH = 0x0f และ MAXCNTL = 0x9f (3999 = 0x0f9f)
โดย flag bit ของการ interrupt ข้างบนนี้คือตัวเดียวกัน (IC2QEIF) เมื่อถูกเซ็ตแล้ว ต้อง clear ด้วยวิธีการทาง software
![]() |
PIC18F2431 with QEI Interfacing (Click to enlarge) |
ตัวอย่างโปรแกรม QEI Test.c << Click to download
Comments
Post a Comment