Jump to content

User:Zhang.benj/sandbox

From Wikipedia, the free encyclopedia
Klipper
Original author(s)Kevin O'Connor[1]
Developer(s)Kevin O'Connor, Dmitry Butyugin, Eric Callahan, Paul McGowan, and the Klipper community[2]
Initial releaseMay 25, 2016; 8 years ago (2016-05-25)
Preview release
v0.10.0 / September 29, 2021; 3 years ago (2021-09-29)
Repositorygithub.com/Klipper3d/klipper
Written inC, Python[1]
Operating systemRaspbian, Ubuntu, Debian, Linux[1]
Platform
Type3D Printing, Numerical Control, Firmware
LicenseGNU General Public License version 3[3]
Websiteklipper3d.org

Klipper is an open source combination of software and firmware designed for FDM (fused deposition modeling) 3D printers using a microcontroller and a Raspberry Pi or other Linux computer.[1][4] Klipper reads and executes common G-code instructions used by slicer software, either streamed through serial or read directly by the Klipper host, as well as some extended human-readable commands specific to Klipper.[5][6] Unlike in conventional printer firmware, a microcontroller running Klipper does not receive any G-code; that task is handled by a host computer.[1]

Klipper was initially released on GitHub in 2016 under a GPLv3 license with only basic cartesian printer support.[7] Development has continued to add many advanced features since then, with the latest stable release published in September 2021.[7] Klipper's continued development is funded by sponsors and donations.[8]

History

[edit]

Klipper's first release, v0.2.0, was published by Kevin O'Connor on May 25th, 2016, with basic support for cartesian printers and control through OctoPrint.[7]

Klipper latest release, v0.10.0, was published on September 29th, 2021, bringing support for new mechanical systems, changes to configuration, additional software features, support for communication over CAN bus, support for the RP2040 microcontroller, and bug fixes.[7]

On July 19th, 2022, it was announced that BIGTREETECH, a 3D printer mainboard manufacturer, had become a sponsor of the Klipper project.[9]

In addition to the stable releases listed on Klipper's website, users may install Klipper using the latest source code from GitHub.[10]

Architecture

[edit]

In conventional 3D printer firmware, like Marlin, the microcontroller processes G-code directly, either reading the instructions from an SD card or receiving them from a host software like OctoPrint.[4] As G-code instructions are written with respect to initial and final spatial positions, the microcontroller must perform the planning calculations, as well as handle the changing of acceleration settings and other computational parameters.[11][4] Due to the need to handle all processing on the microcontroller, some more advanced features may need to be disabled for Marlin to fit on older 8-bit microprocessors.[4]

In contrast, Klipper uses software running on an external general-purpose computer to perform computational and planning tasks, and only uses the microcontroller for timing control.[4] Specifically, the host software reads the G-code, interprets and plans the instructions, and then instructs the microcontroller firmware to control the stepper motors and PWM outputs, like heaters and fans.[1] Due to the limited functionality required of the microcontroller, Klipper can fit in a very small amount of storage, as small as 16KB, while Marlin requires at least 50KB of flash program memory.[12][13] Communication between the microcontroller and host software occurs over a hardware serial connection, either directly connected over an integrated serial port or using a USB connection.[6] This communication may also be implemented using a CAN bus.[6] Over this communication link, the Klipper software service sends a limited set of commands, such as intermittently setting the state of microcontroller outputs, or scheduling multiple stepper pulses.[14]

Klipper's host software is largely written in Python, while the compiled firmware installed on the microcontroller is written in C.[1]

Like conventional 3D printer firmwares, Klipper supports directly controlling the printer with an attached LCD menu and encoder input knob.[6] Additionally, Klipper creates a psuedoterminal (by default at /tmp/printer) through which the Klipper host software can accept G-code commands from other host softwares, like OctoPrint.[15] Klipper also provides an API through which other softwares may directly control Klipper.[16]

Features

[edit]

Supported kinematic configurations

[edit]

Initally, Klipper was only released for support for cartesian printers, where movement in each axis was proportional to the rotation of a single motor.[7][17] Over time, support for more complex configurations of motors and belts has been added.[7] Of note are support for CoreXY and its variant CoreXZ, where two motors fixed in space move an object in a planar motion, as well as delta robots, which use a complex set of linkages, either sliding on rails or directly rotated, to pivot the printer nozzle in 3D space.[17] Klipper also supports cable winch kinematics.[6]

Temperature control

[edit]

As FDM 3D printers need to heat plastic at a consistent temperature, it is necessary for printer firmware to measure and control the heater.[18] Klipper supports controlling resistive heaters using PID algorithms, where the heater power is set continuously using PWM based on the temperature change over time, as well as "watermark" control, where the heater is left fully powered until a threshold is crossed, at which point the power is cut until the temperature drops too low.[18][6]. Klipper can automatically calculate coefficients for PID control by repeatedly heating and cooling a heater device while measuring the temperature, after which Klipper can calculate and save appropriate settings for the heating algorithm.[18]

For temperature measurement, Klipper supports sensors which can be read directly using the microcontroller's ADC, such as thermistors and some RTDs, as well as temperature measurement devices which communicate over SPI.[19][6]

Input shaping

[edit]

In 2020, Klipper introduced support for input shaping, an open-loop control technique that can reduce the effects of resonances.[7] As 3D printers often implement linear motion using polymer timing belts, the elasticity of the belts can result in residual motion at the ends of moves.[20][21] By outputting a signal which cancels the oscillations, Klipper can reduce the effect of oscillations, though sometimes at the cost of smoothing out sharp corners.[22] In addition to iteratively testing different frequencies to use with input shaping, Klipper supports using an accelerometer to measure the resonant frequencies of different moves and directly determine optimal input shaper settings.[23]

Development

[edit]

The firmware is developed openly on GitHub, with many forks available for use.[24] The original fork of Klipper is mainly developed by Kevin O'Connor, but accepts contributions from the public, subject to a review process.[8][2] The development of Klipper is supported by direct donations to the developers, as well as support from BIGTREETECH, a printer mainboard manufacturer.[8] All forks of Klipper are published under the GNU General Public License version 3.[3]

See also

[edit]

References

[edit]
  1. ^ a b c d e f g h i Williams, Al (2017-12-26). "Fast 3D Printing With Raspberry Pi — But Not How You Think". Hackaday. Retrieved 2022-08-24.
  2. ^ a b "Contributing to Klipper - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  3. ^ a b Klipper3d/klipper, Klipper3d, 2022-08-24, retrieved 2022-08-24
  4. ^ a b c d e Douglas, Ken (2021-07-25). "Klipper vs Marlin: The Differences Simply Explained". All3DP. Retrieved 2022-08-24.
  5. ^ "G-Codes - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  6. ^ a b c d e f g "Configuration reference - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  7. ^ a b c d e f g "Releases - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  8. ^ a b c "Sponsors - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  9. ^ O'Connor, Kevin (2022-07-19). "BIGTREETECH is the official mainboard sponsor of Klipper". Klipper. Retrieved 2022-08-24.
  10. ^ "Installation - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  11. ^ "G-Codes Explained: An Introduction to Common G-Code Codes". www.thomasnet.com. 2022-01-11. Retrieved 2022-08-24.
  12. ^ "STM32 memory requirements / specs · Issue #1153 · Klipper3d/klipper". GitHub. Retrieved 2022-08-24.
  13. ^ Sarf2k4 (2022-08-19). "Configuring Marlin". Marlin Firmware. Retrieved 2022-08-24.{{cite web}}: CS1 maint: numeric names: authors list (link)
  14. ^ "MCU commands - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  15. ^ "Frequently Asked Questions - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  16. ^ "API server - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  17. ^ a b "The Types of FDM 3D Printers: Cartesian, CoreXY, & More". All3DP. 2022-04-23. Retrieved 2022-08-24.
  18. ^ a b c "Klipper: PID Tuning – Simply Explained". All3DP. 2021-07-10. Retrieved 2022-08-24.
  19. ^ "POPUP". support.sliceengineering.com. Retrieved 2022-08-24.
  20. ^ "3D Printer Belt Tension: How to Tighten Printer Belts". All3DP. 2021-12-08. Retrieved 2022-08-24.
  21. ^ "3D Print Ghosting & Ringing: 3 Easy Fixes". All3DP. 2022-02-06. Retrieved 2022-08-24.
  22. ^ "Resonance Compensation - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  23. ^ "Measuring Resonances - Klipper documentation". www.klipper3d.org. Retrieved 2022-08-24.
  24. ^ "Forks · Klipper3d/klipper". GitHub. Retrieved 2022-08-24.
[edit]

Category:3D printing Category:Firmware