Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Moving extra motors while printing. DDA rings?

    Scheduled Pinned Locked Moved Unsolved
    Duet Hardware and wiring
    3
    9
    538
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Philippe71undefined
      Philippe71
      last edited by Phaedrux

      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

      1 Reply Last reply Reply Quote 0
      • dc42undefined
        dc42 administrators
        last edited by dc42

        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.

        Duet WiFi hardware designer and firmware engineer
        Please do not ask me for Duet support via PM or email, use the forum
        http://www.escher3d.com, https://miscsolutions.wordpress.com

        1 Reply Last reply Reply Quote 0
        • lee7670undefined
          lee7670
          last edited by

          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.

          1 Reply Last reply Reply Quote 0
          • dc42undefined
            dc42 administrators
            last edited by

            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.

            Duet WiFi hardware designer and firmware engineer
            Please do not ask me for Duet support via PM or email, use the forum
            http://www.escher3d.com, https://miscsolutions.wordpress.com

            1 Reply Last reply Reply Quote 0
            • lee7670undefined
              lee7670
              last edited by

              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.)

              dc42undefined 1 Reply Last reply Reply Quote 0
              • dc42undefined
                dc42 administrators @lee7670
                last edited by

                @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.

                Duet WiFi hardware designer and firmware engineer
                Please do not ask me for Duet support via PM or email, use the forum
                http://www.escher3d.com, https://miscsolutions.wordpress.com

                1 Reply Last reply Reply Quote 0
                • lee7670undefined
                  lee7670
                  last edited by

                  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.

                  1 Reply Last reply Reply Quote 0
                  • Philippe71undefined
                    Philippe71
                    last edited by

                    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.

                    1 Reply Last reply Reply Quote 0
                    • Philippe71undefined
                      Philippe71
                      last edited by

                      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.

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post
                      Unless otherwise noted, all forum content is licensed under CC-BY-SA