GithubHelp home page GithubHelp logo

derandere1 / marlin Goto Github PK

View Code? Open in Web Editor NEW

This project forked from marlinfirmware/marlin

51.0 16.0 19.0 228.58 MB

Optimized firmware for RepRap 3D printers based on the Arduino platform. The branch Marlin2ForPipetBot is optimized firmware for cartesian robots (lab robots, also known as liquid handling robots or pipetting robots)

Home Page: https://derandere.gitlab.io/pipetbot-a8

License: GNU General Public License v3.0

C++ 59.99% C 37.73% Makefile 0.20% Shell 0.57% Python 0.87% CMake 0.03% OpenSCAD 0.03% G-code 0.01% HTML 0.20% CSS 0.03% JavaScript 0.27% Assembly 0.05% NASL 0.01% GDB 0.01% Dockerfile 0.01% Roff 0.02% BitBake 0.01%
robotics robot motion-control firmware 3d-printing controller reprap avr arduino control g-code

marlin's Introduction

Marlin2ForPipetBot 3D Printer and Lab Robot CNC Firmware

Additional documentation can be found in the repository DerAndere1/Marlin at https://github.com, the Wiki or on the PipetBot-A8 project homepage that is part of the authors homepage. For multi-axis CNC machines and lab robots (liquid handling robots, "pipetting robots"). Please test this firmware and let us know if it misbehaves in any way. Volunteers are standing by!

Marlin supports up to nine non-extruder axes plus extruders (e.g. XYZABCUVW+E or XYZABCW+E or XYZCUVW+E or XYZABC+E or XYZUVW+E).

G-code

The G-code syntax of Marlin2ForPipetBot closely resembles that of LinuxCNC (the successor of NIST RS274NGC interpreter - version 3). Here is a list of G-codes that deviated in official MarlinFirmware/Marlin and that are brought more in line with LinuxCNC syntax:

  • F (feedrate for G0, G1, G2, G3, G4, G5, G81, G82, G83)
  • G10 (set offsets)
  • G43 (simple tool length compensation)
  • G49 (cancel tool length compensation and cancel tool centerpoint control)
  • G81, G82, G83 (drilling canned cycles)

New G-codes:

  • G43.4 (tool centerpoint control)

G1 (Linear Move)

Usage

Example syntax for movement (G-code G1) with 9 axes plus extruder (default axis names: XYZABCUVW+E):

G1 [Xx.xxxx] [Yy.yyyy] [Zz.zzzz] [Aa.aaaa] [Bb.bbbb] [Cc.cccc] [Uu.uuuu] [Vv.vvvv] [Ww.wwww] [Ee.eeee] [Ff.ffff]

Parameters:

X, Y, Z

Position in the cartesian coordinate system consisting of primary linear axes X, Y and Z. Unit: mm (after G-code G21) or imperial inch (after G-code G20)

A, B, C

Angular position in the pseudo-cartesian coordinate system consisting of rotational axes A, B, and C that are parallel to axes X, Y and Z, respectively. Unit: degrees

U, V, W

Position in the cartesian coordinate system consisting of secondary linear axes U, V and W that are parallel to axes X, Y and Z. Unit: mm (after G-code G21) or imperial inch (after G-code G20)

E

Distance the E stepper should move. Unit: mm (after G-code G21) or imperial inch (after G-code G20)

F

Feedrate as defined by LinuxCNC:

  • For motion involving one or more of the X, Y, and Z axes (with or without motion of other axes), the feed rate means length units per minute along the programmed XYZ path, as if the other axes were not moving.
  • For motion involving one or more of the secondary linear axes (axis names 'U', 'V', or 'W') with the X, Y , and Z axes not moving (with or without motion of rotational axes), the feed rate means length units per minute along the programmed UVW path (using the usual Euclidean metric in the UVW coordinate system), as if the rotational axes were not moving.
  • For motion involving one or more of the rotational axes (axis names 'A', 'B' or 'C') with linear axes not moving, the rate is applied as follows. Let dA, dB, and dC be the angles of rotation around axes A, B, and C axes, respectively, in units of degrees. Let D = sqrt((dA)^2 + (dB)^2 + (dC)^2). Conceptually, D is a measure of total angular motion, using the usual Euclidean metric. The motion involving rotational axes should be a coordinated linear motion so that the elapsed total time (in minutes) from the start to the end of the motion is T = D / F plus any time required for acceleration or deceleration.

To change the feed rate interpretation the option ARTICULATED_ROBOT_ARM can be defined. With that option enabled, feed reference are all axes. This means that in all cases all axes are moved in coordinated linear motion so that the time (in minutes) required for the move is T = sqrt((dA)^2 + (dB)^2 + (dC)^2 + (dU)^2 + (dV)^2 + (dW)^2) / F plus any time for acceleration or deceleration.

G10 (Set offsets)

Set offsets. See the following references:

G43 (Tool Length Offset)

Enable simple tool length compensation. See the following references:

Notes

Currently, no H word is supported. The tool offsets (set by G10) for the current tool are applied.

G43.4 (Tool centerpoint control)

Enable tool centerpoint control. See the following references:

Notes

Currently, no H word is supported. The tool offsets (set by G10) for the current tool are applied.

G49 (Cancel tool length compensation)

Disable tool length compensation (G43) and disable tool centerpoint control (G43.4). Enter direct joint control mode. See the following references:

G81 (Drilling cycle)

Drilling cycle. See the following references:

Notes

  • Requires DRILLING_CANNED_CYCLES
  • Currently, no L word (repeat cycle) is supported.
  • Currently, only OLD_Z retract mode (G98) is supported.
  • Currently, this only works when the XY plane (G17) is active
  • Usually, all rotational axes must be in neutral (zero) position so that the table is oriented horizontally and the tool is oriented vertically.

G82 (Drilling cycle, dwell)

Drilling cycle with a dwell. See the following references:

Notes

  • Requires DRILLING_CANNED_CYCLES
  • Currently, no L word (repeat cycle) is supported.
  • Currently, only OLD_Z retract mode (G98) is supported.
  • Currently, this only works when the XY plane (G17) is active
  • Usually, all rotational axes must be in neutral (zero) position so that the table is oriented horizontally and the tool is oriented vertically.

G83 (Peck Drilling Cycle)

Peck drilling cycle. See the following references:

Notes

  • Requires DRILLING_CANNED_CYCLES
  • Currently, no L word (repeat cycle) is supported.
  • Currently, only OLD_Z retract mode (G98) is supported.
  • Currently, this only works when the XY plane (G17) is active
  • Usually, all rotational axes must be in neutral (zero) position so that the table is oriented horizontally and the tool is oriented vertically.

M665 (PENTA_AXIS configuration)

Configure PENTA_AXIS_TRT and PENTA_AXIS_HT geometry values.

Usage

M665 [X<MRZP-offset>] [Y<MRZP-offset>] [Z<MRZP-offset>] [S<segments-per-second>] [I<rotational-joint-offset>] [J<rotational-joint-offset>] [K<rotational-joint-offset>]

Parameters

Z<MRZP-offset>

Set the machine rotary zero point (MRZP) Z offset.

  • For 5 axis CNC machines with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the Z axis from machine zero point to the center of rotation. The center of rotation is usually the center of the top surface of the table.
  • For 5 axis CNC machines in head-table configuration (PENTA_AXIS_HT) this is the distance along the Z axis from the machine zero point to the horizontal centerline of the joint that tilts the tool head when all axes are in zero position.

See DEFAULT_MRZP_OFFSET_Z and see the definition of the pivot point (Pz) in reference https://linuxcnc.org/docs/html/motion/5-axis-kinematics.html

X<MRZP-offset>

Set the machine rotary zero point (MRZP) X offset. For 5 axis CNC machines with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the X axis from machine zero point to the center of rotation when all axes are in neutral (zero) position. The center of rotation is usually the center of the top surface of the table.

See DEFAULT_MRZP_OFFSET_X and see the definition of the pivot point (Px) in reference https://linuxcnc.org/docs/html/motion/5-axis-kinematics.html

Y<MRZP-offset>

Set the machine rotary zero point (MRZP) Y offset. For 5 axis CNC machines with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the Y axis from machine zero point to the center of rotation when all axes are in neutral (zero) position. The center of rotation is usually the center of the top surface of the table.

See the definition of the pivot point (Py) in reference https://linuxcnc.org/docs/html/motion/5-axis-kinematics.html

I<rotational-joint-offset>

Set the rotational joint X offset. For a 5 axis CNC machine with a tilting rotary table (PENTA_AXIS_TRT) with XYZBC axes this is the distance along the X axis from the vertical centerline of the joint of the rotary table to the horizontal centerline of the joint that tilts the table. Measured when all rotational axes are in neutral (zero) position so that the table is oriented horizontally.

See DEFAULT_ROTATIONAL_JOINT_OFFSET_X. Also, see definition of Dx in sections "5.3. Transformations for a xyzbc-trt machine with rotary axis offsets" and "7. Custom Kinematics Components" in this reference:

J<rotational-joint-offset>

Set the rotational joint Y offset. For a 5 axis CNC machine with a tilting rotary table (PENTA_AXIS_TRT) with XYZAC axes this is the distance along the Y axis from the vertical centerline of the joint of the rotary table to the horizontal centerline of the joint that tilts the table. Measured when all rotational axes are in neutral (zero) position so that the table is oriented horizontally.

See DEFAULT_ROTATIONAL_JOINT_OFFSET_Y. Also, see definition of Dy in sections "5.3. Transformations for a xyzbc-trt machine with rotary axis offsets" and "7. Custom Kinematics Components" in this reference:

K<rotational-joint-offset>

Set the rotational joint Z offset. For a 5 axis CNC machine with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the Z axis from the surface at the top of the table to the horizontal centerline of the joint that tilts the table. Measured when all rotational axes are in neutral (zero) position so that the table is oriented horizontally.

See DEFAULT_ROTATIONAL_JOINT_OFFSET_Z. Also, see definition of Dz in sections "5.3. Transformations for a xyzbc-trt machine with rotary axis offsets" and "7. Custom Kinematics Components" in this reference:

M211 (Software Endstops)

Set whether printing should abort or moves should be clamped in the event of any software endstop being triggered. This provides a fast way to abort a print in the event of mechanical failure such as loose couplings, lost steps, diverted axes, binding, etc., which lead to axes being very far out of position.

Notes

  • Requires SOFTWARE_ENDSTOPS_* for at least one axis.

  • Use ENDSTOPS_ALWAYS_ON_DEFAULT or M120 to ensure that monitoring of limit switches is enabled.

Usage

M211 S<flag> H<flag>

Parameters

S<flag>

Whether (1) or not (0) to enable software endstops.

H<flag>

