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’.