Allow slower minimum movement speed

  • I switched my Duet3D powered 3D printer to a CNC router, which is working great for the most part.

    My only gripe is the inability to have an axis move slower than 0.5mm/s

    In CNC mode I find this a major limitation.

    It's kind of ridiculous because I could just halve my steps per mm to get 0.25mm/s and then just double my z output from the CAM but that's annoying and somewhat dangerous.

    If there is no technical reason to limit the speed and to save me from rapidly tapping Z-0.05 when drilling into 1/8 inch aluminum....

    I suggest the limit be based on the number of steps per second and not mm.
    It should be something like 10 steps/s, which with a 2mm per rev leadscrew would give 0.1mm/s.

    But really it should be configurable in CNC mode, since I think it is most needed on the Z, so if it could be a command like "M### Z5" for 5steps/s on the z axis that'd be amazing.


  • If the max feed rate configuration command M203 was configured like the axis limits M208 that would grant what you need. Add S1 to configure minimum speeds or S0 (or complete omission of S parameter) to set maximum.

    Defaults are fine for most, but as you say unless there is a hardware reason why there is minimum limit it would make more sense for it to be configurable.

    As you suggest it is probably linked to the steps per mm of common printers and the juttery 40Hz motion you'd get from an 80 step/mm axis running at 0.5mm/sec.

  • This would be very useful for laser-mode as well (very slow cut operations or simply to make underpowered lasers work very slowly)

    @doctrucker said in Allow slower minimum movement speed:


    Are you suggesting to implement S0/S1 in RRF, or are you telling us that it is already there and we can use it? Because doesn't mention anything...

  • No, it's not there. I was suggesting a feature request. Specifying minimum steps per second would also work but would require a new gcode command.

  • administrators

    Agreed, CNC users need to be able to set lower minimum speeds. I'll allow M203 X0.1:100 and similar in 2.03.

  • @dc42 Just spotted that formatting for the M208 commands. Can you confirm that this is only for 2.02+ and not the recent versions of firmware that run on the v0.6 & v0.8.5? I like the us of :, its far more intuative!

  • administrators

    It's supported in 1.23 as well.

  • @dc42 Thanks. Tweaked the duet gcode guide to reflect that.

    Didn't realise it was possible to edit the guides until recently!

  • @dc42 said in Allow slower minimum movement speed:

    n 2.03

    If no one has told you yet today, just wanted to let you know that you're awesome.

    Love the Duet board, your firmware, the community. Great stuff happening here.

  • @dc42 Im using the duet on a project that requires extremely low speeds. For example I need to move 0.00005mm in 60 seconds. I have set lower speeds with M203 as mentioned in the documentation, however the move is completed in half the time. I have tried the same setup for longer distances and it works fine. Basically i need the movement to complete exactly at set times. Thank you for any input.

    Big fan of Duet products.

  • administrators

    Currently, if you use a M203 I parameter below 0.6 mm/min (0.01mm/sec), it will set the minimum movement speed to 0.01mm/sec. Looks like you need much less than that. However, if you really can move with a resolution better than 0.00005mm then I guess you have a very small machine. Have you considered changing your units so that what RRF thinks is mm is actually nm?

  • @dc42 Thank you for the quick reply. I will try out your recommendation.

  • @dc42 Hello, your solution works. Thank you!

  • administrators

    @adarshsimon, I'm glad to help! Can you tell me a little more about the project?

  • @dc42 sure, we are developing an electro spinning machine which requires very low material to be dispensed. We use a syringe to hold the material that is to be dispensed and the lowest dispensing rate is about 0.05ml/hour. Hence the low speed requirement. We are using duet because we also need 3 axis movement of the syringe.

  • @dc42 Hello, I think i need some more help. The system we are designing has a single axis movement setup which moves 70mm . I have changed the steps per mm setup to allow for the slow speeds we require.

    The translation stage is however supposed to move at relatively higher speeds (eg. 100mm/min). We need the translation stage to reach the speed with the highest acceleration possible. I have set the acceleration and other settings to reflect the change in steps per mm , however the stage always accelerates when starting a move and decelerates when stopping.

    This is affecting our timing. Is there a limit to max instantaneous speed change?.

    My config file

    ; General preferences
    G90                                   ; send absolute coordinates...
    M83                                   ; ...but relative extruder moves
    M550 P"PICO"                          ; set printer name
    ; Network
    M552 S1 P192.168.1.2                  ; enable network and acquire dynamic address via DHCP
    M586 P0 S1                            ; enable HTTP
    M586 P1 S1                            ; disable FTP
    M586 P2 S0                            ; disable Telnet
    ; Drives
    M569 P0 S1                            ; physical drive 0 goes forwards
    M569 P1 S1                            ; physical drive 1 goes forwards
    M569 P2 S1  
    M569 P3 S1 
    M569 P4 S1                            ; physical drive 4 goes forwards
    M584 X0 Y1 Z2 U3 V4                   ; set drive mapping
    M350 X256 Y256 Z256 U256 V256 I0      ; configure microstepping without interpolation
    M92 X102.4 Y512 Z512 U102.4 V512              ; set steps per mm
    M566 X1000000.00 Y1000000.00 Z1000000.00 U1000000.00 V1000000.00    ; set maximum instantaneous speed changes (mm/min)
    M203 X1000000 Y1000000 Z1000000 U1000000 V1000000 I0.0001	; set maximum speeds (mm/min) 
    M201 X1000000.00 Y1000000.00 Z1000000.00 U1000000.00 V1000000.00         ; set accelerations (mm/s^2)
    M906 X1000 Y1000 Z1000 U1000 V1000 I30            ; set motor currents (mA) and motor idle factor in per cent
    M84 S30                               ; Set idle timeout
    ; Axis Limits
    M208 X0 Y0 Z0 U0 V0 S1                      ; set axis minima
    M208 X70 Y80 Z80 U80 V300 S0                   ; set axis maxima
    ; Endstops
    M574 X1 Y1 Z1 U1 V1 S0                      ; set active low and disabled endstops
    ; Z-Probe
    M558 P0 H5 F120 T6000                 ; disable Z probe but set dive height, probe speed and travel speed
    M557 X0:70 Y0:80 S20                  ; define mesh grid
    ; Heaters
    M140 H-1                              ; disable heated bed
    ; Fans
    ; Tools
    ; Custom settings are not defined

  • administrators

    There are minimum values for M201 and M566, but not maximum values. You can run M201 and M566 without parameters to see what values RRF is using.

    I suspect that you are hitting the maximum step pulse rate. You are using x256 microstepping, which we do not recommend because it results in very high step pulse rates. Increasing microstepping beyond x16 rarely improves resolution. Try changing it to x16 with interpolation.

  • I think, since you're commanding a single move, that "instantaneous speed change" (aka jerk) is not being applied. Jerk is normally only applied between two moves of print movement.

    If you set M566 P1, you will enable "jerk policy 1" which replicates Marlin-style jerk. With this form, jerk is applied to every start and stop motion, regardless if there is another print move connected to it.

    With M566 P1 enabled, the print moves will always start at the "jerk" speed, as set in M566.

  • @dc42 I will try this and update . Thanks for the reply

  • @bot I will try this also and update. Thank you for the reply.

  • @dc42 @bot both suggestions were right. The movement timing is predictable now . Thank you!.

    @bot "two moves of a print movement" means two axis have to move or two movement commands of a single axis would do?. Thanks in advance.

  • administrators

    @adarshsimon said in Allow slower minimum movement speed:

    @bot "two moves of a print movement" means two axis have to move or two movement commands of a single axis would do?. Thanks in advance.

    If you did two consecutive printing commands along the same axis but at different speeds, jerk would be applied between them, even though it could be avoided.

Log in to reply