Article Placeholder
The example config has this enabled:
Not always a critical item, but we define the filament diameter here. Stock is 2.85 if you have not done modifications.
One of the first difference from the Original to the Original+ is the built in PT100 amplifiers which we will set to 20 for the hotend and the bed.
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 covers this but see below:
The problem I have run into in the latest versions is the preheat temp for ABS at 240 is evaluated against MAXTEMP - HOTEND_OVERSHOOT. So instead of setting a max temp of 240 or 245 I have set 250 and lowered the overshoot from 15 to 10. This should be a nice compromise.
Ultimaker does not seem to specify a maximum temperature for the bed. Optionally set this to a reasonable number:
Enable PID for the bed.
Set some initial values which can be fine tuned later on machine:
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:
Set the endstop hit states. If you are running a probe you will need to also change Z_MIN_PROBE_ENDSTOP_HIT_STATE to match the z min endstop setting. On my machines both would be HIGH:
Steps per unit for the MXL pulleys and 8mm Z:
Set feed rates:
Lets discuss the example config's acceleration. The original Ultimaker cross gantry will run 9K acceleration easily. But on an 8 bit controller we won't be running input shaper. Nothing wrong with giving yourself the option to go this high in the slicer later:
If you intend to use classic jerk instead of junction deviation the example config gives us an XY value of 15, while the UltimakerMarlin config is 20.
Enable S-Curve Acceleration by uncommenting this line:
Set motor direction:
This will lower the bed 10mm after homing:
Configure the bed and travel limits:
The example config enables mesh bed leveling, if you desire manual mesh:
I always enabled the bed tramming menu:
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 200. 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:
The Ultimaker 2.1.1 board sets the motor current using PWM_MOTOR_CURRENT
For safety lets enable the hotend timeout not in the example:
Optional but a favorite of mine included in the example config is the LCD Info Menu to check the printer counter among other things:
Baby stepping allows you to adjust the Z during a print which is pretty useful on older printers when things can be a bit finicky:
If you wish to move in mm instead of steps uncomment:
If you changed to MM you will want to make the unit smaller such as .01 for .01 mm adjustments:
To access this feature quickly uncomment this as it will enable double clicking the screen button to use it:
It my be useful to see the total moved:
To enable M600 support we combine the previous setting of Nozzle Parking with Advanced Pause:
Since this is not enabled in the example config lets use the tuned options from the UMO example which seemed to work fairly well. Collapsed into a spoiler for space:
So now lets look at some of the example config items
The example config commented out #define E0_AUTO_FAN_PIN and enabled case light. Neither of these made sense on a stock printer so I am skipping this.
The default config has a Z manual feed rate of 4, the example bumps this to 50. I am setting it to 30 to match prior settings.
Baby stepping is something that I would enable on pretty much every build
CANCEL_OBJECTS on an 8 bit board might not be a good idea, we will test this for the article.
Table of Contents
Configuration.h
Define the main board:
Code:
#define MOTHERBOARD BOARD_ULTIMAIN_2
The example config has this enabled:
Code:
#define BAUD_RATE_GCODE
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
One of the first difference from the Original to the Original+ is the built in PT100 amplifiers which we will set to 20 for the hotend and the bed.
Code:
#define TEMP_SENSOR_0 20
#define TEMP_SENSOR_BED 20
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 covers this but see below:
Code:
#define HEATER_0_MAXTEMP 250
Code:
#define HOTEND_OVERSHOOT 10
Ultimaker does not seem to specify a maximum temperature for the bed. Optionally set this to a reasonable number:
Code:
#define BED_MAXTEMP 120
Enable PID for the bed.
Code:
#define PIDTEMPBED
Set some initial values which can be fine tuned later on machine:
Code:
#define DEFAULT_bedKp 124.55
#define DEFAULT_bedKi 23.46
#define DEFAULT_bedKd 165.29
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
Set the endstop hit states. If you are running a probe you will need to also change Z_MIN_PROBE_ENDSTOP_HIT_STATE to match the z min endstop setting. On my machines both would be HIGH:
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
Steps per unit for the MXL pulleys and 8mm Z:
Code:
#define DEFAULT_AXIS_STEPS_PER_UNIT { 78.7402, 78.7402, 200.0, 760*1.1 }
Set feed rates:
Code:
#define DEFAULT_MAX_FEEDRATE { 500, 500, 30, 25 }
Lets discuss the example config's acceleration. The original Ultimaker cross gantry will run 9K acceleration easily. But on an 8 bit controller we won't be running input shaper. Nothing wrong with giving yourself the option to go this high in the slicer later:
Code:
#define DEFAULT_MAX_ACCELERATION { 9000,9000,100,10000 }
If you intend to use classic jerk instead of junction deviation the example config gives us an XY value of 15, while the UltimakerMarlin config is 20.
Code:
#define CLASSIC_JERK
Code:
#define DEFAULT_XJERK 15.0
#define DEFAULT_YJERK 15.0
#define DEFAULT_ZJERK 0.4
#define DEFAULT_EJERK 5.0
Enable S-Curve Acceleration by uncommenting this line:
Code:
#define S_CURVE_ACCELERATION
Set motor direction:
Code:
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true
This will lower the bed 10mm after homing:
Code:
#define Z_AFTER_HOMING 10
Configure the bed and travel limits:
Code:
#define X_BED_SIZE 210
#define Y_BED_SIZE 210
#define Z_MAX_POS 205
The example config enables mesh bed leveling, if you desire manual mesh:
Code:
#define MESH_BED_LEVELING
Code:
#define LCD_BED_LEVELING
Code:
#define MESH_EDIT_MENU
I always enabled the bed tramming menu:
Code:
#define LCD_BED_TRAMMING
Code:
#define BED_TRAMMING_LEVELING_ORDER { LF, RF }
Code:
#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (30*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 200. 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:
Code:
#define ULTIMAKERCONTROLLER
Configuration_adv.h
The example configuration for the UMO+ has several items that are optional, possibly even not relevant to a stock machine. So to begin I will go over the mandatory items and the ones we covered on the UMO.The Ultimaker 2.1.1 board sets the motor current using PWM_MOTOR_CURRENT
Code:
#define PWM_MOTOR_CURRENT { 1000, 1000, 1250 }
For safety lets enable the hotend timeout not in the example:
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
Baby stepping allows you to adjust the Z during a print which is pretty useful on older printers when things can be a bit finicky:
Code:
#define BABYSTEPPING
Code:
#define BABYSTEP_MILLIMETER_UNITS
Code:
#define BABYSTEP_MULTIPLICATOR_Z .01
Code:
#define DOUBLECLICK_FOR_Z_BABYSTEPPING
Code:
#define BABYSTEP_DISPLAY_TOTAL
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
So now lets look at some of the example config items
Code:
#define SHOW_TEMP_ADC_VALUES
Code:
#define FAST_PWM_FAN
The example config commented out #define E0_AUTO_FAN_PIN and enabled case light. Neither of these made sense on a stock printer so I am skipping this.
The default config has a Z manual feed rate of 4, the example bumps this to 50. I am setting it to 30 to match prior settings.
Code:
#define MANUAL_FEEDRATE { 50*60, 50*60, 30*60, 2*60 }
Baby stepping is something that I would enable on pretty much every build
Code:
#define BABYSTEPPING
CANCEL_OBJECTS on an 8 bit board might not be a good idea, we will test this for the article.
Last edited: