Something limiting max speed using external drivers and servos
-
Hello,
I've been setting up a fully custom pick & place machine at my work and everything is working except for the max speed.
I've seen the other posts on the forum about other peoples max speed problems and have tried changing those parameters like M569 T minimum driver step pulse, M92 steps per mm, M203 max speed. I was testing using a macro that runs the gantry from one side of the machine to the other and then increasing feedrate every pass and finding the top speed was much lower that the requested speed by the end of the test(maxing out at 1897mm/s)Since the machine is using servo drives, I am able to see the velocity over time and create a plot showing the velocity hitting a limit( about 1300 rpm)
The orange line is the velocity over time
I know its not the driver that's the problem because I am able to run a test on the servo drive software that shows its getting to full speed no problem.
The only way I've gotten the duet board to show a higher top speed has been to increase the acceleration.
1897 mm/s A=8000
2683 mm/s A=16000
3000 mm/s A=20000
But the strange part is when I look at the graph with the different accelerations, I don't see a change in the max speed and this is data directly off the servo motor.Here is my config
;***Network Settings Ethernet Version only if {network.interfaces[0].type = "ethernet"} M552 ; Set IP address else M552 S1 M586 P0 S1 R80 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet ;***Name Controller M550 P"Accretech SBS PnP v3" ; Set machine name ;***General preferences G90 ; absolute coordinates M83 ; relative extruder moves M669 K0 ; select Cartesian Kinematics mode ;***Axis/Drives ;-M569: Set motor driver direction, enable polarity, mode and step pulse timing M569 P0 S1 D3 V40 ; Z M569 P1 S1 D3 V40 ; U M569 P2 S0 D3 V40 ; V M569 P3 S1 D3 V40 ; W M569 P5 S1 T2.5:2.5:5:0 ; X M569 P6 S1 T2.5:2.5:5:0 ; Y ;***M584 Set drive mapping M584 X5 R0 ; X LIN R0 = LINEAR M584 Y6 R0 ; Y LIN R0 = LINEAR M584 Z0 R0 ; Z LIN R0 = LINEAR M584 U1 R1 ; A ROT R1 = ROTATION M584 V2 R0 ; V LIN R0 = LINEAR M584 W3 R0 ; W LIN R0 = LINEAR ;***Motor Settings M350 Z32 U64 V32 W32 I1 ; Configure microstepping with interpolation M92 X320 Y312.5 Z160.00 U35.5 V160.00 W160.00 ; Set steps per mm M566 X1000 Y300 Z100.00 U1000 V100.00 W100.00 ; Set maximum instantaneous speed changes (mm/min) M203 X10000000.00 Y10000000.00 Z18000 U20000 V18000 W18000 ; Set maximum speeds (mm/min) M201 X20000 Y16000 Z1000.0 U5000 V1000.0 W1000.0 ; Set accelerations (mm/s^2) M906 Z2000 U800 I30 V2000 W2000 ; Set motor currents (mA) and motor idle factor in per cent ;M84 S30 ; Set idle timeout ;***Axis Limits M208 X0 Y0 Z0 S1 ; Set X/Y/Z axis minima M208 X470 Y575 Z121 S0 ; Set X/Y/Z axis maxima M208 U-20000:20000 ; Set U axis minima/maxima M208 V-20000:20000 ; Set V axis minima/maxima M208 W-20000:20000 ; Set W axis minima/maxima ;***Endstops M574 X1 S1 P"!io1.in" M574 Y2 S1 p"!io2.in" M574 Z1 S1 P"!io0.in" M574 U0 ;***Outputs M950 F0 C"out0" Q20000 ;UV light Actuator M950 F1 C"out1" Q20000 ;Nozzle Pump Actuator M950 F2 C"out2" Q20000 ;Glue Pump Actuator M950 F3 C"out3" Q20000 ;LED Bottom Actuator M950 F4 C"out4" Q20000 ;LED Top Actuator M950 F5 C"out5" Q20000 ;Solenoid Valve Actuator M950 F6 C"out6" Q20000 ;Glue Dispenser M950 J2 C"^io6.in" ;exp.feed_stop M950 J3 C"^io5.in" ;belt_stop M581 P2 S1 T2 R0 ;Feeder stop ;***Analog Sensors for Nozzle pressure ;M308 S0 P"temp0" Y"linear-analog" A"Pressure_1" F0 B0 C4095 ;M308 S1 P"temp1" Y"linear-analog" A"Pressure_2" F0 B0 C4095 ; init print time logging if !exists(global.runtime) M98 P"runtime.g" ; init glue count logging if !exists(global.gluecount) M98 P"gluecount.g"
The machine is using stepper online T6 400w servos
Any thoughts or help would be greatly appreciated -
@Darby-Cox what mainboard are you using?
-
@jay_s_uk duet mini 5+
-
@Darby-Cox I may have this wrong but 1897mm/s with 320 steps/mm is 607040steps/s that seems a very high step rate. Do the servos allow you to adjust the microstepping so that you can reduce the steps/mm value (and hence the required step rate)?
-
@gloomyandy yes you can. the default for the drive is 2500 p/rev and I've tried bringing that down with nothing changing
-
After further testing I think the machine is just maxing out the speed of the duet 3 mini 5+, I might try the faster clock speed of the duet 3 mainboard 6HC or 6XD.
-
@Darby-Cox somewhat offtopic, would you be willing to share your gantry runner macro?
-
G1 X20 Y505.0 F10000 ;G1 X420 F10000 ;G1 X20 F10000 G1 Y55 F40000 G1 Y505 F40000 G1 Y55 F80000 G1 Y505 F80000 G1 Y55 F120000 G1 Y505 F120000 G1 Y55 F160000 G1 Y505 F160000 G1 Y55 F180000 G1 Y505 F180000
I have modified the feedrate over time but has the same principle
-
@Darby-Cox this is a common issue when using external drivers. Such drivers have a limit to the speed at which they accept pulses. You have the M569 T parameters set at 2.5 microseconds high time and 2.5 microseconds low time, so the maximum pulse rate is 200kHz. You also have a high steps/mm of 320. So the maximum rate at which the belt can move is 200000/320 which is 625 mm/sec. On a CoreXY machine this will be the maximum diagonal speed. The maximum speeds of X and Y moves will be double this.
To get higher speeds you will either need to reduce the M569 T parameters if your servo drives can handle a higher pulse rate, or reduce the steps/mm by reducing the configured steps/rev of your servo drives or by using larger radius motor pulleys.