Marlin 2.0.7, Ender 3 Pro, BTT SKR 1.4 Turbo with ABL using BLTouch v3.1


This article describes another release for Marlin this version is 2.0.7 released 29th September 2020 for use with the Ender 3 Pro and a custom hardware configuration: BigTreeTech SKR 1.4 board, TMC2209 drivers, BLTouch v3.1 (others supported check wiring).

This article doesn’t cover the physical assembly of the SKR 1.4 Turbo board instead focusing on preparing Marlin from source for use on the SKR 1.4 board. A word of caution the stock case will prove to be a tight fit; the heat-sinks on the TMC2209’s are tall and when coupled with the SKR board won’t have enough clearance in the stock case.

Important information

There are newer versions of this article and Marlin configurations available:

Here are some highlights on key features enabled in this custom version of Marlin 2.0.7:

  • TMC2209 drivers with Stealth-chop & Hybrid threshold enabled on X, Y, Z axis.
  • BLTouch for ABL Bilinear.
    • Bed levelling is used in addition to a Z-stop switch.
    • Menu for levelling bed corners.
    • Restore bed levelling after G28.
    • Probes bed once at each point.
  • Movement on any axis is restricted until axis’s are homed.
  • Emergency stop interrupt commands supported
  • PID Tuning
  • Extruder fan after 50°C
  • Z Safe homing
  • Advanced pause and filament change
  • Classic Jerk or Junction Deviation (see note below)

Read more on changes in the official Marlin 2.0.7 change log.

It’s assumed that you have the following equipment:

  • BTT SKR 1.4 Board.
  • BLTouch v3.1 (other versions of the BLTouch will work but you will need to adjust settings related to it and check your wiring).
  • Ender 3 Pro or 3.


PlatformIO Installation

I suggest VSCode as a quick method for compiling Marlin 2.0.x from source.

  1. Download VSCode and install.
  2. Open VSCode > Extension Manager > Search for and install the official PlatformIO IDE extension.

Firmware sources

Binary release

View 2.0.7 release

Building your own binary

I have made my Marlin configurations available for download they feature the same changes mentioned within this article; if you use my configuration you will need to review your Probe offsets:

To build your own variant from source; start by downloading the relevant Marlin releases used in this article from Marlin 2.0.7 branch:

Once you have downloaded the sources above you will need to extract them to an accessible location, use the following steps as a reference:

  1. Download and extract Marlin 2.0.7 sources
  2. Copy the 4 files to the Marlin directory contained within the extracted Marlin 2.0.7 sources.

Firmware configuration modifications

Next we will be modifying 2 specific files from the release to customise the firmware for to our requirements:

  • /Marlin/Configuration.h
  • /Marlin/Configuration_adv.h

Depending upon whether you used my configurations or the stock configurations will determine if you need to merge the changes required to support the new hardware:

  1. Compare file: /Marlin/Configuration.h with custom file: Configuration.h (BitBucket)
  2. Compare file: /Marlin/Configuration_adv.h with custom file: Configuration_adv.h (BitBucket)

Switching between Classic Jerk and Junction Deviation

In the configuration I have provided you can change between classic jerk and junction deviation by commenting out #CLASSIC_JERK.

  #define DEFAULT_XJERK 10.0
  #define DEFAULT_YJERK 10.0
  #define DEFAULT_ZJERK  0.3

  //#define TRAVEL_EXTRA_XYJERK 0.0     // Additional jerk allowance for all travel moves

  //#define LIMITED_JERK_EDITING        // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
    #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits

#define DEFAULT_EJERK    5.0  // May be used by Linear Advance

 * Junction Deviation Factor
 * See:
  #define JUNCTION_DEVIATION_MM 0.08  // (mm) Distance from real junction edge
  #define JD_HANDLE_SMALL_SEGMENTS    // Use curvature estimation instead of just the junction angle
                                      // for small segments (< 1mm) with large junction angles (> 135°).

When using my device configurations you should take care to check the following are suited to your setup/configuration:

  • Probe offsets for X, Y, Z (important; see below).
  • Require Fade height?
  • PID tuning (recommended).
  • E-Step calibration.

Important note on Probe offsets

Keep in mind that in using this; you will likely need to adjust your X, Y, Z offset settings specific to your setup. The change is simple and the key settings to look for is NOZZLE_TO_PROBE_OFFSET if you wish to make the change in source. Once found, this branch of Marlin requires the offsets to be defined as an array: {x, y, z}.

The alternative is updating the probe offset values after the new firmware has been installed.

Updating Probe offset values manually using G-code M851

The following example shows the G-Code I would use to set the offset values after flashing a new firmware. You will need to adjust these offsets to accommodate your own requirements.

Set the Z offset for the BLTouch by sending G-code:

M851 Z-1.46 

Set the X and Y distance (probe left front of nozzle) by sending G-code:

M851 X-46.00 Y-16.00 

Save the setting to the EEPROM by sending G-code:


Setting Fade Height manually via G-code M420

Set the Fade Height with G-Code:

M420 Z10