Skip to content

Commit

Permalink
further love of EndlessSpool. Run on load of empty gate option and fu…
Browse files Browse the repository at this point in the history
…ll eject from mmu option
  • Loading branch information
moggieuk committed Dec 19, 2023
1 parent 4a0a798 commit eadcf9d
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 67 deletions.
61 changes: 24 additions & 37 deletions TODO
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
Installer:
10. Check comments on tool_tip_macro.
Example:
variable_cooling_tube_position should have the comment: Measured from Nozzle to Top of Heater Block
variable_cooling_tube_length should have the comment: Measured from Top of Heater Block to Top of Heatsink
1. Inattention watchdog that autmatically executes recovery if user doesn't react -- better than disabling heaters and killing print. Use this to replace current retry X times option.

11. Don't trigger 'gate_empty' before double checking if it is really empty?

13. Here are the parameters that would go in install.sh (using "MELLOW_FLY_ERCF" instead of ERB / EASY-BRD / etc)
If it helps to improve HH (and HH2), here's the hardware config for the Mellow FLY ERCF board (supports canbus) Of note is that the mcu config for this board might be something similar to canbus_uuid: nnnnnnnnnnn instead of serial: xxx. (The board can be used in either USB or canbus mode)
2. From User: Here are the parameters that would go in install.sh (using "MELLOW_FLY_ERCF" (supports canbus):
This board might be something similar to canbus_uuid: nnnnnnnnnnn instead of serial: xxx.
(The board can be used in either USB or canbus mode)

PIN[MELLOW_FLY_ERCF,gear_uart_pin]="ercf:gpio9";
PIN[MELLOW_FLY_ERCF,gear_step_pin]="ercf:gpio7";
PIN[MELLOW_FLY_ERCF,gear_dir_pin]="!ercf:gpio8";
PIN[MELLOW_FLY_ERCF,gear_enable_pin]="!ercf:gpio6";
PIN[MELLOW_FLY_ERCF,gear_diag_pin]="ercf:gpio23";
PIN[MELLOW_FLY_ERCF,gear_endstop_pin]="ercf:gpio13"; // this is a dummy unused pin because there's no actual endstop pin
PIN[MELLOW_FLY_ERCF,selector_uart_pin]="ercf:gpio0";
PIN[MELLOW_FLY_ERCF,selector_step_pin]="ercf:gpio2";
PIN[MELLOW_FLY_ERCF,selector_dir_pin]="!ercf:gpio1";
Expand All @@ -24,31 +18,34 @@ PIN[MELLOW_FLY_ERCF,selector_endstop_pin]="ercf:gpio20";
PIN[MELLOW_FLY_ERCF,servo_pin]="ercf:gpio21";
PIN[MELLOW_FLY_ERCF,encoder_pin]="ercf:gpio15";

3. DONE gneu: On runout.. add option to unload tool to fully unload past the gate... so it can't accidently reload on next mmu_check_gates

4. DONE gneu: Need to use ES groups for initial load if desired gate is empty!

5. DONE gneu: When MMU_REMAP_TTG, ensure marked gate is "Unknown" status if not specified with AVAILABLE=xxx

6. Gate calibration - maybe throw away the first measure unless the gate is buffered for more accurate results

7. Make servo movement integration faster with option to pass printtime() to servo move so time is not currenttime to avoid toolhead.wait()

8. Turn spool group into Class... that fetches filament from first gate in group, but tacks that it has move to new gate. On print end, reset the TTG map back to what is what at start of print. start print should snapshot, endless_spool update in print, end print should restore. What about manual changes to TTG during a print? these really shouldn't be restore/overwitten at end of print.

24. gneu feedback on EndlessSpool: (2 ideas and 1 possible bug)
I came across a mistake of mine, that makes me think about a few mods that could improve ES.
Yesterday I was printing something and in the middle of the print I saw that ES was required.
I stated the print with T9. When I noticed that I didn't had enough material to finish the print, I started to set up ES while printing.
I installed a new spool on T2 and modified TTG map so that T2 will be the next ES spool for T9. However I forgot to make T2 available. I could not check the gate because T9 was printing. When the ES was detected, of course he told me that T2 was empty and went to pause. I didn't all that was needed to make T2 working, and finish the print.
> The first mod could be that when you add a tool in the ES mapping, that tool (T2 in my case) is automatically made available.
On the next print, T9 and T2 were still mapped together for ES, so I thought that since it had detected ES on T9 it would start on T2. But he didn't. So I had to pause and load T2 manually.
I installed a new spool on Gate2 and modified TTG map so that Gate2 will be the next ES spool for T9. However I forgot to make T2 available.
I could not check the gate because T9 was printing. When the ES was detected, of course he told me that Gate2 was empty and went to pause.
I didn't all that was needed to make Gate2 working, and finish the print.

The first mod could be that when you add a tool in the ES mapping, that tool (Gate2 in my case) is automatically made available.

On the next print, T9 and Gate2 were still mapped together for ES, so I thought that since it had detected ES on T9 it would start on T2.
But he didn't. So I had to pause and load T2 manually.
> The next mod could be that when ES is detected on a gate, that gate is declared empty automatically.
> When the spool detected as empty, the unload could go a bit further than park the filament in the block. It could unload 20mm further to make sure that the gate is empty.
What do you think ?
moggieuk — Today at 7:04 PM
> The first mod could be that when you add a tool in the ES mapping, that tool (T2 in my case) is automatically made available.
I agree that would be sensible thing to do automatically. Just so you know you can manually set it to "available" with the MMU_GATE_MAP GATE=xx AVAILABLE=1 command, but it should be automatic.
> The next mod could be that when ES is detected on a gate, that gate is declared empty automatically.
This is what it is suppose to do and was sure it did. Did you do something that could have caused it to be marked available again? Or maybe the tool-to-gate map started with the wrong gate. I'll have to look into this one but sounds like a bug.
> When the spool detected as empty, the unload could go a bit further than park the filament in the block. It could unload 20mm further to make sure that the gate is empty.
Can you explain this more? Do you mean the unload of the filament that has run out could go further? If so, then yes, this is a good idea!

25. Need to use ES groups for initial load if desired gate is empty!
I forced T9 empty, hopping that T2 will load and start the print.
It didn't. It just stop the print. Although T2 and T9 are mapped together for ES.

26. Gate calibration - maybe throw away the first measure unless the gate is buffered for more accurate results

27. Make servo movement integration faster with option to pass printtime() to servo move so time is not currenttime to avoid toolhead.wait()

Complete Type A MMU support
===========================
Expand All @@ -67,13 +64,6 @@ b) home to sensor (some virtual sensors like collision)

