z-probe offset and extruder(s) offset for auto-leveling

I'm looking for some help confirming my firmware config before running the bed leveling and potentially having some hard crashes. I've built a large scale, relatively industrial printer using ball-screws and pneumatics.

Currently running Repetier 0.92.3 firmware on an Azteeg X3 Pro board with a standard XY cartesian printer.

Right now I have the X&Y axis homing first, which moves the head to a safe position outside of the build plate area. Then I home Z up to the Z-min endstop, then I have the bed lower ~5mm to a safe height so that the Z-probe can't crash into it. At this point the extruders are all retracted (raised to a safe height above both the bed and the Z-probe. The Z-probe has a fixed height, let's call it a z-offset of 4mm. At this point I want to run the bed leveling. This is where I'm a bit fuzzy on the new mapping. When the extruders are enabled, they will drop to a point another 4mm below the z-probe (~8mm below where the bed was at when it triggered the z-min end-stop).

Should I assign the z-probe a negative z-offset ? Can I assign the extruders a positive z-offset ? I know most printers use a fixed extruder and a z-probe that sticks down further than the extruder, so my situation is a bit unique. An extruder z-offset would be really helpful as I could fine tune their positions in software instead of needing to do it mechanically. Thanks to the pneumatic lift system, I don't need to worry about dragging the other nozzles through my prints so a super fine-tuned mechanical z-leveling isn't as necessary.

Thank-you for the assistance. All the previous posts have been quite helpful in getting my printer to this point.


  • Sounds like a nice system. Extruder z offsets are currently not supported, but planned.

    For now negative z-probe offset would be the way to go which I think should work. As a first test you could put a box on top of bed and to measuring. Remove box and test if it correct. You should be able to put the box below it (more or less) it it worked as expected. And if not you have a safety margin to reset.
  • Hello Everyone,

    Im trying to retrofit an Stratasys FDM Machine and do have a Solenoid for positioning the Supportnozzle.
    Is there a Timeline on integrating Extruder Z-Offsets in the M218 command?
    I would really love to have that feature. PLEASSSSSEEEE:)
    Im willing to pay you some BUGGSSSS too...
  • Just curious which machine you're trying to retrofit ? I was going to go down that road, but I found the 2nd nozzle was raised/lowered using a dc motor and screw. Using a sufficiently large solenoid for positioning was going to require it to be constantly powered while operating the nozzle (potentially for hours on end) which in turn draws a log of current and generates a lot a heat.
  • edited April 2015
    Hi sparky,

    Im trying to retrofit a Stratasys FDM 3000 machine. These have a Solenoid in the Head which actuates the Support nozzle.

    For the Z-Offset something like this would also be sufficient:

    G-Code which is executed when extruder is changed but specific for the extruder number(Not the function in Slic3r or CuraEngine)

    Like this:

    T0 ; Normal ABS Extruder
    M301 (deactivate Solenoids)


    T1 , Support Extruder
    M300 ; aktivate Solenoid
    G90 ; incremental coordinates
    G1Z0,3 ; Difference of Extruder 0 to Extruder 1
    G28Z0 ; Set Z Zero
    G91 ; absolute coordinates

    when changing to T0 we have to go down with G01Z-0.3 and do a G28Z0 to redo the changes in Z-Shift.

    The best way would be to  have a special section in the Firmware where Code is executed when Head is changed but specific for each head. This way the Slicer dosnt have to do anything. We could use any Slicer without changes.

    Actually if we could get the M218 command extended to the Z Offset and could store these values in EEPROM would be enough for me...but would be nice to have something in the firmware in which M-Functions like the Solenoid activaten could be executed without changing anything in the Slicer Software.

  • You could also tie the solenoid to the T1 extruder fan pin, then it would be automatically activated whenever that tool was selected eliminating the need for the M300 & M301 commands.

    Having a pre-defined Z-offset in the firmware would then make the whole process transparent from the slicer &/or Repetier Host.
  • Thank you for the tip but I think the Extruder Fan Port has always power when turning the Ramps board on.

    Or does it not?
  • There is an always on fan pin, but then there's the extruder cooler pins. This is how I'm doing it for extruder #2. For other extruders I'm using pins like "LIGHT_PIN" and "HEATER5_PIN".

  • edited April 2015
    That sounds great. Are you using Marlin or Repetier?
    I will check that when my Ramps board arrives.

    Back to the topic:)

    Can we get a statement from an admin on the Z Offset for extruders?
    The reprappro firmware does have it with the G10 Command but works only with duet board.

    I would be willing to test some beta code:)

  • I'm using Repetier 0.92.3 and an Azteeg X3 Pro board, which at it's core, is a Ramps board/Mega.
  • It is planned to have a z offset per extruder where extruder switch corrects z by the difference without changing official z position. Meant for 2 or more extruders which can put inactive extruders up where active extruder have different heights, so it adjusts the error.

    BTW: The firmware has per extruder select and deselect scripts in the configuration.
  • Sweet! You should also add a "donate now/here" button to the forum ;) (sent a small thank-you)
  • Oh Great
    I will Check the config file.
    Is it possible to have variables in the Script? Something like: z-Offset= z-offset + 0,3
    Or z-home=z-home+0,3

    This would be awesome!
  • No variables. We are talking about 8 bit computers working at their limit. But you can use relative coordinates and switch back. Nut sure if that would accumulate some rounding errors over time, but I guess you have same error up and down so they reduce to 0.

    But why do you need it? The idea of z offsets is that the lowest extruder is the active one and firmware takes care of the difference.
  • @repetier

    The Main Problem is that the Firmware doesnot have a z Offset for the extruder so i was thinking of Doping osmething similar with shifting the home position Till the Feature is available.

    Can you Tell me what i could Write as select and deselect Code for Second extruder?

    Your help is really appriciated. Thank you for your help.
  • Difficult. It really depends on the slicer code. While you can change heights going in relative mode, do G1 Zx and back to absolute mode, the next layer switch will set absolute coordinate to Z removing any z difference. So I guess it is nearly impossible without writing some assistance code changing z without changing official coordinate which currently does not exist. I think the z offset will come end of april.
  • Oh thats great news. I can wait till end of april;)

    Maybe something like M206 T3 P141 X0.3

    This should change the z home Offset in eprom. I could put this Code to the select and deselect section of the xtruder.
    Would this work? Do i have to rehome After changing the home offset?

  • I'm noticing some irregularities with the firmware lately. 
    1. It doesn't always probe each spot 5 times; often only 1 or 2 of the positions are probed the full 5 times and there doesn't seem to be any pattern as to which ones have the repeated probing and which ones are only probed once.

    2. The z_probe_height doesn't seem to be working well with negative numbers. My probe sits/activates about 9mm above the height of my activated nozzles. ie. if the tip of the nozzles were at z=0.0, the probe would be at z=-9.0 (mm), based on my interpretation of the leveling code, I should have "Z_PROBE_HEIGHT -9.0"
    In practice, after leveling and selecting T0, G1 Z0, I find there's about an 9+mm gap between the bed and the nozzle.
    If I lower the Z_PROBE_HEIGHT -1.0, I find the gap has decreased.
  • First let me announce that latest 0.92 has now z offsets for extruders. Tested it as good as I could since my extruders are on same height. But if I set I see them lower/go up as needed.

    Repetition: It is not possible that it has different number of repetitions. It is always the same function with the same loop. If the Z_PROBE_SWITCHING_DISTANCE  to untrigger is too low it might retrigger directly. Try increasing that.

    -9mm, really? Do you remove extruder for calibration or how do you do this? Anyhow height computation is this formula in Printer.cpp

    float distance = static_cast<float>(sum) * invAxisStepsPerMM[Z_AXIS] / static_cast<float>(repeat) + EEPROM::zProbeHeight();

    and as you see the height gets simply added to measured distance. One problem here might be

    float maxStartHeight = EEPROM::zProbeBedDistance() + EEPROM::zProbeHeight() + 0.1;

    so with -9mm zProbeBedDistance must be > 9 mm, so try 20 for that.
  • I'll check out that code.

    Regarding the extruder movement, I'm using industrial pneumatics to raise/lower the nozzles. Currently they're actuated by tying the pneumatic switches to the extruder cooling fan fets.
  • Where's the best place to download and test your latest code ? The configurator still indicates v.0.92.3 and it's not too clear which branch is the latest within Github (although this looks like what I'd want for use with a Mega-based board).

  • 0.92.3 gets updated in sync with github work092 which are the current development versions. Thats also why I no always increase version otherwise we would already have 0.92.200 or so.
Sign In or Register to comment.