This article describes another release for Marlin this version is 2.0.8 based on the release from 30th April 2021 and prepared for use with the Ender 3 Pro and a custom hardware configuration comprising of the: BigTreeTech SKR 1.4 board, TMC2209 stepper drivers and the BLTouch v3.1 (other versions supported review wiring diagram for your variant).
Table of Contents
- Important information
- Preparation
- PlatformIO Installation
- Firmware sources
- Binary release
- Building your own binary
- Firmware configuration modifications
- Switching between Classic Jerk and Junction Deviation
- Important note on Probe offsets
- Updating Probe offset values manually using G-code M851
- Setting Fade Height manually via G-code M420
- Determining if Endstops need to be inverted
- Endstop inversion option 1
- Endstop inversion option 2
Important information
There are newer versions of this article and Marlin configurations available:
- Marlin v2.0.8.2 – Posted 13th July 2021
- Marlin v2.0.8 – This article posted 16th May 2021
Here are some highlights on key features enabled in this custom version of Marlin 2.0.8:
- TMC2209 drivers with Stealth-chop & Hybrid threshold enabled on X, Y, Z axis.
- BLTouch for ABL Bilinear.
- Bed levelling is used in addition to the 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.
- PID Tuning
- Extruder fan after 50°C
- Z Safe homing
- Advanced pause and filament change
- Classic Jerk or Junction Deviation (see note below)
- Mute menu sound capability
To read more on changes introduced check the official Marlin 2.0.8 change log. Before we begin it’s assumed that you have the following equipment:
- Ender 3 Pro or 3.
- 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).
Preparation
PlatformIO Installation
I suggest VSCode as a quick method for compiling the Marlin 2.0.x from source.
- Download VSCode and install.
- Open VSCode > Extension Manager > Search for and install the official PlatformIO IDE extension.
Firmware sources
Binary release
View Binary release v2.0.8 on GitLab
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 & determine if your endstops require inversion:
- Marlin 2.0.8 – BTT SKR1.4 and Ender 3: https://gitlab.com/oddineers-public/marlin-ender-3/-/tree/Marlin-2.0.8/
To build your own variant from source; start by downloading the relevant Marlin releases used in this article from Marlin 2.0.8 branch:
- Official Marlin 2.0.8 source code: https://github.com/MarlinFirmware/Marlin/releases/tag/2.0.8
Once you have downloaded the sources above you will need to extract them to an accessible location, use the following steps as a reference:
- Download and extract Marlin 2.0.8 sources
- Copy the 4 files to the
Marlin
directory contained within the extracted Marlin 2.0.8 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:
- Compare file:
/Marlin/Configuration.h
with custom file: Configuration.h (GitLab) - Compare file:
/Marlin/Configuration_adv.h
with custom file: Configuration_adv.h (GitLab)
Switching between Classic Jerk and Junction Deviation
In the configuration provided you can change between classic jerk and junction deviation by commenting out #CLASSIC_JERK
(found on line 787 in Configuration.h).
//#define CLASSIC_JERK
#if ENABLED(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
#if ENABLED(LIMITED_JERK_EDITING)
#define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits
#endif
#endif
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
/**
* Junction Deviation Factor
*
* See:
* https://reprap.org/forum/read.php?1,739819
* https://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html
*/
#if DISABLED(CLASSIC_JERK)
#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°).
#endif
When using these 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.
- Endstops may need inverting depending on your wiring see below.
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:
M500
Setting Fade Height manually via G-code M420
Set the Fade Height with G-Code:
M420 Z10
Determining if Endstops need to be inverted
Get all endstop states by sending G-Code:
M119
It will report something similar to:
Reporting endstop status
x_min: open
y_min: open
z_min: TRIGGERED
z_probe: open
filament: open
If an endstop is reporting triggered but is not actually triggered (by this I mean pushed) or is reporting open when the switch is pushed then you will need to invert the endstop. If was true
initially set to false
and vice-versa.
Below are two options for addressing this requirement.
Endstop inversion option 1
If you would prefer to change the inversion on a endstop or endstops in the configuration to compile yourself look for the following:
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING true // Set to true to invert the logic of the probe.
Endstop inversion option 2
Alternatively; if you wish avoid editing the configuration and utilise the binaries available on this blog; you could swap the placement of the two wires in the DuPont connector, carefully ejecting each wire with a pin/needle and repositioning them by swapping them around.
The mod could be made on either end of the cable plugged in to the endstop; cable closest to the endstop would likely be a easier option for most.