I recently switched to the Kliment fork of the TonokIP fork of the Hydra-MMM firmware.

The tiny pauses between g-code segments are all but gone, and I’ve been re-printing some things
to do before & after comparisons.

The black PLA-4043D Hyperboloid was printed with the Tonokip firmware, and the recent natural 4043D PLA was printed with the Kliment firmware.
Both were printed through a MakerGear plastruder with a 0.35mm nozzle, at 0.25mm layer heights. I’ve been using the same hot-end for a while now, and have put nearly 15lbs of PLA through it. The took 2 hours each, give or take a few minutes.

Hopefully my picture managed to capture the difference in surface quality. Hit the full-size photos to see it better.

Just few minutes in

About 25% done

Finished print, unretouched photo. :-)

Left is tonokip, right is Klimentip.

I thought the firmware I’ve been using had PID temperature control, but it turns out it was using a simple on/off thermostat routine that caused the extruder temperature to have big variations.

Here are some prints of a RepRap Mendel part, basically a small cylinder. Due to the small size of the part quality really suffers as the temperature swings up & down.

The cylinder on the left was printed with the simple On/Off temperature control, and the two on the right were printed with a On / Medium control, that instead of turning the heater entirely off when the temperature exceeded it’s set limit, just set the heater to a medium value. It’s not a real fix, but it was simple to implement, and still makes a pretty significant difference.

Worse, bad, bad.

The right-most part in this picture will probably be usable, but just barely.

Left = bad.

Here are some larger parts that show the effect in the ‘banding’ you see every couple of layers, and the lower layers that are %100 solid internally, are a bit wider, which they should not be.

Notice the horizontal banding.

The code I changed isn’t *much* better, but it helps some, if you’re using the tonok-MMM firmware fork look at the file Tonokip_Firmware.pde in the manage_heater() function:


The original code was this:

if(current_raw >= target_raw) digitalWrite(HEATER_0_PIN,LOW);
else digitalWrite(HEATER_0_PIN,HIGH);

and I replaced it with this:

if (target_raw <= 50) {
analogWrite(HEATER_0_PIN,HEATER_0_OFF);
} else {
if(current_raw >= target_raw) {
analogWrite(HEATER_0_PIN,HEATER_0_LOW);
} else {
analogWrite(HEATER_0_PIN, HEATER_0_HIGH);
}

and added these lines to configuration.h:

const char HEATER_0_LOW = 85;
const char HEATER_0_HIGH = 255;
const char HEATER_0_OFF = 0;

The HEATER_0_LOW value should be a number in the 0-255 range that allows your heater to cool from your usual print temperature, be careful not to set it too high, or your nozzle will never cool down. As mine sits now it will idle at about 165C when the heater is on ‘Low’.