Terminate Move after commanded retraction reached

  • Hey guys, I just installed a filament sensor on my bowden line between my printhead and a filament switching system I've got set up (similar to Prusa's MMU2.0). I'd like to use the filament monitor during prints to check for filament out and clogs and whatnot, but I'd also like to use it when I swap filaments as a sort of endstop.

    There is about 1 meter of bowden line running between my filament swticher (Proteus) and my printhead. I have a secondary extruder at Proteus, as well as a primary direct-drive extruder at my print head. When I swap filaments, I need to ensure that the filament retracts a fairly specific distance so that the filament swapper doesn't get caught up on the filament, but also so the filament doesn't retract so far that the secondary extruder doesn't pull the filament passed the drive gear, which would prevent it from being automatically loaded again. I thought I could use the H parameter in a G1 command to tell terminate the move when the right amount of filament is retracted, but that doesn't seem to work without an actual switch. Is there a way I can tell the printer to, say, retract the filament until the filament sensor tracks that 600mm of filament has been moved?

    Thank you in advanced!

  • administrators

    What's the difference between that and just telling it to retract 600mm? Is there any reason why the retraction done would be more or less than the requested amount?

  • @dc42 It's fairly reliable as I've tested it so far, but there is always a chance that the filament will drag a bit when being pulled from the extruder and won't retract the full distance, or there may be a bit of extra friction or resistance here and there that may cause the secondary extruder to slip a bit. If I can ensure that the exact amount of filament is retracted then not only can I prevent massive purge blocks, but I can make sure my filament swapper works on a closed loop and is reliable and repeatable. The swapper will cut the filament, but if there is still a meter of filament in the bowden tube on a switch, it has no way of knowing that it has to purge that much material from the nozzle before moving on with a color change.

    In short, I just want to ensure that it works perfectly every time without any major changes in consistency. I could find other ways around the problem, but they require either additional hardware, or a bit of manual entry.

  • @dc42 Could the new conditionals be used to accomplish this? I've just started to add them to my macros and things this evening. Would it be possible to say something along the lines of:

    while sensors.filamentMonitors[0].distanceMoved <= 300
         G1 F600 E-25

    I'm still learning the syntax and what all of the implemented object models are, but is there a way I could make that happen?

Log in to reply