Skip to content
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] Cold extrusion not working #22921

Closed
c15yi opened this issue Oct 10, 2021 · 9 comments
Closed

[BUG] Cold extrusion not working #22921

c15yi opened this issue Oct 10, 2021 · 9 comments

Comments

@c15yi
Copy link

c15yi commented Oct 10, 2021

Did you test the latest bugfix-2.0.x code?

Yes, and the problem still exists.

Bug Description

I used the LCD screen to test all the axis on my Anycubic i3 Mega. After XYZ worked I wanted to test the extrusion stepper.
After confirming in the menu, that I want to proceed even though the hotend is not heated the motor is not moving at all when commanding it to move.

When disabling the //#define PREVENT_COLD_EXTRUSION flag it works as expected.

Bug Timeline

No response

Expected behavior

After confirming that I want to proceed even with the cold hotend, I expect the stepper motor to rotate when sending some movement commands to it.

Actual behavior

No response

Steps to Reproduce

No response

Version of Marlin Firmware

Marlin bugfix-2.0.x (Oct 10 2021 17:15:20)

Printer model

Anycubic i3 Mega (dual z-axis)

Electronics

SKR v1.3, TMC2208 drivers

Add-ons

No response

Bed Leveling

No response

Your Slicer

No response

Host Software

No response

Additional information & file uploads

The log says echo: cold extrusion prevented when trying to move the stepper motor.

Configuration
cold extrusion.zip

I set up the second z-axis for the E0 slot on the board and shifted the E0 config to the E1 pins on the board.

@sjasonsmith
Copy link
Contributor

This sounds like exactly what PREVENT_COLD_EXTRUSION is supposed to do.

I see that the override menu was added in the following pull request, but it isn't 100% clear to me whether it was actually effective. It looks like it would allow you to get into the movement menu, but I'm not sure that it would actually bypass the lower-level motion/planner checks. It is possible that it did when it was originally added, but has been broken in refactoring since then.
#19606

@thisiskeithb
Copy link
Member

I see that the override menu was added in the following pull request, but it isn't 100% clear to me whether it was actually effective.

It is possible that it did when it was originally added, but has been broken in refactoring since then.

It worked at one point, but I ran into this very issue while testing some new board/driver combos with the latest bugfix-2.0.x tonight.

@ellensp ellensp closed this as completed Apr 9, 2022
@thisiskeithb
Copy link
Member

thisiskeithb commented Apr 9, 2022

I can still reproduce this on current bugfix with my BTT002/TMC2209 & SKR 2/TMC2208 builds.

With a cold hotend and PREVENT_COLD_EXTRUSION enabled (per defaults), I'm asked if I want to proceed while trying to move E, but the E motor doesn't move unless up to temp.

Edit: OP is also using TMCs, so perhaps the bug is more nuanced / requires TMCs

Here's OP's configs ported to the latest bugfix: Marlin Issue 22921.zip

@thisiskeithb
Copy link
Member

thisiskeithb commented Apr 10, 2022

Using your configs (updated to current bugfix) on a real skr1.3 PREVENT_COLD_EXTRUSION works as expected.

The point is that you were still given the option to bypass cold extrusion and move E, even when PREVENT_COLD_EXTRUSION enabled, with that “Hotend too cold! / Proceed yes/no?” message when selecting move E while cold.

Otherwise, what is the point of giving users the option to bypass?

This feature worked fine at one point, even with PREVENT_COLD_EXTRUSION enabled.

@ellensp
Copy link
Contributor

ellensp commented Apr 10, 2022

After clearing up the confusion on my part. I can confirm the issue.

a partial solution. Might inspire someone while I sleep,

--- a/Marlin/src/lcd/menu/menu_motion.cpp
+++ b/Marlin/src/lcd/menu/menu_motion.cpp
@@ -227,9 +227,11 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int
       if (too_cold) {
         ui.goto_screen([]{
           MenuItem_confirm::select_screen(
-            GET_TEXT(MSG_BUTTON_PROCEED), GET_TEXT(MSG_BACK),
-            _goto_menu_move_distance_e, nullptr,
-            GET_TEXT(MSG_HOTEND_TOO_COLD), (const char *)nullptr, PSTR("!")
+            GET_TEXT(MSG_BUTTON_PROCEED), GET_TEXT(MSG_BACK)
+            , [] { Temperature::allow_cold_extrude = true; _goto_menu_move_distance_e(); }
+            , nullptr
+            , GET_TEXT(MSG_HOTEND_TOO_COLD)
+            , (const char *)nullptr, PSTR("!")
           );
         });
         return;

This works, but allow_cold_extrude remains set This should reset when you exit the menu, I think It should re-prompt you every time you try and move E when cold.

@ellensp
Copy link
Contributor

ellensp commented Apr 15, 2022

This PR should fix it. Closing

@ellensp ellensp closed this as completed Apr 15, 2022
@thisiskeithb
Copy link
Member

Reopening since #24045 was broken right before it was merged.

#24045 (comment)

@thisiskeithb
Copy link
Member

Closing since #24176 has been verified working here & merged.

@github-actions
Copy link

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.

@github-actions github-actions bot locked and limited conversation to collaborators Jul 16, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants