PLCเริ่มต้น · Beginner17 นาที

Encoder และ High Speed Counter

ต่อ Rotary Encoder แบบ A/B Phase เข้า X0/X1 ของ PLC Samkoon อ่านค่าด้วยคำสั่ง HCNT (CV251) แล้วเขียน Ladder หาตำแหน่ง ทิศทางการหมุน และความเร็วรอบ (RPM) ใน SamSoar2022

Encoder แบบ A/B Phase ต่อขา A เข้า X0 และขา B เข้า X1 แล้วใช้คำสั่ง HCNT กับ CV251 นับ Pulse (หมุนไปค่าเพิ่ม หมุนกลับค่าลด) จากนั้นเก็บค่าทุก 100 ms ด้วย M8159 เพื่อเทียบหาทิศทาง และคำนวณ RPM จากผลต่าง Pulse (Encoder 200 PPR ที่ 100 ms → RPM = Pulse × 3)

อัพเดทล่าสุด: 26 ตุลาคม 2569

ชุดอุปกรณ์สำหรับบทความนี้

ราคาชุดอุปกรณ์

฿3,690

Encoder ให้ข้อมูลอะไร

เมื่อพูดถึง High Speed Input เซนเซอร์ที่ควรรู้จักคือ Encoder และแบบที่เห็นในโรงงานบ่อยที่สุดคือ Rotary Encoder (Encoder แบบหมุน) อะไรที่หมุนได้ เช่น เพลามอเตอร์ หรือสายพาน ติด Encoder ที่เพลาแล้วได้ข้อมูลกลับมา 3 อย่าง

  1. ตำแหน่ง — เพลาหมุนไปมากแค่ไหน
  2. ทิศทาง — กำลังหมุนไปหรือหมุนกลับ
  3. ความเร็วรอบ

หลักการของ Encoder แบบ A/B Phase

Encoder แบบ A/B Phase ที่นิยมใช้ในโรงงาน ข้างในมีแผ่น Disk ติดกับเพลา คอยตัดลำแสงเมื่อเพลาหมุน รูบน Disk วางเหลื่อมกัน 90 องศา สัญญาณ A และ B จึงเกิดเหลื่อมกัน 90 องศา

PLC จึงนับค่าขึ้นลงได้เองโดยดูว่าสัญญาณไหนมาก่อน

  • หมุนไป: A มาก่อน B → ค่าเพิ่ม
  • หมุนกลับ: B มาก่อน A → ค่าลด

การต่อสาย

Encoder แบบ A/B Phase มักมีสาย 5 เส้น

สายต่อที่
AX0
BX1
24Vไฟเลี้ยง 24V
0V0V
สายกราวด์ (Shield)กราวด์

ตารางช่อง High Speed Counter ในคู่มือบอกว่า A/B Phase Counter ที่ใช้ X0 (A) และ X1 (B) คือ C251 ถ้าใช้ช่องอื่นให้ดูจากตารางนี้

ต้องรู้ความละเอียดของ Encoder ด้วย (PPR — Pulses Per Revolution) ว่าหมุน 1 รอบได้กี่ Pulse ตัวอย่างในคลิปใช้ 200 PPR

อ่านค่า Encoder ด้วย HCNT

สร้างคอนแทคช่วย M400 แล้วเขียนคำสั่ง HCNT (High Count) ระบุ Counter เป็น CV251 ตามด้วย Set Value คือจำนวน Pulse ที่ทำให้คอยล์ C251 ติด ถ้าไม่ได้ใช้คอยล์ C251 จะใส่ค่าอะไรก็ได้ ในคลิปใส่ 2000

  • ถ้า HCNT ไม่ทำงาน หมุน Encoder ไปค่า CV251 ก็ไม่เปลี่ยน
  • เมื่อ CV251 ถึง Set Value คอยล์ C251 จะติด และยังติดอยู่แม้หมุนกลับจนค่าลดลง ต้องใช้คำสั่ง Reset คืนค่า

ในคลิปใช้ M401 Reset ทั้งค่า CV251 (MOVD K0 ลงไป) และคอยล์ C251 พร้อมกัน

HCNT + Reset Encoder
M400 เปิดการนับ CV251 (Set Value K2000) และแปลงค่าเป็น Float ไว้ที่ D402 ส่วน M401 Reset ค่าและคอยล์ C251
N0High Speed Input
M400 (Encoder Enable) → นับ Pulse ด้วย HCNT CV251 และแปลง CV251 เป็น Float ที่ D402
M400HCNTCV251, K2000DTOFCV251, D402
M401 (Reset Encoder) → CV251 = 0 และ Reset คอยล์ C251
M401MOVDK0, CV251RSTC251, K1
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

คำนวณระยะทาง (ตำแหน่ง)

คลิปใช้ค่า D302 จาก Function Block ใน EP.10 (CALLM RPCI รับรัศมีที่ D300 และให้เส้นรอบวง D300 × 2 × pi ออกมาที่ D302) มาคูณกับค่า Pulse

ครั้งแรกใช้ MULD CV251 D302 D400 แล้วค่าที่ได้แปลกๆ เพราะ D302 เป็นค่า Float แต่ CV251 เป็น Double Word การคูณให้ได้ Float ต้องคูณ Float กับ Float จึงแก้เป็น

  1. DTOF CV251 D402 — แปลง Double Word เป็น Float (อยู่ใน Rung ของ M400 ด้านบน)
  2. MULF D402 D302 D404 — คูณแบบ Float ได้ตำแหน่งที่ D404
