Skip to content
DerAndere edited this page Sep 22, 2021 · 113 revisions

Marlin2ForPipetBot firmware

Copyright 2018 - 2021 DerAndere

Marlin2ForPipetBot firmware for multi-axis 3D printers, CNC machines and lab robots

Multi-axis-Marlin firmware was merged into upstream MarlinFirmware/Marlin bugfix-2.0.x on 5th June 2021, so support for up to 6 non-extruder axes will be part of an upcoming release of official MarlinFirmware/Marlin. Code from this repository (DerAndere1/Marlin) may contain additional multi axis feautures, but official Marlin will be more up to date in general and contain less bugs. Use nightly builds of official MarlinFirmware/Marlin, Version "Marlin 2.0 with bug fixes (bugfix-2.0.x)", whenever possible.

Marlin2ForPipetBot is a firmware for multi-axis 3D printers, CNC machines and lab robots (liquid handling robots, "pipetting robots"). Supports up to six (6) non-extruder axes plus tools (extruders / laser / mill / hobby servos / hot wire foam cutters). By default the firmware is suitable for cartesian machines where only axes X, Y, Z contribute to tool-positioning, while additional axes can be used to move toolchangers or tools such as pumps. Only one kinematic model with more than 3 non-extruder-axes that contribute to tool-positioning is currently supported: FOAMCUTTER_XYUV (see below). If you have a different machine where additional axes contribute to tool positioning, you currently have to implement your own kinematic model or develop a post-processor that translates desired tool positions to compatible G-code.

Additional documentation can be found on the PipetBot-A8 project page that is part of the website by DerAndere. Issues related to multi-axis support can be reported to DerAndere1 here. If you want to add support for more hardware or optimize compatibility with other software features, please first consider to fork MarlinFirmware/Marlin and contribute directly to upstream MarlinFirmware/Marlin according to their guidelines. If merging your changes into MarlinFirmware/Marlin is not an option, you are welcome to (re)base your changes onto the 6axis_dev branch of DerAndere1/Marlin and create pull requests tageting the 6axis_dev branch.
Please test this firmware and let us know if it misbehaves in any way.

Volunteers are standing by!

Not for production use. Use with caution!

