Our Location
304 North Cardinal St.
Dorchester Center, MA 02124
Redeem is quickly becoming the standard in 3D printer firmwares with self documenting G-codes and pre-processing path planner. Up until recently, two fairly standard features have had somewhat sub-par performance: PID auto-tune and automatic bed calibration. A recent poll on the Thing-printer G+ page revealed that these two things were on the top of list of things to improve, so in this article and the next, the new improvements will be documented.
When work started on the PID auto tune code, a few bugs and issues were discovered. Here is a quick rundown of the most important changes.
The old implementation had something akin to a mix between the standard and the ideal form. The PID algorithm is quite robust to tuning errors, so it was still possible to tune it well with the old implementation, but the current implementation is now a clean standard form implementation, which is what is most used in the industry. That makes it easy to test out new auto tuning calculations, if one was so inclined. Here is the standard formula for reference, taken from Wikipedia:
Due to this switch, some parameters in the config files have changed:
“pid_p_E” changes to “pid_Kp_E”
“pid_i_E” changes to “pid_Ti_E”
“pid_d_E” changes to “pid_Td_E”
Furthermore, some nice improvements to the code were added, like decimal temperature reporting and set point reporting. Mainly these improvements were for debugging during testing, but they are nice to have either way.
A big change for anyone doing configuration of their printer is the change from table based lookup of temperature to using the Steinhart-Hart algorithm for calculating temperature. This should add accuracy to the temperature and also simplify adding new sensors, since it is no longer necessary to generate a lookup table with a script.
As a result of this, some other important settings have been changed in the config files.
“temp_chart_E” changes to “sensor_E”
All the config changes are present in the new default.cfg file. If one of the old style configs are found in either printer.cfg or local.cfg, a warning will be given during startup. Please check the log after upgrading.
The G-code M303 has a slightly updated interface compared to the previous versions. Btw, if at any time you need the most up to date documentation for a G-code in Redeem, simply write add a question mark after the G-code, for example: “M303?”
Send: M303? Recv: PID Tuning refers to a control algorithm used in some repraps to tune heating behavior for hot ends and heated beds. This command generates Proportional (Kp), Integral (Ki), and Derivative (Kd) values for the hotend or bed (E-1). Send the appropriate code and wait for the output to update the firmware. E overrides the extruder. Use E-1 for heated bed. Recv: Default is the 'E' extruder with index 0. Recv: S overrides the temperature to calibrate for. Default is 200. Recv: C overrides the number of cycles to run, default is 4 Recv: P (0,1) Enable pre-calibration. Useful for systems with very high power Recv: Q Tuning algorithm. 0 = Tyreus-Luyben, 1 = Zieger-Nichols classic
When doing experiments with the new auto tune routine, much advice and inspiration was drawn from the works of Ryan Carlyle, an eager Replicape user and RepRap contributor. One thing in particular he recommended was to add a pre-calibration routine, to figure out the rise time and fall time for the temperature of the hot end. This in turn can be used as a better starting point for the actual calibration cycles by estimating the rise and fall times ahead. A positive side-effect of the pre-calibration is that the amount of over-shoot typically experienced in a naïve bang-bang auto tune cycle diminishes. This can prevent filament from charcoaling due to excess temperatures.
The experiment did work, and can be tested out with the P-parameter added to M303. However, the formula relies on Newton’s law of cooling which breaks in the face of forced convection (IE a fan blowing on or near the hot end). Thus to get good results, make sure you disable the automatic cold end fan that most hot ends use.
The result of the experimental tuning method can be seen in the header image. The important part is the pre-calibrate routine, something along the lines of:
The routine in the header image goes on to try and set the steady state temperature using the calculated values before calibrating with a bang-bang type calibration and the finally testing the resulting values.
The new algorithm also allows for specifying which type of tuning parameters are used. Right now, only Tyreus-Luyben and Zieger-Nichols classic are implemented, but other values are easily added, and pull requests are welcome!