What Marlin changes for Z axis threaded rod

Hello everyone,

I recently got back into using my original 525 build (kit purchased from Ryan). Using a Ramps board and loaded the firmware “Marlin-MPCNC_Ramps_T8_16T_LCD_32step”

I was going to use Estlcam as my controller, but am giving Repetier and Cncjs a go.

My Z jumpers are set to 1/4 stepping mode and I changed my Configuration.h to the following as my Z is using a threaded rod:

#define DEFAULT_AXIS_STEPS_PER_UNIT { 200, 200, 800, 200 }

The problem I seem to have is that when I probe my touch plate and set the offset to 19.2 (touch plate thickness), when I manually jog 1mm movements back down to what should be 0, I touch the spoil board at a height of about 5.2. Scratching my head, I decided to instead manually bring the tool bit to zero (touch the spoilboard) and set a G92 Z0. Then jog up to 19.2, which should be the top of my touch plate in height, but I reach the top at about 13.8

So I assume my Z steps are off and 800 is not correct?

If so, can someone please tell me what fields in the configuration.h need to be changed for the threaded rod and what values they need to be changed to or is it more of a trial and error to get it right? If not, what am I doing wrong!?

Thanks for any help!

EDIT: I went ahead and ordered the T8 upgrade parts, but still curious on how to tackle my current issue.

Don’t have an answer wrt steps, but the way I read your question, going down it went further than it should have, but coming back up it did not travel as far as it “should.” I saw a threaded rod question a few weeks ago, and in addition to DEFAULT_AXIS_STEPS_PER_UNIT, the define DEFAULT_MAX_FEEDRATE needed to also be set to keep from losing steps. In addition losing steps going up but not going down is also a symptom of loose grub screws on the connector between the stepper and the threaded rod.

Hi Robert,

I started at 19.2 high and when I reached physical 0, Repetier read 5.2

When I started at physical 0, I went up 19.2 but was physically about 24

These were only jogging with 1mm steps at a slow rate. The threaded rod is snug against the stepper shaft and both pineapple coupler bolts are as tight as they can get.

Sorry if my explanation was confusing, i’ll try searching the forum again for that previous post you mentioned. All else fails, i’ll just play around with my step settings while waiting for the T8 leadscrew to arrive.

I misunderstood. So it is going too far both up and down. If I calculate the steps per mm from the measurements you provide, I get 640 steps per mm for one of the numbers, and 583 steps per mm for the other. You could try 640 and/or 600 mm per step and see what you get. I seem to remember the number 320 in one of the threads, and that would have depend on how you have the driver set, so 640 seems reasonable to try and then test the result. @jeffeb3 is very active on this forum and was I believe was working with the firmware back when the MPCNC used threaded rods…and perhaps he has an appropriate number for the feedrate for threaded rod as well.

OK thanks again, i’ll give 640 a shot tomorrow and see where that lands.

And yes, I’m set for 1/4 step at the moment but don’t have to stay there.

  1. 1/4 step is pretty coarse. On a circle, even 1/8th is noticeable. 1/16th or 1/32 is recommended.
  2. Once you flash a new firmware, the steps/mm are set in the eeprom. So even if you change the values in the firmware, that only affects the default steps and you need to still change them with gcode, or reset everything to defaults with M502.
  3. You can set the steps/mm with M92. M92 without any arguments will tell you what you have. These won’t save to eeprom until you send M500.

I don’t have the number handy, but for the allthread the number that comes to mind is about 4500 for 1/32, so that would be 560 with 1/4. That isn’t perfect, so you should definitely find the eight number or calibrate it by moving 100mm (or whatever the largest distance you can) and calibrate it like esteps. With 1/16th, it would be about 2250. While you are using the allthread, you should set the max feedrate to something like 3 or 3.5mm/s. You can adjust that with M203. M203 Z3 would do that. Save with M500.

Your X and Y are probably really wrong too. 200 is for 1/32, 1/4 would be just 25 steps/mm.

1 Like

Hi Jeff, thanks for the detailed input.

I only set it to 1/4 step because that’s what I read here way back when I built my MPCNC: Estlcam with experimental Arduino Mega2560 / Ramps 1.4 support

My X and Y are set to 1/32 and track spot on for movement.

I did find a post that referenced 1/32 for all thread should be 4535.44 - so for now I’ll just switch to that. Once I get my T8 parts in, I’ll get things switched to being set how most people have things these days.

And thanks for the tips on your points 2 and 3 – all I did was flash into eeprom, wasn’t thinking about the gcode portion. My “gcode command cheatsheet” has now grown!

I’m confused. With my lead screw, the setting is 400 steps per mm. Wouldn’t a 1/4 stepping mode with 566.875 steps per unit (4535.44 adjust for 1/4 stepping) for a threaded rod give a similar resolution? Is there any reason to have a greater resolution for the Z axis?

Ok. I misunderstood. I thought you meant 1/4 on all axis. 1/4 on Z is probably fine, and a little easier on the cpu.

Received my T8 parts from Ryan today and swapped out my leadscrew. My Z movement is now accurate and smooth :slight_smile:

1 Like

I was reading your post.
I have an old build from about 3 winers ago. I had an old threaad rod for the Z. ove the years it has gotten all gunked up and was a pain to keep cleaning off.
So I just recieved the new T8nut and screw from V1. Do I need to change any settings as the h\threaded rod and the screw are different twists.
Any help would be appreciated.

Hi George,

I had to change two things, but that may vary depending on your board/software:

I am using a Ramps 1.4 board, so when I went to the T8, I had to set my Z axis to 1/32 stepping, as shown here: https://docs.v1engineering.com/electronics/ramps/

Second was to change to the value of the “Default Axis Steps Per Unit” in the Marlin configuration.h file. The default was correct for the T8, so I just changed it back to how it was, which is:

(Line 719 for me)
#define DEFAULT_AXIS_STEPS_PER_UNIT { 200, 200, 800, 200 }

Works great now!

1 Like

Yes my board looks exactly like the links you sent me.
Yes I unplugged all plugs from the board and there are 3 jumpers under the heat sink.
But my build was from like 3 years ago.
the original threaded rod and screw are a tighter/fine thread, then the ne T8 nut and screw. that is making the Z move more then it use to.

I also have not flashed the board since there was an issue that first winter. I am not sure how to do that again.

I appreciate any help you can give me on this. I have just started my seasonal layoff, I am a Concrete Mixer Driver, so I will be off till March /April depending on weather

Yes, mine was the original that I built back in 2016 too.

Flashing the board is pretty straight forward, just follow along with this: https://docs.v1engineering.com/learn/platformio/

Not sure if you have an LCD or dual endstops, but I used “Marlin-MPCNC_Ramps_T8_16T_LCD_32step”, located here:

In the current version of the Marlin firmware, there is an M92 g-code. if this code existed in your 3-year-old firmware, then you can use it to set your revised steps without re-flashing your firmware. You will need an M500 to save that setting to the EEPROM. The steps per mm value will depend on the stepping mode of the driver, but will be some factor of the 800 that kcny lists. Change it 800, electronically move your Z axis some set distance, measure the result.


I set the V bit in the router on the board.
Moved the Z up 10mm and measured 25mm movement.

Yes, you’ll need to change your Z steps.

Do you have software loaded on a PC that you can send gcode commands with or are you using just the LCD for control?

Try sending:


What does it say for Z?

If it isn’t around 800, you’ll need to try and set it like this:

M92 Z800

Then reload and try measuring again.

1 Like

I do not have a LCD for control.
I am using Aspire 64bit V8.5
and K8200 Repetier-Host V0.95F to communicate to MPCNC

OK, yes you can try sending those gcode commands I posted with Repetier under “Manual Control”.

I typed in M503 in the box G-Code, this is what I got.

18:43:00.975 : N81 M503 *60
18:43:00.979 : echo:Steps per unit:
18:43:00.983 : echo: M92 X200.00 Y200.00 Z2000.00 E200.00
18:43:00.983 : echo:Maximum feedrates (mm/s):
18:43:00.983 : echo: M203 X190.00 Y190.00 Z8.50 E25.00
18:43:00.987 : echo:Maximum Acceleration (mm/s2):
18:43:00.987 : echo: M201 X500 Y500 Z35 E10000
18:43:00.991 : echo:Accelerations: P=printing, R=retract and T=travel
18:43:00.991 : echo: M204 P0.00 R3000.00 T500.00
18:43:00.999 : echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)
18:43:01.004 : echo: M205 S0.00 T0.00 B20000 X4.00 Z0.40 E5.00
18:43:01.004 : echo:Home offset (mm)
18:43:01.004 : echo: M206 X0.00 Y0.00 Z0.00
18:43:01.007 : echo:Material heatup parameters:
18:43:01.008 : echo: M145 S0 H190 B50 F0
18:43:01.008 : echo: M145 S1 H240 B110 F0
18:43:01.008 : echo:PID settings:
18:43:01.012 : echo: M301 P17.98 I0.98 D83.62
18:43:01.012 : echo:Filament settings: Disabled
18:43:01.012 : echo: M200 D3.00
18:43:01.012 : echo: M200 D0
18:43:01.012 : ok