2.0 IDEX Independent z offset and other fixes (#11862)
* Add Formbot Raptor board Co-Authored-By: InsanityAutomation <insanityautomation@users.noreply.github.com> * Add a second Z probe Z offset Co-Authored-By: InsanityAutomation <insanityautomation@users.noreply.github.com> * Modify method to utilize live adjustment of hotend z offset Should probably move config option to babystepping and rename as it may now apply to all multiextruder systems * Move config item and catchup other code to current method
This commit is contained in:
parent
217e0efd20
commit
1104054d73
@ -775,6 +775,10 @@
|
||||
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
|
||||
// Note: Extra time may be added to mitigate controller latency.
|
||||
//#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
|
||||
|
||||
// Allow babystepping tool z offsets, allowing compensation for tools at different heights.
|
||||
// Ignored in Independent X Carriage Duplicate mode, where tool 0 Z probe offset will be used.
|
||||
//#define BABYSTEP_HOTEND_Z_OFFSET
|
||||
#endif
|
||||
|
||||
// @section extruder
|
||||
|
@ -138,7 +138,7 @@
|
||||
// The following define selects which electronics board you have.
|
||||
// Please choose the name from boards.h that matches your setup
|
||||
#ifndef MOTHERBOARD
|
||||
#define MOTHERBOARD BOARD_FORMBOT_TREX2
|
||||
#define MOTHERBOARD BOARD_FORMBOT_TREX2PLUS
|
||||
#endif
|
||||
|
||||
// Optional custom name for your RepStrap or other custom machine
|
||||
|
@ -75,8 +75,9 @@
|
||||
#define BOARD_AZTEEG_X3_PRO 68 // Azteeg X3 Pro
|
||||
#define BOARD_ULTIMAIN_2 72 // Ultimainboard 2.x (Uses TEMP_SENSOR 20)
|
||||
#define BOARD_RUMBA 80 // Rumba
|
||||
#define BOARD_FORMBOT_TREX2 81 // Formbot version 1
|
||||
#define BOARD_FORMBOT_TREX3 82 // Formbot T-Rex 3 revision
|
||||
#define BOARD_FORMBOT_TREX2PLUS 95 // Formbot version 1
|
||||
#define BOARD_FORMBOT_TREX3 96 // Formbot T-Rex 3 revision
|
||||
#define BOARD_FORMBOT_RAPTOR 97 // Formbot version 1
|
||||
#define BOARD_BQ_ZUM_MEGA_3D 503 // bq ZUM Mega 3D
|
||||
#define BOARD_MAKEBOARD_MINI 431 // MakeBoard Mini v2.1.2 is a control board sold by MicroMake
|
||||
#define BOARD_TRIGORILLA_13 343 // TriGorilla Anycubic version 1.3 based on RAMPS EFB
|
||||
|
@ -36,9 +36,23 @@
|
||||
|
||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
||||
FORCE_INLINE void mod_zprobe_zoffset(const float &offs) {
|
||||
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
|
||||
if (active_extruder == 0)
|
||||
{
|
||||
zprobe_zoffset += offs;
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOLNPAIR(MSG_PROBE_Z_OFFSET ": ", zprobe_zoffset);
|
||||
} else {
|
||||
hotend_offset[Z_AXIS][active_extruder] -= offs;
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOLNPAIR(MSG_IDEX_Z_OFFSET ": ", hotend_offset[Z_AXIS][active_extruder]);
|
||||
}
|
||||
#else
|
||||
zprobe_zoffset += offs;
|
||||
SERIAL_ECHO_START();
|
||||
SERIAL_ECHOLNPAIR(MSG_PROBE_Z_OFFSET ": ", zprobe_zoffset);
|
||||
#endif
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -32,7 +32,9 @@ void GcodeSuite::M851() {
|
||||
if (parser.seenval('Z')) {
|
||||
const float value = parser.value_linear_units();
|
||||
if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
|
||||
{
|
||||
zprobe_zoffset = value;
|
||||
}
|
||||
else {
|
||||
SERIAL_ERROR_START();
|
||||
SERIAL_ERRORLNPGM("?Z out of range (" STRINGIFY(Z_PROBE_OFFSET_RANGE_MIN) " to " STRINGIFY(Z_PROBE_OFFSET_RANGE_MAX) ")");
|
||||
|
@ -1317,15 +1317,35 @@ void lcd_quick_feedback(const bool clear_buttons) {
|
||||
|
||||
const float new_zoffset = zprobe_zoffset + planner.steps_to_mm[Z_AXIS] * babystep_increment;
|
||||
if (WITHIN(new_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
|
||||
|
||||
|
||||
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
|
||||
if (active_extruder == 0)
|
||||
{
|
||||
thermalManager.babystep_axis(Z_AXIS, babystep_increment);
|
||||
zprobe_zoffset = new_zoffset;
|
||||
} else {
|
||||
thermalManager.babystep_axis(Z_AXIS, babystep_increment);
|
||||
hotend_offset[Z_AXIS][active_extruder] -= (planner.steps_to_mm[Z_AXIS] * babystep_increment);
|
||||
}
|
||||
#else
|
||||
zprobe_zoffset = new_zoffset;
|
||||
#endif
|
||||
lcdDrawUpdate = LCDVIEW_CALL_REDRAW_NEXT;
|
||||
}
|
||||
}
|
||||
if (lcdDrawUpdate) {
|
||||
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
|
||||
if (active_extruder == 0) {
|
||||
lcd_implementation_drawedit(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_zoffset));
|
||||
} else {
|
||||
lcd_implementation_drawedit(PSTR(MSG_IDEX_Z_OFFSET), ftostr43sign(hotend_offset[Z_AXIS][active_extruder]));
|
||||
}
|
||||
#endif
|
||||
#if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY)
|
||||
if (active_extruder == 0) {
|
||||
_lcd_zoffset_overlay_gfx(zprobe_zoffset);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,7 @@
|
||||
#include "../module/motion.h" // for active_extruder
|
||||
#endif
|
||||
|
||||
void lcd_return_to_status();
|
||||
bool lcd_hasstatus();
|
||||
void lcd_setstatus(const char* message, const bool persist=false);
|
||||
void lcd_setstatusPGM(const char* message, const int8_t level=0);
|
||||
|
@ -153,7 +153,8 @@ typedef struct SettingsDataStruct {
|
||||
//
|
||||
// HAS_BED_PROBE
|
||||
//
|
||||
float zprobe_zoffset; // M851 Z
|
||||
|
||||
float zprobe_zoffset;
|
||||
|
||||
//
|
||||
// ABL_PLANAR
|
||||
@ -494,11 +495,11 @@ void MarlinSettings::postprocess() {
|
||||
for (uint8_t q = mesh_num_x * mesh_num_y; q--;) EEPROM_WRITE(dummy);
|
||||
#endif // MESH_BED_LEVELING
|
||||
|
||||
_FIELD_TEST(zprobe_zoffset);
|
||||
|
||||
#if !HAS_BED_PROBE
|
||||
const float zprobe_zoffset = 0;
|
||||
#endif
|
||||
|
||||
_FIELD_TEST(zprobe_zoffset);
|
||||
EEPROM_WRITE(zprobe_zoffset);
|
||||
|
||||
//
|
||||
@ -1180,11 +1181,11 @@ void MarlinSettings::postprocess() {
|
||||
for (uint16_t q = mesh_num_x * mesh_num_y; q--;) EEPROM_READ(dummy);
|
||||
#endif // MESH_BED_LEVELING
|
||||
|
||||
_FIELD_TEST(zprobe_zoffset);
|
||||
|
||||
#if !HAS_BED_PROBE
|
||||
float zprobe_zoffset;
|
||||
#endif
|
||||
|
||||
_FIELD_TEST(zprobe_zoffset);
|
||||
EEPROM_READ(zprobe_zoffset);
|
||||
|
||||
//
|
||||
|
@ -1502,15 +1502,15 @@ void homeaxis(const AxisEnum axis) {
|
||||
soft_endstop_max[X_AXIS] = dual_max_x;
|
||||
}
|
||||
else if (dxc_is_duplicating()) {
|
||||
// In Duplication Mode, T0 can move as far left as X_MIN_POS
|
||||
// In Duplication Mode, T0 can move as far left as X1_MIN_POS
|
||||
// but not so far to the right that T1 would move past the end
|
||||
soft_endstop_min[X_AXIS] = base_min_pos(X_AXIS);
|
||||
soft_endstop_max[X_AXIS] = MIN(base_max_pos(X_AXIS), dual_max_x - duplicate_extruder_x_offset);
|
||||
soft_endstop_min[X_AXIS] = X1_MIN_POS;
|
||||
soft_endstop_max[X_AXIS] = MIN(X1_MAX_POS, dual_max_x - duplicate_extruder_x_offset);
|
||||
}
|
||||
else {
|
||||
// In other modes, T0 can move from X_MIN_POS to X_MAX_POS
|
||||
soft_endstop_min[axis] = base_min_pos(axis);
|
||||
soft_endstop_max[axis] = base_max_pos(axis);
|
||||
// In other modes, T0 can move from X1_MIN_POS to X1_MAX_POS
|
||||
soft_endstop_min[X_AXIS] = X1_MIN_POS;
|
||||
soft_endstop_max[X_AXIS] = X1_MAX_POS;
|
||||
}
|
||||
}
|
||||
#elif ENABLED(DELTA)
|
||||
|
@ -22,13 +22,12 @@
|
||||
|
||||
#include "tool_change.h"
|
||||
|
||||
#include "probe.h"
|
||||
#include "motion.h"
|
||||
#include "planner.h"
|
||||
|
||||
#include "../Marlin.h"
|
||||
|
||||
#include "../inc/MarlinConfig.h"
|
||||
|
||||
#if ENABLED(PARKING_EXTRUDER) && PARKING_EXTRUDER_SOLENOIDS_DELAY > 0
|
||||
#include "../gcode/gcode.h" // for dwell()
|
||||
#endif
|
||||
@ -57,6 +56,10 @@
|
||||
#include "../feature/fanmux.h"
|
||||
#endif
|
||||
|
||||
#if ENABLED(ULTIPANEL)
|
||||
#include "../lcd/ultralcd.h"
|
||||
#endif
|
||||
|
||||
#if DO_SWITCH_EXTRUDER
|
||||
|
||||
#if EXTRUDERS > 3
|
||||
@ -498,12 +501,25 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
|
||||
active_extruder = tmp_extruder;
|
||||
update_software_endstops(X_AXIS);
|
||||
active_extruder = !tmp_extruder;
|
||||
#endif
|
||||
|
||||
// Don't move the new extruder out of bounds
|
||||
if (!WITHIN(current_position[X_AXIS], soft_endstop_min[X_AXIS], soft_endstop_max[X_AXIS]))
|
||||
no_move = true;
|
||||
|
||||
#else
|
||||
// No software endstops? Use the configured limits
|
||||
if (active_extruder == 0) {
|
||||
if (!WITHIN(current_position[X_AXIS], X2_MIN_POS, X2_MAX_POS))
|
||||
no_move = true;
|
||||
}
|
||||
else if (!WITHIN(current_position[X_AXIS], X1_MIN_POS, X1_MAX_POS))
|
||||
no_move = true;
|
||||
#endif
|
||||
|
||||
#if ENABLED(ULTIPANEL)
|
||||
lcd_return_to_status();
|
||||
#endif
|
||||
|
||||
if (!no_move) set_destination_from_current();
|
||||
dualx_tool_change(tmp_extruder, no_move); // Can modify no_move
|
||||
|
||||
@ -569,6 +585,13 @@ void tool_change(const uint8_t tmp_extruder, const float fr_mm_s/*=0.0*/, bool n
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("Move back", destination);
|
||||
#endif
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
// Dual x carriage does not properly apply these to current position due to command ordering
|
||||
// So we apply the offsets for y and z to the destination here. X cannot have an offset in this mode
|
||||
// as it is utilized for X2 home position.
|
||||
destination[Y_AXIS] -= hotend_offset[Y_AXIS][active_extruder] - hotend_offset[Y_AXIS][tmp_extruder];
|
||||
destination[Z_AXIS] -= hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder];
|
||||
#endif
|
||||
// Move back to the original (or tweaked) position
|
||||
do_blocking_move_to(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS]);
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
|
@ -132,8 +132,10 @@
|
||||
#include "pins_AZTEEG_X3_PRO.h" // ATmega2560 env:megaatmega2560
|
||||
#elif MB(ULTIMAIN_2)
|
||||
#include "pins_ULTIMAIN_2.h" // ATmega2560 env:megaatmega2560
|
||||
#elif MB(FORMBOT_TREX2)
|
||||
#include "pins_FORMBOT_TREX2.h" // ATmega2560 env:megaatmega2560
|
||||
#elif MB(FORMBOT_RAPTOR)
|
||||
#include "pins_FORMBOT_RAPTOR.h" // ATmega2560 env:megaatmega2560
|
||||
#elif MB(FORMBOT_TREX2PLUS)
|
||||
#include "pins_FORMBOT_TREX2PLUS.h" // ATmega2560 env:megaatmega2560
|
||||
#elif MB(FORMBOT_TREX3)
|
||||
#include "pins_FORMBOT_TREX3.h" // ATmega2560 env:megaatmega2560
|
||||
#elif MB(RUMBA)
|
||||
|
184
Marlin/src/pins/pins_FORMBOT_RAPTOR.h
Normal file
184
Marlin/src/pins/pins_FORMBOT_RAPTOR.h
Normal file
@ -0,0 +1,184 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Formbot pin assignments
|
||||
*/
|
||||
|
||||
#ifndef __AVR_ATmega2560__
|
||||
#error "Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu."
|
||||
#endif
|
||||
|
||||
#if E_STEPPERS > 3 || HOTENDS > 3
|
||||
#error "Formbot supports up to 3 hotends / E-steppers. Comment this line to keep going."
|
||||
#endif
|
||||
|
||||
#define DEFAULT_MACHINE_NAME "Formbot Raptor"
|
||||
#define BOARD_NAME "Formbot Raptor"
|
||||
|
||||
//
|
||||
// Servos
|
||||
//
|
||||
#define SERVO0_PIN 11
|
||||
#define SERVO1_PIN 6
|
||||
#define SERVO2_PIN 5
|
||||
#define SERVO3_PIN -1
|
||||
|
||||
//
|
||||
// Limit Switches
|
||||
//
|
||||
#define X_MIN_PIN 3
|
||||
#ifndef X_MAX_PIN
|
||||
#define X_MAX_PIN 2
|
||||
#endif
|
||||
#define Y_MIN_PIN 14
|
||||
#define Y_MAX_PIN 15
|
||||
#define Z_MIN_PIN 18
|
||||
#define Z_MAX_PIN 19
|
||||
|
||||
//
|
||||
// Z Probe (when not Z_MIN_PIN)
|
||||
//
|
||||
#ifndef Z_MIN_PROBE_PIN
|
||||
#define Z_MIN_PROBE_PIN 32
|
||||
#endif
|
||||
|
||||
//
|
||||
// Steppers
|
||||
//
|
||||
#define X_STEP_PIN 54
|
||||
#define X_DIR_PIN 55
|
||||
#define X_ENABLE_PIN 38
|
||||
#ifndef X_CS_PIN
|
||||
#define X_CS_PIN 53
|
||||
#endif
|
||||
|
||||
#define Y_STEP_PIN 60
|
||||
#define Y_DIR_PIN 61
|
||||
#define Y_ENABLE_PIN 56
|
||||
#ifndef Y_CS_PIN
|
||||
#define Y_CS_PIN 49
|
||||
#endif
|
||||
|
||||
#define Z_STEP_PIN 46
|
||||
#define Z_DIR_PIN 48
|
||||
#define Z_ENABLE_PIN 62
|
||||
#ifndef Z_CS_PIN
|
||||
#define Z_CS_PIN 40
|
||||
#endif
|
||||
|
||||
#define E0_STEP_PIN 26
|
||||
#define E0_DIR_PIN 28
|
||||
#define E0_ENABLE_PIN 24
|
||||
#ifndef E0_CS_PIN
|
||||
#define E0_CS_PIN 42
|
||||
#endif
|
||||
|
||||
#define E1_STEP_PIN 36
|
||||
#define E1_DIR_PIN 34
|
||||
#define E1_ENABLE_PIN 30
|
||||
#ifndef E1_CS_PIN
|
||||
#define E1_CS_PIN 44
|
||||
#endif
|
||||
|
||||
#define E2_STEP_PIN 42
|
||||
#define E2_DIR_PIN 43
|
||||
#define E2_ENABLE_PIN 44
|
||||
|
||||
//
|
||||
// Temperature Sensors
|
||||
//
|
||||
#define TEMP_0_PIN 13 // Analog Input
|
||||
#define TEMP_1_PIN 15 // Analog Input
|
||||
#define TEMP_BED_PIN 14 // Analog Input
|
||||
|
||||
// SPI for Max6675 or Max31855 Thermocouple
|
||||
#if DISABLED(SDSUPPORT)
|
||||
#define MAX6675_SS 66 // Do not use pin 53 if there is even the remote possibility of using Display/SD card
|
||||
#else
|
||||
#define MAX6675_SS 66 // Do not use pin 49 as this is tied to the switch inside the SD card socket to detect if there is an SD card present
|
||||
#endif
|
||||
|
||||
//
|
||||
// Augmentation for auto-assigning RAMPS plugs
|
||||
//
|
||||
#if DISABLED(IS_RAMPS_EEB) && DISABLED(IS_RAMPS_EEF) && DISABLED(IS_RAMPS_EFB) && DISABLED(IS_RAMPS_EFF) && DISABLED(IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D)
|
||||
#if HOTENDS > 1
|
||||
#if TEMP_SENSOR_BED
|
||||
#define IS_RAMPS_EEB
|
||||
#else
|
||||
#define IS_RAMPS_EEF
|
||||
#endif
|
||||
#elif TEMP_SENSOR_BED
|
||||
#define IS_RAMPS_EFB
|
||||
#else
|
||||
#define IS_RAMPS_EFF
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// Heaters / Fans
|
||||
//
|
||||
#define HEATER_0_PIN 10
|
||||
#define HEATER_1_PIN 7
|
||||
#define HEATER_BED_PIN 8
|
||||
|
||||
#define LED4_PIN 5
|
||||
|
||||
#define FAN_PIN 9
|
||||
|
||||
#if DISABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
#define FAN1_PIN 4
|
||||
#endif
|
||||
|
||||
//
|
||||
// Misc. Functions
|
||||
//
|
||||
#define SDSS 53
|
||||
#define LED_PIN 13
|
||||
|
||||
// Use the RAMPS 1.4 Analog input 5 on the AUX2 connector
|
||||
#define FILWIDTH_PIN 5 // Analog Input
|
||||
|
||||
#ifndef PS_ON_PIN
|
||||
#define PS_ON_PIN 12
|
||||
#endif
|
||||
|
||||
//
|
||||
// LCD / Controller
|
||||
//
|
||||
// Formbot only supports REPRAP_DISCOUNT_SMART_CONTROLLER
|
||||
//
|
||||
#if ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
|
||||
#define LCD_PINS_RS 16
|
||||
#define LCD_PINS_ENABLE 17
|
||||
#define LCD_PINS_D4 23
|
||||
#define LCD_PINS_D5 25
|
||||
#define LCD_PINS_D6 27
|
||||
#define LCD_PINS_D7 29
|
||||
#define BEEPER_PIN 37
|
||||
#define BTN_EN1 31
|
||||
#define BTN_EN2 33
|
||||
#define BTN_ENC 35
|
||||
#define SD_DETECT_PIN 49
|
||||
#define KILL_PIN 41
|
||||
#endif
|
@ -143,15 +143,15 @@
|
||||
#define HEATER_BED_PIN 58
|
||||
|
||||
#define FAN_PIN 9
|
||||
//#define FAN1_PIN 4
|
||||
#if(DISABLED(FILAMENT_RUNOUT_SENSOR))
|
||||
// Though defined as a fan pin, it is utilized as a dedicated laser pin by Formbot. May
|
||||
// swapped plug and play with a fil;ament runout sensor.
|
||||
#define FAN1_PIN 4
|
||||
#endif
|
||||
|
||||
|
||||
#if DISABLED(ICSP_PORT_SWITCHES)
|
||||
//#define FIL_RUNOUT_PIN 22
|
||||
//#define FIL_RUNOUT2_PIN 21
|
||||
#elif ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
#define FIL_RUNOUT_PIN 52
|
||||
#define FIL_RUNOUT2_PIN 50
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
#define FIL_RUNOUT_PIN 4
|
||||
//#define FIL_RUNOUT2_PIN -1
|
||||
#endif
|
||||
|
||||
//
|
Loading…
Reference in New Issue
Block a user