Skip to content

Standlone Tip Tuning

I have spent a lot of time trying to understand and learn how to tune filament tips. My notes are pretty darn rough and scattered and many are even outdated. Some of those notes will be found here and published early before being polished.

So please excuse the messiness and be warned that some of these things are wrong

Stuff at the bottom is more likely to be up to date and likely more valid

Use the HappyHare documentation

This page of the Happy Hare documentation is loaded with useful info.

I need to learn more about how to make this work as I had trouble getting the standlone tip tuning to work for me. I clearly need to read that document and simply start adjusting parameters as best as I can and then test and repeat that process until I get closer to forming the type of tip that I think will work for me.

Note: I found an alternate tip forming macro that worked well enough until I found other ideas/approaches. This is worth checking out or at least recording here for posterity. The macro can be found here

Finally found some more info!

See this post by 'moggieuk' on the Voron Discord server This in turn lead to a spreadsheet document with values for various hotends, the document has these tabs:

Learning about HappyHare tip tuning

As mentioned the documentation has some important info. In this section I will try to document what I am learning, hope to achieve and steps taken along the way.

Switch to using HappyHare tip tuning macro instead of the _MMU_FORM_TIP_GENNRO macro I've been currentlly using.

MMU_TEST_CONFIG form_tip_macro=_MMU_FORM_TIP_STANDALONE

Open up mmu_software.cfg and you'll notice this section of the _MMU_FORM_TIP_STANDALONE macro that defines all of the parameters/variables:

########################################################################
# Standalone Tip Forming (also helps with rapid tuning of Slicer values)
########################################################################
[gcode_macro _MMU_FORM_TIP_STANDALONE]
description: Standalone macro that mimics SuperSlicer process

# Unloading and Ramming values - Initial moves to form and shape tip
variable_unloading_speed_start: 80     # Fast here to seperate the filament from meltzone (Very intitial retract SS uses distance of E-15)
variable_unloading_speed: 20           # Too fast forms excessively long tip or hair. Slow is better here UNLOADING_SPEED_START/COOLING_MOVES seems a good start
variable_ramming_volume: 0             # (mm^3) SS default values = 2, 5, 9, 13, 18, 23, 27. Only Used to Simulate SS Ramming during standalone
variable_ss_ramming: 0                 # Set to 0 for standalone ramming (RAMMING_VOLUME), 1 to let the slicer do it (i.e. turn off for standalone)

# Cooling Move Values - To cool the tip formed and separate from strings
variable_cooling_tube_position: 35     # Dragon ST: 35, Dragon HF: 30, Mosquito: 30, Revo: 35, Phaetus Rapido HF: 43;  Measured from Top of Heater Block to Top of Heatsink
variable_cooling_tube_length: 10       # Dragon ST: 15, Dragon HF: 10, Mosquito: 20, Revo: 10, Phaetus Rapido HF: 22; Measured from Nozzle to Top of Heater Block
variable_initial_cooling_speed: 10     # Slow to solidify tip and cool string if formed.
variable_final_cooling_speed: 50       # High speed break the string formed. Too fast = tip deformation during eject. Too Slow = long string/no seperation
variable_toolchange_temp: 0            # Used if you want to lower temp during toolchanges default 0
variable_cooling_moves: 4              # 2-4 is a good start

# SkinnyDip values - To burn off VERY FINE hairs only (This is NOT for long tip reshaping)
variable_use_skinnydip: 1              # Tune this LAST, this is for removal of VERY FINE hairs only (Different than a long tip)
variable_skinnydip_distance: 30        # Start just under Cooling_tube_position and increase - Will depend on how much Ramming Volume is used
variable_dip_insertion_speed: 30       # Medium-Slow - Just long enough to melt the fine hairs. Too slow will pull up molten filament
variable_dip_extraction_speed: 70      # Around 2x Insertion speed, Prevents forming new hairs
variable_melt_zone_pause: 0            # Milliseconds - default 0
variable_cooling_zone_pause: 0         # Milliseconds - default 0 - If you need to adjust here its possible Dip Insertion too slow
variable_use_fast_skinnydip: 0         # Skip the toolhead temp change during skinnydip move - default 0

# Final Eject - for standalone tuning only. Automatically set by `MMU_FORM_TIP` command
variable_final_eject: 0                # Default 0, enable during standalone tuning process to eject the filament

# Park filament ready to eject
variable_parking_distance: 0           # Final filament parking position after final cooling move, 0 will leave filament where it naturally ends up

