-
-
Notifications
You must be signed in to change notification settings - Fork 19.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BUG] (manual) Mesh Bed Leveling has high initial Z #21239
Comments
The
Probably should be changed to something like this
|
@borland1 -- sure, that makes sense. Are you saying that you agree that this is a bug though? The bug I am referring to is that when MANUAL_PROBE_START_Z is set, the previous Z height is not used, not for any of the probe points. Even if MANUAL_PROBE_START_Z = 0, then the previous bed height will NEVER be called. From what I can see this is a bug in the logic. The code is extremely convoluted and there are zero code comments... does that make sense? |
I think what you described is expected behavior when calibrating the bed mesh with the bed geometry. When Before running the Manual Bed Leveling, you should have already leveled the bed's four corners with copy paper as a feeler gauge between nozzle and bed. Depending on your bed's flatness, you can change the 0.2mm value of I agree that the code is not well laid out with Probe Options and Bed Leveling as two separate topics in the config. You can find more information about bed leveling setup in the Configuration Documentation on Marlin's Web site. There is also bed leveling information in the G-code help section. |
I disagree that this is as expected -- because this behaviour has changed, and the users I support have all noticed and complained! It did not operate as you describe previously. The commit I refer to does not give any indication that they are aware of how this change affected the manual mesh bed levelling process -- they only refer to levelling with probes. Can you acknowledge those two points? That (a) this behaviour has changed, and (b) that it does not appear the behaviour change was anticipated? I understand the process how to manually level a bed, have used it for many years! 0.2mm is not a useful value for all cases, some beds are out by up to +0.4mm or more, especially for warped aluminium beds on large printers -- my point being that one value does not work in all cases, and having a large MANUAL_PROBE_START_Z makes the levelling process very slow (under the present mode of operation). I would suggest it should be perhaps previous levelling point Z value + some new set offset like 0.2mm. The way this used to work was quick and efficient, and I did not enconunter any issues with the previous z value simply being used as the start Z for the next leveling point. I hope I have been able to be clear, thanks. |
Requesting review for this one. Looking for someone else to check my conclusions that: The lack of commenting in this section of particularly obtuse convoluted code is unforgivable. For bonus points, if someone can confirm the correct behaviour during bed levelling as designed (documented anywhere?) that would also be great. Or I can propose a new system. |
Trying again: prior to 18 Nov 2020, the previous behaviour for manual mesh bed leveling was that the previous leveled point height was used as the start height for the next mesh point. (Of course, the nozzle was moving up while traveling between points, so as not to scrape the bed with the nozzle.) This was a very reasonable process of operation in my opinion. In the current build, the MANUAL_PROBE_START_Z is used as the starting Z height for ALL points, meaning it takes a long time to manually lower the nozzle at every single point. I think this code change was a bug due to oversight (and cryptic convoluted uncommented code... grrr), as this code change was done with relation to ABL levelling and was not a deliberate change to the manual mesh bed levelling process. |
Please check on the latest code, since the PR was merged. It attempts to achieve consistency and provide a proper fallback if |
I’ll give it a look over. Cheers. |
Closing since #21692 was merged. |
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
Bug Description
Regression due to #20160
This addition of MANUAL_PROBE_START_Z being defined in Conditionals_post.h messes up manual mesh bed levelling.
When you perform mesh bed levelling, after the home, the nozzle moves to the first point. The height of that point should be "zero" - at the last home position. After levelling, the nozzle should move up, to the safe travel height, then move to the next XY point 2, and then move down to the previous Z height, same as point 1.
Walkthrough of problem in code:
For mesh bed levelling:
if MESH_BED_LEVELING --> if true, sets PROBE_SELECTED = 1 (line 795 in conditionals_LCD.h) [**]
if PROBE_SELECTED, then if not defined, Z_CLEARANCE_BETWEEN_PROBES gets defined from Z_HOMING_HEIGHT (line 2613 in Conditionals_post.h)
If Z_CLEARANCE_BETWEEN_PROBES is defined, then MANUAL_PROBE_START_Z is defined (line 2629 on Conditionals_post.h)
Then if MANUAL_PROBE_START_Z is defined, then lines 224-230 in bedlevel.cpp will not run
and thus MANUAL_PROBE_START_Z will be used for all bed levelling points as the start Z height.
The result is, that after moving to each new XY point during manual mesh bed levelling, the nozzle starts from Z = MANUAL_PROBE_START_Z rather than Z = Zprevious. (lines 224-230 in bedlevel.cpp)
One solution (UGLY, and WRONG, but WORKS perfectly) as short term workaround
change line 216 in bedlevel.cpp:
#ifdef MANUAL_PROBE_START_Z
becomes
#if defined(MANUAL_PROBE_START_Z) && !defined(MESH_BED_LEVELING)
[**] perhaps this should not be true??
The text was updated successfully, but these errors were encountered: