-
-
Notifications
You must be signed in to change notification settings - Fork 21
Home
Copyright 2018 - 2021 DerAndere
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 is done by editing the file Marlin/Configuration.h. E.g. change
#define LINEAR_AXES 3
to:
#define LINEAR_AXES 4
Important options are:
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:
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, 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.
Allowed values: [3, 4, 5, 6]
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']
To build Multi-axis-Marlin firmware you'll need PlatformIO. The MarlinFirmware team has posted detailed instructions on Building Marlin with PlatformIO.
The different branches in the git repository https://github.com/DerAndere1/Marlin reflect different stages of development:
-
6axis_dev branch is the current feature branch used for testing of Multi-axis Marlin. Currently it is based on Marlin bugfix-2.0.x from 2021-05-24, https://github.com/MarlinFirmware/Marlin/commit/dd4990252e891cdfe56cb7d6e3bbe1e6289be649 or later. If you want to participate in the development, (re)base your contributions on this branch. Pull requests targeting the 6axis_dev branch are very welcome.
-
6axis_PR1 branch is like 6axis_dev but without config files. This was merged into upstream MarlinFirmware/Marlin (pull request https://github.com/MarlinFirmware/Marlin/pull/19112). Currently, this branch is more advanced than 6axis_dev due to cooperation with upstream MarlinFirmware/Marlin.
-
bf2_6axis_dev14 branch and similar: Untested internal development branches have consecutivly numbered branch names. Do not expect that anything works.
-
Marlin2ForPipetBot branch is more stable but outdated. This branch is the release branch for tagged releases of Marlin2ForPipetBot firmware. Currently it is based on Marlin bugfix-2.0.x from 2020-08-22, https://github.com/MarlinFirmware/Marlin/commit/434e43cc42f782d5fbe89db21f97571c71ad62f3 or later.
-
Marlin2ForPipetBot_dev is used to develop and test bugfixes for Marlin2ForPipetBot. After successful testing, it will be merged into Marlin2ForPipetBot.
-
Other branches: Deprecated legacy code.
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
- LINEAR_AXES 3
- LINEAR_AXES 4
- LINEAR_AXES 5
- 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
Boards:
- ANET_10 // for optiboot bootloader, use default_envs = melzi_optiboot or sanguino1284p (in avr.ini env:sanguino1284p, add upload_speed = 115200)
- RAMPS_14_EFB
- MKS Rumba32
- ALFAWISE_U20 (?)
- ALFAWISE_U30 (?)
- Teensy 3.6
- BTT GTR V1.0 with M5 V1.0 board
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
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
| 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) |
| Scott Lahteine | @thinkyhead | code review, refactoring |
| MarlinFirmware | @MarlinFirmware | Marlin 3D Printer firmware |
/**
* 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/>.
*
*/