Ender3 z homing precision improvement
Obliczymy ostateczną cenę na podstawie wybranego pliku. Sprawdzisz ją i zaakceptujesz przed płatnością.
Zapisane na tym urządzeniu.
Alternate mount of the z endstop which uses the leadscrew coupler to trigger the switch more precisely
- Ocena
- 0 / 5
- Polubienia
- 0
- Pobrania
- 19
- Wydruki
- 0
- Wyświetlenia
- 513
- Oceny
- 0
Aktualizacja u źródła:
Informacje o modelu
- Źródło
- Printables
- Kategoria
- Creality Parts & Upgrades
- Licencja
- Creative Commons — Attribution
Z homing precision issue
After some time using the Ender 3 printer, I have encountered a quite annoying occasional issue: the z homing sometimes vary by a small offset, maybe 0.1 or 0.2mm, causing a bad first layer when starting a print. I have to tune the z offset to fix it, which I do with the M206 Gcode command. But quite often, after a few prints, the z homing comes back more or less to where it was previously and I must cancel my z offset change.
The bed leveling stays good however, I never need to tune it, which is not surprising since there is no particular reason why it should change, unless replacing the print surface or if applying to much force on it when removing a print.
So I have come to the conclusion that I probably have a poorly repeatable z homing, which could be explained at least by the following possible causes:
- A z backlash making the gantry slightly late w.r.t. the leadscrew and thus shifting the z homing point by a varying offset
- A kind of z backlash where the gantry would not stay perfectly horizontal so that the printhead would be slightly higher that the left of the gantry where the leadscrew operates. I have seen this before with rollers that were too tight but I think I fixed it on my printer
- The endstop itself has a behavior which is not repeatable enough. I believe that the degree of precision required for z homing (preferably under 0.05mm) may be more than what the endstop provides, after a long period of use, with varying temperature conditions (in an enclosure), with the worsening factor that the gantry hits almost the tip of the endstop's lever, where the imprecision is amplified the most.
I suspect that this last issue is what happens to me. So, the purpose of this modification is to improve the z homing precision, assuming it is caused by the above described mechanical endstop inaccuracy. It also eliminates the effect of the leadscrew nut backlash on z homing, if any.
Design
The idea is to trigger the endstop based on the angular position of the leadscrew, rather than the gantry height. It should be more precise because the part that will trigger the endstop will move faster than the gantry. More precisely, the pitch of the leadscrew is 8mm, and the endstop is triggered by the rotation of a tooth around the leadscrew at a 12mm distance from the center of revolution. So, for every turn, the gantry moves by 8mm while the rings moves by 2*Pi*12mm=75mm, which yields approximately a x10 precision improvement. Aditionnaly, the endstop is triggered near the switch rather than at the tip of the lever.
So, the endstop is mounted on the gantry, and a small piece which is clipped on the motor coupler activates the switch at the end of the last turn.
The drawback of this design it that it requires tuning on each printer, because the angular position of the rod is random, and the bed height may vary too.
Instructions
This design uses the original printer's z endstop, which is just used differently. Since it is mounted on the gantry, a longer endstop cable (80cm) is necessary. Apart from that, you will need two M3x6 screw (in addition to those already on the endswitch board) and nuts.
Measures
Two parameters must be determined to customize the printed parts. The measurements must be taken at the desired z homing position.
- The distance from the top of the coupler to the mounting holes on the extruder plate, as shown in the following picture. Only the right hole is visible, the other one is in the shadow of the extruder stepper.

- The angle of the coupler notch w.r.t. the y axis, which is given by the alignment of the two screws which secure the brass nut. The angle is oriented, its value is +20° in the following picture.

The coupler_z value will determine the z position of the endstop in the endstop mount part. If the endstop is too low, its side will touch the ring during the last turn, instead of being slightly separated. If the endstop is too high, the ring will not press the full width of the switch. If the measure is correct, the endstop will stay 1mm above the ring during the last turn.
The coupler_angle value with determine the angular position of the tooth of the ring which triggers the endstop. A 15° change will yields a 1/3mm difference in z homing, according to the 8mm pitch of the leadscrew.
Remark: Once the combination of the two parameters gives a correct clearance between the ring and the endstop, they can be modified consistently by applying a 8/360mm change to coupler_z for every 1° change of coupler_angle. Fine tuning can also be performed by adjusting the bed leveling, but I personally find it more convenient to have the physical z homing slightly below the bed surface and use the M206 Gcode command to add a small z offset.
Printing and mounting
STL files are provided for different values of coupler_z in the range 25-35mm, with 1mm increment, and of coupler_angle in 0-360° with 15° increments. I have only tested the values 30mm and 20°, respectively. More specific values can be set in the customizable OpenSCAD source file.
The endstop mount part prints easily without support (in the orientation of the STL file). The ring part may will usually require some support except for a few particular values of the coupler_angle parameter, depending on the overhanging capabilities of your printer. I printed the 20° version without supports.
PLA may work if your printer doesn't heat too much, but I chose polycarbonate as I am using an enclosure.
The ring part is just pressed on the z rod coupler. The endstop mount part attaches to the extruder plate with two M3 screws and nuts, using the existing holes. With a small wrench (or the provided small printed tool) it is possible to hold the nut behind the plate without disassembling anything. The endstop is fixed on the mount part using the existing M3 screws.
After some use, I have found that the default z homing speed is sometimes too fast for this setting (which surprises me, I don't see why the endstop triggering delay is so long). This can be fixed in the firmware configuration settings, but as I don't have the required hardware to flash the mainboard, I hacked the start gcode as follow in the slicer instead:
M203 Z3 ; reduce MAX_FEEDRATE for homing
G28 ; Home all axes
M203 Z5 ; restore MAX_FEEDRATEI still have to use this modification for some time to see if it will work consistently and fix the z homing issue… I hope it can help other people too !