How-to
BMG extruder settings: steps per mm and rotation distance
Set 415 steps/mm in Marlin, or rotation_distance 7.711 in Klipper (22.679 with gear_ratio: 50:17), for a Bondtech BMG or a BMG clone on a 1.8° motor at 16 microsteps. Then reverse the motor if the filament backs out, calibrate with a 50 mm extrude and start retraction at 0.8 mm on a direct drive mount.
Edited by 3D Printeray EditorsPublished Last verified 8 min read
In this section: Extruders(14)
On this page (8)

A Bondtech BMG on a 1.8° motor at 16 microsteps takes 415 steps/mm in Marlin (M92 E415, saved with M500) or rotation_distance: 7.711 in Klipper, which becomes 22.679 if you add gear_ratio: 50:17. These are Bondtech’s values, and BMG clones start from the same numbers. Then reverse the motor if the filament backs out, calibrate with a 50 mm extrude and start retraction at 0.8 mm at 40 mm/s on a direct drive mount (a Bowden mount keeps its existing retraction).
What are the steps per mm for a BMG extruder?
415 steps/mm (the E-steps value) is Bondtech’s figure for a BMG on a 1.8° stepper motor at 16 microsteps. Double it for each change that doubles the steps: 830 at 32 microsteps or with a 0.9° motor, 1660 with both. It is a starting point, so calibrate it with a 50 mm extrude.
Bondtech’s rule: “If the micro-stepping is double, eg. 32bit, double also the e-steps value,” and if the motor’s step angle is half (0.9°), double it as well. Klipper’s rotation_distance stays the same in both cases, as long as full_steps_per_rotation matches the motor. Sorted by steps/mm:
| Motor | Microsteps | Marlin steps/mm | Klipper rotation_distance |
With gear_ratio: 50:17 |
|---|---|---|---|---|
| 1.8° (200 full steps) | 16 | 415 | 7.711 | 22.679 |
| 1.8° (200 full steps) | 32 | 830 | 7.711 | 22.679 |
| 0.9° (400 full steps) | 16 | 830 | 7.711, with full_steps_per_rotation: 400 |
22.679, with full_steps_per_rotation: 400 |
| 0.9° (400 full steps) | 32 | 1660 | 7.711, with full_steps_per_rotation: 400 |
22.679, with full_steps_per_rotation: 400 |
Calibrated values land close to these: Marlin’s example configuration for an Artillery Sidewinder X1 with a BMG and an LDO 0.9° motor uses 838, 1% above 830. The number is high because the BMG gears the motor down about 3:1. Moving a stock Ender 3 from its 93 steps/mm is covered in Ender 3 extruder upgrades.
BMG clones. Clones copy the gearing. 3DEA’s “Cloned BMG Extruder” listing describes “internal 3:1 ratio gears” but gives no E-steps value, and Marlin’s Elegoo Neptune 2 example sets 415 when its “BMG-like extruder” option is on. Start a clone at 415 steps/mm or rotation_distance: 7.711, then calibrate. Klipper’s guide gives the reason for any extruder: drive gear grip varies between printers and “can even vary between filament spools”. Genuine and clone units are compared on the BMG extruder page.
What is the BMG extruder rotation distance in Klipper?
7.711 is the BMG rotation distance in Klipper, used with no gear_ratio line; Bondtech gives it as 200 × 16 ÷ 415 = 7.71. To write the gears out instead, set gear_ratio: 50:17 with rotation_distance: 22.679. Both equal 415 steps/mm. Neither changes with microsteps, nor with a 0.9° motor if full_steps_per_rotation is set to match.
Klipper’s formula, from its rotation distance guide:
rotation_distance = full_steps_per_rotation × microsteps ÷ steps_per_mm
= 200 × 16 ÷ 415 = 7.711With gear_ratio set, Klipper reads rotation_distance as the filament moved by one turn of the final (large) gear rather than the motor, so the value is multiplied by the ratio:
rotation_distance with gear_ratio = 7.711 × 50 ÷ 17 = 22.679Why 50:17 and not 3:1: Klipper notes that BMG gears “are advertised as ‘3:1’ but actually use ‘50:17’ gearing”, and Bondtech confirms the “BMG / DDX gearing ratio is 50:17”. In Klipper’s notation that is a 50-tooth gear driven by a 17-tooth motor pinion. Bondtech itself recommends rotation_distance alone over gear_ratio; the two forms move the motor identically, so pick one and calibrate it.
Use both lines or neither. Klipper multiplies the steps by gear_ratio, so 7.711 with gear_ratio: 50:17 pushes 2.94 times too much filament, and 22.679 without it pushes 34% of what the slicer asks for.
Published Klipper configs that use the 50:17 form, sorted by rotation_distance:
| Config | gear_ratio |
rotation_distance |
Equivalent steps/mm at 16 microsteps |
|---|---|---|---|
| Klipper’s Tevo Flash example, tested on a printer “using a Bondtech BMG extruder” | 50:17 | 22.598 | 416.5 |
| Voron Design’s Voron 2.4 and Trident configs, the “Afterburner/Clockwork (BMG Gear Ratio)” option | 50:17 | 22.6789511 | 415.0 |
| Klipper’s HiPrecy Leo example, “Based on default 415 steps/mm” | 50:17 | 23.133 | 406.9 |
The HiPrecy Leo’s 23.133 is 415 converted with the advertised 3:1 (7.711 × 3), so paired with 50:17 it starts 2% low. Calibration corrects either.
BMG extruder Klipper config
Paste these lines into your existing [extruder] section, replacing any line with the same name. Pins, heater and thermistor stay as they are.
[extruder]
# Keep from your current [extruder]: step_pin, dir_pin, enable_pin,
# heater_pin, sensor_type, sensor_pin, control, pid_Kp, pid_Ki, pid_Kd,
# min_temp, max_temp, min_extrude_temp, nozzle_diameter, filament_diameter.
# If the filament backs out, add or remove the "!" before the dir_pin pin.
microsteps: 16
full_steps_per_rotation: 200 # 400 for a 0.9° motor; rotation_distance stays 7.711
rotation_distance: 7.711 # Bondtech: 200 × 16 ÷ 415. Calibrate it.
# Or write the gears out. Use both lines, never only one:
#gear_ratio: 50:17
#rotation_distance: 22.679
#pressure_advance: 0.0 # tune it (step 5 below), then set the result hereThe BMG ships without a motor, so set the driver’s run_current (amps RMS in Klipper) to suit yours. Bondtech lists a maximum input current of 0.8 A for the 22 mm motor it sells alongside the BMG and 0.7 A per phase for its 25 mm motor. Klipper’s tuning tip is to prefer higher current as long as the motor stays warm rather than painful to touch.
BMG extruder Marlin settings
Send these from a terminal (OctoPrint, Pronterface or a G-code file printed from the SD card):
M92 E415 ; Bondtech's steps/mm for a 1.8° motor at 16 microsteps
M500 ; save to EEPROM
M92 ; report the steps/mm to check themTo build it into the firmware instead, change the last value of DEFAULT_AXIS_STEPS_PER_UNIT, as Bondtech’s CR-10S firmware does with { 80, 80, 400, 415 } (keep your own X, Y and Z values), and flip INVERT_E0_DIR if the motor runs backwards.
If M500 does not survive a power cycle, the firmware cannot save settings; Bondtech names the stock Ender-3, Ender-3 Pro, Ender-5 and CR-10. Its fix is to add M92 E415 to the slicer’s start G-code after G28 and leave it there. One drawback, in Bondtech’s words: filament loads and unloads from the printer’s menu “will require 3 times more repetitions”, because the printer uses the old value until a print’s start G-code sets 415.
How to set up a BMG extruder in Marlin and Klipper
- Set the steps or rotation distance. In Marlin, send
M92 E415, thenM500. In Klipper, setrotation_distance: 7.711under[extruder]and runFIRMWARE_RESTART. For 32 microsteps or a 0.9° motor, use the table above. - Check the direction. Heat the hotend to printing temperature, load filament and extrude 10 mm with
G91, thenG1 E10 F300. If the filament moves up, reverse the motor: flipINVERT_E0_DIRin Marlin and reflash, add or remove the!before the Klipperdir_pinand restart, or swap the two wires of one motor coil with the printer off. A BMG often turns the other way from the extruder it replaces (Bondtech says the motor “needs to be reversed” for its Creality kit), but not on every printer, so test rather than assume. - Calibrate the steps. Use the filament you print most. With the hotend hot, mark the filament about 70 mm above the extruder inlet and measure that distance with calipers. Send
G91, thenG1 E50 F60, which takes about 50 seconds; a faster extrude skews the result. The length that went in is the first distance minus the new one. New Marlin steps/mm = old × 50 ÷ that length; new Klipperrotation_distance= old × that length ÷ 50, rounded to three decimals. Say 48.5 mm went in: 415 × 50 ÷ 48.5 = 427.8 steps/mm, or 7.711 × 48.5 ÷ 50 = 7.480. Repeat if it was off by more than about 2 mm, and save withM500or in printer.cfg. - Set retraction for the mount. On a direct drive mount, start at 0.8 mm at 40 mm/s. On a Bowden mount, keep the retraction your printer already uses (details below).
- Tune pressure or linear advance. In Klipper, run the tower test in Klipper’s pressure advance guide and save the result as
pressure_advance. In Marlin, print the K-factor pattern from Marlin’s linear advance guide and addM900 K<value>to the start G-code (the firmware needsLIN_ADVANCEenabled).
What retraction settings work with a BMG extruder?
0.8 mm at 40 mm/s is the retraction in Bondtech’s PLA profile for its BMG direct drive kit on the Creality CR-10 and CR-10S, so use it as the direct drive starting point. On a Bowden tube, a BMG retracts like any Bowden extruder, so keep the length your printer’s Bowden profile already uses and tune from there.
Bondtech publishes no general BMG retraction table, so only the first row below comes from a BMG profile. The other rows are general figures, not BMG-specific ones: Prusa’s limit for its own direct drive printers, then Prusa’s MINI default and Cura’s default for Bowden. Sorted by length:
| Mount | Starting retraction | Source |
|---|---|---|
| Direct drive | 0.8 mm at 40 mm/s, with a 0.2 mm Z-hop | Bondtech’s Simplify3D PLA profile for its CR-10 and CR-10S direct drive kit |
| Direct drive, upper limit | 2 mm at most | Prusa, for its MK2.5 and MK3 series |
| Bowden | 3.2 mm | Prusa’s default for the Bowden MINI and MINI+ |
| Bowden | 6.5 mm | Cura’s default, which its Creality Ender-3 profile uses |
Prusa gives the reason for the gap: the MINI’s presets are “much longer” because of its Bowden extruder. The 0.8 mm sits at the bottom of the 0.8 to 1.5 mm range in adding direct drive to an Ender 3. For an all-metal hotend, see retraction for all-metal hotends.
In Marlin, check the extruder’s speed limit first. Bondtech’s own CR-10S firmware caps it at 25 mm/s (M203), below the 40 mm/s in its profile. To retract at 40 mm/s, send M203 E40 and M500.
To let Klipper handle retraction, add this section and enable firmware retraction (G10/G11) in the slicer:
[firmware_retraction]
retract_length: 0.8 # direct drive; on a Bowden, your profile's length
retract_speed: 40Klipper’s defaults are 0 mm at 20 mm/s, so a bare [firmware_retraction] section retracts nothing. Change values per filament with SET_RETRACTION, for example SET_RETRACTION RETRACT_LENGTH=1.0.
BMG extruder max speed and acceleration
Firmware configs for BMG-equipped printers set the extruder’s maximum speed at 25 to 70 mm/s and its maximum acceleration at 5000 to 10000 mm/s². These are limits written into config files (Bondtech’s own CR-10S Marlin firmware and Marlin’s example configurations), not ratings of the extruder: Bondtech’s BMG page and datasheet list no maximum speed or acceleration. Sorted by maximum speed:
| Config | Max E speed (M203 E) |
Max E acceleration (M201 E) |
Retract acceleration (M204 R) |
|---|---|---|---|
| Bondtech’s Marlin firmware for the CR-10S with its BMG kit | 25 mm/s | 5000 mm/s² | 500 mm/s² |
| Marlin example, Artillery Sidewinder X1 with a BMG and 0.9° motor | 40 mm/s | 10000 mm/s² | 10000 mm/s² |
| Marlin example, Elegoo Neptune 2 (same with or without its BMG option) | 70 mm/s | 10000 mm/s² | 1000 mm/s² |
| Klipper examples: Tevo Flash with a Bondtech BMG, HiPrecy Leo with 50:17 gearing | Not set (calculated) | Not set (calculated) | Not set (calculated) |
In Marlin the extruder has three limits. M203 E is the maximum E feedrate. M201 E is the maximum E acceleration, but Marlin applies it only to print moves where another axis also moves. Retractions and recoveries, where only E moves, use M204 R. Save changes with M500.
In Klipper, retractions and extrude-only moves follow max_extrude_only_velocity and max_extrude_only_accel under [extruder]. Left unset, as in Klipper’s BMG examples, they are calculated to match an XY printing move with a cross-section of 4 × nozzle diameter². Set them only if you need a specific limit, for example max_extrude_only_velocity: 40 to allow 40 mm/s retractions on a printer whose calculated value is lower. Settings for other extruders are on the extruder upgrades hub.
Sources
- Bondtech, BMG Extruder IDGA (e-steps and Klipper settings) (accessed November 4, 2026)
- Bondtech, BMG Extruder datasheet (PDF) (accessed November 4, 2026)
- Bondtech, Firmware Updates For Bondtech Extruders (accessed November 4, 2026)
- Bondtech, Firmware Updates For Creality 3D Printers (accessed November 4, 2026)
- Bondtech, Firmware Updates For Wanhao 3D Printers (accessed November 4, 2026)
- Bondtech, Creality3D CR-10/Ender3 Upgrade Kit (accessed November 4, 2026)
- Bondtech support, 00. Changing Machine Settings (DDX for Creality) (accessed November 4, 2026)
- Bondtech support, 02. Installing DDX On Creality Ender-3 (accessed November 4, 2026)
- Bondtech on GitHub, Bondtech-CR10s Marlin firmware configuration (CR10s.h) (accessed November 4, 2026)
- Bondtech on GitHub, Bondtech-CR10s Simplify3D profiles (Bondtech CR-10 DirectDrive - PLA) (accessed November 4, 2026)
- Bondtech, Nema17 22mm Stepper Motor 18mm D-shaft (accessed November 4, 2026)
- Bondtech, Nema17 25mm Stepper Motor 18mm O-shaft (accessed November 4, 2026)
- 3DEA, Dual Drive extruder: Cloned BMG Extruder CR10 1.75mm (accessed November 4, 2026)
- Klipper documentation, Rotation distance (accessed November 4, 2026)
- Klipper documentation, Configuration reference (accessed November 4, 2026)
- Klipper documentation, TMC drivers (accessed November 4, 2026)
- Klipper documentation, Pressure advance (accessed November 4, 2026)
- Klipper, example config printer-tevo-flash-2018.cfg (accessed November 4, 2026)
- Klipper, example config printer-hiprecy-leo-2019.cfg (accessed November 4, 2026)
- Voron Design on GitHub, Voron 2.4 Octopus printer config (Voron2_Octopus_Config.cfg) (accessed November 4, 2026)
- Voron Design on GitHub, Voron Trident Octopus printer config (Trident_Octopus_Config.cfg) (accessed November 4, 2026)
- Marlin documentation, M92: Set Axis Steps-per-unit (accessed November 4, 2026)
- Marlin documentation, M500: Save Settings (accessed November 4, 2026)
- Marlin documentation, M203: Set Max Feedrate (accessed November 4, 2026)
- Marlin documentation, M201: Print / Travel Move Limits (accessed November 4, 2026)
- Marlin documentation, M204: Set Starting Acceleration (accessed November 4, 2026)
- Marlin documentation, Linear Advance (accessed November 4, 2026)
- Marlin Firmware, example Configuration.h for the Artillery Sidewinder X1 (0.9 BMG - E3D V6) (accessed November 4, 2026)
- Marlin Firmware, example Configuration.h for the Elegoo Neptune 2 (accessed November 4, 2026)
- Marlin Firmware, Two Trees BlueR example configurations (README) (accessed November 4, 2026)
- Marlin Firmware, example Configuration.h for the Creality Ender-3 (CrealityV422) (accessed November 4, 2026)
- Prusa Knowledge Base, Stringing and oozing (accessed November 4, 2026)
- Ultimaker Cura, fdmprinter.def.json (default retraction distance) (accessed November 4, 2026)
- Ultimaker Cura, creality_base.def.json (retraction speed warning) (accessed November 4, 2026)