<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>New experimental firmware: all kinematics in host</title>
        <description>Klipper is a new experimental firmware! It is designed to run on both a micro-controller and a low cost host computer such as a Raspberry Pi. The host does all the work of determining how and when to move each stepper motor, it compresses that information, and sends it to the micro-controller.  The micro-controller then uncompresses the given schedule and executes it at the specified times. The same host computer can be used to run both Klipper and OctoPrint.

There are several advantages to splitting work between a micro-controller and a host machine:
* It is fast. On a 16Mhz AVR micro-controller, Klipper can reach 90K steps per second. (On a 20Mhz chip, 110K steps per second.)
* It has more reproducible results. Other firmware (in particular ones running on slower AVR chips) can cause print stalls due to CPU bottlenecks or serial port communication issues. Klipper specifies exact event times which leads to more reproducible prints. (In the unfortunate event of a severe communication outage between host and micro-controller, the Klipper micro-controller code would detect the outage and cancel the print.)
* The code is more portable. The micro-controller code (written in C) is small and focused, and should be easier to port to new micro-controller architectures. The host code (written in Python and C) is not hardware specific. Indeed, the most interesting code - the kinematics, the acceleration, the lookahead algorithm, the PID - are written in Python.
* It does not use the Bresenham algorithm or similar kinematic estimations. Instead, Klipper calculates precise event times using full 64bit floating point math (even a low cost Raspberry Pi has full hardware support for 64bit doubles). It is hoped that this will facilitate novel acceleration, extrusion, and kinematic designs.

The code is available at:
  [url=https://github.com/KevinOConnor/klipper]https://github.com/KevinOConnor/klipper[/url]

The code is in an experimental state. It currently works with Atmel ATMega micro-controllers and with OctoPrint running on the same Raspberry Pi computer. I have been regularly testing it on my RAMBo based cartesian 3d printer. However, it is possible some quirks or bugs may appear. For those willing to experiment, I am interested in hearing the results of tests and feedback from those tests.</description>
        <link>https://reprap.org/forum/read.php?147,667655,667655#msg-667655</link>
        <lastBuildDate>Tue, 10 Mar 2026 21:10:19 -0400</lastBuildDate>
        <generator>Phorum 5.2.23</generator>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,845779#msg-845779</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,845779#msg-845779</link>
            <description><![CDATA[ @KevinOConnor, the described from you "contact methods" are not ok. Also you tend to close issues on Github without they to be solved etc.<br />
<br />
As it was stated earlier, there are still problems with Klipper, currently when issues: DELTA_CALIBRATE command, I'm getting this respond:<br />
<br />
// probe at 0.000,-0.000 is z=387.459954<br />
<br />
Yesterday, it did disjoint the arm of a switch I use as a Z-probe etc.<br />
<br />
Before begin to use Klipper, I was using Repetier, had some issues with it. Anyone tested the latest versions of Repetier or Marlin, which might be better for Delta 3D printer ?]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Thu, 31 Jan 2019 04:09:09 -0500</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,845687#msg-845687</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,845687#msg-845687</link>
            <description><![CDATA[ FYI, I don't monitor this forum much - for Klipper topics it is best to use the contact methods described at: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md</a><br />
<br />
@kdodman - for sensorless homing you may wish to check out: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Sensorless_Homing.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Sensorless_Homing.md</a><br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Tue, 29 Jan 2019 22:02:27 -0500</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,845668#msg-845668</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,845668#msg-845668</link>
            <description><![CDATA[ @kdodman the TMC2130 need a certain minimum speed for the homing to work. So if the axis moves to slowly, then the back EMF, that is used for the homing, is a too weak signal.]]></description>
            <dc:creator>JustAnotherOne</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Tue, 29 Jan 2019 15:33:38 -0500</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,845651#msg-845651</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,845651#msg-845651</link>
            <description><![CDATA[ @kdodman, not so sure about TMC2130, probably you have to test it by yourself. On Zaxis quite unlikely those to fit ... . From what I read about Z-axis not recommendable at all to use senselessness homing. But probably someone with more experience can share their thoughts too. I use LV8729, not as silent as TMC2208, still they work fine.<br />
<br />
@KevinOConnor, again problems:<br />
<br />
DELTA_CALIBRATE<br />
<br />
18:12:27.946: // Internal error on command:"PROBE"<br />
18:12:27.946: // Once the underlying issue is corrected, use the<br />
18:12:27.947: // "FIRMWARE_RESTART" command to reset the firmware, reload the<br />
18:12:27.947: // config, and restart the host software.<br />
18:12:27.947: // Printer is shutdown]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Tue, 29 Jan 2019 12:49:01 -0500</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,845339#msg-845339</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,845339#msg-845339</link>
            <description><![CDATA[ Would it be worth getting TMC2130 drivers and using sensorless homing? Specifically on the Zaxis]]></description>
            <dc:creator>kdodman</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Fri, 25 Jan 2019 12:18:59 -0500</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,840890#msg-840890</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,840890#msg-840890</link>
            <description><![CDATA[ I wish to make a tool changer type printer.<br />
Is there any cheap board (below 100$) which I can use?<br />
Would klipper be helpful to substitute the lake of 32bit board thereof.<br />
<br />
Kindly suggest.]]></description>
            <dc:creator>sudarshan</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Mon, 10 Dec 2018 00:58:35 -0500</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,837318#msg-837318</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,837318#msg-837318</link>
            <description><![CDATA[ Thanks @KevinOConnor<br />
<br />
I will try the mailing list the next time...<br />
<br />
<br />
/Martin]]></description>
            <dc:creator>Nitram</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Mon, 29 Oct 2018 16:39:30 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,837298#msg-837298</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,837298#msg-837298</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>Nitram</strong><br />
@KevinOConnor Is it possible to use an Arduino nano with an  ATmega328P (old bootloader) as an aux-board</div></blockquote>
<br />
The atmega328p is basically the same as the atmega328 so it should work fine.  I added the 328p to the "make menuconfig" selection (just so avrdude doesn't complain when flashing).  Grab the latest Klipper code to use it.<br />
<br />
Separately, I don't monitor this forum much - for Klipper topics it is best to use the contact methods described at: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md</a><br />
<br />
Cheers,<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Mon, 29 Oct 2018 12:02:57 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,837215#msg-837215</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,837215#msg-837215</link>
            <description><![CDATA[ @KevinOConnor Is it possible to use an Arduino nano with an  ATmega328P (old bootloader) as an aux-board<br />
<br />
<br />
Why you might think...<br />
Well I have one lying around and I need some analog pins for temperature readings...<br />
<br />
/Martin]]></description>
            <dc:creator>Nitram</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 28 Oct 2018 11:40:50 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,836899#msg-836899</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,836899#msg-836899</link>
            <description><![CDATA[ Again issue with Klipper. This time using Arduino Due (SAM3X8E):<br />
<br />
MCU 'mcu' shutdown: Stepper too far in past<br />
This generally occurs when the micro-controller has been<br />
requested to step at a rate higher than it is capable of<br />
obtaining.<br />
<br />
F6000 suppose to be ok ?<br />
<br />
Also would it be possible to add alternative commands ? For example, instead of RESTART and FIRMWARE_RESTART etc. I would prefer: RESET,  FIRMWARE_RESET etc.<br />
<br />
[attachment 107757 klippy.zip]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Wed, 24 Oct 2018 14:15:02 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,833217#msg-833217</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,833217#msg-833217</link>
            <description><![CDATA[ Thank you about the clarification, if understand correctly the requested speed exceeded the MCU capabilities, as well as it cancelled the print. It was good that it was on the beginning, so no much material was lost, but in such case shouldn’t there be some error checks, to prevent cancelling of prints and loss of material and time ?<br />
<br />
Regarding GitHub, as I stated there, my accounts were deleted and I submitted a complain with the Bulgarian authorities regarding their practices. There many problems with GitHub but they are unwilling to change their practices etc.]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 09 Sep 2018 11:53:23 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,833211#msg-833211</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,833211#msg-833211</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>Dimitar</strong><br />
Just experienced another issue with Klipper:<br />
<br />
MCU 'mcu' shutdown: Rescheduled timer in the past<br />
This generally occurs when the micro-controller has been<br />
requested to step at a rate higher than it is capable of<br />
obtaining.<br />
<br />
Running Klipper on Arduino Mega2560, it is an old file I printed before with another firmware. I do not remember what the slicer settings were, but do not think that the speed goes above 120 mm/s (95K steps/sec).</div></blockquote>
<br />
The log indicates that an XY diagonal move with F9000 was requested just prior to the error.  That's 150mm/s, and on your config that translates to ~120K steps per second with two active steppers.  That is greater than the benchmark rate for the atmega2560.  (To be clear, the benchmarks are with the micro-controller doing nothing but stepping - you should not expect to be able to sustain the full benchmark rate during a real-world print.)<br />
<br />
In the future, please use github to report an issue with Klipper.  See: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md</a><br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 09 Sep 2018 10:51:20 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,833169#msg-833169</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,833169#msg-833169</link>
            <description><![CDATA[ Just experienced another issue with Klipper:<br />
<br />
MCU 'mcu' shutdown: Rescheduled timer in the past<br />
This generally occurs when the micro-controller has been<br />
requested to step at a rate higher than it is capable of<br />
obtaining.<br />
<br />
Running Klipper on Arduino Mega2560, it is an old file I printed before with another firmware. I do not remember what the slicer settings were, but do not think that the speed goes above 120 mm/s (95K steps/sec).<br />
<br />
[attachment 106947 klippy.zip]]]></description>
            <dc:creator>Anonymous User</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sat, 08 Sep 2018 14:33:18 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,832655#msg-832655</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,832655#msg-832655</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>SEA</strong><br />
Hi KevinOConnor,<br />
<br />
I tried to connect display 12864 anet3d (aka RepRap Discount Mini graphical controller) with Tevo Tarantula (MKS Base 1.4)<br />
I used UC1701 configuration, but it seems not yet implemented.<br />
I assume it is planned. If so, when I can expect it to be done?</div></blockquote>
<br />
If you're experience an issue with Klipper, please follow the directions at: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md</a><br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 02 Sep 2018 11:05:21 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,832654#msg-832654</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,832654#msg-832654</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>Kespa</strong><br />
Hello, does Klipper support auto bed leveling feature?</div></blockquote>
<br />
Yes.  See the config examples in the config/ directory for a description of the parameters needed to configure it.<br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 02 Sep 2018 11:03:49 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,832616#msg-832616</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,832616#msg-832616</link>
            <description><![CDATA[ Hi KevinOConnor,<br />
<br />
I tried to connect display 12864 anet3d (aka RepRap Discount Mini graphical controller) with Tevo Tarantula (MKS Base 1.4)<br />
I used UC1701 configuration, but it seems not yet implemented.<br />
I assume it is planned. If so, when I can expect it to be done?]]></description>
            <dc:creator>SEA</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sat, 01 Sep 2018 22:56:48 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,832604#msg-832604</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,832604#msg-832604</link>
            <description><![CDATA[ Hello, does Klipper support auto bed leveling feature?]]></description>
            <dc:creator>Kespa</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sat, 01 Sep 2018 15:14:11 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,830756#msg-830756</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,830756#msg-830756</link>
            <description><![CDATA[ Edited. Problem solved in irc.]]></description>
            <dc:creator>obelisk79</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Thu, 09 Aug 2018 20:50:05 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,830427#msg-830427</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,830427#msg-830427</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>Adjoe</strong><br />
Can I used board Gen7 with AVR ATMEGA32 on it ?</div></blockquote>
<br />
The ATMEGA32 isn't currently supported.  At a quick glance, it does not look difficult to add support.<br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Mon, 06 Aug 2018 10:54:33 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,830322#msg-830322</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,830322#msg-830322</link>
            <description><![CDATA[ Can I used board Gen7 with AVR ATMEGA32 on it ?]]></description>
            <dc:creator>Adjoe</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 05 Aug 2018 07:05:48 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,827407#msg-827407</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,827407#msg-827407</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>MarkLogan</strong><br />
Kevin - I got a new extruder so needed to update my extrusion steps.  I took the opportunity to update to the latest Klipper.  Seemed to be working fine after the update.  I did an 20mm XYZ cube and noticed my X and Y were a little long so I went back and recalculated the steps for them.  I changed the X and Y steps and restarted and suddenly my square was way off.  If you consider front/left as origin, the cube was drawn from left to right.  That front face went back a bit so it was say 1mm back by the time it hit the corner.  Same thing for the right side - from  where it started to where it ended, it moved 'left' about 1mm.  Reverse was true for back and right sides.  So I ended up with a parallelogram.  I played with the x and y steps some more and it was worse.  Printed something bigger and the effect was even more pronounced.  I went back to my original steps and it was 'almost' right - probably like its always been honestly and I just never noticed.  Trouble is that I'm .2 to .4mm out in each direction on a 20mm square now.  So I guess my question is:  Would changing the steps for X and Y to different values (and different from each other) create that effect or is something else going on?  I did some hardware troubleshooting and I can't find anything, and other than the extruder nothing has changed on the printer in a long time.  Thoughts?</div></blockquote>
<br />
Hi.  If you're having an issue with Klipper, it's best to open a github issue following the directions at: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Contact.md</a><br />
In particular, we need the Klipper log file in order to assist.<br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 01 Jul 2018 08:34:42 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,827354#msg-827354</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,827354#msg-827354</link>
            <description><![CDATA[ Kevin - I got a new extruder so needed to update my extrusion steps.  I took the opportunity to update to the latest Klipper.  Seemed to be working fine after the update.  I did an 20mm XYZ cube and noticed my X and Y were a little long so I went back and recalculated the steps for them.  I changed the X and Y steps and restarted and suddenly my square was way off.  If you consider front/left as origin, the cube was drawn from left to right.  That front face went back a bit so it was say 1mm back by the time it hit the corner.  Same thing for the right side - from  where it started to where it ended, it moved 'left' about 1mm.  Reverse was true for back and right sides.  So I ended up with a parallelogram.  I played with the x and y steps some more and it was worse.  Printed something bigger and the effect was even more pronounced.  I went back to my original steps and it was 'almost' right - probably like its always been honestly and I just never noticed.  Trouble is that I'm .2 to .4mm out in each direction on a 20mm square now.  So I guess my question is:  Would changing the steps for X and Y to different values (and different from each other) create that effect or is something else going on?  I did some hardware troubleshooting and I can't find anything, and other than the extruder nothing has changed on the printer in a long time.  Thoughts?<br />
<br />
Edit:  Actually I lied (a little) - on the right side it actually went further 'right' rather than 'left'.  i.e. if front-left is origin then as it traveled to front-right it went 'back' a bit.  Then on the right side (i.e. front-right to back-right leg) it actually went 'right' a bit.  Then it corrected itself on the remaining two legs leaving me with a pretty perfect parallelogram...]]></description>
            <dc:creator>MarkLogan</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sat, 30 Jun 2018 14:29:48 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,826451#msg-826451</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,826451#msg-826451</link>
            <description><![CDATA[ Thank you sir (takes a bow).]]></description>
            <dc:creator>TinHead</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Fri, 22 Jun 2018 08:16:28 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,826261#msg-826261</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,826261#msg-826261</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>TinHead</strong><br />
The above being said can you shed some light (if possible) in math peasant language on the new iterative solver stuff?</div></blockquote>
<br />
The "iterative solver" is a recent change to the way Klipper calculates step times in the host software. It's a new way of calculating the same stepper timings - it should be imperceptible to<br />
users of the software. The main reason for making the change is that it significantly reduces the amount of complex math in Klipper.<br />
<br />
The Klipper host software calculates precise step times for all the steppers using the kinematic formulas for the particular printer (eg, delta, cartesian, corexy). It turns out that some kinematics (eg, delta) require some pretty complex math to determine precisely what time is the ideal step time. That is, the formula for taking a stepper position and calculating the time the stepper should be at that position:<br />
<pre class="bbcode">
time = stepper_position_to_time(position)</pre>
can be very complex.  It turns out, however, that the inverse function:<br />
<pre class="bbcode">
position = stepper_time_to_position(time)</pre>
is generally trivial to calculate.  In particular, it's just a simple extension of the basic kinematic formulas for the printer:<br />
<pre class="bbcode">
position = stepper_position_from_coord(move_coord_from_distance(move_calc_distance(time)))</pre>
where stepper_position_from_coord() takes a cartesian coordinate and converts it into a stepper position.  There's more details of this in the Klipper Kinematics document:<br />
<br />
<a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Kinematics.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Kinematics.md</a><br />
<br />
The key idea of the "iterative solver" is that it allows the code to automatically calculate a time given a position from the formula for a position given a time. That is, we don't need to implement the complex math because the computer can figure it out itself. The algorithm to do this is actually pretty straight forward - the code guesses a likely time, checks if the calculated position for that time matches the desired position, and then keeps guessing until a time is found that matches the desired position. Once that time is found, then we know the ideal step time and can schedule the stepper to step at that time. The guessed times and calculated positions are used to improve future guesses so that the code rapidly converges to an accurate solution.<br />
<br />
It turns out that, in practice, we can almost always guess a nearly perfect time by using the last step time as a guide (the steppers don't have extreme velocity changes).  As a result, the overall host cpu overhead of this iterative method is about the same as the previous method that used lots of complex math.<br />
<br />
Finally, because this method simplifies the kinematics math, it is hoped that the code will be more accessible to those wishing to experiment with different kinematics.<br />
<br />
Cheers,<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Wed, 20 Jun 2018 15:40:11 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,826244#msg-826244</guid>
            <title>Re: New experimental firmware: all kinematics in host</title>
            <link>https://reprap.org/forum/read.php?147,667655,826244#msg-826244</link>
            <description><![CDATA[ Hello Kevin,<br />
<br />
I know you are on patreon now and I'm sorry I can't (at least for now) support your work.<br />
The above being said can you shed some light (if possible) in math peasant language on the new iterative solver stuff?<br />
<br />
Thank you,<br />
TH]]></description>
            <dc:creator>TinHead</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Wed, 20 Jun 2018 13:14:07 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,824179#msg-824179</guid>
            <title>Re: Klipper v0.6.0 release</title>
            <link>https://reprap.org/forum/read.php?147,667655,824179#msg-824179</link>
            <description><![CDATA[ I am interested in boundary conditions a point at which point frequency of the controller would start affecting accuracy or break it's assumptions.  I am trying to read the code but it's going to take some time as I learn as I go.  So far it seems to me that the code is not expecting to have less than one tick per 1us.]]></description>
            <dc:creator>rmichael_cd</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Fri, 01 Jun 2018 07:24:35 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,824116#msg-824116</guid>
            <title>Re: Klipper v0.6.0 release</title>
            <link>https://reprap.org/forum/read.php?147,667655,824116#msg-824116</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>rmichael_cd</strong><br />
Thanks for the explanation.  Your first few posts to this thread were enlightening as well - such as that compression algorithm is lossy.  <br />
Forgetting about compression for a moment, where in the code is the time rounded up to the nearest tick?  </div></blockquote>
<br />
You'll want to walk through the "code flow of a move command" as described at: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Code_Overview.md#code-flow-of-a-move-command" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Code_Overview.md#code-flow-of-a-move-command</a>. The conversion to clock time is done as part of stepcompress.c:stepcompress_push_const().<br />
<br />
<blockquote class="bbcode"><div><small>Quote<br /></small><strong></strong><br />
How well do you think would Klipper work with 250kHz (step) clock on the MCU (controller with shift registers connected to 10 steppers)?</div></blockquote>
<br />
The Klipper host code is designed to work with the Klipper micro-controller code.  The Klipper micro-controller code doesn't use a fixed frequency update mechanism - instead the code is designed to work in a "tickless" manner - the code uses "software timers" that are scheduled to run at certain times, and a hardware irq is scheduled accordingly if needed.<br />
<br />
We've ported the Klipper micro-controller code to a number of platforms.  So, it may be possible to port it to the architecture you have in mind.<br />
<br />
<blockquote class="bbcode"><div><small>Quote<br /></small><strong></strong><br />
EDIT: I think I'm getting there.  CLOCK_FREQ is hardcoded within klipper/src/{controller}/Kconfig.  Presumably this variable is sent to host via DECL_COMMAND</div></blockquote>
<br />
Yes, each micro-controller declares its clock frequency via the DECL_CONSTANT() macro.  For example, see the src/avr/timer.c.<br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Thu, 31 May 2018 14:15:45 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,823756#msg-823756</guid>
            <title>Re: Klipper v0.6.0 release</title>
            <link>https://reprap.org/forum/read.php?147,667655,823756#msg-823756</link>
            <description><![CDATA[ Thanks for the explanation.  Your first few posts to this thread were enlightening as well - such as that compression algorithm is lossy.  <br />
Forgetting about compression for a moment, where in the code is the time rounded up to the nearest tick?  <br />
<br />
How well do you think would Klipper work with 250kHz (step) clock on the MCU (controller with shift registers connected to 10 steppers)?<br />
<br />
EDIT: I think I'm getting there.  CLOCK_FREQ is hardcoded within klipper/src/{controller}/Kconfig.  Presumably this variable is sent to host via DECL_COMMAND]]></description>
            <dc:creator>rmichael_cd</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Mon, 28 May 2018 21:17:23 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,823638#msg-823638</guid>
            <title>Re: Klipper v0.6.0 release</title>
            <link>https://reprap.org/forum/read.php?147,667655,823638#msg-823638</link>
            <description><![CDATA[ <blockquote class="bbcode"><div><small>Quote<br /></small><strong>rmichael_cd</strong><br />
I understand that in Klipper position is described by distance and time.  <br />
<br />
What is the resolution of the time variable?  <br />
I would imagine that it depends on speed of the controller - is it derived from max velocity?  Can you have different interval for each stepper?  <br />
Does position depend on given point in time or time on given position?<br />
What happens if steppers resolution does not allow to achieve certain position at certain time?  </div></blockquote>
<br />
The kinematics code stores both time and positions as 64bit "double precision" floating point values.  There's some information on how this is handled at: <a href="https://github.com/KevinOConnor/klipper/blob/master/docs/Code_Overview.md" target="_blank"  rel="nofollow">https://github.com/KevinOConnor/klipper/blob/master/docs/Code_Overview.md</a><br />
<br />
In Klipper motion is implemented by calculating when each stepper should step and then commanding them to do so at (nearly) those times.  Thus, the kinematics aren't calculated around the limits of the hardware; instead, the hardware follows the ideal kinematics as closely as it can.<br />
<br />
So, for arguments sake, if an X stepper had a step distance of one millimeter, and a g-code command moved the X axis from position 3.2 to 3.3 then Klipper would not schedule a step at all.  But, should it then be command to move from position 3.3 to 4.2 then one step would be scheduled.  It would be scheduled at the ideal time that the axis was closer to step position 4 than step position 3.  (That is, the kinematic/velocity equations would be "solved" to find the time that the stepper axis is at position 3.5 - the resulting time would be the ideal step time for that stepper.)<br />
<br />
-Kevin]]></description>
            <dc:creator>KevinOConnor</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 27 May 2018 22:20:33 -0400</pubDate>
        </item>
        <item>
            <guid>https://reprap.org/forum/read.php?147,667655,823589#msg-823589</guid>
            <title>Re: Klipper v0.6.0 release</title>
            <link>https://reprap.org/forum/read.php?147,667655,823589#msg-823589</link>
            <description><![CDATA[ I understand that in Klipper position is described by distance and time.  <br />
<br />
What is the resolution of the time variable?  <br />
I would imagine that it depends on speed of the controller - is it derived from max velocity?  Can you have different interval for each stepper?  <br />
Does position depend on given point in time or time on given position?<br />
What happens if steppers resolution does not allow to achieve certain position at certain time?  <br />
<br />
<br />
As you can see I'm quite confused.  Any answer to above would be helpful :)  thank you.]]></description>
            <dc:creator>rmichael_cd</dc:creator>
            <category>Firmware - experimental, borrowed, and future</category>
            <pubDate>Sun, 27 May 2018 09:55:27 -0400</pubDate>
        </item>
    </channel>
</rss>
