Moving other axes during a move command
-
I am using the Duet 2 Wifi to control XYZ stepper motors on a Cartesian microscope stage. I made a script where it continuously travels to different points of interest using G0 commands. It is working well.
I would like to build a custom pump to create oscillatory flow using the E1 driver and a stepper motor. The stepper motor would be coupled to a syringe pump. I would send G0 commands to move the pump 0mm to 200mm back and forth. I would like a smooth travel that takes around 20 minutes for each direction.
I would label the E1 driver axis as U. Starting at U=0mm and using an appropriately slow speed, I can call G0 U200 to move to U=200mm over 20 minutes. During that time, is there a way to have Duet move the XYZ axes to move my microscope stage independent of the pump?
-
@avdoverflow
You could move the syringe by calling a macro. (*)
Then the rest of the axes should be free to move by single commands or the DWC jog-buttons or a gcode 'print'-file. (untested)
It will not be in sync with the syringe position.*) with two endstops for the syringe you could also put the commands in 'daemon.g' and let it run back and forth eternally
-
@avdoverflow said in Moving other axes during a move command:
During that time, is there a way to have Duet move the XYZ axes to move my microscope stage independent of the pump?
Currently not. However, RRF can support a second movement queue internally, so much of the firmware needed to support what you want is present already. We plan to support dual (or greater) independent motion queues in GCode in the future, but probably only on Duet 3 due to lack of memory on Duet 2.
-
@dc42 said in Moving other axes during a move command:
Currently not.
We had the discussion about blocking options in macros lately and there it seemed, the macro commands are 'combed' into the print queue? Hence my assumption it would be possible
-
@o_lampe said in Moving other axes during a move command:
@dc42 said in Moving other axes during a move command:
Currently not.
We had the discussion about blocking options in macros lately and there it seemed, the macro commands are 'combed' into the print queue? Hence my assumption it would be possible
Within each move in a move queue, all motor movements are synchronised. So executing multiple U moves during a single axis move can only be done by using multiple move queues.
However, if the movements can all be planned in advance, then the XY movement could be broken up into small segments so that a single move queue can be used, for example like this:
while iterations < 100 G1 U200 X{0.1*iterations} F10 G1 U0 X{0.1+0.1*iterations} F10
-
Thank you for the quick responses! I will try multiple small move segment to see how it goes. If that does not work well enough, I'll consider simply buying a second Duet to control my experiment's fluid handling and perfusion.