-
-
Notifications
You must be signed in to change notification settings - Fork 21
Home
Copyright 2018 - 2021 DerAndere
Multi-axis-Marlin 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 can be reported to DerAndere1 here. If you want to add support with more hardware or optimize compatibility with other software features, you are welcome to (re)base your changes onto the 6axis_dev branch and create pull requests.
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. It features the best 6axis support available and is intended to be frequently rebased on the latest [MarlinFirmware/Marlin bugfix-2.0.x. Currently it is based on Marlin bugfix-2.0.x from 2020-08-22, https://github.com/MarlinFirmware/Marlin/commit/434e43cc42f782d5fbe89db21f97571c71ad62f3 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. A long-time goal is to bring multi-axis support 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. Because this branch is in heavy development, it is broken most of the time. C/C++-developers are welcome to test and contribute pull-requests to get the pull request merged into 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, clean-up |
| MarlinFirmware | @MarlinFirmware | Marlin 3D Printer firmware |
/**
* Multi-axis-Marlin firmware
* Copyright 2020 DerAndere and other Multi-axis-Marlin authors
*
* Based on:
* Marlin 3D Printer Firmware
* Copyright (c) 2020 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/>.
*
*/