Marlin Ultimaker Original+ Marlin 2.1.3

Article Placeholder


Configuration.h​

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

The stock PEEK hotend can be damaged if it approaches/exceeds 248C.
Code:
#define HEATER_0_MAXTEMP 240

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

Code:
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 78.7402, 78.7402, 200.0, 760*1.1 }

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 } // EXAMPLE CONFIG

To Jerk or not to Jerk?
The example config enables classic jerk support setting X and Y to 15. 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

Code:
#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true

Code:
#define Z_AFTER_HOMING

Code:
#define X_BED_SIZE 210
#define Y_BED_SIZE 210

#define Z_MAX_POS 205


#define MESH_BED_LEVELING


#define LCD_BED_LEVELING

#define MESH_EDIT_MENU

#define LCD_BED_TRAMMING

Code:
 #define BED_TRAMMING_LEVELING_ORDER { LF, RF }

Code:
#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (50*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

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:
#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: