Introduction: I’ve been experimenting with manual multi-filament prints on my Ender-3 V2 (V4.2.2 board) upgraded with a Nebula Pad and CR-Touch. After navigating some “soft-locks” and inconsistent behaviors during filament changes, I found a highly reliable workflow by using the Machine G-Code presets in the slicer to handle the logic.
The Context: Initially, I encountered “brief exceptions” and total system soft-locks when attempting to pause or change filament using standard methods. My CR-Touch is aging, and I suspect that standard firmware-level routines (like M600) may trigger Z-probe checks. If the probe fails to deploy perfectly, the Nebula Pad (Klipper) throws an exception and locks the MCU for safety.
The Strategy: Instead of relying on the firmware to interpret an M600 command or a manual UI pause, I’ve taken advantage of the Change filament G-code box in Creality Print. By inputting a custom raw G-code routine, you define the behavior yourself. This bypasses potential firmware-level “black box” macros and avoids hardware-intensive checks that cause soft-locks on older sensors.
The Setup (Creality Print):
-
Go to Printer Settings > Manage Printers > Edit.
-
Locate the Change filament G-code section and click the edit icon.
-
Replace the text with the following custom routine:
G-Code
; --- BEGIN CUSTOM FILAMENT CHANGE PRESET ---
PAUSE ; Trigger the stable internal pause routine
G91 ; Switch to Relative positioning
G1 E-2 F2700 ; Quick retract to prevent a blob on the model
G1 Z10 F600 ; Lift nozzle 10mm for clearance
G90 ; Switch to Absolute positioning
G1 X10 Y10 F3000 ; Park head at the front-left corner for easy access
G91 ; Back to Relative
G1 E-50 F1000 ; Retract 50mm for easy filament removal
G90 ; Back to Absolute
M0 ; SAFETY HALT: Wait for user to swap and click 'Resume'
; --- RE-PRIME SEQUENCE (Runs AFTER clicking Resume) ---
G91 ; Relative positioning
G1 E60 F200 ; Purge 60mm to re-pressurize nozzle and clear air gaps
G4 P2000 ; 2-second dwell (Use tweezers to grab the "poop" now!)
G92 E0 ; RESET EXTRUDER to zero (Crucial to prevent missing layers)
G90 ; Back to Absolute positioning
; --- END CUSTOM FILAMENT CHANGE PRESET ---
Why this method worked for me:
-
Macro-Agnostic: This code uses basic movements (G1, G90, G91) that are universal. It works regardless of whether your firmware has a “proper”
M600definition. -
Hardware Stability: It avoids the Z-homing or probe-check cycles that often crash the print when a CR-Touch is acting up.
-
Perfect Resumes: The 60mm purge and G92 E0 reset ensure the nozzle is fully re-pressurized before it returns to the model, eliminating “missing layers” or under-extrusion gaps.
Final Note: Before starting this endeavor, I spent a lot of time searching this forum and found many others hitting these same walls. I wanted to document this fix specifically for those who feel “stuck” with the current firmware limitations. I hope that anyone encountering these issues in the future can use this as a stable foundation and continue to build upon it.
Community Feedback: I am sharing this to provide clarity for current and future Ender-3 V2/Nebula Pad users, but I am very open to shared inputs! If you have encountered different behaviors on other firmware versions or have found further refinements for this G-code routine, please share your observations. Let’s keep refining this for the community!