Saturday, May 10, 2014

Velocity Driven Extrusion

Bas de Bruijn has been working on controlling his 3D printer with Machinekit, and has implemented a unique way to control the extruder.  Rather than make the extruder a fourth axis as is done in most setups, Bas is modeling the extruder behavior and automatically controlling the extruder motor velocity based on the movement of the conventional XYZ axis.

The problem with using a traditional 4-axis coordinated move for extruding plastic is the extruder behavior is non-linear.  Typically not enough plastic is extruded at the start of the move while pressure builds in the extruder and too much is extruded at the end of the move.  This problem is made worse by any changes in velocity along the move, as may be required by the acceleration constraints of the machine.  The retract and precharge settings in most slicer programs help with this issue to some extent, but cannot truly match the extruder behavior.

By dynamically controlling the extruder velocity, Bas can start with a simple linear mapping of movement speed to extruder speed (how a standard 4-axis coordinated move would work), and enhance that by adding terms to compensate for changes in speed and acceleration.  Changing the model used to drive the encoder only requires changes to the HAL file for the machine, allowing complex control theories to be tested quickly and easily without writing code.  Based on the print results Bas is already achieving, it looks like this approach is already working pretty well, and there is still much room for improvement.

Keep watching Bas' blog for updates, and let me know if you are doing anything unique with Machinekit!


  1. Will the next step be to link the hot end drive percentage to the acceleration of the extruder filament with a time allowance for lag? That would help to keep extrusion temps more stable as you print. One could also model the external heat loss of the extruder moving around in ambient air as well. Just a thought.