Marlin Ultimaker Original+ Marlin 2.1.3

Article Placeholder
DSC_0031Marlin.jpg

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
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.
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
If you wish to move in mm instead of steps uncomment:
Code:
#define BABYSTEP_MILLIMETER_UNITS
If you changed to MM you will want to make the unit smaller such as .01 for .01 mm adjustments:
Code:
#define BABYSTEP_MULTIPLICATOR_Z  .01
To access this feature quickly uncomment this as it will enable double clicking the screen button to use it:
Code:
#define DOUBLECLICK_FOR_Z_BABYSTEPPING
It my be useful to see the total moved:
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
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:
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: