Features

Features

Built-in GUI

Prunt contains a GUI for controlling the printer and editing all settings. This eliminates the need to edit configuration files by hand. Below is an excerpt of the GUI:

Homing settings.Homing method for this axis. Usually "Set to value" should be used for E axis and "Use inputswitch" should be used for XYZ. The selected tab when the save button is pressed is theoption that will be used.Move towards a switch until it is hit, then back off, then move towards it slower and recordthe position.SwitchInput switch to use.X_AXISMove towards negative infinityIf set then homing will move towards lower positions, otherwise homing will move towardshigher positions.First move distanceDistance past switch hit point allowed in first seeking move. (Units: mm)0.1Back off move distanceDistance that is moved back after the switch is first hit. (Units: mm)2Second move distanceDistance past switch hit point allowed in second seeking move. (Units: mm)0.1Switch positionPosition of the switch on the axis. This value is allowed to be outside of the machine limits.(Units: mm)0StatusConfigurationG-Code ConsoleFilesLogPruntSteppersKinematicsInput switchesThermistorsHeatersHomingFansInput shapingG-code assignmentsX_AXISY_AXISZ_AXISE_AXISDisabledSet to valueUse input switch

G⁴ Motion profiles

Most popular 3D printer motion controllers (Klipper, Marlin, and RepRapFirmware) only support up to 3-phase G¹ tangential motion profiles, meaning a trapezoidal velocity curve where acceleration is always either zero or the maximum allowed acceleration. This is a problem because an object in the real world simply can not instantly change its acceleration and trying to do make the motors in a 3D printer do so results in vibrations which introduce ringing artifacts in to prints and cause additional wear on components. Some commercial or more obscure open-source motion controllers address this by making the acceleration trapezoidal rather than rectangular, resulting in a 7-phase “s-curve” velocity profile, but even here what we have is still not a motion that is physically possible, just a motion that is much closer to being so. Prunt goes another 2 steps beyond this by making the 4th derivative of acceleration in to a rectangular wave, resulting in a 31-phase velocity profile with significantly smoother motion.

To help visualize this, we have created plots of velocity and its first 4 derivatives with 3-phase, 7-phase, and 31-phase profiles. Note that all of these were created in Prunt as Prunt allows for setting tangential limits for each derivative individually, allowing for emulation of other motion controllers by just changing a few parameters in the GUI.

  • 3-Phase (Klipper/Marlin)

  • 7-Phase (“S-Curve”)

  • 31-Phase (Prunt)

Advanced Corner Blending

If you are familiar with some of the more advanced configuration options in Klipper and Marlin then you may be aware that both go through corners at a non-zero tangential velocity to reduce print times as stopping at every corner would be very slow. This means that a short period of infinite axial acceleration is introduced at every corner, rendering our very smooth tangential velocities very useless. We of course have a solution to this, but let’s start by looking at what Klipper and Marlin corners look like on a plot so we can see the difference later. On the below plot the X and Y axes are shown in blue and orange respectively.

A solution to this problem that may seem obvious is to just turn the corners in to arcs. Most slicers have added an option to do that over the last few years. Let’s take a look at how that looks on the same plot as before:

Clearly this is a good solution for Klipper and Marlin as it prevents the aforementioned issues with infinite axial acceleration, but it could be better if we could limit the axial jerk, snap, and crackle as we do for their tangential counterparts. This is a problem that can be solved and we have solved it in Prunt with the use of a degree-15 Bézier curve. We will avoid going in to the technical details here and will instead just show you the plot to compare to the regular arc blending shown above. It is also notable that our corner blending is built directly in to our control system so there is no need to make use of a special slicer.

In addition to blending corners, Prunt also allows for precise control over the maximum deviation of the blended path from the original path. This value can be changed in g-code during a print to control how sharp any given corner will be.

Pressure Advance

Prunt supports pressure advance in the same way as other motion controllers. The G⁴ continuity of Prunt motion profiles means that pressure advance without smoothing does not generate instantaneous changes in velocity, acceleration, or jerk.

Safer and Faster Homing

Instead of setting a homing speed, Prunt allows the user to specify the maximum distance that the axis is allowed to move after the homing switch is hit. This parameter is used to compute the maximum velocity under the given kinematic constraints, leading to homing being as fast as possible while also never moving past the maximum allowed travel distance of the switch.

Hardware Acceleration

Klipper and Marlin both entirely rely on software to generate step signals at appropriate times. This works but it introduces jitter in to the signals as the software is also trying to do many other things, it’s also one cause of the “timer too close” errors in Klipper that you can find hundreds of reports of with a web search and may have even experienced yourself. Prunt 3D hardware does better than Klipper or Marlin by offloading all step generation to hardware timers which generate step and direction signals precisely based off a 1.2 GHz master clock. Aside from being more precise, this usage of hardware timers also makes our hardware more reliable as the CPU load does not change based on the step rate. Other inputs and outputs, including heaters, fan PWM outputs, fan tachometer inputs, and thermistor inputs are all also offloaded to hardware, allowing for high output or sampling rates without ever causing extra CPU load.

Vendor Supplied Pin Mappings

Prunt allows the vendor of a board to handle pin mappings. This eliminates the need to look up what MCU pins are connected to and instead allows the user to directly use the names printed on the board.

Automatic Firmware Upgrades

Prunt provides the capability for board vendors to perform upgrades at startup after confirmation from the user, without the need to install a jumper on the board. This feature is available on all official Prunt hardware.

Single Portable Executable

Prunt allows for the creation of a single executable with minimal dependencies. The user does not need to worry about having a specific Python environment or similar. This executable contains the web server and it is possible for a hardware vendor to include firmware update files within the executable, which all official Prunt hardware does.

Multi-Threading

Prunt makes use of multiple threads and allows tasks to be assigned to specific CPUs. Notably, the step generation task is carefully designed to never stall during motion to increase reliability:

  • The printer will always have events queued to come to a complete stop before the step generator task performs any potentially blocking operations.
  • All computations performed within the step generation loop take approximately constant time.
  • Position targets are generated at fixed time deltas, and actual step generation is offloaded to hardware.

All other tasks may be stopped for long periods of time without causing any errors.

High-Level API for Hardware Vendors

Prunt provides a high-level API for implementing new devices. This API makes no assumptions about the types of motors used, the communication protocol, or the communication latency, allowing unconventional hardware to easily use Prunt.