The following two variables seem pretty important:

variable_cooling_tube_position: 35     # Dragon ST: 35, Dragon HF: 30, Mosquito: 30, Revo: 35, Phaetus Rapido HF: 43;  Measured from Top of Heater Block to Top of Heatsink
variable_cooling_tube_length: 10       # Dragon ST: 15, Dragon HF: 10, Mosquito: 20, Revo: 10, Phaetus Rapido HF: 22; Measured from Nozzle to Top of Heater Block

The printer I'm using to test out my ERCF build is using a CHC V6 with a CHT nozzle. So not a volcano but regular form factor V6. So I can easily use some dimensions of a V6 found online rather than diassembling my toolhead to measure these values. After doing this I found that my CHC V6 is likely very similar to the Revo and the default values that were created by HappyHare are probably fine to use.

So from a fresh power up I do this sequence

; Reset everything
MMU_RESET CONFIRM=1
MMU_HOME
MMU_LOAD
; make sure filament is inside hotend all the way and past the nozzle
; Use Mainsail interface to extrude about 50mm

Here I had an issue, it wouldn't extrude. I finally tracked it to the gear stepper on the ERCF was skipping (stalling out) or simply not turning. I had enabled it to "sync" with extruder but it wasn't strong enough (reduced current) and so it was actually hampering the extrusion rather than helping with it.

So disable that sync behavior

MMU_TEST_CONFIG sync_to_extruder=1
MMU_TEST_CONFIG sync_gear_current=70

Retry the extrusion using Mainsail, everything works

; Now eject the filament, this should trigger standalone tip forming
MMU_UNLOAD

Unfortunately the

Faster way to check tips

Initialize things just once

MMU_HOME
MMU_CHECK_GATE

Feed filament, form tip, eject enough so you can pull out bowden tube and examine tip. Assumes tool 0 is the gate/tool that has the filament you're testing with

# Feed filament to extruder and to hotend meltzone
T0
# Extrude a little so we know its completely in meltzone and a little past it (out of nozzle)
M83
G1 E10 F300
# Form tip and eject tip out of extruder so you can pull bowden tube+filament and inspect
MMU_EJECT EXTRUDER_ONLY=1

If tip is bad, then cut off. Whether you cut or not, make sure enough filament is pulled out of tube so that when you re-insert the tube you know the filament will be pushed against the extruder gears

More stuff

See here: https://discord.com/channels/460117602945990666/909743915475816458/1151726419420905542

The idea is that to iterate on tuning the parameters you directly call the MMU_FORM_TIP macro and provide it parameters The parameter values persist until the next restart of Klipperer (or if you do an MMU_RESET).

MMU_FORM_TIP cooling_moves=3
; Make logging to console verbose so we won't have to look at logfile
MMU_TEST_CONFIG log_level=4
; Use STANDALONE method instead of GENNRO
; form_tip_macro = _MMU_FORM_TIP_GENNRO
MMU_TEST_CONFIG form_tip_macro=_MMU_FORM_TIP_STANDALONE

;
MMU_EJECT FINAL_EJECT=1

; Show current tip tuning parameters without running the macro
MMU_FORM_TIP SHOW=1
; Set one or more tip tuning parameters without running the macro
MMU_FORM_TIP RUN=0 variable_parking_distance=50
MMU_FORM_TIP RUN=0 variable_final_cooling_speed=70
MMU_FORM_TIP RUN=0 variable_cooling_tube_position=35
MMU_FORM_TIP RUN=0 cooling_moves=3

Getting these errors occassionally

TMC 'stepper_mmu_gear' reports error: GSTAT:      00000004 uv_cp=1(Undervoltage!)

Recap

In mmu_parameters.cfg. To prevent oozing when filament is loaded into extruder, adjust toolhead_extruder_to_nozzle. To deal with error that filament could not be ejected after tip tuning you can try to increase toolhead_unload_safety_margin from default 10 to something higher (say 20).

toolhead_extruder_to_nozzle: 50     # 54 was giving blobs when using STANDALONE tip forming method
toolhead_unload_safety_margin: 20   # 10: Distance added to the extruder unload movement to ensure filament is free of extruder. Must be less than 'gate_unload_buffer`
sync_form_tip: 1                    # Synchronize during standalone tip formation (initial part of unload)
force_form_tip_standalone: 1        # 0 = Default smart behavior, 1 = Always do standalone tip forming (TURN SLICER OFF!)
extruder_form_tip_current: 120      # % of extruder current (100%-150%) to use when forming tip (100 to disable)