The branch 6axis_dev is based on MarlinFirmware/Marlin after the release of version 2.0.8.1 (bugfix-2.0.x from 2021-05-24, https://github.com/MarlinFirmware/Marlin/commit/dd4990252e891cdfe56cb7d6e3bbe1e6289be649 or later)

Multi-axis-Marlin supports up to six non-extruder axes (LINEAR_AXES) plus extruders (e.g. XYZABCE or XYZUVWE).

Only a subset of the Marlin G-code dialect is supported:

  • G1, G28, G90, G91, G92, T0, T1
  • M17, M18, M43, M85, M92, M111, M114 (partially), M201, M202, M203, M206 (partially), M500, M501, M502, M503, M504

Default axis names are:

LINEAR_AXES Default axis codes
3 X, Y, Z, E
4 X, Y, Z, A, E
5 X, Y, Z, A, B, E
6 X, Y, Z, A, B, C, E

Example syntax for movement (G-code G1) for a configuration with #define LINEAR_AXES 6:

G1 [Xx.xxxx] [Yy.yyyy] [Zz.zzzz] [Aa.aaaa] [Bb.bbbb] [Cc.cccc] [Ee.eeee] [Ff.ffff]

Configuration

Configuration is done by editing the file Marlin/Configuration.h. E.g. change #define LINEAR_AXES 3

to:

#define LINEAR_AXES 4

Important options are:

FOAMCUTTER_XYUV

Define FOAMCUTTER_XYUV kinematics for a hot wire cutter with parallel horizontal axes X, U where the hights of the two wire ends are controlled by parallel axes Y, V. Currently only works with LINEAR_AXES 5. A dummy pin number can be assigned to pins for the Z axis. Leave FOAMCUTTER_XYUV disabled for default behaviour (coordinated movement of all axes).

LINEAR_AXES

LINEAR_AXES: The number of axes that are not used for extruders (axes that benefit from endstops and homing). LINEAR_AXES > 3 requires definition of [[I, [J, [K]]]_STEP_PIN, [I, [J, [K]]]_ENABLE_PIN, [I, [J, [K]]]_DIR_PIN, [I, [J, [K]]]_STOP_PIN (for available pins, see the pins/pins_YOURMOTHERBOARD.h file for your board), USE_[I, [J, [K]]][MIN || MAX]_PLUG, [I, [J, [K]]]_ENABLE_ON, DISABLE_[I, [J, [K]]], [I, [J, [K]]]_MIN_POS, [I, [J, [K]]]_MAX_POS, [I, [J, [K]]]_HOME_DIR, possibly DEFAULT_[I, [J, [K]]]JERK, and definition of the respective values of DEFAULT_AXIS_STEPS_PER_UNIT, DEFAULT_MAX_FEEDRATE, DEFAULT_MAX_ACCELERATION, HOMING_FEEDRATE_MM_M, AXIS_RELATIVE_MODES, MICROSTEP_MODES, MANUAL_FEEDRATE and possibly also values of HOMING_BUMP_DIVISOR,
HOMING_BACKOFF_POST_MM, BACKLASH_DISTANCE_MM. For bed-leveling, NOZZLE_TO_PROBE_OFFSETS has to be extended with elemets of value 0 until the number of elements is equal to the value of LINEAR_AXES.

Allowed values: [3, 4, 5, 6]

AXIS4_NAME

AXIS4_NAME, AXIS5_NAME, AXIS6_NAME: Axis codes for additional axes: This defines the axis code that is used in G-code commands to reference a specific axis.

  • 'A' for rotational axis parallel to X
  • 'B' for rotational axis parallel to Y
  • 'C' for rotational axis parallel to Z
  • 'U' for secondary linear axis parallel to X
  • 'V' for secondary linear axis parallel to Y
  • 'W' for secondary linear axis parallel to Z

Regardless of the settings, firmware-internal axis names are I (AXIS4), J (AXIS5), K (AXIS6).

Allowed values: ['A', 'B', 'C', 'U', 'V', 'W']

EVENT_GCODE_TOOLCHANGE_TO

EVENT_GCODE_TOOLCHANGE_TO, EVENT_GCODE_TOOLCHANGE_T1: Event Gcodes to be executed when the printer receives toolchange commands T0 or T1, respectively.

Allowed values: a string containing G-code commands seperated by \n, e.g:

#define EVENT_GCODE_TOOLCHANGE_TO "G28 A\nG28 B\nG1 A0 B5 F100"

Building Multi-axis-Marlin firmware

To build Multi-axis-Marlin firmware you'll need PlatformIO. The MarlinFirmware team has posted detailed instructions on Building Marlin with PlatformIO.

The most stable Marlin Firmware with support for up to 6 axes is current MarlinFirmware/Marlin. All contributions that are not specific to pipetting robots should be rebased onto https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0 and a pull requests targeting https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x should be prepared.

The different branches in the git repository https://github.com/DerAndere1/Marlin reflect different stages of development:

Supported Configuration options:

Currently the configs by hobiseven are the only ones that were tested. Below I list Individual features that may work (although not all combinations). All other config settings currently should be treated as not supported yet.

  • *_DRIVER_TYPE A4988
  • *_DRIVER_TYPE DRV8825
  • *_DRIVER_TYPE TMC5160
  • *_DRIVER_TYPE TMC2226
  • *_DRIVER_TYPE TMC2209
  • LINEAR_AXES 3
  • LINEAR_AXES 4
  • LINEAR_AXES 5
  • LINEAR_AXES 6
  • EXTRUDERS 0
  • EXTRUDERS 1
  • EXTRUDERS 2
  • DEBUG_LEVELING
  • DEBUG_PINS
  • [dogm display (possibly not all menus work flawlessly with axes I,J,K)]
  • One stepper driver per axis
  • AUTO_BED_LEVELING_3POINT

Boards:

  • ANET_10
  • RAMPS_14_EFB
  • MKS Rumba32
  • ALFAWISE_U20 (?)
  • ALFAWISE_U30 (?)
  • Teensy 3.6
  • BTT GTR V1.0 with M5 V1.0 board

Credits

Multi-axis support for Marlin firmware is developed by:

DerAndere [@DerAndere1] - Germany
Garbriel Beraldo [@GabrielBeraldo] - Brasil
Olivier Briand [@hobiseven] - France
Wolverine [@MohammadSDGHN] - Undisclosed 
bilsef [@bilsef] - Undisclosed 
FNeo31 [@FNeo31] - Undisclosed
Scott Lahteine [@thinkyhead] - USA
HendrikJan-5D [@HendrikJan-5D] - Undisclosed

Multi-axis-Marlin firmware is based on Marlin firmware.

The current Marlin dev team consists of:

Scott Lahteine [@thinkyhead] - USA
Roxanne Neufeld [@Roxy-3D] - USA
Bob Kuhn [@Bob-the-Kuhn] - USA
Chris Pepper [@p3p] - UK
João Brazio [@jbrazio] - Portugal
Erik van der Zalm [@ErikZalm] - Netherlands

Contributions:

Author Contact Contribution
DerAndere @DerAndere1 main developer of multi-axis support, idea, initial implementation, added EVENT_GCODE_TOOLCHANGE_T0 and EVENT_GCODE_TOOLCHANGE_T1 feature, bugfixes
Gabriel Beraldo @GabrielBeraldo hardware debugging, bugfixes yielding first working prototype (make additional axes move, fix EEPROM)
Olivier Briand @hobiseven testing, added experimental compatibility with different configurations, code review, FOAMCUTTER_XYUV kinematics
Wolverine @MohammadSDGHN added experimental compatibility with different configurations (BigTreeTech SKR Pro 1.1, Trinamic TMC drivers, StealthChop, sensorless homing)
bilsef @bilsef testing, code review, bugfixes (fix movement of additional axes, fix types.h, fix EEPROM)
FNeo31 @FNeo31 added experimental drilling cyles (G81, G82, G83)
HendrikJan-5D @HendrikJan-5D testing bed leveling and Trinamic TMC, bugfixes yielding first working 10 axis prototype
Scott Lahteine @thinkyhead code review, refactoring
MarlinFirmware @MarlinFirmware Marlin 3D Printer firmware

Licensing information

/**
 * Multi-axis-Marlin firmware
 * Copyright 2018 - 2021 DerAndere and other Multi-axis-Marlin authors
 *
 * Based on:
 * Marlin 3D Printer Firmware
 * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 *
 * Based on Sprinter and grbl.
 * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

Clone this wiki locally