GRBL calibration problem

i have a problem calibrating my DIY CNC,

Using arduino uno r3, grbl 1.1h, stepperonline closed loop nema23 2nm stepper with CL57T v41 driver, 1605 ball screws, 5mm pitch. on all axis. Using UGS on win11.

driver is set to 8 microsteps, 1600 steps per rotation. if i used the grbl recommended formula (microsteps x steps per rotation)/distance per rotation, that comes out to (8*1600)/5 = 2560 which puts things WAY off.

current settings:
$100 to 102=331 (steps rotation)
$120 to 122=50 (acceleration)

I've run calibration using formula (current steps per mm x desired distance)/actual distance. I can get a specific distance dialed in, for example 10mm, but then when i jog 100mm it's way off. Nothing is slipping.

attempting to jog 1mm is nearly impossible unless i reduce the acceleration to a very low number ($120=2). even then it's not moving 1mm. very inconsistent.

the jog distance travel is not consistent even after calibrating.
jog distance 10mm, actual 10mm
jog distance 40mm, actual ~55mm
jog distance 100mm, actual ~143mm

changing the jog feed rate doesn't have any impact that i can see but changing the acceleration has a big impact

what am i missing?

Your motor is likely 200 full steps/rev and with 8x microstepping it becomes 200*8=1600microsteps/rev. With the recommended formula, the 8*200/5=320 which seems close to your 331steps/mm

What's your $110-112? And are those measurements with the settings you showed?

I'm confused by the longer distances being proportionally larger.

Can you feed it straight non-jog commands like G01 X100 F100 etc and test for consistency?

If you put a mark or a tape flag on the lead screw, does a 5/50mm move make full turns?

Hi DaveX. Great insight... i think you're right re. microsteps. i changed $100

$110-112 = 3000. No reason for setting it that high other that to see if it would move that fast. Seems like it does. Motor didn't stall.

i tried the g1 commands and found as i varied the feed rate, i would get different distances even though UGS displayed the stop location correctly.

started at x80, moved 30mm, so x110 using different feed rates.

G1 X110 F100 --> measured 31.1mm movement
g1 x80 f100 (returned to starting point)
G1 X110 F200 --> measured 29.9mm movement
g1 x80 f200 (returned to starting point)
G1 X110 F400 --> measured 27.7mm movement

Repeated using $110=1000 but got the same result.

here are the other settings

$0 = 10 (Step pulse time, microseconds)
$1 = 25 (Step idle delay, milliseconds)
$2 = 0 (Step pulse invert, mask)
$3 = 2 (Step direction invert, mask)
$4 = 0 (Invert step enable pin, boolean)
$5 = 1 (Invert limit pins, boolean)
$6 = 0 (Invert probe pin, boolean)
$10 = 1 (Status report options, mask)
$11 = 0.010 (Junction deviation, millimeters)
$12 = 0.002 (Arc tolerance, millimeters)
$13 = 0 (Report in inches, boolean)
$20 = 0 (Soft limits enable, boolean)
$21 = 1 (Hard limits enable, boolean)
$22 = 0 (Homing cycle enable, boolean)
$23 = 0 (Homing direction invert, mask)
$24 = 25.000 (Homing locate feed rate, mm/min)
$25 = 500.000 (Homing search seek rate, mm/min)
$26 = 250 (Homing switch debounce delay, milliseconds)
$27 = 1.000 (Homing switch pull-off distance, millimeters)
$30 = 1000 (Maximum spindle speed, RPM)
$31 = 0 (Minimum spindle speed, RPM)
$32 = 0 (Laser-mode enable, boolean)
$100 = 348.460 (X-axis travel resolution, step/mm)
$101 = 347.500 (Y-axis travel resolution, step/mm)
$102 = 484.000 (Z-axis travel resolution, step/mm)
$110 = 3000.000 (X-axis maximum rate, mm/min)
$111 = 3000.000 (Y-axis maximum rate, mm/min)
$112 = 3000.000 (Z-axis maximum rate, mm/min)
$120 = 50.000 (X-axis acceleration, mm/sec^2)
$121 = 50.000 (Y-axis acceleration, mm/sec^2)
$122 = 50.000 (Z-axis acceleration, mm/sec^2)
$130 = 200.000 (X-axis maximum travel, millimeters)
$131 = 200.000 (Y-axis maximum travel, millimeters)
$132 = 200.000 (Z-axis maximum travel, millimeters)

Shorter motions at higher speeds could make sense if its skipping steps. The repeatability seems vary lucky though. Maybe try stepping out and back at different speeds, in case it skips reliably along the speed curve, but skips differently at different speeds.

From your numbers I'd expect:

G1 X110 F200  ; +31.1mm?
g1 x80 f100 ; -29.9mm? 0.2mm difference? 64uStep? 8step? 14.4° difference at the shaft?

Looking at:

Maybe there's something going wrong with the encoder/closed-loop stuff? I'd try switching it over to open loop mode and see if it steps as intended.