Hello Guest it is July 26, 2026, 07:57:46 AM

Author Topic: Z axis position error at higher feedrates after switching Mach3/XHC → Mach4/ESS  (Read 45 times)

0 Members and 1 Guest are viewing this topic.

Z axis position error at higher feedrates after switching Mach3/XHC → Mach4/ESS (same machine, same hardware otherwise)

Hi all,

Looking for some insight from anyone who has made a similar Mach3+XHC → Mach4+ESS migration.

Setup:

CNC router/mill, servo-driven axes (Leadshine L6P-750 drives, closed-loop motor↔drive, step/dir command from the controller — no position feedback wired back to the controller side)
Previously: Mach3 + XHC USB motion controller — worked correctly at all feedrates, including up to 4500 units/min on Z
Now: Mach4 (build 4.2.0.4809) + ESS (Ethernet SmoothStepper), plugin config v285
All mechanical hardware, drives, motors, wiring, and the G-code file itself are unchanged between the two setups

Symptom: Running the exact same G-code file (a dense 3D spiral finishing toolpath with many short G1 segments, X/Y/Z all interpolating together) that ran correctly under Mach3/XHC:

Runs fine up to ~1800 units/min
Z axis develops a position error starting around 3000 units/min, worse at 4500 — consistently "too far down" on plunges / "not far enough up" on retracts
Error grows with feedrate; not present at low speed
No alarm or fault shown on the servo drive display when this happens
Confirmed no lost steps in the classic sense — closed-loop servo, drive-side loop intact

What's been ruled out so far:

Drive pulse input mode (confirmed Pr0.07 = Pulse+Sign / Step+Dir, correct)
Counts-per-unit / scaling (axes move correct distances at all speeds)
Mechanical backlash on Z ballscrew (none)
Backlash compensation settings (disabled/zero in both Mach4 tuning and ESS plugin — not a factor)
Drive following-error / position-deviation alarm (none triggers, drive shows no fault)
ESS Kernel speed / pulse frequency ceiling (well within the drive's 500kHz differential pulse input rating; pulse counts at the problem feedrates are only ~100-150kHz)
Cable/signal type (differential pulse/dir wiring, unchanged from the working XHC setup)

Some things I'm wondering about (open to being wrong):

Could this be related to CV (Constant Velocity) motion planning / look-ahead differences between Mach3 and Mach4? (Mach3 was set to 20 lines look-ahead, Mach4 defaults to 200 — haven't tested changing this yet.)
Could this be a pulse timing/generation issue somewhere in the ESS or Mach4 chain — i.e. the axis genuinely not ending up where commanded, rather than a planning/path issue?
Something else entirely that I haven't considered?

Questions for the group:

Has anyone else hit this specific issue migrating from Mach3/XHC to Mach4/ESS on a servo-driven Z axis?
For those running dense, short-segment 3D toolpaths successfully in Mach4/ESS — did you have to change any settings (look-ahead, acceleration, CV/path tolerance, kernel/pulse settings) from your Mach3-era values to get equivalent behavior?
Any Mach4/ESS-specific settings you'd check first, given this symptom?

Haven't been able to test lowering Look Ahead back to 20 yet (machine isn't accessible right now), but wanted to get this written up in case anyone recognizes the pattern in the meantime. Appreciate any pointers.

Gaute Espeland
Norway