Filament runout stops instead of pauses

  • So I've got my magnetic filament sensor working correctly (using a duet 3) with a microswitch. The problem is when I trip the microswitch (unplug it actually) the printer just stops (pause.g/pause button moves to x0 y0) and DWC says disconnected and reconnects. Once it reconnects it says that filament ran out and so paused, but the pause button isn't lit.

    Anyone know what is going on with this or where I can start debugging it?

  • @ddeflyer how are you connecting it? it either sounds like the gcode that's supposed to execute when the filament runout triggers is wrong, (possibly sending an emergency stop), or you're shorting the board when it triggers, causing it to reset. Those are my guesses at least.
    The gcode your should have should include an M226, or M600 (filament change pause), or M601 if you're on 3.01+ Fw.

  • My pause.g is:

    ; pause.g
    ; called when a print from SD card is paused
    ; generated by RepRapFirmware Configuration Tool v2.1.8 on Fri Mar 20 2020 05:06:07 GMT-0700 (Pacific Daylight Time)
    M83            ; relative extruder moves
    G1 E-10 F3600  ; retract 10mm of filament
    G91            ; relative positioning
    G1 Z5 F360     ; lift Z by 5mm
    G90            ; absolute positioning
    G1 X0 Y0 F6000 ; go to X=0 Y=0

    I haven't tried it for a while but I believe it did the same thing when I had an issue with the extruder skipping. Additionally I think this line from running M122 says that the duet 3 hasn't reset:

    Last reset 01:23:10 ago, cause: software
    Last software reset at 2020-04-11 15:21, reason: User

  • @ddeflyer Is there an M25 in the generated Gcode? which pause gcode is the slicer generating?

  • Im having the exact same problem, and I think it has to do with how Im declaring the pin maybe?

    M591 D0 S1 P1 C"" 
    M581 P"" T1 S1 C0

    This seems to be guidance for older firmware, but Im having the same with:

    M950 J"" 
    M581 P"" T1 S1 C0

    That syntax is probably not correct, as then you could only have one trigger, but the syntax examples arent comprehensive. Can anyone shed some light?

    Turbo, Im confused by your M25 question. Wouldnt the pause/trigger all be firmware side?

  • Okay, so i was more than a little confused, and I figured out how to declare a GPIO trigger which I have working as a filament sensor, but still cant get the M591 assignment to work correctly. Hopefully this can help you a little OP.

    M950 J12 C"" ; Names IO pin 8 in as Input 12 (required for M581)
    M581 P12 T1 S0 C1; References previously declare pin designation (12) to run pause.g (trigger 1) on falling edge (S0), only while printing (C1)

    The pin designation used in M950 creates a new naming convention. So instead of calling the pin by "name" (in this case you call it by whatever number you named it. I just chose 12 to avoid any unknown (to me) input declarations the system might have reserved or in use.

  • Sorry to keep replying to my own posts here, but I have made some more progress, and now have it working completely (as a stand alone trigger anyway). Im just using a microswitch to detect filament so OP your setup might vary a bit.

    M950 J12 C""
    M581 P12 T1 S0 C1
    M581 P12 T3 S1 C0

    So this setup detects running out of filament only when printing, but inserting filament anytime. I made a file, trigger3.g, which runs whenever you insert filament, acts as a filament load script. Filament runs out, print pauses runs pause.g, filament is inserted, it runs trigger3.g, then I click "resume print" and it starts back up. Works like a champ. Still not sure how to use M591, but this is working.

Log in to reply