คำนวณตำแหน่ง (Float)
D402 = Pulse (Float), D302 = เส้นรอบวงจาก Function Block, D404 = Position (Float)
N0
M402 (Calculate Distance) → D404 = D402 × D302
M402MULFD402, D302, D404
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

เมื่อหมุน Encoder ค่า D404 จะบอกว่าสายพานหรือการป้อนชิ้นงานอยู่ที่ตำแหน่งไหน

หมายเหตุ (ส่วนนี้ไม่ได้อยู่ในคลิป) — สูตรในคลิปคูณจำนวน Pulse กับเส้นรอบวงตรงๆ ถ้าต้องการระยะทางจริงของล้อหรือพูลเลย์ ให้หารจำนวน Pulse ด้วย PPR ก่อน (จำนวนรอบ × เส้นรอบวง)

หาทิศทางการหมุน

หลักการคือเก็บค่า Pulse ทุกช่วงเวลา แล้วเทียบค่าปัจจุบันกับค่าก่อนหน้า ถ้าค่าปัจจุบันมากกว่าคือหมุนไป ถ้าน้อยกว่าคือหมุนกลับ

ใช้ Special Relay M8159 ที่ติดดับเป็นคาบ 100 ms

  • ขอบขาขึ้นของ M8159 → MOVD CV251 D406 (D406 = Current Pulse)
  • ขอบขาลงของ M8159 → MOVD D406 D408 (D408 = Previous Pulse)
  • D406 > D408 → SET M404 (CW) และ RST M405
  • D406 < D408 → SET M405 (CCW) และ RST M404
ตรวจทิศทางการหมุน
เก็บ Current/Previous Pulse ด้วยขอบขาขึ้นและขาลงของ M8159 แล้วเทียบค่า
N0Direction + RPM
M403 (Direction Calculation): ขาขึ้น M8159 → D406, ขาลง M8159 → D408, ผลต่างเก็บที่ D410
M403M8159↑MOVDCV251, D406M8159↓MOVDD406, D408SUBDD406, D408, D410
ค่าปัจจุบันมากกว่าค่าก่อนหน้า → หมุนไป (CW)
D406 > D408SETM404, K1RSTM405, K1
ค่าปัจจุบันน้อยกว่าค่าก่อนหน้า → หมุนกลับ (CCW)
D406 < D408SETM405, K1RSTM404, K1
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

เมื่อ Monitor แล้วหมุนไป M404 จะติด หมุนกลับ M405 ติดแทน ถ้า Response Time ไม่พอ เปลี่ยนไปใช้สัญญาณคาบ 10 ms แทนได้ (ค่าสัมประสิทธิ์ใน RPM ด้านล่างต้องคำนวณใหม่ตามช่วงเวลา)

คำนวณความเร็วรอบ (RPM)

หลักการคือนับจำนวน Pulse ในช่วงเวลาที่กำหนด

RPM = (Pulse ในช่วงเวลา × 60) ÷ (PPR × ช่วงเวลา (วินาที))

ตัวอย่าง Encoder 200 PPR ภายใน 0.1 วินาที (100 ms) นับได้ 20 Pulse

RPM = (20 × 60) ÷ (200 × 0.1) = 60

เมื่อ PPR = 200 และช่วงเวลา = 0.1 วินาที สูตรย่อเหลือ RPM = Pulse × 3 ถ้าใช้ Encoder ค่า PPR อื่นหรือเวลา Sampling ต่างจากนี้ ให้แทนค่าหาสัมประสิทธิ์ของตัวเอง

ผลต่าง D406 − D408 ที่เก็บไว้ใน D410 (SUBD ใน Rung ของ M403) คือจำนวน Pulse ที่เกิดในช่วง 100 ms นำมาคูณ 3 ได้ RPM ที่ D412

ตอนแรกที่คำนวณตลอดเวลา ค่า RPM โผล่ขึ้นมาแล้วหายไปเร็วมากและกลับเป็น 0 จึงเพิ่มเงื่อนไขให้คำนวณเฉพาะตอนที่ D410 ไม่เท่ากับ 0 (D≠) เพื่อให้ D412 เก็บค่า RPM ล่าสุดไว้

คำนวณ RPM จากผลต่าง Pulse
คำนวณเฉพาะเมื่อ D410 ≠ 0 เพื่อเก็บค่า RPM ล่าสุด
N0
M406 (RPM Calculation) + D410 ≠ 0 → D412 = 3 × D410
M406D410 <> K0MULDK3, D410, D412
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

ทดสอบด้วยการหมุนที่ความเร็วใกล้ๆ กัน ค่า RPM ก็จะใกล้กัน และถ้าหมุนกลับค่า RPM จะติดลบ

สรุป

ตอนนี้ใช้ Encoder หาตำแหน่ง ทิศทาง และความเร็วรอบได้แล้ว โดยใช้ความรู้จากตอนก่อนๆ ทั้ง Function Block คณิตศาสตร์ การ Compare และ Special Register มาประกอบกัน

ตอนถัดไป

12. ใช้งาน PLC ร่วมกับ Servo

10 นาทีเริ่มต้น · Beginner