Jump to content

Inconsistent Nozzle Height


concentric_killa
 Share

Recommended Posts

I need some help here.  It seems like Klipper forgets my z-nozzle height in between prints or restarts of mainsail. 

I can do the z-endstop calibration with the paper out lined here https://docs.vorondesign.com/community/howto/120decibell/z_endstop_configuration.html

I can save the config and then restart/ start a print with a decent first layer. 

Once the print completes or I shut off the printer and try a new print (after letting the bed warm up), it seems like my nozzle is too high off the bed. I am a bit baffled on what could have changed during the last print and any new prints. I have let the printer warm up for 20min before attempting a print.

I also noticed that my Z-probe measurements during QGL are a bit off. When I have a decent nozzle height, these probe measurements are around 3.5mm. When I just tried printing, my probe measurements are around 3.08mm. 

I have a bed mesh saved and it is loaded in my printer.cfg. 

When the printer Homes, if the nozzle has filament on it, does that affect the Z-endstop position? Meaning if the stop is triggered 'sooner' than when I last calibrated, will this throw off the nozzle height? 

 

Any Ideas?

 

Link to comment
Share on other sites

31 minutes ago, Simon2.4 said:

Can you confirm weather the "position_endstop:" value is changing in your config file.

I never used calibration routine, I just manually adjusted the "position_endstop:" in the config file using feeler gauges to measure and confirm.

Position endstop definitely changes after I run the Z_ENDSTOP_CALIBRATE . From my last Calibration this value is .367. Before it was around .235. 

So I updated my print start to perform another G28 Z after QGL. From reddit posts, this is suggested in the voron documentation but no explanation is given. I assume that because the gantry was just leveled, this affects the nozzle height from the initial G28 command.  I only had a G28, QGL, and then my print would read the uploaded gcode. 

Others seem to have this problem as well and I guess it could be from having a dirty nozzle. When you go to Home the Z, if you have enough oozing plastic out of the nozzle, this would trigger the z-endstop at an earlier point. The result would be that your 'z zero' point is different than when you did the calibration. 

I guess this would mean that after my QGL during my print start, I should have a pause command to wipe the nozzle before it does another G28 Z to reset the new Z-zero value. 

The fix would be to run the nozzle along a brush, or even do purge lines on the plate before doing the G28 Z. 

Ill try another print tomorrow after the machine is warm to see if my z-endstop changes. I am trying to print some remaining parts (panel clips, 270 hinge mod). I am still new to 3d printing so I have been playing with slicer settings. Its hard to focus on one aspect, when you can't print something because your z-offset is wrong and then nothing sticks to my flex plate. 

Link to comment
Share on other sites

My G32 macro does a G28, a QUAD_GANTRY_LEVEL, and then another G28. I've found that my position_endstop: could be off by more than .2mm if I don't do the second G28. I have also started doing a BED_MESH_CALIBRATE at the end of START_PRINT.

If you think about it, it really makes sense. If the left rear Z was up(or down) significantly from the right rear Z, the Z elevation would change as the X axis moves.

  • Like 1
Link to comment
Share on other sites

6 hours ago, spamttx said:

My G32 macro does a G28, a QUAD_GANTRY_LEVEL, and then another G28. I've found that my position_endstop: could be off by more than .2mm if I don't do the second G28. I have also started doing a BED_MESH_CALIBRATE at the end of START_PRINT.

If you think about it, it really makes sense. If the left rear Z was up(or down) significantly from the right rear Z, the Z elevation would change as the X axis moves.

Interesting. 

I was thinking that if you had a mesh for a specific temp, and that was loaded at the start of the print, everything would be repeatable. Right now I have a mesh saved as PLA, when I start printing ASA, I will generate another mesh with those bed settings (and load it). I think in a perfect world that would work.. now that I think of it, everytime I remove and install my flex plate, that will change the mesh (slightly)

Do you save that mesh at the end of your print start? Or does it not matter since you essentially do it for every print?

Link to comment
Share on other sites

I do it for every print right now. I am planing to have a per filament config in the future, but a need a chamber thermister for heat soaking first. I am also planning to do the MGN12 X rail upgrade, and maybe the Y rail backers to minimize Z changes as the printer heats up. 

Link to comment
Share on other sites

12 hours ago, spamttx said:

My G32 macro does a G28, a QUAD_GANTRY_LEVEL, and then another G28. I've found that my position_endstop: could be off by more than .2mm if I don't do the second G28. I have also started doing a BED_MESH_CALIBRATE at the end of START_PRINT.

If you think about it, it really makes sense. If the left rear Z was up(or down) significantly from the right rear Z, the Z elevation would change as the X axis moves.

