เซอร์โว Homing ด้วยคำสั่ง ZRN — หาตำแหน่ง 0 อัตโนมัติ
หาตำแหน่ง 0 อัตโนมัติด้วย limit switch — เข้าหาเร็ว, ปาดลำดับช้า, แล้ว reset position counter
หลักการ
หลังจาก PLC เปิด/ปิดไฟ เซอร์โวไม่รู้ว่าตำแหน่งจริงในโลกอยู่ที่ไหน — รู้เพียงว่า encoder จาก power-on ตอนนี้ = ตำแหน่งสมมติ 0 ของ PLC
Homing คือการหา mechanical zero ที่อ้างอิงกับ machine จริง (เช่น left endpoint ของ X-axis, top of Z-axis)
คำสั่ง ZRN
SamSoar2022 มีคำสั่ง ZRN (Zero Return) สำหรับ homing โดยเฉพาะ:
ZRN K1000 K10000 K100 K100 X10 Y0 Y4
│ │ │ │ │ │ │
│ │ │ │ │ │ └─ Direction Y
│ │ │ │ │ └──── Pulse Y (Y0 = pulse output)
│ │ │ │ └──────── Home limit X (X10 = home switch)
│ │ │ └───────────── Decel time (ms)
│ │ └────────────────── Accel time (ms)
│ └───────────────────────── Approach freq (find speed, fast)
└─────────────────────────────── Creep freq (lock-in speed, slow)
Sequence ZRN ทำอะไร
- Approach — pulse ออกที่ความถี่สูง (10 kHz) ไปทิศ home (Y4 OFF = ลบ)
- ถึงเซ็นเซอร์ X10 ON → decelerate
- Creep — pulse ความถี่ต่ำ (1 kHz) ออกจาก switch แล้วกลับเข้า switch ช้าๆ
- ขอบขาขึ้น X10 ครั้งที่ 2 (precise) → หยุด, D8140 (current position) = 0
ทำไมต้อง 2-stage (fast + slow)?
Limit switch มี hysteresis ทางกล ~0.1-1mm ถ้าเข้าหาเร็วๆ แล้วหยุดทันทีที่ trigger → ตำแหน่งจริงเปลี่ยนตาม inertia ของ motor ที่เบรกไม่ทัน
Creep stage ทำให้:
- Motor ออกจาก switch (เพื่อ trigger ขอบขาขึ้นอีกครั้ง)
- กลับเข้าช้าๆ → switch trigger ที่จุดเดียวกันเสมอ → repeatability ±0.01mm
ลำดับการทำงาน
First scan
↓
M0 (homed flag) = 0 (not homed)
↓
กด Home button (X0) → M1 (homing in progress) ติด
↓
ZRN เริ่มทำงาน:
- Approach 10 kHz → ทิศ - (Y4 OFF)
- X10 ON → decel
- Creep 1 kHz กลับ → ขอบขาขึ้น X10 อีกครั้ง
- D8140 = 0
- M8134 (pulse done) ↓ falling edge
↓
Detect M8134↓ → SET M0 (homed), RST M1 (done)
↓
แสดงไฟ "READY" Y3
ตอนนี้ DRVA / EDRVA ใช้ค่าจริงได้แล้ว
ความปลอดภัย
- Soft limit X axis — ตั้งใน servo drive: ห้ามวิ่งเกิน +X (เผื่อ home miss)
- Timeout — เพิ่ม timer 30s, ถ้า ZRN ไม่จบภายในเวลา → SET fault
- อย่า ZRN ระหว่าง normal operation — มันคือ blocking instruction
ขยายเพิ่ม
- Auto home on power-up —
LD M8150 / SET M0_request - Multi-axis — ZRN ตัวที่ 2 ใช้ Y2 pulse + Y6 dir + X11 limit
- Encoder home (Z-pulse) — ใช้ X กำหนดเป็น Z-pulse แทน limit switch (precise ระดับ pulse)
โปรแกรม PLC
I/O Assignment
| Address | Role | Note |
|---|---|---|
| X0 | ปุ่ม Home (NO) | กดเพื่อเริ่ม Auto-home |
| X1 | ปุ่ม Stop (NC) | |
| X10 | Home limit switch (NO) | เซ็นเซอร์ที่ตำแหน่ง home (mechanical end-stop) |
| Y0 | Pulse output ไป servo drive | |
| Y4 | Direction output (OFF = ทิศ home, ON = ทิศตรงข้าม) | |
| Y3 | ไฟ Ready (homed) | |
| Y5 | ไฟ Homing-in-progress |
Parameters ที่ปรับได้
K1000 (creep freq)default: 1 kHzความเร็ว Creep — ปาดช้าๆ. ลดค่า = แม่นยำขึ้น แต่ homing ช้าลง
K10000 (approach freq)default: 10 kHzความเร็ว Approach — เข้าหา home เร็ว. ปรับตาม motor + ระยะทาง
TV0 / K3000default: 30sTimeout — ยกเลิกถ้า homing ใช้เวลาเกินกำหนด
M0default: 0Homed flag — TRUE เฉพาะเมื่อ D8140 == 0 ตรงกับ machine zero
M1default: 0Homing กำลังดำเนินการ
M99default: 0Fault flag — ติดเมื่อ Timeout
อุปกรณ์ที่แนะนำ
คำถามที่พบบ่อย
ทำไมไม่ใช้ DRVI ลบ pulse + limit switch แทน ZRN?
ทำได้ แต่: (1) ต้องเขียน logic เอง 2-stage approach + creep (~10 rungs) (2) ZRN ฮาร์ดแวร์ใน PLC ทำให้ accurate ตามขอบขาขึ้น X10 จริง (interrupt-based) ไม่ขึ้นกับ scan time ZRN ดีกว่าในทุกแง่
ทำไม home limit ต้อง NO ไม่ใช่ NC?
ZRN ต้อง trigger บน rising edge — switch ต้อง OFF ตอนปกติ, ON ตอนถึง home NC จะ ON ตลอดทาง → ZRN จะหยุดทันทีที่เริ่ม สำหรับ safety end-stop ใช้ NC แยกต่างหาก ต่อกับ servo Driver E-Stop input
ZRN กลับมาที่จุดเดิมทุกครั้งไหม?
ใช่ — ตามขอบขาขึ้นของ X10 ระหว่าง creep stage repeatability ขึ้นกับ: (1) Switch hysteresis ทางกล (~0.01-0.1mm) (2) Creep speed (ช้ากว่า = ดีกว่า) (3) Encoder resolution (ปกติ 10000 PPR = 0.001mm ต่อ pulse) ใช้งานทั่วไปได้ ±0.01mm
ZRN block PLC จนเสร็จไหม?
ไม่ — เป็น non-blocking M8134 (pulse output flag) จะ ON ระหว่าง ZRN ทำงาน, OFF เมื่อเสร็จ ใช้ LDF M8134 detect ขอบขาลงเพื่อทราบว่า done อย่าใช้ XCALL/CJP บล็อกระหว่างนี้
เอกสารที่เกี่ยวข้อง
วิธีนำเข้าไฟล์ใน SamSoar2022
- ดาวน์โหลดไฟล์
servo-homing-zrn.csvจากแท็บ CSV ด้านบน - เปิด SamSoar2022 → สร้างโปรเจกต์ใหม่ (หรือเปิดโปรเจกต์ที่มีอยู่)
- เมนู File → Import → เลือกไฟล์
.csvที่เพิ่งดาวน์โหลด - กด F4 เพื่อ Compile — ตรวจสอบว่าไม่มี error
- ตรวจการต่อสายตามตาราง I/O ด้านบน แล้ว Download โปรแกรมเข้า PLC

