Rotary Encoder กับ PIC18F2431 โดยใช้ QEI Module

การใช้งาน Quadrature Encoder ในบทความก่อนหน้านี้นั้นได้ใช้วิธีการประมวลผลจากการตรวจจับ Interrupt ของขอบสัญญาณ ซึ่งเป็นวิธีการที่ไม่ดีนัก ดังนั้น Microcontroller บางตัวจึงได้ใส่ module  ที่ทำหน้าที่ประมวลผลสัญญาณของ Quadrature Encoder มาให้เลย
Quadrature Encoder Interface (QEI) ของ PIC18F2431 นั้นมีแผนภาพดังนี้
QEI Block Diagram
ความสามารถของ QEI Module
  • ตรวจจับทิศทางของการหมุุนโดยการ interrupt (ICDRIF)
  • 16-bit up/down position counter (POSCNT)
  • สามารถตรวจนับได้ทั้งแบบ x2 และ x4
  • สามารถวัดความเร็วได้
  • สามารถตรวจจับตำแหน่งได้ด้วย Interrupt (IC2QEIF)
การใช้งาน (ดูอ้างอิงตาม Datasheet ในส่วนของรีจิสเตอร์ QEICON)
  • การตรวจจับเมื่อหมุนครบรอบโดยใช้สัญญาณจาก index (สัญญาณ Z) ให้ตรวจจับ interrupt  โดยให้ทำการเซ็ต QEICON:QEIM เป็น 001 (โหมด x2) และ 101 (โหมด x4)
  • การตรวจจับโดยนับถึงตำแหน่งที่ต้องการ (POSCNT = MAXCNT) เช่น ถ้าต้องการให้นับถึงตำแหน่งที่ 4000 ให้ทำการเซ็ต MAXCNTH = 0x0f และ MAXCNTL = 0x9f (3999 = 0x0f9f)

โดย flag bit ของการ interrupt ข้างบนนี้คือตัวเดียวกัน (IC2QEIF) เมื่อถูกเซ็ตแล้ว ต้อง clear ด้วยวิธีการทาง software

 QEI Schematic

PIC18F2431 with QEI Interfacing (Click to enlarge)

ตัวอย่างโปรแกรม QEI Test.c << Click to download

Comments

Popular posts from this blog

MCS-51 Based Tachometer (เครื่องวัดความเร็วรอบ)

สร้าง Traindata สำหรับ OCR ด้วย Tesseract

การเชื่อมต่อและการเขียนโปรแกรมใช้งาน Rotary Encoder แบบ X4 Counting