I've been working on my print quality for a few days and I just started running into bed warping issues too. I'm implementing BED_MESH_CALIBRATE but there are a few thing I don't understand; maybe you can help me: what exactly does BED_MESH_CLEAR do; there is little to no info on this in : https://www.klipper3d.org/Bed_Mesh.html "used to clear the internal mesh state" essentially means nothing since "internal mesh state" is not mentioned elsewhere in the document. This is part of the G32 routing in the default Klipper config file and it seems counter-intuitive to have that there.

I've implemented the procedure you mentioned and it works well for me too thanks @spamttx

  • Like 1
Link to comment
Share on other sites

12 hours ago, spamttx said:

If you think about it, it really makes sense. If the left rear Z was up(or down) significantly from the right rear Z, the Z elevation would change as the X axis moves.

That's the main reason the default config does a z-home, QGL, and then a final z-home - for the reasons you pointed out, you need to do it twice,  in that sequence.  

The first z-home gets close(ish), QGL squares to the bed, and the second z-home sets the actual z offset.

QGL doesn't care what the printer thing the z home position is but just wants to try to get the offsets equal within the defined tolerance (.0075mm by default I think).  After the QGL, the gantry is parallel to the bed but only after the second z-home do we really know where the nozzle is in absolute terms.

  • Like 1
Link to comment
Share on other sites

BED_MESH_CLEAR seems to clear all of the bed meshes, even the named ones. I have already remove BED_MESH_CLEAR from all of the macros, but Once I have consistent printing and chamber heating I will likely remove the BED_MESH_CALIBRATE from PRINT_START.

In the long run, I am planning to make macros for each filament type. Right now my PRINT_START has this at the begining. This is for Super Slicer, so your param names may be different.

    {% set extruder_temp = params.EXTRUDER|default(210)|float %}
    {%set bed_temp = params.BED|default(40)|float %}
    M140 S{bed_temp}               ; start bed heating
    M109 S{extruder_temp}          ; wait for extruder temp
    M190 S{bed_temp}               ; wait for bed temp
    G32                            ; home all axes
    BED_MESH_CALIBRATE
    G1 Z20 F3000                   ; move nozzle away from bed
    PRIME_NOZZLE

M140 starts the bed heating, but does not wait for it.

M109 starts the extruder heating, and waits for it.

M190 starts the bed heating, and waits for it.

PRIME_NOZZLE is a macro I've been working on to do a wipe before printing, it's the main reason for the early heating.

Eventually, I would like to wait for chamber temperature when printing ABS.

  • Voron FTW! 1
Link to comment
Share on other sites

2 hours ago, Simon2.4 said:

I've been working on my print quality for a few days and I just started running into bed warping issues too. I'm implementing BED_MESH_CALIBRATE but there are a few thing I don't understand; maybe you can help me: what exactly does BED_MESH_CLEAR do; there is little to no info on this in : https://www.klipper3d.org/Bed_Mesh.html "used to clear the internal mesh state" essentially means nothing since "internal mesh state" is not mentioned elsewhere in the document. This is part of the G32 routing in the default Klipper config file and it seems counter-intuitive to have that there.

I've implemented the procedure you mentioned and it works well for me too thanks @spamttx

I stumbled upon this page. This is quite informative.

https://github.com/AndrewEllis93/Print-Tuning-Guide#a-note-about-line-width

 

 

  • Like 3
Link to comment
Share on other sites

Not sure what web interface you are using, but if if you are using Mainsail it's easy to manage your bed mesh configurations. If you run the calibrate function from within Mainsail and choose to save the config, it will save the profile with the name "default" but can be renamed if you desire. Klipper automatically loads the profile named "default" if it exists on startup. So, if you only have one stored bed mesh, you can just create a default profile and after saving the config, you don't have to touch it again. 

If you decide to rename your bed mesh, you'll want to load you bed mesh by name before running a print with it. It's probably a good idea to have a different mesh for any different temperature you decide to run your printer at, but I'm pretty much only printing ASA at this point so I just created my default profile and run that.

Clearing the bed mesh removes your the stored mesh. If you do this, you'll likely want to rescan your bed height to create a new profile or load a different saved profile.

I used Fluidd for a short while, but it had a tool that worked pretty similarly to Mainsail. It's also worth noting these workflows are the same with Klipper GCode commands too, if you aren't using either of these interfaces.

Here's an image describing the functions within Mainsail:
295169907_meshsetup.thumb.png.14fdeeb9819e6f7c18af06dbc3eed9b9.png

Clarification:
You'll also want to make sure your printer has been preheated to desired temps for the print you are about to perform before running a calibration scan so get a good mapping after your bed has already reacted to the heat that's being applied to it.

Edited by ahough
Added clarification for preheat
  • Like 2
Link to comment
Share on other sites

11 hours ago, concentric_killa said:

I stumbled upon this page. This is quite informative.

https://github.com/AndrewEllis93/Print-Tuning-Guide#a-note-about-line-width

This was a great guide. I used to to help me identify many of the print quality issues I was running into too. That square test is a great way to figure out how well your printer is building your first layer.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...