Moving extra motors while printing. DDA rings?



  • Re : Moving extra motors while printing

    Hello,

    I have the same problem : I have to rotate a stepper motor about 1/4 turn when an optical sensor is triggered.
    I created a U axis, and a trigger 2.
    I rotate the U axis in the trigger2.g file.
    The problem is the printer stop printing when trigger#2 is activated (the time the U Stepper rotate )

    On the forum, dc42 said :
    RepRapFirmware 3 already supports two independent move queues (which are called DDA rings in RRF). RRF also supports multiple input channels which run semi-concurrently, except when they compete for resources.
    https://forum.duet3d.com/topic/13089/2-cartesian-printers-one-duet-2-wifi/7
    But I did'nt found any information on DDA rings.

    Is there a way to do that ? Or do I need to add an arduino + stepper driver driven by an I/O of Duet3 ?

    Configuration :
    Duet3 6HC + EXP1HC + EXP3HC
    RRF 3.1.1


  • administrators

    Currently, the second DDA ring is very short (it holds up to 3 moves only) and the only way of using it in standard firmware is vis the M594 command. I am open to suggestions about how to make it more generally useful.

    One possibility might be to add a new parameter to the G1 command which means use the second DDA ring. However, it is important that only one DDA ring commands movement of each motor.



  • I've brought this up before (https://forum.duet3d.com/topic/18117/multiple-m951-height-following-loops-for-more-axes-than-just-z) but generalizing M594 to other axes and making it more flexible would be cool.

    Another useful application of this would be allowing asynchronous moves between two axes which start immediately when commanded or at a timed interval based on a sequential timed gcode commands is something which would be useful without having to hand code the start and stop points and calculate feedrates for 2 seperate moves.


  • administrators

    To move a set of axes independently of the main axes, you need a second GCode stream. This could be a separate GCode file read from the SD card; or a macro file executed in response to a trigger or the daemon process; or something else (e.g. another GCode stream sent by an attached SBC).

    A mechanism will also be needed to assign axes to the second DDA ring. This could be a static assignment, or a dynamic assignment such as is implemented by M594.



  • Does it need a second GCODE stream?
    Could it not be something like

    G1 X100 F1000
    G1 Y50 C1 K1 F1000
    

    Where the C parameter could be time delay from previous gcode start to and K being which DDA ring to run on? Basically an implicit, asynchronous G4 type dwell if K is 0.
    This seems reasonable, especially if the movement is being executed on something like an expansion board as you just move your move start time that much (please correct me if that's totally wrong.)


  • administrators

    @lee7670 said in Moving extra motors while printing. DDA rings?:

    Does it need a second GCODE stream?
    Could it not be something like

    G1 X100 F1000
    G1 Y50 C1 K1 F1000
    

    Where the C parameter could be time delay from previous gcode start to and K being which DDA ring to run on? Basically an implicit, asynchronous G4 type dwell if K is 0.
    This seems reasonable, especially if the movement is being executed on something like an expansion board as you just move your move start time that much (please correct me if that's totally wrong.)

    It could be, although that would of course be a semi-synchronised movement.



  • Sorry, that's sort of what I meant, being able to start a move with it's own feedrate in the middle of another move without having to do weird feedrate math, or if no C parameter is defined, start immediately on the second DDA ring.



  • Thanks for your fast reply,
    For me :

    G1 X100 F1000
    G1 Y50 C1 K1 F1000
    

    would be nice !
    I could add that in the trigger.g code or any macro.g file

    Is it possible too to have more than 3 moves ?

    In the application for my client, I need to go back and forth.
    It's a pellet feeding system and sometimes the pellets get stuck in the feed, it's interesting to be able to go back and forth to loosen them.



  • I tried to use the M594 to test... It doesn't work, the X Y Z axes still stop when the U axis rotates.
    I tried with the axis and sensors connected on the 6HC board and also on an EXP3HC board.
    How can I setup it? I'm not sure I understand the M594 and M951 settings.
    Does anyone have an example? I couldn't find it on the forum.
    Ideally, on the machine the U motor and the sensor are connected to an EXP3HC, but if I need to, I could add a cable and connect to the 6HC motherboard.


Log in to reply