ARTICLE IN PROGRESS
Ultimaker Original+ is covered in a separate article here.
Boards other than 1.5.7 - Earlier boards (1.0-1.3, possibly 1.5.3) have differences. Feel free to contact us and we can work on covering these.
If you have a dual extrusion kit you will want to uncomment the E1 driver type. Otherwise a single extruder build requires no changes and will look like this:
Not always a critical item, but we define the filament diameter here. Stock is 2.85 if you have not done modifications.
Now we need to define the temperature sensors, change the hotends to -1 for each that you have. If you do not have the heated build plate kit the bed will be changed to 0:
If you have a stock PEEK isolator hotend you will want to limit the maximum temperature as PEEK will start to soften around 248C. The UMO example config doesn't do this but the UMO+ one does:
Not required but this will give you the PID tuning options in the menu:
The filament load on this printer is about 700mm if you do not manually unlatch and push/pull filament. The example config suggests changing EXTRUDE_MAXLENGTH to 705:
Endstop hit states for the following need to be changed to LOW in 2.1.3 or true in 2.1.2.5 or older:
2.1.3
2.1.2.5 & Older
Steps Per Millimeter Differences
XY - The original MXL belts and pulleys call for 78.7402. If you have upgraded to GT2 this will be 80.
Z - The stock 1/8 micro stepping with 12x3 leadscrew comes out to 533.3333 as seen in the example. Double this for 1/16. The original Ultimaker Marlin source shows a different way to describe this 200*microstepping/pitch.
E - This should be tuned. The original firmware was 760*1.1 or 836 which is likely to be too low. The example has 883.84346 but also lists 876.6687 as "default" and I have seen 876 pop up in other peoples calculations. You should check your result but I start there
Max feedrate in the example config changed the Z axis to 30. I would NOT recommend this. The stock 5 is fine but anything more than 10 and you I hear the plywood cry:
To Jerk or not to Jerk?
The example config enables classic jerk support setting X and Y to 7. I don't run this as Jerk control is not commonly enabled in slicers anymore. But if you experience tells you to use this instead of junction deviation then trust your own judgement.
Enable S-Curve Acceleration by uncommenting this line:
I am skipping the examples #define PROBE_MANUALLY as I will only do 4 corner leveling. This is another personal preference item to think about.
We need to set the motor directions properly:
The example drops the bed 10mm after homing by uncommenting this:
Bed Size and Z-limit are a small area of concern. The advertised size is 210x210x205 which the example reflects. However I have found my machines XY to be about 208 and if we look into the original UltimakerMarlin source it is set to 205. If you have a stock bed with nothing on it 205 is fine for Z, however if you did something like I did and put a magnet with flex plate you may want to bump this down to 200:
While the board has plugs for them we do not use max end stops so comment out this line like so:
On older printers with no probe I like to add the menu option to help with bed screw adjustment, this was not in the example:
UPDATE THIS SECTION
We can speed up homing speeds if you like the example has X and Y set to 90, but I am not going to recommend more than 10 for the Z as discussed before:
Enable EEPROM_SETTINGS on pretty much any build you do:
Preheat Settings
This area is a bit of personal preference. Set your labels and temperatures for your 2 most common filaments. The example bumps the PLA temp from 180 to 210. 200 was a common temperature in the past but a lot of PLA blends these days do well a bit higher.
A prelude to M600
We will want to enable to companying advanced pause in the Configuration_adv.h later but for now uncomment and adjust the desired parking position. This is another area where the Z setting is high in the example. Feel free to bump it from 5 to 10 if you wish:
Optionally enable the print counter statistics. If you do not care about this it will save a little eeprom wear to leave it disable:
Enable SD Card Support:
Optional menu addition:
Enable the Ulticontroller screen if equipped:
Optional but a favorite of mine included in the example config is the LCD Info Menu to check the printer counter among other things:
To enable M600 support we combine the previous setting of Nozzle Parking with Advanced Pause:
The example config changes a ton of settings which on a printer with such a long bowden tube is helpful. This is the current example settings as of 2.1.3:
Pick your favorite flavor of bed leveling.
Introduction
We will be covering the Ultimaker Original with the 1.5.7 board, UltiController, MXL Belts/Pullies, 12mm leadscrew set to 1/8 microstepping as was stock and available late 2012 and onwards. I will go through all of the changes to a blank 2.1.3 config file to support this printer. The UMO ran Marlin stock so there should be no surprise an example config can be found here Latest 2.1.x Ultimaker Original 1.5.7. But we will have some differences.Other Models/Common Changes
Heated Bed Upgrade to be added to this article at a later date.Ultimaker Original+ is covered in a separate article here.
Boards other than 1.5.7 - Earlier boards (1.0-1.3, possibly 1.5.3) have differences. Feel free to contact us and we can work on covering these.
Configuration.h
The first change to a blank config is to define the motherboard:
Code:
#define MOTHERBOARD BOARD_ULTIMAKER
If you have a dual extrusion kit you will want to uncomment the E1 driver type. Otherwise a single extruder build requires no changes and will look like this:
Code:
#define E0_DRIVER_TYPE A4988
//#define E1_DRIVER_TYPE A4988
Not always a critical item, but we define the filament diameter here. Stock is 2.85 if you have not done modifications.
Code:
#define DEFAULT_NOMINAL_FILAMENT_DIA 2.85
Now we need to define the temperature sensors, change the hotends to -1 for each that you have. If you do not have the heated build plate kit the bed will be changed to 0:
Code:
#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 0 //Change this for dual extruder builds
#define TEMP_SENSOR_BED 0 //Non heated bed build
If you have a stock PEEK isolator hotend you will want to limit the maximum temperature as PEEK will start to soften around 248C. The UMO example config doesn't do this but the UMO+ one does:
Code:
#define HEATER_0_MAXTEMP 240
Not required but this will give you the PID tuning options in the menu:
Code:
#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of flash)
#define PID_AUTOTUNE_MENU // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of flash)
The filament load on this printer is about 700mm if you do not manually unlatch and push/pull filament. The example config suggests changing EXTRUDE_MAXLENGTH to 705:
Code:
#define EXTRUDE_MAXLENGTH 705
Endstop hit states for the following need to be changed to LOW in 2.1.3 or true in 2.1.2.5 or older:
2.1.3
Code:
#define X_MIN_ENDSTOP_HIT_STATE LOW
#define X_MAX_ENDSTOP_HIT_STATE LOW
#define Y_MIN_ENDSTOP_HIT_STATE LOW
#define Y_MAX_ENDSTOP_HIT_STATE LOW
#define Z_MIN_ENDSTOP_HIT_STATE LOW
#define Z_MAX_ENDSTOP_HIT_STATE LOW
#define Z_MIN_PROBE_ENDSTOP_HIT_STATE LOW
2.1.2.5 & Older
Code:
#define X_MIN_ENDSTOP_INVERTING true
#define Y_MIN_ENDSTOP_INVERTING true
#define Z_MIN_ENDSTOP_INVERTING true
#define X_MAX_ENDSTOP_INVERTING true
#define Y_MAX_ENDSTOP_INVERTING true
#define Z_MAX_ENDSTOP_INVERTING true
#define Z_MIN_PROBE_ENDSTOP_INVERTING true
Steps Per Millimeter Differences
XY - The original MXL belts and pulleys call for 78.7402. If you have upgraded to GT2 this will be 80.
Z - The stock 1/8 micro stepping with 12x3 leadscrew comes out to 533.3333 as seen in the example. Double this for 1/16. The original Ultimaker Marlin source shows a different way to describe this 200*microstepping/pitch.
E - This should be tuned. The original firmware was 760*1.1 or 836 which is likely to be too low. The example has 883.84346 but also lists 876.6687 as "default" and I have seen 876 pop up in other peoples calculations. You should check your result but I start there
Code:
#define DEFAULT_AXIS_STEPS_PER_UNIT { 78.7402, 78.7402, 200*8/3,876.6687 }
Max feedrate in the example config changed the Z axis to 30. I would NOT recommend this. The stock 5 is fine but anything more than 10 and you I hear the plywood cry:
Code:
#define DEFAULT_MAX_FEEDRATE { 300, 300, 10, 25 }
To Jerk or not to Jerk?
The example config enables classic jerk support setting X and Y to 7. I don't run this as Jerk control is not commonly enabled in slicers anymore. But if you experience tells you to use this instead of junction deviation then trust your own judgement.
Enable S-Curve Acceleration by uncommenting this line:
Code:
#define S_CURVE_ACCELERATION
I am skipping the examples #define PROBE_MANUALLY as I will only do 4 corner leveling. This is another personal preference item to think about.
We need to set the motor directions properly:
Code:
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true
The example drops the bed 10mm after homing by uncommenting this:
Code:
#define Z_AFTER_HOMING
Bed Size and Z-limit are a small area of concern. The advertised size is 210x210x205 which the example reflects. However I have found my machines XY to be about 208 and if we look into the original UltimakerMarlin source it is set to 205. If you have a stock bed with nothing on it 205 is fine for Z, however if you did something like I did and put a magnet with flex plate you may want to bump this down to 200:
Code:
#define X_BED_SIZE 205
#define Y_BED_SIZE 205
#define Z_MAX_POS 205
While the board has plugs for them we do not use max end stops so comment out this line like so:
Code:
//#define MAX_SOFTWARE_ENDSTOPS
On older printers with no probe I like to add the menu option to help with bed screw adjustment, this was not in the example:
Code:
#define LCD_BED_TRAMMING
We can speed up homing speeds if you like the example has X and Y set to 90, but I am not going to recommend more than 10 for the Z as discussed before:
Code:
#define HOMING_FEEDRATE_MM_M { (90*60), (90*60), (5*60) }
Enable EEPROM_SETTINGS on pretty much any build you do:
Code:
#define EEPROM_SETTINGS
Preheat Settings
This area is a bit of personal preference. Set your labels and temperatures for your 2 most common filaments. The example bumps the PLA temp from 180 to 210. 200 was a common temperature in the past but a lot of PLA blends these days do well a bit higher.
Code:
#define PREHEAT_1_TEMP_HOTEND 210
A prelude to M600
We will want to enable to companying advanced pause in the Configuration_adv.h later but for now uncomment and adjust the desired parking position. This is another area where the Z setting is high in the example. Feel free to bump it from 5 to 10 if you wish:
Code:
#define NOZZLE_PARK_FEATURE
Optionally enable the print counter statistics. If you do not care about this it will save a little eeprom wear to leave it disable:
Code:
#define PRINTCOUNTER
Enable SD Card Support:
Code:
#define SDSUPPORT
Optional menu addition:
Code:
#define INDIVIDUAL_AXIS_HOMING_MENU
Enable the Ulticontroller screen if equipped:
Code:
#define ULTIMAKERCONTROLLER
Configuration_adv.h
For safety lets enable the hotend timeout as the example suggests:
Code:
#define HOTEND_IDLE_TIMEOUT
Optional but a favorite of mine included in the example config is the LCD Info Menu to check the printer counter among other things:
Code:
#define LCD_INFO_MENU
To enable M600 support we combine the previous setting of Nozzle Parking with Advanced Pause:
Code:
#define ADVANCED_PAUSE_FEATURE
Code:
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#define PAUSE_PARK_RETRACT_FEEDRATE 1800 // (mm/s) Initial retract feedrate.
#define PAUSE_PARK_RETRACT_LENGTH 50 // (mm) Initial retract.
// This short retract is done immediately, before parking the nozzle.
#define FILAMENT_CHANGE_UNLOAD_FEEDRATE 2500 // (mm/s) Unload filament feedrate. This can be pretty fast.
#define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
#define FILAMENT_CHANGE_UNLOAD_LENGTH 700 // (mm) The length of filament for a complete unload.
// For Bowden, the full length of the tube and nozzle.
// For direct drive, the full length of the nozzle.
// Set to 0 for manual unloading.
#define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load.
#define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 10 // (mm) Slow length, to allow time to insert material.
// 0 to disable start loading and skip to fast load only
#define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 1800 // (mm/s) Load filament feedrate. This can be pretty fast.
#define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate.
#define FILAMENT_CHANGE_FAST_LOAD_LENGTH 600 // (mm) Load length of filament, from extruder gear to nozzle.
// For Bowden, the full length of the tube and nozzle.
// For direct drive, the full length of the nozzle.
//#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted.
#define ADVANCED_PAUSE_PURGE_FEEDRATE 150 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate.
#define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading.
// Set to 0 for manual extrusion.
// Filament can be extruded repeatedly from the Filament Change menu
// until extrusion is consistent, and to purge old filament.
#define ADVANCED_PAUSE_RESUME_PRIME 20 // (mm) Extra distance to prime nozzle after returning from park.
#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused.
// Filament Unload does a Retract, Delay, and Purge first:
#define FILAMENT_UNLOAD_PURGE_RETRACT 0 // (mm) Unload initial retract length.
#define FILAMENT_UNLOAD_PURGE_DELAY 2000 // (ms) Delay for the filament to cool after retract.
#define FILAMENT_UNLOAD_PURGE_LENGTH 20 // (mm) An unretract is done, then this length is purged.
#define FILAMENT_UNLOAD_PURGE_FEEDRATE 25 // (mm/s) feedrate to purge before unload
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
//#define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is triggered again.
//#define PAUSE_REHEAT_FAST_RESUME // Reduce number of waits by not prompting again post-timeout before continuing.
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
//#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change
#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu.
//#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302)
#define CONFIGURE_FILAMENT_CHANGE // Add M603 G-code and menu items. Requires ~1.3K bytes of flash.
#endif
Modifications
I personally have an inductive probe connected to my Z endstop port. If you have done something similar here are the changes I made:
Code:
#define FIX_MOUNTED_PROBE
Code:
#define AUTO_BED_LEVELING_BILINEAR
Code:
#define Z_SAFE_HOMING
Code:
#define NOZZLE_TO_PROBE_OFFSET { 0, 20, 0 }
Last edited: