เซอร์โว 2 แกนวิ่งพร้อมกัน — XY Linear Interpolation
วิ่ง X (Y0) และ Y (Y2) พร้อมกันไปพิกัดเป้าหมาย — ความถี่ scaled ให้ถึงพร้อมกัน เส้นทางเป็นเส้นตรง
หลักการ
เครื่อง CNC, plotter, pick-and-place ต้องการวิ่ง 2 แกน พร้อมกัน ให้ end-effector เดินตามเส้นตรง (linear interpolation)
ปัญหาถ้าใช้ DRVA แยก
ถ้า X = 50000 pulse, Y = 20000 pulse, ความถี่เท่ากัน 10 kHz:
Y axis: 20000 / 10000 Hz = 2 sec (เสร็จก่อน)
X axis: 50000 / 10000 Hz = 5 sec
เส้นทาง: Y พุ่งขึ้นก่อน, ค่อย X พุ่งไปต่อ — เป็น L-shape ไม่ใช่ diagonal
วิธีแก้: Frequency Scaling
ปรับความถี่ของแกนสั้นกว่า ให้ใช้เวลาเท่ากัน:
F_long = 10000 Hz (กำหนดมาตรฐานแกนยาว)
F_short = F_long × pulses_short / pulses_long
= 10000 × 20000 / 50000
= 4000 Hz
X: 50000 / 10000 Hz = 5 sec
Y: 20000 / 4000 Hz = 5 sec ← เสร็จพร้อมกัน
ทั้งคู่ออก pulse 5 วินาที พร้อมกัน → end-effector เดินเส้นตรง
คำนวณใน PLC
D200 = X_target (pulse, signed)
D201 = Y_target (pulse, signed)
D202 = F_max = 10000 Hz (max frequency for long axis)
Compute (every Start):
|X| = |D200|, |Y| = |D201|
ถ้า |X| >= |Y|:
F_X = D202 (full speed)
F_Y = D202 × |Y| / |X|
มิฉะนั้น:
F_Y = D202
F_X = D202 × |X| / |Y|
ตัวอย่างนี้ใช้ EDRVA แทน DRVA เพราะรองรับการเปลี่ยนค่าระหว่างทำงาน
ลำดับการทำงาน
First scan
↓
M1 (X done) = M2 (Y done) = OFF
F_max = 10000 (D202)
↓
HMI กรอก D200, D201
↓
กด Start (X0) (rising edge)
↓
คำนวณ F_X, F_Y (rungs จะแสดง)
↓
EDRVA แกน X → D200 ที่ความถี่ D210
EDRVA แกน Y → D201 ที่ความถี่ D211
↓
M8134↓ และ M8132↓ (Y2 pulse flag) → SET M1, M2
↓
M1 ∧ M2 → SET M3 (Both Done)
ข้อจำกัด
- ตัวอย่างนี้ทำงานเฉพาะ กรณี ทุกค่าเป็นบวก (ไม่กำลังกลับทิศ)
- งานจริงต้อง:
- Direction handling (Y4 / Y5) — ตรวจ sign ของ delta แล้วตั้งทิศก่อน
- Acceleration sync — accel ทั้งคู่จบพร้อมกัน (advanced)
- Multi-segment path — interpolate G-code style
ขยายเพิ่ม
- 3-axis — เพิ่ม Z (Y4 pulse + Y6 dir) แล้ว F = max ของทั้ง 3
- Circular interpolation — ต้อง sin/cos table (advanced — ใช้ FB หรือ Macro)
- G-code parser — อ่านจาก SD card หรือ Modbus, แปลง 1 G01 = 1 sync move
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | ปุ่ม Start (NO) | |
| X1 | ปุ่ม Stop (NC) | |
| Y0 | Pulse output แกน X | |
| Y2 | Pulse output แกน Y | |
| Y4 | Direction แกน X | |
| Y6 | Direction แกน Y | |
| Y3 | ไฟ Done |
Parameters ที่ปรับได้
D200default: 0ตำแหน่งเป้าหมายแกน X (absolute pulse) — HMI กรอกค่า
D201default: 0ตำแหน่งเป้าหมายแกน Y (absolute pulse) — HMI กรอกค่า
D202default: 10000F_max — ความถี่หลักของแกนที่ยาวกว่า (Hz)
D210 / D211default: คำนวณF_X / F_Y — คำนวณอัตโนมัติให้ถึงเป้าหมายพร้อมกัน
M1 / M2default: 0Flag X เสร็จ / Y เสร็จ
M3default: 0ทั้งคู่เสร็จ — การเคลื่อนที่จบรอบ
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ทำไมตัวอย่างนี้สมมติทุกค่าเป็นบวก?
เพื่อความเรียบง่าย — ในงานจริงต้อง: (1) คำนวณ delta = D200 - current_X (D8140) (2) ตรวจ sign → ตั้ง Y4 ทิศ (3) ใช้ค่า absolute (|delta|) ใน frequency scaling (4) MOV target absolute (ไม่ใช่ delta) ใน EDRVA EDRVA = absolute มันจัดการ direction ตาม sign ของ delta โดยอัตโนมัติถ้า direction Y ตั้งถูก
M8132 และ M8134 ต่างกันอย่างไร?
M8134 = Y0 pulse-output flag (ON เมื่อ Y0 กำลังออก pulse) M8132 = Y2 pulse-output flag (Samkoon FAS series) — แต่ละ pulse channel มี flag ของตัวเอง รุ่นเก่าอาจไม่มี M8132 ต้องดู special bit table ของ PLC ที่ใช้
ทำไม EDRVA ดีกว่า DRVA สำหรับงานนี้?
EDRVA ให้ pulse number และ frequency เปลี่ยนกลางคันได้ ในกรณีงาน multi-segment path (เช่น G-code) ต้อง override target ขณะ servo กำลังวิ่งเพื่อสมูตี้ DRVA ธรรมดา lock ค่า ตอน start ทำให้ต้องรอจบ segment ก่อนเสมอ
Acceleration ของ 2 แกนไม่ sync ตอน start/stop ใช่ไหม?
ใช่ — จุดอ่อนของ method นี้: ตอน accel/decel เส้นทางจะไม่เป็นเส้นตรงเป๊ะ (มี curve เล็กน้อย) ระยะ accel/decel ปกติ <100ms ที่ accel=K100 — สำหรับงานทั่วไปไม่เห็นด้วยตา CNC แม่นยำสูงต้องใช้ specialized motion controller (เช่น Samkoon SK-MC, Galil)
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
servo-2axis-sync.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC

