Calibrating Z to the bed

I'm attempting to level the bed on my Kossel Clear delta printer running 1.0.4-dev of the firmware. The heated bed has all four corners mounted on springs and their is a rectangle of glass placed on top of the heated bed. Using a straightedge and feeler gauges I have determined that the maximum un-flatness of the glass along the Y axis is 0.05 mm at the origin.
When I then move the extruder hotend from 0,90, to the origin, to 0,-90, I measure the three respective distances between the hotend nozzle tip and the glass as 0.21 mm, 0.51 mm, and 0.15 mm. The Z axis is set to 0.2 mm during all of these movements and measurements. I can repeat the motions and get the same measurements.

Since these measurements disagree with the measured flatness of the glass, which firmware parameters should I be looking at? Which parameters are most likely related to this deviation in positioning? I've already measured for Alpha and for Delta Radius.

The current EEPROM values are:

ttyACM0 PC> M205                                                                                    
EPR:0 1028 0 Language                                                                               
EPR:2 75 230400 Baudrate                                                                            
EPR:3 129 0.473 Filament printed [m]                                                                
EPR:2 125 955 Printer active [s]                                                                    
EPR:2 79 0 Max. inactive time [ms,0=off]                                                            
EPR:2 83 360000 Stop stepper after inactivity [ms,0=off]                                            
EPR:3 11 80.0000 Steps per mm                                                                       
EPR:3 23 200.000 Max. feedrate [mm/s]                                                               
EPR:3 35 40.000 Homing feedrate [mm/s]                                                              
EPR:3 39 20.000 Max. jerk [mm/s]                                                                    
EPR:3 133 0.000 X min pos [mm]                                                                      
EPR:3 137 0.000 Y min pos [mm]                                                                      
EPR:3 141 0.000 Z min pos [mm]                                                                      
EPR:3 145 200.000 X max length [mm]                                                                 
EPR:3 149 200.000 Y max length [mm]                                                                 
EPR:3 153 263.200 Z max length [mm]                                                                 
EPR:3 1056 0.000 Park position X [mm]                                                               
EPR:3 1060 0.000 Park position Y [mm]
EPR:3 1064 10.000 Park position Z raise [mm]
EPR:1 891 70 Segments/s for travel
EPR:1 889 180 Segments/s for printing
EPR:3 59 997.000 Acceleration [mm/s^2]
EPR:3 71 1000.000 Travel acceleration [mm/s^2]
EPR:3 881 288.000 Diagonal rod length [mm]
EPR:3 885 156.000 Horizontal rod radius at 0,0 [mm]
EPR:3 925 100.000 Max printable radius [mm]
EPR:1 893 164 Tower X endstop offset [steps]
EPR:1 895 110 Tower Y endstop offset [steps]
EPR:1 897 0 Tower Z endstop offset [steps]
EPR:3 901 210.000 Alpha A(210):
EPR:3 905 330.000 Alpha B(330):
EPR:3 909 90.000 Alpha C(90):
EPR:3 913 0.000 Delta Radius A(0):
EPR:3 917 2.000 Delta Radius B(0):
EPR:3 921 1.000 Delta Radius C(0):
EPR:3 933 0.000 Corr. diagonal A [mm]
EPR:3 937 0.000 Corr. diagonal B [mm]
EPR:3 941 0.000 Corr. diagonal C [mm]
EPR:3 1024 0.000 Coating thickness [mm]
EPR:1 1048 55 Bed Preheat temp. [degC]
EPR:0 106 0 Bed Heat Manager [0-3]
EPR:0 107 255 Bed PID drive max
EPR:0 124 80 Bed PID drive min
EPR:3 108 196.000 Bed PID P-gain
EPR:3 112 33.000 Bed PID I-gain
EPR:3 116 290.000 Bed PID D-gain
EPR:0 120 255 Bed PID max value [0-255]
EPR:0 1020 0 Enable retraction conversion [0/1]
EPR:3 992 3.000 Retraction length [mm]
EPR:3 1000 40.000 Retraction speed [mm/s]
EPR:3 1004 0.000 Retraction z-lift [mm]
EPR:3 1008 0.000 Extra extrusion on undo retract [mm]
EPR:3 1016 20.000 Retraction undo speed
EPR:3 200 100.000 Extr.1 steps per mm
EPR:3 204 50.000 Extr.1 max. feedrate [mm/s]
EPR:3 208 40.000 Extr.1 start feedrate [mm/s]
EPR:3 212 3000.000 Extr.1 acceleration [mm/s^2]
EPR:1 294 190 Extr.1 Preheat temp. [degC]
EPR:0 216 1 Extr.1 heat manager [0-3]
EPR:0 217 140 Extr.1 PID drive max
EPR:0 245 60 Extr.1 PID drive min
EPR:3 218 7.0000 Extr.1 PID P-gain/dead-time
EPR:3 222 1.0800 Extr.1 PID I-gain
EPR:3 226 114.0000 Extr.1 PID D-gain
EPR:0 230 255 Extr.1 PID max value [0-255]
EPR:2 231 0 Extr.1 X-offset [steps]
EPR:2 235 0 Extr.1 Y-offset [steps]
EPR:2 290 0 Extr.1 Z-offset [steps]
EPR:1 239 1 Extr.1 temp. stabilize time [s]
EPR:1 250 150 Extr.1 temp. for retraction when heating [degC]
EPR:1 252 0 Extr.1 distance to retract when heating [mm]
EPR:0 254 255 Extr.1 extruder cooler speed [0-255]


  • For delta printers I'd always calibrate them with the escher delta calibration tool. There is even a setting for repetier-firmware. Us eth eone with less measured points. Make sure delta rod size is correct as starting point. Disable G33/Bump correction for this. After 1-2 iterations you normally have good level. But there are mor einfluences then you can calibrate, so how good "good" is depends on printer and if angles are as supposed. Once differences are below 0.1mm you can fix the rest with bump correction so first layer sticks better.
  • Repetier said:
    For delta printers I'd always calibrate them with the escher delta calibration tool. There is even a setting for repetier-firmware. Us eth eone with less measured points. Make sure delta rod size is correct as starting point. Disable G33/Bump correction for this. After 1-2 iterations you normally have good level. But there are mor einfluences then you can calibrate, so how good "good" is depends on printer and if angles are as supposed. Once differences are below 0.1mm you can fix the rest with bump correction so first layer sticks better.

    I attempted to use with Repetier firmware 1.0.4-dev on my Kossel Clear delta printer. I carefully measured the length of the rods and confirmed all six are the same length. I already had DISTORTION_CORRECTION disabled in Configuration.h. After two iterations of carefully measuring height errors and applying the corrections, I still have some Z heights with an error greater than 0.5 mm.

    I've been curious to know how the Configuration parameters [XYZ]AXIS_STEPS_PER_MM are set. All three have been set to 80. What would I measure to prove/disprove the 80 for each axis?

    Any other suggestions?
  • All steps are identical with z steps per mm. A pure z move is not dependent on it, so if you measure 2 z positions accurately you can see if it matches. Best is if you have a gauge at the extruder that measures distances. Except for coarse measurement manual measuring is not very precise. 80 is often seen. You can compute the theoretical value from motor steps/rotation and belt type (tooth distance) and number of tooth on drive wheel. With 80 steps/mm one  step is 0,0125mm so 0.5mm is just 4 steps difference. Such errors can happen especially on bigger delta printers. Rod size is from rotation point to rotation point just to be sure. Once escher shows no bigger changes in values it thinks it found the optimal optimization and that method will not improve any more. So that is your solid start point. We have more parameter then they use so you can still tweak further, but it is hard since you can not know which change does change which area. Angles change the 2 sectors next to that pillar the most and opposite part less. Diagonal length change more the area close to pillars. If you think if they would be perpendicaluar to bed the length of that diagonal is all that matters to z distance. Maybe it helps to improve a bit more the area in question.

    WIth repetier-host you can also show a graphical map of z heights with it's height measuing function.
  • At 80 steps per millimeter, a distance of 0.5 millimeters requires 40 steps, not 4 as you wrote above. I assume that was just a typo.

    I do see the code:
    axisStepsPerMM[X_AXIS] = axisStepsPerMM[Y_AXIS] = axisStepsPerMM[Z_AXIS];
    in Printer.cpp. Why is the assumption made that all three positioning stepper motors require exactly the same quantity of steps to move one millimeter? Is there some other way that inevitable discrepancies in the stepper motor performance are compensated?

    If I understand, you're suggesting I use motion along the Z axis, while not changing the X or Y position, to measure the accuracy of Z motion. I would then adjust the ZAXIS_STEPS_PER_MM configuration parameter based on what I measured.

    I do understand your comment about manually measurings these very small distances. I've been using a high quality set of feeler gauges and have set both the bed and the hotend to their typical operating temperatures when measuring. However, I don't know how much I raise the hotend when I slide the feeler gauge between it and the glass on the bed.

    I've considered using a dial indicator to measure the distance, but fear its resistance will distort the motion and/or displace the bed a small and inconsistent amount. I suppose what I really need is an accurate Z-probe. ;)

  • Yes typo.

    Resolution must be equal since we solve eqation in steps here. In V2 this has changed so might differ there. But normally all are equal anyway since you use same belts/pulleys.

    Yes, keepting XY same only resolution matters and all motors will move exactly the same distance.

    Main problem with accurately measuring distances is that a little force moves printer parts and small angle holding measuring tool also changes distances a bit. After all you are hunting small errors. But steps/mm error also increases linear so if you use 100mm move that means 1mm wrong measurement is 1% in resolution. While same at 10mm move is 10% error. So that might at least help measuring if you stretched the belts a bit so steps are maybe 81 instead of theoretical 80. 
  • I believe I've finally measured what's actually happening, which is then causing the inaccuracy in the Z position of the hotend. Now, to determine why it's happening.
    To establish some common terminology, assume the hotend is attached to the HotendPlate. The six diagonal rods are attached to the HotendPlate. Assume the hotend is positioned at (0, 0, maxZ). The HotendPlate is now parallel to the XY plane. A small bubble-level is placed on the upper surface of the HotendPlate and confirms, along both the X and the Y axis, that the HotendPlate is "level".
    Now, commanding motion along only the Z axis, the bubble-level indicates rotation of the HotendPlate about the X axis. Homing the HotendPlate, rotating the bubble-level 90 degrees in the XY plane, and commanding the same Z axis motion, the HotendPlate is rotating, albeit slightly less, about the Y axis too.

    I don't yet have a hypothesis to explain this unexpected rotation.
  • Ok, one point I forgot to mention is that you need to go down a bit during homing after z max is hit for all. Reason is that you otherwise might hit an endstop when selecting extruder and that move stops early if it hits an endstop.

    But that is mot an issue with pure z moves. What you see can happen if one of the A or B tower (front 2) belts move a bit faster then the other two. It is a known fact that belts under stress extend a bit. On catesian you just adjust tension and steps and all is ok. With delta all need to be identical. So there are 2 possibel reasons they move at different speed. 
    - All belts are in same state but have different tension. Solution: Make sure the tension is identical. Increase tension of the slowest belt meaning the one where up direction points to after moving down from level position.
    - One belt is out of shape. Replace at best all 3 with identical new belts and ensure same tension as well.
Sign In or Register to comment.