Unsolved Increase maximum number of axii to 30?
-
Hi All,
I'm working towards a proof of concept using:
25 motion axii
4 extruder axiiI plan to use:
4x Duet3 MB 6HC
4x Duet3 TB 1LC
1x Duet3 EB 1XDGcode input to RRF would include commands for all 29 axii on each line, handled by a custom slicer.
I read that up to 15, or maybe 25 axii are supported. Is it possible to go a bit higher and bring that limit up to 30+ axii?
Are there any other problems that might be encountered here?
Thanks! -
-
-
-
An alternative approach might be to have 4 independently run MB6HC boards with 4 separate gcode streams, 7 and 8 axii each.
Doing so would alleviate CAN communication congestion, controller load and enable infite axii to be added.
To enable this approach, each MB6HC would need to be able to be start the print at exactly the same time.
Is it possible with existing feature set today or would it need to be added? -
@Thorpydo can you tell us what the 29 axes will be used for? Will they all be moving at the same time?
When a 6HC is used as an expansion board, a single CAN message contains the movement information for all 6 drivers. So only 5 CAN messages would be needed per move even if all 29 motors move at once.
-
@dc42 yes, the 29 axes are for multiple 6 DOF motion systems and extruders. Yes, they will all be moving at the same time.
Great to hear that bus congestion won't be a problem.
Which do you think is the better or more feasible approach? -
@Thorpydo if you use independently running 6HC boards, do they need to remain perfectly in sync?
If you want to pause the print, do you need to pause all of them?
-
@dc42 yes, for independently running 6HC boards, they would need to remain perfectly in sync.
yes, pausing the print would require all of them to pause.
-
@Thorpydo
You'd have to clock the MCUs from a single PLL clock generator, otherwise they might drift apart over time.
Trying to control them via daemon.g and trigger switches might keep them in sync too.
(sync signal every layerchange?)
Maybe sync'ing them via a RealTimeClock of an SBC? An SBC sends gcode line_by line with a precalculated time gap to all Duets.
~just thinking out loud~ -
@o_lampe If possible, I'd like to avoid a custom hardware solution, which I assume the PLL clock generator approach would require. Is it possible to buy off the shelf components to make this work?
What all would be required to drive multiple main boards from a SBC with RealTimeClock?
This approach seams like it could be a good solution.I'd like to avoid solutions that sync periodically per layer or otherwise, if possible.
@dc42 What is the limitation in supporting 30 axes with multiple main boards ganged together? It sounds like bus load is not an issue. I believe I read in a previous thread that naming convention was the primary issue but solutions were discussed like using an upper and lowercase letter in conjunction.
Thank you both for giving this some thought and providing input. I really appreciate it!
-
@Thorpydo said in Increase maximum number of axii to 30?:
What all would be required to drive multiple main boards from a SBC with RealTimeClock?
This approach seams like it could be a good solution.That's actually a far fetch.
We only discussed briefly if it would be possible to control several Duets from one SBC. Such a solution doesn't exist yet, but I remember vaguely that it should be possible.
Now you want to control the Duets in sync which is another step forward.
You'd have to send the gcode to all Duets and include a common start signal (hardware trigger or time signal)
Each Duet has a code buffer "the planner" which sends a signal to the SBC when running empty (maybe there is even an object model variable?).
That's the point where synchronization could take place.
If the Duets drift apart, the slowest Duet will be the last to ask for new gcode.
One way to sync it, would be to slightly increase the acceleration of the slowest. Since we are talking about fractions of milliseconds difference, this is the smoothest way IMHO.
It's all grey theory, increasing the number of axes might be easier? -
Okay, I see.
Perhaps then, we can determine a strategy and all sections of code that would be need to be modified to increase the maximum number of axes past 30.
For reference, the same topic has been discussed previously in these threads:
https://forum.duet3d.com/topic/16023/maximum-number-of-axis
https://forum.duet3d.com/topic/26493/axis-limitationsIn reviewing the previous discussions, lowercase letters were added to give additional axes. Since the software is not able to differentiate between upper and lower case, a single parenthesis is used to signify lower case, '.
In the same discussion, DC42 suggests that Q could be used in the same way as '.
"because currently letter Q isn't used in any commands that accept axis letters."So, perhaps a simple approach could be to use both ' and Q, instead of just '.
This approach would yield 32 unique drive letters:
X,Y,Z,U,V,W,A,B,C,D
abcdefghijkl ('A, 'B, 'C, 'D, 'E, 'F, 'G, 'H, 'I, 'J, 'K, 'L)
QX, QY, QZ, QU, QV, QW, QA, QB, QC, QDCan we simply replicate the same code that is used for ' to also work with Q?
Are there any potential 'gotchas' or problems with the suggested solution? -
@Thorpydo using Q as a prefix character would break modularity somewhat, by making the interpretation of letter Q context sensitive.
What I may do instead is to add an M-code to turn case sensitivity of GCode commands on/off so that lowercase axis letters can be used without the leading quote character.
-
@Thorpydo I have experimentally increased the maximum number of axes to
3230 in 3.5beta2 for the MB6HC and MB6XD. Lowercase letters a thru z can be used as axis names. The maximum axes plus extruders is also 32.On other boards the limitation of 15 axes and lowercase letters a-d only remains.
This change is experimental because it has a significant effect on memory usage and it may also impact performance.
-
@dc42 is there a gcode to allow the use of the lower case characters or is it still prefacing with the single quote?
-
@T3P3Tony it's still prefixing with single quote for now.
-
@dc42
That's wonderful to hear David!
I really appreciate your support in accommodating this feature so promptly.
I understand the change is still experimental and performance might be impacted.I still have some work to do with the slicer and hardware, but will report back when I have some meaningful results and can comment on any performance impact.
Thank you! You guys rock!
-
@Thorpydo said in Increase maximum number of axii to 30?:
will report back when I have some meaningful results
Video, or it didn't happen
We want to see this beast running. I have no idea what 29 axes will do simultaneously... -
@o_lampe Hah! You and me both!
@dc42 I'd like to make sure I understand the appropriate letters to be used.
My understanding is not adding up:
all lower case letters are available; 26 letters.
X,Y,Z,U,V,W,A,B,C,D uppercase letters are available; 10 letters.
It seems this nomenclature allows for 36 letters which doesn't jive with your comments of 30/32.I would like to use:
For extruders:
A,B,C,D
For motion:
X,Y,Z,U,V,W,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,tWill this letter assignment be acceptable?
-
@Thorpydo You don't have to assign multiple letters to extruders. They are just E0, E1, E2 a.s.o.
The letter "E" is the only drive letter, that allows different config values for steps/mm, motor current, acceleration a.s.o.Regarding the max axes number of 32: my best guess is that it's related to the bus width of the PWM registers or such.
Using more than 32 would mean twice the workload and memory-use I guess. -
@o_lampe Ahh, gotcha. Okay.
My modified understanding:
For extruders:
E1, E2, E3, E4
For motion:
X,Y,Z,U,V,W,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,t
(motion could use other lower case letters or A,B,C,D, but total number of axes cannot exceed3230 based on some internal limit)Thanks for clarifying!
-
@Thorpydo said in Increase maximum number of axii to 30?:
E1, E2, E3, E4
The internal extruder count starts with E0. Most slicers do the same.
@dc42 When a tool has more than one extruder, the only way of controlling them is via mixing ratio, right now?
Is there any change planned?
New nomenclatur could beG1 Xn Yn E0.3:0.0:-0.5:0.8 ; first extruder moves 0.3mm second does nothing, third retracts 0.5mm a.s.o