8. Add pre-gate sensor support .. essentially a runout sensor with insertion logic to auto load (during print only if Type B or C.
9. Use pre-gate sensor to detect filament for MMU_GATE_MAP - insertion logic could at least do that.
Type A:
- pre-gate logic would update gate map, call action changed?
- MMU_PRELOAD if possible

10. Turn spool group into Class... that fetches filament from first gate in group, but tacks that it has move to new gate. On print end, reset the TTG map back to what is what at start of print. start print should snapshot, endless_spool update in print, end print should restore. What about manual changes to TTG during a print? these really shouldn't be restore/overwitten at end of print.

11. Add additional sensors to visual string maybe need additional filament pos states to handle pre-gate?

Type B & C MMU support
=======================
Expand All @@ -85,6 +75,3 @@ Type B & C MMU support
4a. mmu_servo should "inherit" base servo settings so it could be as easy and just specifying `pin` or least only the differences.
5. Could multiple gear steppers also inhert settings from the base...?


12. Inattention watchdog that autmatically executes recovery if user doesn't react -- better than disabling heaters and killing print.

5 changes: 4 additions & 1 deletion config/base/mmu_parameters.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -235,11 +235,14 @@ force_form_tip_standalone: 0 # 0 = Default smart behavior, 1 = Always do standa
#
# - Clog detection is available when encoder is fitted and it can detect when filament is not moving and pause the print.
# - EndlessSpool feature allows detection of runout on one spool and the automatic mapping of tool to an alternative
# gate (spool). Set to '1', this feature requires clog detection or gate sensor or pre-gate sensors.
# gate (spool). Set to '1', this feature requires clog detection or gate sensor or pre-gate sensors. EndlessSpool
# functionality can optionally be extended to attempt to load an empty gate with 'endless_spool_on_load'
# - Spoolman support will use the SpoolId configured with the gate to load filament details and color from spoolman.
#
enable_clog_detection: 2 # 0 = disable, 1 = static length clog detection, 2 = automatic length clog detection
enable_endless_spool: 1 # 0 = disable, 1 = enable endless spool
endless_spool_on_load: 0 # 0 = don't apply endless spool on load, 1 = run endless spool if gate is empty
endless_spool_final_eject: 50 # Extra unload distance on runout to prevent accidental reload
enable_spoolman: 0 # 0 = disable spoolman support, 1 = enable spoolman (requires spoolman setup)


Expand Down
4 changes: 2 additions & 2 deletions config/base/mmu_software.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ variable_ramming_volume: 0 # (mm^3) SS default values = 2, 5, 9, 13,
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_cooling_tube_position: 35 # Dragon ST: 35, Dragon HF: 30, Mosquito: 30, Revo: 35, Phaetus Rapido HF: 43; Measured from nozzle to top of heater block
variable_cooling_tube_length: 10 # Dragon ST: 15, Dragon HF: 10, Mosquito: 20, Revo: 10, Phaetus Rapido HF: 22; Top of Heater block to top of heatsink
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
Expand Down
Loading

0 comments on commit eadcf9d

Please sign in to comment.