Crucial parameters in mmu_software.cfg that are part of _MMU_FORM_TIP_STANDALONE macro

variable_cooling_tube_position: 40     # Spreadsheet calls this: "Cooling Tube Retraction".
variable_cooling_tube_length: 20       #

variable_cooling_tube_position is how far back to retract the filament so that it is at the start point of the cooling region. I think

variable_cooling_tube_length is the length of the cooling region. The end point of the cooling region is at variable_cooling_tube_position + variable_cooling_tube_length.

The actual tip tuning goes roughly like this:

    if ramming:
        do some ramming
    retract_ammount = 'cooling_tube_position' - ('cooling_tube_length'/2) 
    retract filament by retract_ammount millimeters
    # filament should now be in middle of "cooling tube" or "cooling region".
    # This is the 34mm we measured earlier

Physical Examination

I separated the Sherpa Mini from the V6 hotend and its fan. I left the filament and bowden tube connected to the Sherpa Mini. I performed a MMU_EJECT EXTRUDER_ONLY=1 to have the extruder pull the filament into its "park" location (right before the extruder gears). Then I performed MMU_LOAD EXTRUDER_ONLY=1 so I could measure how far away from the base of the extruder the filament was pushed. This distance is 34mm (or sometimes 38mm) which seems about right as the base of the Sherpa Mini is about 16mm (more or less) away from the entry point of the BMG gears which combined yields 50mm and we've set toolhead_extruder_to_nozzle to the value of 50.

With the filament extended into what is supposed to be the hotend meltzone (50mm), I then performed MMU_EJECT EXTRUDER_ONLY=1 and observed that the filament would retract to about 27mm

Even faster way to inspect tips

I created some macros that allow me to load filament, extrude a bit so for sure we know nozzle is primed, then perform tip tuning and eject the filament only enough so that Bowden can be pulled out and tip examined. Then parameters can be modifed like this example:

MMU_FORM_TIP cooling_moves=3

Then a second macro to repeat the process.

Create a test_macros.cfg and place it into the mmu/optional folder. Be sure to add an include line in your printer.cfg (something like this):

[include mmu/optional/test_macros.cfg]

Place the following into this new test_macros.cfg

[gcode_macro FORM_TIP_AND_EJECT]
description: Forms a tip and then ejects it out of extruder for inspection
gcode:
    # Feed filament to extruder and to hotend meltzone
    T0
    # Extrude a little so we know its completely in meltzone and a little past it (out of nozzle)
    M83
    G1 E25 F300
    # Form tip and eject tip out of extruder so you can pull bowden tube+filament and inspect
    MMU_EJECT EXTRUDER_ONLY=1

[gcode_macro REFORM_TIP_AND_EJECT]
description: Forms a tip and then ejects it out of extruder for inspection
gcode:
    # Feed filament to extruder and to hotend meltzone
    MMU_LOAD EXTRUDER_ONLY=1
    # Extrude a little so we know its completely in meltzone and a little past it (out of nozzle)
    M83
    G1 E25 F300
    # Form tip and eject tip out of extruder so you can pull bowden tube+filament and inspect
    MMU_EJECT EXTRUDER_ONLY=1

Use FORM_TIP_AND_EJECT to start (may need to do an MMU_HOME first if HappyHare tells you). You only use this macro this one time to start things off.

Then pull out bowden tube and end of filament, inspect, tweak vars, make sure filament is sufficiently pulled out of tube and then re-insert filament and tube back onto extruder. Then use REFORM_TIP_AND_EJECT to repeat the process as many times as you wish.

ProTip: Use tab autocomplete in the console to avoid having to type out the full names of these macros

Make sure you get familiar with the MMU_FORM_TIP macro so you can tweak the parameters easily during these test/inspect passes without having to restart Klipper (and HappyHare)

Here are some examples

; Show current tip tuning parameters without running the macro
MMU_FORM_TIP SHOW=1
; Set one or more tip tuning parameters without running the macro
MMU_FORM_TIP RUN=0 variable_parking_distance=50
MMU_FORM_TIP RUN=0 variable_final_cooling_speed=70
MMU_FORM_TIP RUN=0 variable_cooling_tube_position=35
MMU_FORM_TIP RUN=0 cooling_moves=3