Add extruder axis to kinematics matrix
-
For an upcoming printer build I'm considering a belt driven direct drive extruder, which was proposed before in this forum.
Pressure Advance wouldn't be required in my case, as the "direct drive" extruder would have a miniscule distance from drivegear to hotend (based on e3d Hermera).
As far as I know, this is not possible right now? Are there plans to include this kind of kinematic?
Might a workaround be possible by either:A) "fake axis"
create another Axis (U), which can be used in the kinematics matrix. Connect this axis to the same motor driver as the extruder axis. If both E and U axis steps are merged and applied to the drive, the X-Y compensation is archieved, while maintaining normal extruder gcodeB) modify gcode
if only A,B,C,U,V,W axis can be used alongside X,Y,Z in the matrix, then I'd have to replace any "G1 X.. Y.. E.." in the gcode with "G1 X.. Y.. U..". This would be a very simple script.
Downside: cold extrusion warnings, extrusion buttons and extrusion factor in DWC and probably some other features wouldn't translate to the "U" axis.I've used something similar to A) in a robot, where two axis U and V are linked to the same stepper driver, allowing the U-homing to home towards a low end endstop and the V-homing to home towards a high end endstop.
FYI the drive in question was a robot gripper, which should drive the motor (counter-)clockwise until the respective endstop is reached.This solution differs from A) in that it didn't use an extruder axis.
Additionally mostly "G28 U" and "G28 V" are used in the robot, sometimes G1. However never simultaneously (ie G1 U10 V5), effectively eliminating the need to merge STEP/DIR in realtime.Any thoughts?
As this topic was adressed before, is there an estimate, when such a feature would be implemented?
I'm quite familiar with C/C++, but modifying the core motion code doesn't seem to be the best/quickest solution, amongst other reasons, because I don't know which other system components might be affected.Thanks for any input/feedback/opinion you might be able to provide!
-
@marius-breuer AFAIK, extruders are already treated as axes so it shouldn't matter what type of extruder you use, as long as you can set the steps per mm just like any other axis. With a G1 XYE move, XY and E will all start and end at the same point in time and their rate of change will also be synchronised.
-
@marius-breuer said in Add extruder axis to kinematics matrix:
Pressure Advance wouldn't be required in my case, as the "direct drive" extruder would have a miniscule distance from drivegear to hotend
...but what about the long belts needed to drive the gears? To me it has almost the same effect as Bowden tube.
-
@deckingman that's true, but when only X or Y axis moves (G1 X5 Y10 E0), the extruder stepper has to move aswell, to compensate for the change in distance between it's pulleys.
This is done with a kinematics matrixsee M669
https://duet3d.dozuki.com/Wiki/Gcode#Section_M669_Set_kinematics_type_and_kinematics_parametersThe kinematics matrix is necessary for CoreXY, H-Bot, Delta etc., where multiple stepper motors affect the position of one axis.
This kinematics matrix doesn't include the "En" Extruder axis, probably due to pressure advance and because noone had a setup, where movement in X or Y affected the rotation of the extruder hobb gear. -
@o_lampe my main goal is weight savings.
A Gates GT2 belt would be way stiffer, than flexible 1,75mm filament in a bowden tube of the same length.Additionally I consider upgrading to the Duet 3 controller and/or using an external stepper driver with an encoder at the extruder hobb gear, to compensate for belt elasticity.
The latter would also be able to compensate for X, Y motion errors, caused by not using the kinematics matrix. I'm afraid, however, that the encoder control loop would be too slow to remove all noise from the system, even minor delay in the extruder positioning would likely result in printing artifacts.
-
@marius-breuer said in Add extruder axis to kinematics matrix:
@deckingman that's true, but when only X or Y axis moves (G1 X5 Y10 E0), the extruder stepper has to move aswell, to compensate for the change in distance between it's pulleys.
This is done with a kinematics matrixsee M669
https://duet3d.dozuki.com/Wiki/Gcode#Section_M669_Set_kinematics_type_and_kinematics_parametersThe kinematics matrix is necessary for CoreXY, H-Bot, Delta etc., where multiple stepper motors affect the position of one axis.
This kinematics matrix doesn't include the "En" Extruder axis, probably due to pressure advance and because noone had a setup, where movement in X or Y affected the rotation of the extruder hobb gear.No, the extruder won't move when the "E" value is zero UNLESS you explicitly tell the firmware that extruder values in the gcode are absolute rather than relative AND the previous extruder move was to a non-zero absolute position.
If you use relative extruder moves (which most people do), the extruder won't move when the "E" value is 0. It will only move if you use absolute extruder values (M82).
If you think about it, the firmware has to convert all absolute values to relative so that the move will be "by" an amount rather than "to" a position. So even given a G1 Xn the firmware must first work out the relative distance that X has to travel based on where it ended up for the move prior to the one that it is about to make. The same applies to the E "axis" but duet firmware supports absolute extruder gcode because some old slicers still work that way.
-
@deckingman you've misunderstood my idea.
Found the original (timestamp 2:35)
https://youtu.be/TQYYHrxIG90See how the extruder motor is turning, despite not extruding?
The extruder motor turns even during G1 X5 Y5 E0 (E relative), to compensate the XY movement.