Whether (1) to abort machining on software endstops hit or whether to clamp moves to the software endstops (0). Requires ABORT_ON_SOFTWARE_ENDSTOP

Configuration

Configuration is done by editing the file Marlin/Configuration.h. E.g. change

//#define I_DRIVER_TYPE A4988

to:

#define I_DRIVER_TYPE A4988

The following is a list of options in Marlin2ForPipetBot that are relevant for machines with more than three axes or that deviate from those of MarlinFirmware/Marlin:

X_DRIVER_TYPE

X_DRIVER_TYPE, Y_DRIVER_TYPE, Z_DRIVER_TYPE, I_DRIVER_TYPE, J_DRIVER_TYPE, K_DRIVER_TYPE, U_DRIVER_TYPE, V_DRIVER_TYPE, W_DRIVER_TYPE: These settings allow Marlin to tune stepper driver timing and enable advanced options for stepper drivers that support them. You may also override timing options in Configuration_adv.h.

Use TMC2208/TMC2208_STANDALONE for TMC2225 drivers and TMC2209/TMC2209_STANDALONE for TMC2226 drivers.

Each driver is associated with an axis (internal axis identifiers: X, Y, Z, I, J, K, U, V, W) or an extruder (E0 to E7). Each axis gets its own stepper control and endstops depending on the following settings: [[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 until the number of elements is equal to the value of NUM_AXES.

Allowed values: [A4988, A5984, DRV8825, LV8729, L6470, L6474, POWERSTEP01, TB6560, TB6600, TMC2100, TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE, TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE, TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE, TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE]

AXIS4_ROTATES

AXIS4_ROTATES, AXIS5_ROTATES, AXIS6_ROTATES, AXIS7_ROTATES, AXIS8_ROTATES, AXIS9_ROTATES: If enabled, the corresponding axis is a rotational axis for which positions are specified in angular degrees. For moves involving only rotational axes, feedrate is interpreted in angular degrees.

AXIS4_NAME

AXIS4_NAME, AXIS5_NAME, AXIS6_NAME, AXIS7_NAME, AXIS8_NAME, AXIS9_NAME: Axis codes for additional axes: This defines the axis code that is used in G-code commands to reference a specific axis. Conventional axis names are as follows:

  • '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), U (AXIS7), V (AXIS8), W (AXIS9).

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

ARTICULATED_ROBOT_ARM

When enabled, feed rate (the F-word in G1 G-code commands) is interpreted with all axes as the feed reference. For compatibility with Marlin <= 2.0.9.3, grblHAL/grblHAL-core, Duet3D/RepRap-Firmware, synthetos/g2core and for compatibility with articulated robots (robot arms) for which inverse kinematics are not yet implemented in Marlin. For a detailed description of feedrate, see first section.

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 *_DRIVER_TYPE defined for 5 axes (X, Y, Z, I and J). A dummy pin number can be assigned to pins for the unused Z axis. Leave FOAMCUTTER_XYUV disabled for default behaviour (stepper velocities are calculated using multidimensional linear interpolation over all axes). Host software and CAM software for 4 axis foam cutters can be found at https://rckeith.co.uk/file-downloads/ and https://www.jedicut.com/en/download/ .

PENTA_AXIS_TRT

Define PENTA_AXIS_TRT kinematics for a 5 axis CNC machine in tilting-rotating-table configuration to add support for tool center point control (see section G43.4 tool center point control). These machines have 3 mutually orthogonal prismatic ("linear") joints aligned with axes XYZ plus a rotary table (C axis) mounted on a tilting table (A or B axis). Two different machine geometries of this type are supported:

  • XYZAC TRT machine: The rotational joint of the tilting table is parallel to the X axis and the joint that rotates the table is parallel to the Z axis when all axes are at zero position. This requires AXIS4_NAME 'A' and AXIS5_NAME 'C'.
  • XYZBC TRT machine: The rotational joint of the tilting table is parallel to the Y axis and the joint that rotates the table is parallel to the Z axis when all axes are at zero position. This requires AXIS4_NAME 'B'and AXIS5_NAME 'C' (see section AXIS4_NAME).

PENTA_AXIS_HT

Define PENTA_AXIS_HT kinematics for a 5 axis CNC machine in head-table configuration to add support for tool center point control (see section G43.4 tool center point control). These machines have 3 mutually orthogonal prismatic ("linear") joints aligned with axes XYZ plus a swivel head (A or B axis) and a horizontal rotary table (C axis). There are two possible machine geometries:

  • XYZAC head-table machine: The rotational joint of the swivel head is parallel to the X axis when all axes are at zero position. This requires AXIS4_NAME 'A' and AXIS5_NAME 'C'.
  • XYZBC head-table machine: The rotational joint of the swivel head is parallel to the Y axis when all axes are at zero position. This requires AXIS4_NAME 'B'and AXIS5_NAME 'C' (see section AXIS4_NAME).

DEFAULT_MRZP_OFFSET_Z

Machine rotary zero point (MRZP) Z offset.

  • For 5 axis CNC machines with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the Z axis from machine zero point to the center of rotation. The center of rotation is usually the center of the top surface of the table when all axes are in zero position.
  • For 5 axis CNC machines in head-table configuration (PENTA_AXIS_HT) this is the distance along the Z axis from the machine zero point to the horizontal centerline of the joint that tilts the tool head when all axes are in zero position.

See the definition of the pivot point (Pz) in this reference:

DEFAULT_MRZP_OFFSET_X

Machine rotary zero point (MRZP) X offset. For 5 axis CNC machines with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the X axis from machine zero point to the center of rotation when all axes are in neutral (zero) position. The center of rotation is usually the center of the top surface of the table.

See the definition of the pivot point (Px) in this reference:

DEFAULT_MRZP_OFFSET_Y

Machine rotary zero point (MRZP) Y offset. For 5 axis CNC machines with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the Y axis from machine zero point to the center of rotation when all axes are in neutral (zero) position. The center of rotation is usually the center of the top surface of the table.

See the definition of the pivot point (Pz) in this reference:

DEFAULT_ROTATIONAL_JOINT_OFFSET_X

For a 5 axis CNC machine with a tilting rotary table (PENTA_AXIS_TRT) with XYZBC axes this is the distance along the X axis from the vertical centerline of the joint of the rotary table to the horizontal centerline of the joint that tilts the table. Measured when all rotational axes are in neutral (zero) position so that the table is oriented horizontally.

See definition of Dx in this reference:

DEFAULT_ROTATIONAL_JOINT_OFFSET_Y

For a 5 axis CNC machine with a tilting rotary table (PENTA_AXIS_TRT) with XYZAC axes this is the distance along the Y axis from the vertical centerline of the joint of the rotary table to the horizontal centerline of the joint that tilts the table. Measured when all rotational axes are in neutral (zero) position so that the table is oriented horizontally.

See definition of Dy in this reference:

DEFAULT_ROTATIONAL_JOINT_OFFSET_Z

For a 5 axis CNC machine with a tilting rotary table (PENTA_AXIS_TRT) this is the distance along the Z axis from the surface at the top of the table to the horizontal centerline of the joint that tilts the table. Measured when all rotational axes are in neutral (zero) position so that the table is oriented horizontally.

See definition of Dz in this reference:

TOOLS

Number of tools, including extruders. Lower tool indices, starting with 0, must be assigned to extruders. Offsets of each tool from tool 0 must be defined with HOTEND_OFFSET_X, HOTEND_OFFSET_Y and HOTEND_OFFSET_Z.

ABORT_ON_SOFTWARE_ENDSTOPS

Abort printing when any software endstop is triggered. This feature is enabled with 'M211 H1' or from the LCD menu. Software endstops must be activated for this option to work.

SAFE_BED_LEVELING_START_X

SAFE_BED_LEVELING_START_X, SAFE_BED_LEVELING_START_Y, SAFE_BED_LEVELING_START_Z, SAFE_BED_LEVELING_START_I, SAFE_BED_LEVELING_START_J, SAFE_BED_LEVELING_START_K, SAFE_BED_LEVELING_START_U, SAFE_BED_LEVELING_START_V, SAFE_BED_LEVELING_START_W: Safe bed leveling start coordinates. If enabled, the respective axis is moved to the specified position at the beginning of the bed leveling procedure. Required for multi-axis machines (I_DRIVER_TYPE ... defined). Values must be chosen so that the bed is oriented horizontally and so that the Z-probe is oriented vertically. Note: If inverse kinematics for your machine are not implemented, bed leveling produces wrong results for all moves where the bed is not oriented horizontally or where the tool head is not oriented vertically. In these cases, bed leveling must be disabled.

LCD_SHOW_SECONDARY_AXES

Show the position of secondary axes I[J[K]] instead of icons on an DOGM LCD (e.g. REPRAP_FULL_GRAPHICS_DISPLAY).

QUICK_HOME_ALL_NON_Z_AXES

If all axes are homed, first raise Z, then move all axes except Z simultaneously to their home position. Once the first axis reaches its home position, the axes will be homed individually in sequence XYZIJKUVW. Requires QUICK_HOME.

DRILLING_CANNED_CYCLES

Enables support for G81, G82, G83 drilling canned cycles.

Marlin2ForPipetBot Branch

Not for production use. Use with caution!

Marlin2forPipetBot is a branch of the Marlin fork by DerAndere (based on https://github.com/MarlinFirmware/Marlin/tree/3e9fb34892e85bc4069acf5baddbf12d6cd47789).

This branch is for patches to the latest Marlin2ForPipetBot release version.

Example Configurations

Before you can build Marlin for your machine you'll need a configuration for your specific hardware. Upon request, your vendor will be happy to provide you with the complete source code and configurations for your machine, but you'll need to get updated configuration files if you want to install a newer version of Marlin. Fortunately, Marlin users have contributed dozens of tested configurations to get you started. Visit the MarlinFirmware/Configurations repository to find the right configuration for your hardware.

Building Marlin2ForPipetBot

To build Marlin2ForPipetBot you'll need PlatformIO. The Marlin team has posted detailed instructions on Building Marlin with PlatformIO. Marlin2ForPipetBot is preconfigured for the Anet-V1.0 board of the PipetBot-A8. When using the default build environment (default_env = melzi_optiboot), upload of the compiled Marlin2ForPipetBot firmware to the board via USB using the optiboot bootloader requires burning of the optiboot bootloader onto the board as described in the SkyNet3D/anet-board documentation.

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

Hardware Abstraction Layer (HAL)

Marlin includes an abstraction layer to provide a common API for all the platforms it targets. This allows Marlin code to address the details of motion and user interface tasks at the lowest and highest levels with no system overhead, tying all events directly to the hardware clock.

Every new HAL opens up a world of hardware. At this time we need HALs for RP2040 and the Duet3D family of boards. A HAL that wraps an RTOS is an interesting concept that could be explored. Did you know that Marlin includes a Simulator that can run on Windows, macOS, and Linux? Join the Discord to help move these sub-projects forward!

8-Bit AVR Boards

A core tenet of this project is to keep supporting 8-bit AVR boards while also maintaining a single codebase that applies equally to all machines. We want casual hobbyists to benefit from the community's innovations as much as possible just as much as those with fancier machines. Plus, those old AVR-based machines are often the best for your testing and feedback!

Supported Platforms

Platform MCU Example Boards
Arduino AVR ATmega RAMPS, Melzi, RAMBo
Teensy++ 2.0 AT90USB1286 Printrboard
Arduino Due SAM3X8E RAMPS-FD, RADDS, RAMPS4DUE
ESP32 ESP32 FYSETC E4, E4d@BOX, MRR
LPC1768 ARMยฎ Cortex-M3 MKS SBASE, Re-ARM, Selena Compact
LPC1769 ARMยฎ Cortex-M3 Smoothieboard, Azteeg X5 mini, TH3D EZBoard
STM32F103 ARMยฎ Cortex-M3 Malyan M200, GTM32 Pro, MKS Robin, BTT SKR Mini
STM32F401 ARMยฎ Cortex-M4 ARMED, Rumba32, SKR Pro, Lerdge, FYSETC S6, Artillery Ruby
STM32F7x6 ARMยฎ Cortex-M7 The Borg, RemRam V1
STM32G0B1RET6 ARMยฎ Cortex-M0+ BigTreeTech SKR mini E3 V3.0
STM32H743xIT6 ARMยฎ Cortex-M7 BigTreeTech SKR V3.0, SKR EZ V3.0, SKR SE BX V2.0/V3.0
SAMD51P20A ARMยฎ Cortex-M4 Adafruit Grand Central M4
Teensy 3.5 ARMยฎ Cortex-M4
Teensy 3.6 ARMยฎ Cortex-M4
Teensy 4.0 ARMยฎ Cortex-M7
Teensy 4.1 ARMยฎ Cortex-M7
Linux Native x86/ARM/etc. Raspberry Pi

Submitting Patches

Proposed patches should be submitted as a Pull Request against the (Marlin2ForPipetBot_dev) branch. I sometimes rebase that branch wich results in merge conflicts when you submit a Pull Request. Please ignore merge conflics and just submit the Pull Request with unresolved conflicts. I will take care of it.

  • This branch is for fixing bugs and integrating any new features for the duration of the Marlin2ForPipetBot life-cycle.
  • Follow the Coding Standards to gain points with the maintainers.
  • Please submit Feature Requests and Bug Reports to the Issue Queue. Support resources are also listed there.
  • Whenever you add new features, be sure to add tests to buildroot/tests and then run your tests locally, if possible.
    • It's optional: Running all the tests on Windows might take a long time, and they will run anyway on GitHub.
    • If you're running the tests on Linux (or on WSL with the code on a Linux volume) the speed is much faster.
    • You can use make tests-all-local or make tests-single-local TEST_TARGET=....
    • If you prefer Docker you can use make tests-all-local-docker or make tests-all-local-docker TEST_TARGET=....

Marlin Support

The Issue Queue is reserved for Bug Reports and Feature Requests. To get help with configuration and troubleshooting, please use the following resources:

Contributors

Marlin is constantly improving thanks to a huge number of contributors from all over the world bringing their specialties and talents. Huge thanks are due to all the contributors who regularly patch up bugs, help direct traffic, and basically keep Marlin from falling apart. Marlin's continued existence would not be possible without them.

Credits

Marlin2ForPipetBot (https://github.com/DerAndere1/Marlin)

Copyright 2024 DerAndere

Marlin2ForPipetBot is modified by:

Marlin2ForPipetBot is based on:

MarlinFirmware/Marlin Marlin 3D Printer Firmware (https://github.com/MarlinFirmware/Marlin)

Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]

Contributions

Author Contact Contribution
DerAndere @DerAndere1 main developer of multi-axis support, idea, initial implementation, added features AXIS4_NAME, I_DRIVER_TYPE ... W_DRIVER_TYPE, PENTA_AXIS_HT, PENTA_AXIS_TRT, TOOLS, EVENT_GCODE_TOOLCHANGE_T0, EVENT_GCODE_TOOLCHANGE_T1, SAFE_BED_LEVELING_POSITION_X, AXIS4_ROTATES, FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM, QUICK_HOME_ALL_NON_Z_AXES, LCD_SHOW_SECONDARY_AXES, added commands G10, G43, G43.4, G49, 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 feed rate interpretation mode
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 9 axis printer prototype
Paloky @paloky Initial extension of multi-axis support from 6 to 8 axes
Keith @rcKeith Testing of FOAMCUTTER_XYUV and LCD_SHOW_SECONDARY_AXES
Phillipp Webb @Domush Added commands G10 L2, G10 L20
Scott Lahteine @thinkyhead code review, refactoring
MarlinFirmware @MarlinFirmware Marlin 3D Printer firmware

License

Marlin2ForPipetBot is published under the GPL license because we believe in open development. The GPL comes with both rights and obligations. Whether you use Marlin firmware as the driver for your open or closed-source product, you must keep Marlin open, and you must provide your compatible Marlin source code to end users upon request. The most straightforward way to comply with the Marlin license is to make a fork of Marlin on Github, perform your modifications, and direct users to your modified fork.

While we can't prevent the use of this code in products (3D printers, CNC, etc.) that are closed source or crippled by a patent, we would prefer that you choose another firmware or, better yet, make your own.

marlin's People

Contributors

alexborro avatar anhardt avatar bgort avatar bkubicek avatar bob-the-kuhn avatar boelle avatar daid avatar derandere1 avatar ejtagle avatar ellensp avatar erikzalm avatar gmagician avatar insanityautomation avatar jbrazio avatar ludy87 avatar marcio-ao avatar marciot avatar nothinman avatar p3p avatar rhapsodyv avatar rmoravcik avatar robbycandra avatar roxy-3d avatar sjasonsmith avatar tcm0116 avatar thinkyhead avatar thisiskeithb avatar tpruvot avatar wackerbarth avatar wurstnase avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

marlin's Issues

[FR] [6axis_dev] With ASYNC_SECONDARY_AXES defined, only axes XYZ should move syncronized and end moves simultaneously

Description

With ASYNC_SECONDARY_AXES defined, axes I,J, and/or K moves should not be syncronized with the movement of other axes to end at the same timepoint. They should rather move according to the set feedrate for that axis. Only XYZ should move synchronized with each other.

Steps to Reproduce

  1. Flash 6axis_dev branch with ASYNC_SECONDARY_AXES and NON_E_AXES 4
  2. M502
  3. M500
  4. G28
  5. G1 X10 Z20 I64
  6. G1 X74 Z84 I32

Expected behavior: [What you expect to happen]

movement of X,Y,Z should be synchronized to end simultaneously. but there should be no synchronization with movement of secondary axes (AXIS_I). Step 4 should result in Fast and short sync movement of X,Y and end early but simultaneously while I should move with MAX_FEEDRATE[3] to the destinaton, reaching the destination later.
Step 5: Axes XZ should move synchronized with each other and movement of these axes should end simultaneously. Short movement of I should again happen with MAX_FEEDRATE[3] and reach the destination earlier than the axes XZ.

Actual behavior: [What actually happens]

All movements are synchronized and end simultaneously

Additional Information

I-axis only moves in one direction regardless of coordinate

Description

I-axis only moves in one direction regardless of coordinate.

Hardware: Prototype Robot with SKR PRO v1.1 and six axis (TMC2209)
Marlin Dist: BF2_6axis_dev14 0f8be77

Steps to Reproduce

  1. Send "G1 I100.0" from Pronterface
  2. Send "G1 I10.0" from Pronterface
  3. Send "G1 I100.0" from Pronterface

Expected behavior: [What you expect to happen]

  1. "I" move right
  2. "I" move left
  3. "I" move right

Actual behavior: [What actually happens]

  1. "I" move right
  2. "I" move right
  3. "I" move right

Additional Information

It in the expected direction for XYZ and JK.

I would be glad help you test all the new commits that are coming! This is the best project ever on Github! :)

My config

Config_files.zip

[BUG][bf2_6axis_dev] Axes I, J and K do not move

Description

With the files from the bf_6axes_dev branch downloaded today, when specifying #define NON_E_AXES = 4 or #define NON_E_AXES = 5 or #define NON_E_AXES = 6 only axes XYZ can be moved by issuing G-code G1.

Steps to Reproduce

  1. Use the original PipetBot-A8 as detailed at https://it-by-derandere.blogspot.com/p/pipetbot-a8.html.
  2. visit https://github.com/DerAndere1/Marlin/tree/bf2_6axis_dev and download the files from that branch.
  3. Copy the content of Marlin/src/config/examples/DerAndere/PipetBot-A8 to Marlin/ and confirm the replacement of the existing files Marlin/Configuration.h and Marlin/Configuration_adv.h
  4. Upload the configured firmware from step 3 to the microcontroller of the PipetBot-A8
  5. Issue G-code command G28 I or G28 or G-code commands like G1 I10 F100 or G1 X5 Y6 Z3 I40 J50 K60 E70 F100 (e.g. via USB serial connection using either printrun or Universal G-code sender (UGS))

Expected behavior:
The stepper motors connected to the pins for AXIS_I, AXIS_J, AXIS_K should move similar to those connected to pins for AXIS_X, AXIS_Y and AXIS_Z.

Actual behavior:
Only stepper motors connected to the pins for AXIS_X, AXIS_Y and AXIS_Z move. Steppers for I,J and K cannot be moved manually without applying high load. This indicates that these steppers are enabled.

Additional Information

None

[FR] No extruders (motors) but hotends (PID control for hotend temperature)

Description

@Daniele-Dondi (https://github.com/Daniele-Dondi) opened the following feature request in the upstream MarlinFirmware/Marlin issue tracker;
Hi, I'm quite new here. I'm trying to use Marlin on my robot for chemical reactions. Actually the robot has 6 axes for driving syringes plus several servos for valves. I wish to implement the possibility to heat (by using PID) but the only way I found is to enable one extruder (that I don't need and also I haven't enough pins to use on my board).
So, I'm asking if it is possible to have hotends without extruders (motor).
I tried to modify the code without success.
(I know that I could use the bed pins but actually I need more hotends)

Steps to Reproduce

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
    Dondi.zip

[FR] [6axis_dev] 6 axes broken with certain configs and G-codes. Add Sanity checks!

Description

Marlin support for 6 axes (XYZIJK + E) works only for certain configs and only a subset of G-codes is supported at the moment. I suggest to collect a whitelist of working features

Expected behavior: [What you expect to happen]
add sanity checks against any non-working config settings.

Actual behavior: [What actually happens]
some config combination may not compile with NON_E_AXES > 3, some configs may compile but may not work in practice.

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

6 axis update for Marlin code : Zero extruder non supported

Issue : Setting extruder number to zero results in compilation errors

Wrong parameter definition and use in the code utility.h :

onstexpr char axis_codes[NUM_AXIS] = { 'X', 'Y', 'Z'
#if NON_E_AXES > 3
, 'I'
#if NON_E_AXES > 4
, 'J'
#if NON_E_AXES > 5
, 'K'
#endif
#endif
#endif
, 'E' };

In case of Extruder = 0 , the above code is wrong.
There should be a different definition depending on the below variable from Configuration.h

// This defines the number of extruders
// :[1, 2, 3, 4, 5, 6]
#define EXTRUDERS 0

IJK axis moves very slow on first move

Description

IJK axis moves very slow on first move

Hardware: Prototype Robot with SKR PRO v1.1 and six axis (TMC2209)
Marlin Dist: BF2_6axis_dev14 0f8be77

Steps to Reproduce

  1. Send "G1 I100.0 F3000" from Pronterface
  2. Send "G1 I200.0 F3000" from Pronterface
  3. Send "G1 I300.0 F3000" from Pronterface

Expected behavior: [What you expect to happen]

  1. "I" moves normal speed to the right
  2. "I" moves normal speed to the right
  3. "I" moves normal speed to the right

Actual behavior: [What actually happens]

  1. "I" moves very slow to the right
  2. "I" moves normal speed to the right
  3. "I" moves normal speed to the right

Additional Information

Same behavior on IJK-axis

I would be glad help you test all the new commits that are coming! This is the best project ever on Github! :)

My config

Config_files.zip

Menu_motion.cpp bug Marlin-bf2_6axis_dev14

Hi,

Found a little BUG:

menu_motion.cpp Line 102-113

 case I_AXIS:
        TERN_(MIN_SOFTWARE_ENDSTOP_I, min = soft_endstop.min.i; <----- MISSING **)**
        TERN_(MIN_SOFTWARE_ENDSTOP_I, max = soft_endstop.max.i; <----- MISSING **)**
      #if NON_E_AXES > 4
        break;
        case J_AXIS:
        TERN_(MIN_SOFTWARE_ENDSTOP_J, min = soft_endstop.min.j; <----- MISSING **)**
        TERN_(MIN_SOFTWARE_ENDSTOP_J, max = soft_endstop.max.j; <----- MISSING **)**
        #if NON_E_AXES > 5
          break;
          case K_AXIS:
            TERN_(MIN_SOFTWARE_ENDSTOP_K, min = soft_endstop.min.k; <----- MISSING **)**
            TERN_(MIN_SOFTWARE_ENDSTOP_K, max = soft_endstop.max.k; <----- MISSING **)**
        #endif
      #endif

Compilation Bug

Description

Some compilation bugs.

Hardware: Prototype Robot with SKR PRO v1.1 and six axis (TMC2209)
Marlin Dist: BF2_6axis_dev14 0f8be77

Steps to Reproduce

Configuration_store.cpp Line 3418-3427 gives compile error "can not start with ||"...

  #if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z) 
    #if NON_E_AXES > 3
      || AXIS_IS_TMC(I)
      #if NON_E_AXES > 4
        || AXIS_IS_TMC(J) 
        #if NON_E_AXES > 5
          || AXIS_IS_TMC(K)
        #endif
      #endif
    #endif

Expected behavior: [What you expect to happen]

Compilation

Actual behavior: [What actually happens]

No compilation

Additional Information

I would be glad help you test all the new commits that are coming! This is the best project ever on Github! :)

My config

Config_files.zip

Compilation error in e_homing branch

I'm using e_homing branch and when I'm compiling I get the following error
sketch/src/module/../inc/../HAL/HAL_AVR/fastio_AVR.h:81:35: error: 'DIOE_STOP_PIN_DDR' was not declared in this scope

I have enabled E_AXIS_HOMING USE_EMIN_PLUG in configuration.h and E_MIN_PIN in pins_RAMPS.H

Do you have an idea ?

6axis_PR1

Description

<#define FOAMCUTTER_XYUV creates errors>

Steps to Reproduce

<Un-comment the above in configuration.h Line 86 >

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [macros.h - too few arguments to function 'float sqrtf(float)' [291, 28]]

Additional Information. With build 240820

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

#define EXTRUDERS 0

6AxisPR1.zip

Description

Steps to Reproduce

  1. [Set EXTRUDERS to 0]
  2. [Comment out #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75]
  3. [and so on...]

Expected behavior: [This to be allowed as per the latest bugfix-2.0.x release, to allow FoamCutter config to work on a five axis board - Linear Axis 5 being minimum at present, no room for extruder driver that will be expected, albeit unused]

Actual behavior: [Compiles with warnings, all relating to 'array subscript 5 is above array bounds of 'float [5]' [-Warray-bounds]' in planner.cpp, settings.cpp, menu_advanced.cpp & serial.h.
Setting EXTRUDERS to 0 will compile, but 9 warnings are generated - Setting to one is warning free ]

Additional Information

types.h approx line 448 - FIX - #if LINEAR_AXES == 5 //SG Changed from >= (also config for 4 & 6) for another compile error

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

[BUG] [bf2_6axis_dev12] Move axis through menu gives different speeds depending on the axis

Current implementation of 4 non E axis extension with X Y Z I gives proper response to G1 X10 Y10 Z10 I10, with all axis mooving at the same speed, and with the same angular displacements.

However, displacing each individual axis using Marlin LCD menu gives different speeds depending on the axis. The displacement is not the same on J axis, way smaller.

How to reproduce :

Boot
Then using the LCD input :
Motion > Move Axis > Move I

[FR] [Marlin2ForPipetBot] Add support for G29 mesh bed leveling, ABL, external UI and Crealty CR10s

Hello,
kinda noob with good old c/c++ code syntax. Getting compiling errors as 4th axis pins arent defined.. Compiling for creality 2.4.1 motherbord based on ramps 1.4. For compiling used Marlin-Marlin2ForPipetBot-2.0.0.

In file included from Marlin\src\Marlin.cpp:259:0: Marlin\src\Marlin.cpp: In function 'bool pin_is_protected(pin_t)': Marlin\src\pins/sensitive_pins.h:158:17: error: 'I_STEP_PIN' was not declared in this scope #define _I_PINS I_STEP_PIN, I_DIR_PIN, I_ENABLE_PIN, _I_MIN _I_MAX _I_MS1 _I_MS2 _I_MS3 _I_CS ^ Marlin\src\pins/sensitive_pins.h:642:3: note: in expansion of macro '_I_PINS' _I_PINS \ ^ Marlin\src\Marlin.cpp:262:49: note: in expansion of macro 'SENSITIVE_PINS' static const pin_t sensitive_pins[] PROGMEM = SENSITIVE_PINS;

error repeats with I_STEP_PIN; I_DIR_PIN; I_ENABLE_PIN;

played with different settings for 1284 boards and active 4 axis (xyzi) compiles without error thought if change to ramps 1.4 above mentioned error shows up.

What Im missing??
thank you.

6axis Marlin code : M114 / G1 bug

See below commands :

Send: M114
Recv: X:0.00 Y:0.00 Z:0.00 I:0.00 J:-59.32 E:0.00 Count X:0 Y:0 Z:0 I:-12 J:-2379
Recv: ok
[...]
Send: G1 J 59.32
Recv: ok
[...]
Send: M114
Recv: X:0.00 Y:0.00 Z:0.00 I:0.00 J:59.32 E:0.00 Count X:0 Y:0 Z:0 I:-12 J:2367
Recv: ok

Expected answer :
Recv: X:0.00 Y:0.00 Z:0.00 I:0.00 J:0.00 E:0.00 Count X:0 Y:0 Z:0 I:-12 J:0

Marlin-9axis_pull hardware test report Axes 8 and 9

To support rebasing 9axis_pull branch onto current upstream MarlinFirmware/Marlin/bugfix-2.0.x

Have I configured Marlin-9axis_pull for 8 axes
And tested with a Dummy hardware shaft.
All functions work.

I configured Marlin-9axis_pull for 9 axes.
I am getting compiler errors

Marlin > src > feature > tmc_util.cpp

445 #if AXIS_IS_TMC(P)
446 if (monitor_tmc_driver(stepperP, need_update_error_counters, need_debug_reporting))
447 step_current_down(stepperPM); <-------------> must be (stepperP )
448 #endif

Marlin > src > core > macros.h

LIST_INC_INC_16 was not declared in this scope [332,25]

Marlin > src > core > serial.cpp

identifier q is undefined C/C++ (20) [117,3]
q was not declared in this scoop [118, 160]

Marlin > src > gcode > config > M92.ccp

Q_AXIS was not declared in this scope

It seems if you choose 9 axes , ( P ) the 10th axis is also chosen ( Q )
Would you take a look at this, I can't figure it out.

Send the complete configuration to you.

Marlin-9axis_pull 9 Axis test.zip

I axis only works in absolute positioning

Hello,

I am new to Marlin and having an issue with the I axis (4th axis). The stepper motor only runs in absolute coordinates. For example, even if I send a G91 command, the I axis will treat any following commands as absolute coordinates rather than relative. This is not true of the X,Y, and Z axes--they all work perfectly. Any help would be greatly appreciated! Thank you.

Steps to Reproduce

  1. Send G91 command
  2. Send G1 I10 command (or other command)
  3. I axis treats command as absolute positioning rather than relative

Expected behavior:
I axis moves in relative when G91 command is given preceding G1 commands

Actual behavior:
I axis moves in absolute positioning always

Additional Information

G29 Bed Leveling Error

Description

Steps to Reproduce

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [What actually happens]

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

Small error in motion_motion.cpp regarding axis names

Hi,

great that you managed to get an official merge in Marlin for 6 axis support.

I took the core there and checked / redid the compilation for 6 axis, and there is a tiny error in one of the macros / includes definition ๐Ÿ‘

Compiling .pio\build\alfawise_U30\src\src\lcd\menu\menu_tune.cpp.o
In file included from Marlin\src\lcd\menu\menu_motion.cpp:33:0:
Marlin\src\lcd\menu\menu_motion.cpp: In function 'void menu_motion()':
Marlin\src\lcd\menu\menu_motion.cpp:363:47: error: expected ')' before 'I_STR'
GCODES_ITEM(MSG_AUTO_HOME_I, PSTR("G28" I_STR));
^
Marlin\src\lcd\menu\menu_item.h:263:39: note: in definition of macro 'MENU_INNER_P'
MenuItem
##TYPE::action(plabel, ##V); \

The actual line of code is :

#if LINEAR_AXES >= 4
GCODES_ITEM(MSG_AUTO_HOME_I, PSTR("G28" I_STR));
//GCODES_ITEM(MSG_AUTO_HOME_I, PSTR("G28U"));
#endif

I_STR is not properly defined, or the macro expansion does not result in the proper character appended to "G28" string... Beside that, all compiles fine, and I will test this later in August.

Thanks again for your superb work.

Olivier.

DIOE_STOP_PIN_DDR and 'E_STOP_PIN' was not declared in this scope

Description

when try to compile code for atmega2560 gets error

Steps to Reproduce

  1. env_default = megaatmega2560

Expected behavior:
compile without error
Actual behavior:
errors:
DIOE_STOP_PIN_DDR and 'E_STOP_PIN' was not declared in this scope

`Processing megaatmega2560 (platform: atmelavr; framework: arduino; board: megaatmega2560)

Verbose mode can be enabled via -v, --verbose option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/megaatmega2560.html
PLATFORM: Atmel AVR 2.0.0 > Arduino Mega or Mega 2560 ATmega2560 (Mega 2560)
HARDWARE: ATMEGA2560 16MHz, 8KB RAM, 248KB Flash
PACKAGES:

  • framework-arduino-avr 5.0.0
  • toolchain-atmelavr 1.50400.190710 (5.4.0)
    Converting Marlin.ino
    LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
    LDF Modes: Finder ~ chain, Compatibility ~ soft
    Found 18 compatible libraries
    Scanning dependencies...
    Dependency Graph
    |-- 0.4
    | |-- 1.0
    | |-- 1.0
    |-- 1.3.4
    | |-- 1.0
    |-- 0.6.2
    | |-- 1.0
    | |-- 1.0
    |-- 1.1.3
    |-- <30aa480>
    | |-- 1.0
    |-- 0.7.0
    |--
    | |-- 1.0
    |-- #6f53c19
    |-- <SailfishRGB_LED> #4d0c888
    | |-- 1.0
    |-- #3a18be5
    |-- 1.0
    |-- 1.0
    Building in release mode
    Compiling .pioenvs\megaatmega2560\src\src\module\endstops.cpp.o
    Compiling .pioenvs\megaatmega2560\src\src\module\motion.cpp.o
    Compiling .pioenvs\megaatmega2560\src\src\sd\SdFatUtil.cpp.o
    Compiling .pioenvs\megaatmega2560\src\src\sd\SdFile.cpp.o
    Compiling .pioenvs\megaatmega2560\src\src\sd\SdVolume.cpp.o
    Compiling .pioenvs\megaatmega2560\src\src\sd\cardreader.cpp.o
    In file included from Marlin\src\module../inc/MarlinConfigPre.h:37:0,
    Compiling .pioenvs\megaatmega2560\src\src\sd\usb_flashdrive\Sd2Card_FlashDrive.cpp.o
    from Marlin\src\module../inc/MarlinConfig.h:33,
    from Marlin\src\module\endstops.h:33,
    Compiling .pioenvs\megaatmega2560\src\src\sd\usb_flashdrive\lib\Usb.cpp.o
    from Marlin\src\module\endstops.cpp:32:
    Marlin\src\module\endstops.cpp: In static member function 'static void Endstops::init()':
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:86:35: error: 'DIOE_STOP_PIN_DDR' was not declared in this scope
    #define _SET_INPUT(IO) CBI(DIO ## IO ## _DDR, DIO ## IO ## _PIN)
    ^
    Marlin\src\module../inc/../core/macros.h:80:19: note: in definition of macro 'CBI'
    #define CBI(n,b) (n &= ~_BV(b))
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:98:35: note: in expansion of macro '_SET_INPUT'
    #define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
    ^
    Compiling .pioenvs\megaatmega2560\src\src\sd\usb_flashdrive\lib\masstorage.cpp.o
    Marlin\src\module\endstops.cpp:248:7: note: in expansion of macro 'SET_INPUT_PULLUP'
    SET_INPUT_PULLUP(E_MIN_PIN);
    ^
    In file included from c:\users\igor.platformio\packages\toolchain-atmelavr\avr\include\avr\io.h:99:0,
    from c:\users\igor.platformio\packages\toolchain-atmelavr\avr\include\avr\pgmspace.h:90,
    from C:\Users\Igor.platformio\packages\framework-arduino-avr\cores\arduino/Arduino.h:28,
    from Marlin\src\module../inc/../HAL/HAL_AVR/HAL.h:27,
    from Marlin\src\module../inc/MarlinConfig.h:35,
    from Marlin\src\module\endstops.h:33,
    from Marlin\src\module\endstops.cpp:32:
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:86:54: error: 'DIOE_STOP_PIN_PIN' was not declared in this scope
    #define _SET_INPUT(IO) CBI(DIO ## IO ## _DDR, DIO ## IO ## _PIN)
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:86:31: note: in expansion of macro 'CBI'
    #define _SET_INPUT(IO) CBI(DIO ## IO ## _DDR, DIO ## IO ## _PIN)
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:98:35: note: in expansion of macro '_SET_INPUT'
    #define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
    ^
    Marlin\src\module\endstops.cpp:248:7: note: in expansion of macro 'SET_INPUT_PULLUP'
    SET_INPUT_PULLUP(E_MIN_PIN);
    ^
    In file included from Marlin\src\module../inc/../HAL/HAL_AVR/HAL.h:36:0,
    from Marlin\src\module../inc/MarlinConfig.h:35,
    from Marlin\src\module\endstops.h:33,
    from Marlin\src\module\endstops.cpp:32:
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:82:41: error: 'DIOE_STOP_PIN_RPORT' was not declared in this scope
    #define _WRITE(IO,V) do{ if (&(DIO ## IO ## _RPORT) < (uint8_t*)0x100) _WRITE_NC(IO,V); else _WRITE_C(IO,V); }while(0)
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:98:51: note: in expansion of macro '_WRITE'
    #define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
    ^
    Marlin\src\module\endstops.cpp:248:7: note: in expansion of macro 'SET_INPUT_PULLUP'
    SET_INPUT_PULLUP(E_MIN_PIN);
    ^
    In file included from Marlin\src\module../inc/MarlinConfigPre.h:37:0,
    from Marlin\src\module../inc/MarlinConfig.h:33,
    from Marlin\src\module\endstops.h:33,
    from Marlin\src\module\endstops.cpp:32:
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:72:14: error: 'DIOE_STOP_PIN_WPORT' was not declared in this scope
    if (V) SBI(DIO ## IO ## _WPORT, DIO ## IO ## _PIN);
    ^
    Marlin\src\module../inc/../core/macros.h:79:19: note: in definition of macro 'SBI'
    #define SBI(n,b) (n |= _BV(b))
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:82:81: note: in expansion of macro '_WRITE_NC'
    #define _WRITE(IO,V) do{ if (&(DIO ## IO ## _RPORT) < (uint8_t*)0x100) _WRITE_NC(IO,V); else _WRITE_C(IO,V); }while(0)
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:98:51: note: in expansion of macro '_WRITE'
    #define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
    ^
    Marlin\src\module\endstops.cpp:248:7: note: in expansion of macro 'SET_INPUT_PULLUP'
    SET_INPUT_PULLUP(E_MIN_PIN);
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:73:14: error: 'DIOE_STOP_PIN_WPORT' was not declared in this scope
    else CBI(DIO ## IO ## _WPORT, DIO ## IO ## _PIN);
    ^
    Marlin\src\module../inc/../core/macros.h:80:19: note: in definition of macro 'CBI'
    #define CBI(n,b) (n &= ~_BV(b))
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:82:81: note: in expansion of macro '_WRITE_NC'
    #define _WRITE(IO,V) do{ if (&(DIO ## IO ## _RPORT) < (uint8_t*)0x100) _WRITE_NC(IO,V); else _WRITE_C(IO,V); }while(0)
    ^
    Marlin\src\module../inc/../HAL/HAL_AVR/fastio_AVR.h:98:51: note: in expansion of macro '_WRITE'
    #define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _WRITE(IO, HIGH); }while(0)
    ^
    Marlin\src\module\endstops.cpp:248:7: note: in expansion of macro 'SET_INPUT_PULLUP'
    SET_INPUT_PULLUP(E_MIN_PIN);
    ^
    In file included from Marlin\src\module../inc/MarlinConfig.h:37:0,
    from Marlin\src\module\motion.h:36,
    from Marlin\src\module\motion.cpp:32:
    Marlin\src\module\motion.cpp: In function 'void homeaxis(AxisEnum)':
    Marlin\src\module../inc/../pins/pins.h:812:25: error: 'E_STOP_PIN' was not declared in this scope
    #define E_MIN_PIN E_STOP_PIN
    ^
    Marlin\src\module\motion.cpp:1439:30: note: in expansion of macro 'E_MIN_PIN'
    (axis == _AXIS(A) && ((A##_MIN_PIN > -1 && A##_HOME_DIR < 0) || (A##_MAX_PIN > -1 && A##_HOME_DIR > 0)))
    ^
    Marlin\src\module\motion.cpp:1442:15: note: in expansion of macro 'CAN_HOME'
    && !CAN_HOME(E)
    ^
    compilation terminated due to -fmax-errors=5.
    *** [.pioenvs\megaatmega2560\src\src\module\endstops.cpp.o] Error 1
    *** [.pioenvs\megaatmega2560\src\src\module\motion.cpp.o] Error 1
    ============================================================ [FAILED] Took 15.25 seconds ============================================================

Environment Status Duration


megaatmega2560 FAILED 00:00:15.251

Limit switch problem

i. Whether J and K can be set independently and whether limit switches are needed is very inconvenient sometimes if they have to be used

[FR] 6axis_dev: Customized Gcode for tool change

Could you add possibility to create a custom gcode executed when activating a tool and another when deactivating (identical that the Repetier firmware offers)
This allows all axes to be controlled depending on the tools state. For example, to manage a tools changer using a stepper motor through a fourth axis

Thanks in advance for studying this feature.

[Bug] [bf2_6axis_dev14] regression: IJK endstop validation during homing kills printer

Description

Regression: axis I moves with G1 but does not move during G28 auto home. Therefore, IJK endstop validation during homing kills the machine.

Steps to Reproduce

  1. Upload bf2_6axis_dev14
  2. send G28

Expected behavior: [What you expect to happen]

G28 should sucessfully home axesall axes.

Actual behavior: [What actually happens]

After homing of XYZ, axis I it does not move during G28. Because I endstops are not triggered, endstop_validation() in motion.cpp results in the kill error message

Additional Information

This bug was not present in bf2_6axis_dev13 or bf2_6axis_dev12

[FR] Add support for G60/G61 with LINEAR_AXES >= 4

Description

Add support for G60/G61 with LINEAR_AXES >= 4 to https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x

Steps to Reproduce

  1. See motion.h line 58.

Expected behavior:

Working G60/G61 with LINEAR_AXES >= 4

Actual behavior:

See motion.h line 58.

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

6axis_PR1

Description

<#define NON_E_AXES 3 - Line 170 in configuration.h>

Steps to Reproduce

<Enter a config other than 3, (4 - 5 - 6) generates errors>

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [Types.h - could not convert 'o' from 'XYZval' to 'XYZOnlyval' [1283, 112] [1284, 112] - Sanitycheck.h - #error "Enable USE_JMIN_PLUG when homing J to MIN." [1996, 10]]

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

[BUG] [bf2_6axis_dev12] EEprom version readback failed

Even after initializing the Eeprom through the LCD UI, messages at boot are as follows :

start
echo:PowerUp
Marlin 2.0.x for Alfawise

echo: Last Updated: 2019-09-25 | Author: Hobi, tpruvot
echo:Compiled: Mar 16 2020
echo: Free Memory: 44983 PlannerBufferBytes: 2944
echo:SD card ok
echo:EEPROM version mismatch (EEPROM=? Marlin=V70)
echo:Hardcoded Default Settings Loaded
echo:SD card ok

[FR] [bf2_6axis_dev14] add suport for Trinamic TMC drivers and BTT SKR Pro v1.1

Hi,

First of all, thank you for adding 6axis support to Marlin! Best ever! I really need it for my CNC.

I have no problem at all to compile "Marlin-2.0.x_E_homing" for the "SKR Pro v1.1", but it will not compile "Marlin-bf2_6axis_dev14" or "Marlin-Marlin2ForPipetBot" with the same settings. Could you PLEASE help me!?

I only made the following changes:

Configuration.h
#define SERIAL_PORT -1

#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_BTT_SKR_PRO_V1_1
#endif

Platformio.ini
[platformio]
src_dir = Marlin
boards_dir = buildroot/share/PlatformIO/boards
default_envs = BIGTREE_SKR_PRO

Fault Marlin-df2_6axis_dev14
Compiling .pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\SoftwareSerial.cpp.o
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfigPre.h:37,
Compiling .pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\eeprom_flash.cpp.o
from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:28,
from Marlin\src\HAL\STM32\HAL_SPI.cpp:25:
Marlin\src\HAL\STM32../../inc/../../Configuration.h:884: error: unterminated #if
884 | #if ENABLED(CLASSIC_JERK)
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:813: error: unterminated #if
813 | #if NON_E_AXES == 5
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:811: error: unterminated #if
811 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfigPre.h:37,
from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:28,
from Marlin\src\HAL\STM32\Sd2Card_sdio_stm32duino.cpp:23:
Marlin\src\HAL\STM32../../inc/../../Configuration.h:884: error: unterminated #if
884 | #if ENABLED(CLASSIC_JERK)
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:813: error: unterminated #if
813 | #if NON_E_AXES == 5
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:811: error: unterminated #if
811 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfigPre.h:37,
from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:28,
from Marlin\src\HAL\STM32\eeprom_flash.cpp:25:
Marlin\src\HAL\STM32../../inc/../../Configuration.h:884: error: unterminated #if
884 | #if ENABLED(CLASSIC_JERK)
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:813: error: unterminated #if
813 | #if NON_E_AXES == 5
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:811: error: unterminated #if
811 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfigPre.h:37,
from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:28,
from Marlin\src\HAL\STM32\Servo.cpp:25:
Marlin\src\HAL\STM32../../inc/../../Configuration.h:884: error: unterminated #if
884 | #if ENABLED(CLASSIC_JERK)
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:813: error: unterminated #if
813 | #if NON_E_AXES == 5
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:811: error: unterminated #if
811 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfigPre.h:37,
from Marlin\src\HAL\STM32\HAL.h:34,
from Marlin\src\HAL\STM32\HAL.cpp:25:
Marlin\src\HAL\STM32../../inc/../../Configuration.h:884: error: unterminated #if
884 | #if ENABLED(CLASSIC_JERK)
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:813: error: unterminated #if
813 | #if NON_E_AXES == 5
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:811: error: unterminated #if
811 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfigPre.h:37,
from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:28,
from Marlin\src\HAL\STM32\timers.h:25,
from Marlin\src\HAL\STM32\SoftwareSerial.cpp:40:
Marlin\src\HAL\STM32../../inc/../../Configuration.h:884: error: unterminated #if
884 | #if ENABLED(CLASSIC_JERK)
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:813: error: unterminated #if
813 | #if NON_E_AXES == 5
|
Marlin\src\HAL\STM32../../inc/../../Configuration.h:811: error: unterminated #if
811 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\HAL_SPI.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:949:2: error: #else after #else
949 | #else // NON_E_AXES < 4
| ^~~~
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\HAL_SPI.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:315: error: the conditional began here
315 | #if NON_E_AXES == 6
|
compilation terminated due to -fmax-errors=5.
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\HAL_SPI.cpp.o] Error 1
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\timers.h:25,
from Marlin\src\HAL\STM32\HAL.h:121,
from Marlin\src\HAL\STM32\HAL.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:949:2: error: #else after #else
949 | #else // NON_E_AXES < 4
| ^~~~
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\timers.h:25,
from Marlin\src\HAL\STM32\HAL.h:121,
from Marlin\src\HAL\STM32\HAL.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:315: error: the conditional began here
315 | #if NON_E_AXES == 6
|
compilation terminated due to -fmax-errors=5.
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\eeprom_flash.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:949:2: error: #else after #else
949 | #else // NON_E_AXES < 4
| ^~~~
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\eeprom_flash.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:315: error: the conditional began here
315 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\Sd2Card_sdio_stm32duino.cpp:23:
Marlin\src\HAL\STM32../../inc/../core/types.h:949:2: error: #else after #else
949 | #else // NON_E_AXES < 4
| ^~~~
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\Sd2Card_sdio_stm32duino.cpp:23:
Marlin\src\HAL\STM32../../inc/../core/types.h:315: error: the conditional began here
315 | #if NON_E_AXES == 6
|
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\timers.h:25,
from Marlin\src\HAL\STM32\SoftwareSerial.cpp:40:
Marlin\src\HAL\STM32../../inc/../core/types.h:949:2: error: #else after #else
949 | #else // NON_E_AXES < 4
| ^~~~
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\timers.h:25,
from Marlin\src\HAL\STM32\SoftwareSerial.cpp:40:
Marlin\src\HAL\STM32../../inc/../core/types.h:315: error: the conditional began here
315 | #if NON_E_AXES == 6
|
compilation terminated due to -fmax-errors=5.
compilation terminated due to -fmax-errors=5.
compilation terminated due to -fmax-errors=5.
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\HAL.cpp.o] Error 1
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\eeprom_flash.cpp.o] Error 1
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\SoftwareSerial.cpp.o] Error 1
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\Sd2Card_sdio_stm32duino.cpp.o] Error 1
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\Servo.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:949:2: error: #else after #else
949 | #else // NON_E_AXES < 4
| ^~~~
In file included from Marlin\src\HAL\STM32../../inc/MarlinConfig.h:38,
from Marlin\src\HAL\STM32\Servo.cpp:25:
Marlin\src\HAL\STM32../../inc/../core/types.h:315: error: the conditional began here
315 | #if NON_E_AXES == 6
|
compilation terminated due to -fmax-errors=5.
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\STM32\Servo.cpp.o] Error 1

Fault in Marlin2ForPipetBot
In file included from Marlin\src\HAL\HAL_STM32\HAL.h:99,
from Marlin\src\HAL\HAL_STM32\HAL.cpp:26:
Marlin\src\HAL\HAL_STM32\timers.h:122:26: error: variable or field 'Step_Handler' declared void
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32\timers.h:122:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
Marlin\src\HAL\HAL_STM32\timers.h:122:36: error: 'htim' was not declared in this scope; did you mean 'tm'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~
| tm
Marlin\src\HAL\HAL_STM32\timers.h:123:26: error: variable or field 'Temp_Handler' declared void
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32\timers.h:123:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
compilation terminated due to -fmax-errors=5.
In file included from Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/HAL.h:99,
from Marlin\src\HAL\HAL_STM32../../inc/../HAL/HAL.h:26,
from Marlin\src\HAL\HAL_STM32../../inc/MarlinConfig.h:30,
from Marlin\src\HAL\HAL_STM32\persistent_store_impl.cpp:25:
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: variable or field 'Step_Handler' declared void
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:36: error: 'htim' was not declared in this scope; did you mean 'tm'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~
| tm
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: variable or field 'Temp_Handler' declared void
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
compilation terminated due to -fmax-errors=5.
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\HAL_STM32\HAL.cpp.o] Error 1
In file included from Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/HAL.h:99,
from Marlin\src\HAL\HAL_STM32../../inc/../HAL/HAL.h:26,
from Marlin\src\HAL\HAL_STM32../../inc/MarlinConfig.h:30,
from Marlin\src\HAL\HAL_STM32\fastio.cpp:25:
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: variable or field 'Step_Handler' declared void
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:36: error: 'htim' was not declared in this scope; did you mean 'tm'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~
| tm
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: variable or field 'Temp_Handler' declared void
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
compilation terminated due to -fmax-errors=5.
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\HAL_STM32\persistent_store_impl.cpp.o] Error 1
In file included from Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/HAL.h:99,
from Marlin\src\HAL\HAL_STM32../../inc/../HAL/HAL.h:26,
from Marlin\src\HAL\HAL_STM32../../inc/MarlinConfig.h:30,
from Marlin\src\HAL\HAL_STM32\HAL_SPI.cpp:25:
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: variable or field 'Step_Handler' declared void
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:36: error: 'htim' was not declared in this scope; did you mean 'tm'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~
| tm
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: variable or field 'Temp_Handler' declared void
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\HAL_STM32\fastio.cpp.o] Error 1
compilation terminated due to -fmax-errors=5.
In file included from Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/HAL.h:99,
from Marlin\src\HAL\HAL_STM32../../inc/../HAL/HAL.h:26,
from Marlin\src\HAL\HAL_STM32../../inc/MarlinConfig.h:30,
from Marlin\src\HAL\HAL_STM32\Servo.cpp:25:
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: variable or field 'Step_Handler' declared void
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:36: error: 'htim' was not declared in this scope; did you mean 'tm'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~
| tm
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: variable or field 'Temp_Handler' declared void
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\HAL_STM32\HAL_SPI.cpp.o] Error 1
compilation terminated due to -fmax-errors=5.
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\HAL_STM32\Servo.cpp.o] Error 1
In file included from Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/HAL.h:99,
from Marlin\src\HAL\HAL_STM32../../inc/../HAL/HAL.h:26,
from Marlin\src\HAL\HAL_STM32../../inc/MarlinConfig.h:30,
from Marlin\src\HAL\HAL_STM32\persistent_store_sdcard.cpp:29:
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: variable or field 'Step_Handler' declared void
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:122:36: error: 'htim' was not declared in this scope; did you mean 'tm'?
122 | extern void Step_Handler(stimer_t *htim);
| ^~~~
| tm
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: variable or field 'Temp_Handler' declared void
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
Marlin\src\HAL\HAL_STM32../../inc/../HAL/./HAL_STM32/timers.h:123:26: error: 'stimer_t' was not declared in this scope; did you mean 'timer_t'?
123 | extern void Temp_Handler(stimer_t *htim);
| ^~~~~~~~
| timer_t
compilation terminated due to -fmax-errors=5.
*** [.pio\build\BIGTREE_SKR_PRO\src\src\HAL\HAL_STM32\persistent_store_sdcard.cpp.o] Error 1

utility/spi_com.h Not found on PR1 branch

Hi,
I download the PR1 brach, and I don't be able to compile.

The compiler don't find the "utitily/spi_com.h" file.
Where can I find this file?

In file included from Marlin\src\HAL\STM32\MarlinSPI.cpp:24:
Marlin\src\HAL\STM32\MarlinSPI.h:28:12: fatal error: utility/spi_com.h: No such file or directory
   28 |   #include <utility/spi_com.h>
      |            ^~~~~~~~~~~~~~~~~~~

For other hand, I need to change in platformio.io the board "BigTree_GTR_v1" for the "marlin_BigTree_GTR_v1" because platformio doen't recognize the board.

#
# Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4)
#
[env:BIGTREE_GTR_V1_0]
platform          = ststm32@>=5.7.0,<6.2.0
extends           = common_stm32
board             = marlin_BigTree_GTR_v1    #BigTree_GTR_v1
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
build_flags       = ${common_stm32.build_flags}
  -DUSB_PRODUCT=\"STM32F407IG\"
  -DTARGET_STM32F4 -DSTM32F407IX -DVECT_TAB_OFFSET=0x8000

My goal is use this repositori to use with a BigTreeth_GTR_V1 + M5 board (Up to 11 axis), but at moment I only need 8 axis.
It's is possible expand up to 8 axis ??

Thank's a lot.

Supported boards

Hi, what boards are supported? I need it with a 6 axis board (i have some STM32 based boards) and want to port to them.

Thanks in advance.

[FR] Add support for DIRECT_STEPPING with LINEAR_AXES >=4

Description

Add support for DIRECT_STEPPING with LINEAR_AXES >=4 to https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x

Steps to Reproduce

  1. See stepper.cpp lines 1602 ff., lines 1846 ff., etc.

Expected behavior:
DIRECT_STEPPING working with LINEAR_AXES >= 4

Actual behavior:
See stepper.cpp lines 1602 ff., 1846 ff. etc.

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

Issue with Homing 4th I Axis

Description

UPDATE: SOLVED -- set I_MIN_Pin (although I wasn't using it) to an used pin. I think all axes have to have two pins even if only one is used for homing (?)

Hi,

I'm very new to Marlin and was excited to come across this version as I am building a printer with two independent z axes and two extruders. However, when I try to compile the code, I receive this error, which I have traced back to the homing function in motion.cpp

I attached my file folder here:
Marlin-Marlin2ForPipetBot 2.zip

This is the error Arduino throws when I try to compile (below). Any help would be really appreciated, thank you!

I have defined I_MIN_PIN as well as changed extruder 2's pins to be the I axis in the RUMBA board file.

In file included from sketch/src/module/../inc/../core/boards.h:28:0,
from sketch/src/module/../inc/MarlinConfigPre.h:35,
from sketch/src/module/../inc/MarlinConfig.h:28,
from sketch/src/module/motion.h:35,
from sketch/src/module/motion.cpp:31:
sketch/src/module/motion.cpp: In function 'void homeaxis(AxisEnum)':
sketch/src/module/motion.cpp:1677:23: error: 'I_MIN_PIN' was not declared in this scope
&& !_CAN_HOME(I),
^
sketch/src/module/../inc/../core/macros.h:246:36: note: in definition of macro 'GANG_4'
#define GANG_4( A,B,C,D,...) A B C D
^
sketch/src/module/../inc/../core/macros.h:251:24: note: in expansion of macro '_GANG_N'
#define GANG_N(N,V...) _GANG_N(N,V)
^~~~~~~
sketch/src/module/motion.cpp:1673:9: note: in expansion of macro 'GANG_N'
if (GANG_N(NON_E_AXES,
^~~~~~
sketch/src/module/motion.cpp:1677:13: note: in expansion of macro '_CAN_HOME'
&& !_CAN_HOME(I),
^~~~~~~~~
sketch/src/module/motion.cpp:1677:23: note: suggested alternative: 'J_MIN_PIN'
&& !_CAN_HOME(I),
^
sketch/src/module/../inc/../core/macros.h:246:36: note: in definition of macro 'GANG_4'
#define GANG_4( A,B,C,D,...) A B C D
^
sketch/src/module/../inc/../core/macros.h:251:24: note: in expansion of macro '_GANG_N'
#define GANG_N(N,V...) _GANG_N(N,V)

The MKS_SGEN_L motherboard is stuck on the startup screen under the 2.0.9.1 firmware.

The MKS_SGEN_L motherboard is stuck on the startup screen under the 2.0.9.1 firmware.

I use MKS_MINI12864 screen, TMC2209 driver, enable SENSORLESS_HOMING, the motherboard is used for 3D printer.
When I used VScode to compile the latest 2.0.9.1 firmware for my MKS_SGEN_L motherboard, there was no error in the compilation process. When I put the compiled bin file on the micSD card for upgrade, my motherboard stuck on the startup page and cannot enter the system. The indicator lights D1 to D4 are always on, and the buzzer always sounds. My key configuration parameter settings are the same as those on the 2.0.8.1 firmware that was used normally before.The attachment is the configuration file I used when compiling.
Marlin.zip

[bug] [Marlin2ForPipetBot] [6axis_dev] EEPROM Error: Field planner_leveling_active mismatch

Description

With branch 6axis_dev as well as Marlin2ForPipetbot, EEPROM cannot be validated. M504 does NOT print "EEPROM OK" to stdout.

Steps to Reproduce

  1. enable (uncomment) option #define EEPROM_SETTINGS and #define EEPROM_CHITCHAT in configuration.h
  2. reflash
  3. Open Printrun pronsole and enter
connect
M502
M500
M504

Expected behavior:
"EEPROM OK" printed to the console of pronsole

Actual behavior:
M500 yields "error: EEPROM datasize error"
M504 yields

error: EEPROM datasize error
echo: index: 645 Size 737

No "EEPROM OK" is printed to the console of pronsole

Additional Information

None

Teensy 9 Axis

is it possible to use 9 Axis using Teensy 4

Thanks

I,J,k not shown on the 12864 lcd

I have configured marlin-bf2_6axis_dev
#define NON_E_AXES 6
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
on Ramps1.4 and ok but when I open it, I don't see the axes I, J, k on lcd please help me to change more where

[bug] [6axis_dev] Safety risk: With LINEAR_AXES 5, axes move way too fast and too far!

Description

With the branch https://github.com/DerAndere1/Marlin/tree/6axis_dev and https://github.com/DerAndere1/Marlin/tree/6axis_PR1, when I set NON_E_AXES 5 (LINEAR_AXES 5), all axes move about 4x faster and further than expected. This is a safety risk. I have to investigate further, but I am not sure if endstops work with LINEAR_AXES 5. At least the internally used steps per mm do not match the configured values for DEFAULT_STEPS_PER_UNIT. Be prepared to hit the emergency button to kill the printer movement.

Steps to Reproduce

Set NON_E_AXES 5 (or LINEAR_AXES 5), Set DEFAULT_MAX_FEEDRATE and STEPS_PER_UNIT of the I and J axis to the same value as for the Z axis. Send G28

Expected behavior: Normal I, J and Z movement

Actual behavior: Axes (at least Z and I) move faster and further than expected, probably due to wrong internal steps per mm

Additional Information

Regression (bug is not present in branch https:/github.com/DerAndere1/Marlin/tree/Marlin2ForPipetBot which is based on pre-release Marlin-bugfix2.0.x)

miss-calculated moove / steps for I and J

A small mistake in steps calculation on secondary axes :

How to reproduce : a single G1 command like

Send: M114
Recv: X:0.00 Y:0.00 Z:0.00 I:0.00 J:0.00 E:0.00 Count X:0 Y:0 Z:0 I:0 J:0
Recv: ok
[...]
Send: G1 I 50
Recv: ok
[...]
Send: M114
Recv: X:0.00 Y:0.00 Z:0.00 I:50.00 J:0.00 E:0.00 Count X:0 Y:0 Z:0 I:2100 J:1
Recv: ok

You can already see the issue.

Why J mooved by 1 step?

Calculation for I steps is correct, as we have the following parameters :

Recv: echo:Steps per unit:
Recv: echo: M92 X80.00 Y80.00 Z80.00 I42.00 J39.00 E80.00

42*50 = 2100

Hunting tonight this last bug for regular use of 4 axes machine!

Olivier.

axis names I, J, K conflict with G92 and G93 parameters and conventions for axis names

Description

The names of axes I, J, K conflict with parameters I, J of commands G92 and G93. These additional axes should be renamed. Ideally, there should be a seperate axis indices for raw positions and positions with kinematics applied. A possible nomenclature would be: AXIS_4, AXIS_5, AXIS_6 as indices for raw positions and depending on the kinematic model, the following indices for post-kinematic positions:

  • cartesian with secondary linear axes along X, Y, Z (used for positioning):
    U, V, W
  • cartesian with rotary axes around X- Y- and Z axis (used for positioning):
    A, B, C
  • 5 axis (untransformed X, Y, Z plus 2 rotational axes around X, Z) with FANUC rotational tool center point (RTCP) type II (G43.5) activated; supported e.g. by FANUC 30i. HSMworks can be used to export compatible G code specifying the attack vector { I, J, K } within G43.5 and G1:
    I, J, K
  • hangprinter (next to A, B, C):
    D

[FR] replace workaround for wrong internal steps per mm by a proper fix

Description

With the branch https://github.com/DerAndere1/Marlin/tree/6axis_dev and https://github.com/DerAndere1/Marlin/tree/6axis_PR1, axis I moves slower and less far than expected. When the DEFAULT_MAX_FEEDRATE and STEPS_PER_UNIT for the axes IJK in Configuration.h is set to the same value as for the Z axis, IJK move slower and less far than Z.

Steps to Reproduce

Set DEFAULT_MAX_FEEDRATE and STEPS_PER_UNIT if the I axis to the same value as for the Z axis

Expected behavior: Same speed for I and Z

Actual behavior: I moves slower than Z

Additional Information

Regression (bug is not present in branch https:/github.com/DerAndere1/Marlin/tree/Marlin2ForPipetBot which is based on pre-release Marlin-bugfix2.0.x)

Customizing for I and J to use E0 and E1. Robotic arm project.

Hi, I have been trying to configure marlin for my robotic arm project but keep getting stuck on adding homing to the final two axis on the 5 axis robot. Then I found your modded version, and it seems to be what I need. I looked through everything I could find of what you have posted and cant get any of it (even the most up to date version) to work for me.

I need to use the two extruder driver slots to run the 4th and 5th axis motors. I am using ramps 1.4. After modifying and building, I got the following errors:

Marlin\src\pins/sensitive_pins.h:160:19: error: 'I_STEP_PIN' was not declared in this scope
Marlin\src\pins/sensitive_pins.h:160:31: error: 'I_DIR_PIN' was not declared in this scope
Marlin\src\pins/sensitive_pins.h:160:42: error: 'I_ENABLE_PIN' was not declared in this scope

and the same errors for "J".
I specified 5 non extruders, to try to tell it that I wanted to use I and J instead of E0 and E1.

Basically, I want to use I and J as E0 and E1. Can I just substitute all of the e0 pins for I and E1 for J, or how would you define the pins as required?

I can use the two E axis just fine right now using t0 and t1, but I need to be able to home them. Any suggestions for how to modify the code? I'm pretty good at digging deep into marlin by now, but some of this is a little above me. This will be an open source project that I will post in a few weeks for anyone to use, but I need to get the code right first.

Photo of the robotic arm here:
https://photos.google.com/share/AF1QipN7WLjTOSKIV5JZOX2RPzMeGEj-_Eg7QLZPvST-krkJmBXiFYLtGRSrx26LW2dZnA/photo/AF1QipPDmPXj-uZmWzHB3JXrR57uKqLkeQkKRCTJGgaY?key=UzFOQlJvdUYxQmVRZnQ2N3dBREg5SjJaRnJiY2R3

[FR] [6axis_dev] Test G28 with (LINEAR_AXES >= 4 AND L64XX stepper drivers)

Description

Test G28 with (LINEAR_AXES >= 4 AND L64XX stepper drivers)

Steps to Reproduce

  1. See G28.cpp lines 533 ff.

Expected behavior: [What you expect to happen]

Working G28 with (LINEAR_AXES >= 4 AND L64XX stepper drivers)

Actual behavior: [What actually happens]

See G28.cpp lines 533 ff.

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

[6axis_PR1] compile error with TMC 2130 or higher

Description

<TMC driver selection in configuration.h Lines 768 onwards>

Steps to Reproduce

<If selecting any TMC driver from 2130 onwards in the list, produces error - All other drivers are fine>

  1. [First Step]
  2. [Second Step]
  3. [and so on...]

Expected behavior: [What you expect to happen]

Actual behavior: [drivers.h - missing binary operator before token "(" [89, 51]]

Additional Information. This didn't occur with 230820 release

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

problem with I J K sensorless homing

hi, i get the 6 axis working but i try to use the sensorless homing, only X Y Z sensorless homing work, A B C keep moving without stop, and the stallguard threshold is 0, i try google but cant find anything? any ideal how to get A B C sensorless homing to work? thanks

[bug] [2.0.x_E_homing] Homing E axis kills printer with EXTRUDERS 2

Hello,

I have designed and build a SLS printer. It is a corexy system with a laser diode. The Z-axis is used to move the wiper, the E0 axis controls the buildplate en the E1 axis controls the powder buffer.

The mainboard is a bigtreetech SKR1.3, with a TFT3.5 v3 display. All 5 axis are TMC2130 SPI
At the moment only the wiper (z axis) has sensorless homing, the other axis use a mechanical end-switch.

I want to use this Marlin 2.0 E-axis homing branch because it look like it is exactly what I need. So thank you guys for developing it!

However I did need some tinkering to get it to work. Mind you; I am not a programmer, so I don't know what the implication of these changes are , but this is what I did:

In types.h line42 :
changed "E_AXIS = 3," to " E_AXIS = 3, E_HEAD = 3,"

In language.h added two lines:
#define STR_E_MIN "E_min"
#define STR_E_MAX "E_max"

I had to comment out: //#define EMERGENCY_PARSER Because it gave a hole bunch of errors that ended with: ......fatal error: ../inc/MarlinConfigPre.h: No such file or directory

Now it does compile, and I can home and control the the XY and Z axis via the UBS and the TFT display.
M119 shows the switches for X Y Z and E work as they should.

And now for my real problem:

When I give a G28 E command the printer halts and the display shows "printer halted, killed"

Also giving a "G0 E10 F20" or "G0 E-10 F20" command, and manually pressing the end switch does not stop the movement.

Does anybody know how to resolve this, or it it a bug?

-->

G28 Kills the printed, and needs to reset.

Steps to Reproduce

  1. Start with Marlin 2.0 E-axis homing branch
  2. configuring to the setup as described above
  3. Change the 3 lines of code as described above
  4. Build the Firmware.bin and upload it to the printer
  5. Give a G28 E command

Expected behavior:

That the E-axis moves down until it hits a switch.

Actual behavior:

Printer stops working and shows a error message"printer halted , killed"

Additional Information

I really hope some some one get help me with this issue

Best Regards,

Erwin

Configuration.zip

[BUG][bf2_6axis_dev] triggering limit switches for axes I, J, K is not recognized by firmware

Description

With the files from the bf_6axes_dev branch downloaded today, when specifying #define NON_E_AXES = 4 or #define NON_E_AXES = 5 or #define NON_E_AXES = 6 and endstops set up for those axes, only triggering of limit switches for axes X, Y and Z is recognized, but not for axes I, J and/or K.

Steps to Reproduce

  1. Use the original PipetBot-A8 as detailed at https://it-by-derandere.blogspot.com/p/pipetbot-a8.html.
  2. visit https://github.com/DerAndere1/Marlin/tree/bf2_6axis_dev and download the files from that branch.
  3. Copy the content of Marlin/src/config/examples/DerAndere/PipetBot-A8 to Marlin/ and confirm the replacement of the existing files Marlin/Configuration.h and Marlin/Configuration_adv.h
  4. Open Configuration.h and change //#define PINS_DEBUG to #define PINS_DEBUG
  5. Upload the configured firmware from step 3 to the microcontroller of the PipetBot-A8
  6. Issue G-code command M43 E1 (e.g. via USB serial connection using either printrun or Universal G-code sender (UGS))
  7. manually trigger the limit switches serving as endstop for the X, Y, Z and I axis (connected to logical pin 11 (digital pin 11)

Expected behavior:
The triggering should be recognized by the firmware and reported to the serial terminal as "minN = 0" (followed by "minN = 1" upon release of the limit switch) where N is replaced by X, Y, Z, or I, depending on the axis code.

Actual behavior:
Only triggering the limit switches for X, Y, Z are recognized and reported to the serial terminal as "minN = 0" followed by "minN = 1". Triggering the limit switches for I, J, K, is not recognized/reported by the firmware.

Additional Information

None

problem with setup 6 axis with dual y and b

hi, i try to use your marlin to setup 6 axis with x and y axis dual (x, y , z, a ,b, c, y2, b2) but i cant build the marlin firmware, i alway get
Marlin\src\HAL\STM32../../inc/SanityCheck.h:605:26: error: static assertion failed: AXIS_RELATIVE_MODES must contain X Y Z I J K elements.
how you setup 6 axis on marlin firmware?

Can not compile with MONITOR_DRIVER_STATUS and TMC_DEBUG activated

Description

Some compilation bugs.

Hardware: Prototype Robot with SKR PRO v1.1 and six axis (TMC2209)
Marlin Dist: BF2_6axis_dev14 0f8be77

Steps to Reproduce

In "configuration_adv.h"

  1. Uncomment #define TMC_DEBUG
  2. Uncomment #define MONITOR_DRIVER_STATUS

Expected behavior: [What you expect to happen]

Compilation

Actual behavior: [What actually happens]

No compilation

Additional Information

It works without MONITOR_DRIVER_STATUS and TMC_DEBUG

I would be glad help you test all the new commits that are coming! This is the best project ever on Github! :)

My config

Config_files.zip

[FR] Configuration for robot with syringe pump

Description

As an example, provide documentation on how to set up a robot with 3 axes for positioning and a stepper that drives a syringe pump should be configured.

Additional Information

  • Include a ZIP file containing your Configuration.h and Configuration_adv.h files.
  • Provide pictures or links to videos that clearly demonstrate the issue.
  • See How Can I Contribute for additional guidelines.

SENSORLESS_HOMING with TMC5160

SENSORLESS_HOMING with TMC5160 (Axis I) doesn't work

Steps to Reproduce

#define NON_E_AXES 4
#define TMC_USE_SW_SPI
#define TMC_DEBUG
#define ??_DRIVER_TYPE TMC5160 (for all Stepper)
#define SENSORLESS_HOMING
#define I_STALL_SENSITIVITY 4
#define I_MIN_ENDSTOP_INVERTING true
#define USE_IMIN_PLUG
#define I_HOME_DIR -1
#define I_MIN_PIN PF12 (BTT GTR and M5 Board)

"SENSORLESS_HOMING" caused a compile error.

I changed the line in TMC_Util.h as follows
struct sensorless_t {bool LIST_N (NON_E_AXES, x, y, z, i, j, k), x2, y2, z2, z3, z4; };

Expected behavior:
The sensorless homing process (eg X28 I) should be work for all non E Axis. The TMC5160 stall detection should set the diag1 pin for a short time to L, which can be evaluated via the switch (I_MIN_PIN).

Actual behavior:
I can see (with my osciloscope) that the register 0x6D (Bit 16-19, sgt0,1,2,3) from the corresponding TMC Chip will be set with the correct value "4" if i send a M914 I4... this looks pretty good. But the Diag1 Pin will not reflect a stall detection.

If i use instead of the diag1 stuff the beta function "SPI_ENDSTOPS", a stall detection will also never detected...

on X and y Axis (also with dual stepper) everything works fine... only I (in my case) don't.

As a result, no stall detection is available for axis I on the DIAG1 pin which can be evaluated via the switch (I_MIN_PIN).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.