From bf12ae9834184ce08f2af625658640b51533e3f7 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Tue, 25 Jul 2017 11:09:31 -0600 Subject: [PATCH] Update to the Z-offset screen. Updated Configuration_LulzBot.h --- Marlin/Conditionals_LulzBot.h | 720 +++++++++++++++++++++++++++++++ Marlin/Configuration_LulzBot.h | 748 ++------------------------------- Marlin/dogm_bitmaps_LulzBot.h | 113 ++--- 3 files changed, 779 insertions(+), 802 deletions(-) create mode 100644 Marlin/Conditionals_LulzBot.h diff --git a/Marlin/Conditionals_LulzBot.h b/Marlin/Conditionals_LulzBot.h new file mode 100644 index 000000000..b919cc6dc --- /dev/null +++ b/Marlin/Conditionals_LulzBot.h @@ -0,0 +1,720 @@ +#ifndef CONDITIONALS_LULZBOT +#define CONDITIONALS_LULZBOT + +/* We define the LULZBOT_ values based on which printer or toolhead variants we are compiling + * for, these constants are then placed where appropriate in the following files: + * + * - Configuration.h + * - Configuration_adv.h + * - pins.h + * - Default_Version.h + * + * Using our own set of constants and limiting modification to Marlin's files makes it easier to + * merge from upstream. All values are prefixed with LULZBOT_ so that it is easy to see what + * was changed and where. If a setting is commented out, we define a LULZBOT_{SETTING}_DISABLED + * here, just so we have a record of things that got disabled. + */ + +#if ( \ + !defined(LULZBOT_Gladiola_Mini) && \ + !defined(LULZBOT_Huerfano_Mini) && \ + !defined(LULZBOT_Gladiola_GLCD) && \ + !defined(LULZBOT_Oliveoil_TAZ_6) && \ + !defined(LULZBOT_Huerfano_TAZ_7) \ +) || ( \ + !defined(TOOLHEAD_Gladiola_SingleExtruder) && \ + !defined(TOOLHEAD_Albatross_Flexystruder) && \ + !defined(TOOLHEAD_Heather_Aero) && \ + !defined(TOOLHEAD_Oliveoil_SingleExtruder) && \ + !defined(TOOLHEAD_Kanyu_Flexystruder) && \ + !defined(TOOLHEAD_Opah_Moarstruder) && \ + !defined(TOOLHEAD_Javelin_DualExtruder) && \ + !defined(TOOLHEAD_Longfin_FlexyDually) && \ + !defined(TOOLHEAD_Yellowfin_DualExtruder) && \ + !defined(TOOLHEAD_Angelfish_Aero) \ +) + #error Must specify model and toolhead to build: + #error + #error make clean + #error make MODEL= TOOLHEAD= + #error + #error Printer Model Choices: + #error Gladiola_Mini // Lulzbot Mini (Gladiola) + #error Huerfano_Mini // Lulzbot Mini (Huerfano) + #error Gladiola_GLCD // Lulzbot Mini (Gladiola w/ LCD) + #error Oliveoil_TAZ_6 // Lulzbot TAZ 6 (Olive Oil) + #error Huerfano_TAZ_7 // Lulzbot TAZ 7 (Huerfano) + #error + #error Mini Toolhead Choices: + #error Gladiola_SingleExtruder // Standard Single Extruder (Gladiola) + #error Albatross_Flexystruder // Flexystruder (Albatross) + #error Heather_Aero // Titan AERO (Heather) + #error + #error TAZ Toolhead Choices: + #error Oliveoil_SingleExtruder // Standard Single Extruder (TAZ Olive) + #error Kanyu_Flexystruder // Flexystruder (Kanyu) + #error Opah_Moarstruder // Moarstruder (Opah) + #error Javelin_DualExtruder // Dual Extruder v2 (Javelin) + #error Longfin_FlexyDually // FlexyDually (Longfin) + #error Yellowfin_DualExtruder // Dual Extruder v3 (Yellowfin) + #error Angelfish_Aero // Titan AERO (Angelfish) +#endif + +#define LULZBOT_FW_VERSION ".10" + +// Select options based on printer model + +#if defined(LULZBOT_Gladiola_Mini) + #define LULZBOT_CUSTOM_MACHINE_NAME "Mini" + #define LULZBOT_IS_MINI + #define LULZBOT_MINI_BED +#endif + +#if defined(LULZBOT_Huerfano_Mini) + // Prototype Mini w/ Z-Belt + #define LULZBOT_CUSTOM_MACHINE_NAME "Mini Z-Belt" + #define LULZBOT_IS_MINI + #define LULZBOT_MINI_BED +#endif + +#if defined(LULZBOT_Gladiola_GLCD) + #define LULZBOT_CUSTOM_MACHINE_NAME "Mini GLCD" + #define LULZBOT_IS_MINI + #define LULZBOT_MINI_BED + #define LULZBOT_USE_LCD_DISPLAY +#endif + +#if defined(LULZBOT_Oliveoil_TAZ_6) + #define LULZBOT_CUSTOM_MACHINE_NAME "TAZ 6" + #define LULZBOT_IS_TAZ + #define LULZBOT_TAZ_BED + #define LULZBOT_USE_LCD_DISPLAY +#endif + +#if defined(LULZBOT_Huerfano_TAZ_7) + // Prototype TAZ w/ Z-Belt + #define LULZBOT_CUSTOM_MACHINE_NAME "TAZ 7" + #define LULZBOT_IS_TAZ + #define LULZBOT_TAZ_BED + #define LULZBOT_USE_LCD_DISPLAY +#endif + +// Shared values +#define LULZBOT_STRING_CONFIG_H_AUTHOR "(Aleph Objects Inc., LulzBot Diffusion)" +#define LULZBOT_BUFSIZE 10 +#define LULZBOT_EEPROM_SETTINGS +#define LULZBOT_EMERGENCY_PARSER + +// Temperature settings + +#define LULZBOT_TEMP_SENSOR_0 5 +#define LULZBOT_TEMP_SENSOR_BED 7 +#define LULZBOT_TEMP_RESIDENCY_TIME 1 +#define LULZBOT_TEMP_HYSTERESIS 10 +#define LULZBOT_TEMP_WINDOW 10 + +#define LULZBOT_TEMP_BED_RESIDENCY_TIME 1 +#define LULZBOT_TEMP_BED_HYSTERESIS 5 +#define LULZBOT_TEMP_BED_WINDOW 5 + +#define LULZBOT_HEATER_MAXTEMP 305 +#define LULZBOT_EXTRUDE_MINTEMP 120 + +#define LULZBOT_PIDTEMPBED + +#define LULZBOT_MAX_BED_POWER 206 + +#define LULZBOT_THERMAL_PROTECTION_PERIOD 15 // Seconds +#define LULZBOT_THERMAL_PROTECTION_HYSTERESIS 30 // Degrees Celsius + +#define LULZBOT_THERMAL_PROTECTION_BED_PERIOD 15 // Seconds +#define LULZBOT_THERMAL_PROTECTION_BED_HYSTERESIS 10 // Degrees Celsius + +// Motherboard specifics and custom pins for probing. + +#if defined(LULZBOT_IS_MINI) + #define LULZBOT_MOTHERBOARD BOARD_MINIRAMBO + #define LULZBOT_CONTROLLER_FAN_PIN FAN1_PIN // Digital pin 6 + #define LULZBOT_Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN + #define LULZBOT_BAUDRATE 115200 + +#elif defined(LULZBOT_IS_TAZ) + #define LULZBOT_MOTHERBOARD BOARD_RAMBO + #define LULZBOT_CONTROLLER_FAN_PIN FAN2_PIN // Digital pin 2 + #define LULZBOT_Z_MIN_PROBE_ENDSTOP + #define LULZBOT_Z_MIN_PROBE_PIN SERVO0_PIN // Digital pin 22 + #define LULZBOT_BAUDRATE 250000 +#endif + +#define LULZBOT_USE_CONTROLLER_FAN +#define LULZBOT_USE_XMIN_PLUG +#define LULZBOT_USE_YMIN_PLUG +#define LULZBOT_USE_ZMIN_PLUG +#define LULZBOT_USE_XMAX_PLUG +#define LULZBOT_USE_YMAX_PLUG +#define LULZBOT_USE_ZMAX_PLUG + +/* Endstop settings are determined by printer model, except for the + * X_MAX which varies by toolhead. */ + +#if defined(LULZBOT_Gladiola_Mini) || defined(LULZBOT_Gladiola_GLCD) + #define LULZBOT_X_MIN_ENDSTOP_INVERTING true + #define LULZBOT_Y_MIN_ENDSTOP_INVERTING true + #define LULZBOT_Y_MAX_ENDSTOP_INVERTING true + #define LULZBOT_Z_MAX_ENDSTOP_INVERTING true + +#elif defined(LULZBOT_IS_TAZ) || defined(LULZBOT_Huerfano_Mini) + #define LULZBOT_X_MIN_ENDSTOP_INVERTING false + #define LULZBOT_Y_MIN_ENDSTOP_INVERTING false + #define LULZBOT_Y_MAX_ENDSTOP_INVERTING false + #define LULZBOT_Z_MAX_ENDSTOP_INVERTING false +#endif + +#define LULZBOT_Z_MIN_ENDSTOP_INVERTING true +#define LULZBOT_Z_MIN_PROBE_ENDSTOP_INVERTING true + +#define LULZBOT_INVERT_X_DIR false +#define LULZBOT_INVERT_Y_DIR true +#define LULZBOT_INVERT_Z_DIR false +#define LULZBOT_INVERT_E0_DIR true +#define LULZBOT_INVERT_E1_DIR true + +#if defined(LULZBOT_IS_MINI) + #define LULZBOT_HOMING_Z_WITH_PROBE false + #define LULZBOT_INVERT_X_HOME_DIR -1 + #define LULZBOT_INVERT_Y_HOME_DIR 1 + #define LULZBOT_INVERT_Z_HOME_DIR 1 + #define LULZBOT_QUICKHOME + +#elif defined(LULZBOT_IS_TAZ) + #define LULZBOT_HOMING_Z_WITH_PROBE true + #define LULZBOT_INVERT_X_HOME_DIR -1 + #define LULZBOT_INVERT_Y_HOME_DIR 1 + #define LULZBOT_INVERT_Z_HOME_DIR -1 + #define LULZBOT_QUICKHOME +#endif + +#if defined(LULZBOT_MINI_BED) + #define LULZBOT_LEFT_PROBE_BED_POSITION 0 + #define LULZBOT_RIGHT_PROBE_BED_POSITION 164 + #define LULZBOT_BACK_PROBE_BED_POSITION 162 + #define LULZBOT_FRONT_PROBE_BED_POSITION -6 + + #define LULZBOT_HOMING_FEEDRATE_XY (30*60) + #define LULZBOT_HOMING_FEEDRATE_Z (12*60) + +#elif defined(LULZBOT_TAZ_BED) + #define LULZBOT_LEFT_PROBE_BED_POSITION -9 + #define LULZBOT_RIGHT_PROBE_BED_POSITION 288 + #define LULZBOT_BACK_PROBE_BED_POSITION 289 + #define LULZBOT_FRONT_PROBE_BED_POSITION -9 + + #define LULZBOT_HOMING_FEEDRATE_XY (50*60) + #define LULZBOT_HOMING_FEEDRATE_Z (8*60) + + // Only the TAZ models have a Z-homing button + #define LULZBOT_Z_SAFE_HOMING + #define LULZBOT_Z_SAFE_HOMING_X_POINT (-19) + #define LULZBOT_Z_SAFE_HOMING_Y_POINT (258) + #define LULZBOT_Z_HOMING_HEIGHT 5 + #define LULZBOT_AFTER_Z_HOME_CMD "G0 Z5" // Raise to clear homing button +#endif + +#if defined(LULZBOT_MINI_BED) + // Mini has a horizontal wiping pad on the back of the bed + #define LULZBOT_WIPE_X1 115 + #define LULZBOT_WIPE_X2 45 + #define LULZBOT_WIPE_Y1 173 + #define LULZBOT_WIPE_Y2 173 + +#elif defined(LULZBOT_TAZ_BED) + // TAZ has a vertical wiping pad on the left side of the bed + #define LULZBOT_WIPE_X1 -16 + #define LULZBOT_WIPE_X2 -16 + #define LULZBOT_WIPE_Y1 95 + #define LULZBOT_WIPE_Y2 25 +#endif + +#define LULZBOT_NOZZLE_CLEAN_FEATURE + +#define LULZBOT_AUTO_BED_LEVELING_3POINT +#define LULZBOT_ABL_PROBE_PT_1_X LULZBOT_LEFT_PROBE_BED_POSITION +#define LULZBOT_ABL_PROBE_PT_1_Y LULZBOT_FRONT_PROBE_BED_POSITION +#define LULZBOT_ABL_PROBE_PT_2_X LULZBOT_RIGHT_PROBE_BED_POSITION +#define LULZBOT_ABL_PROBE_PT_2_Y LULZBOT_FRONT_PROBE_BED_POSITION +#define LULZBOT_ABL_PROBE_PT_3_X LULZBOT_RIGHT_PROBE_BED_POSITION +#define LULZBOT_ABL_PROBE_PT_3_Y LULZBOT_BACK_PROBE_BED_POSITION + +/* Define probe parameters related to bed leveling, + * e.g. the washers on the bed. These are confusingly + * named Z_MIN_PROBE in Marlin. The Z-Home switch + * is called Z_MIN_ENDSTOP + */ +#define LULZBOT_FIX_MOUNTED_PROBE +#define LULZBOT_PROBE_DOUBLE_TOUCH +#define LULZBOT_X_PROBE_OFFSET_FROM_EXTRUDER 0 +#define LULZBOT_Y_PROBE_OFFSET_FROM_EXTRUDER 0 +#define LULZBOT_Z_PROBE_OFFSET_FROM_EXTRUDER -1.5 +#define LULZBOT_Z_PROBE_OFFSET_RANGE_MIN -2 +#define LULZBOT_Z_PROBE_OFFSET_RANGE_MAX 5 +#define LULZBOT_XY_PROBE_SPEED 6000 +#define LULZBOT_Z_PROBE_SPEED_SLOW (1*60) +#define LULZBOT_Z_PROBE_SPEED_FAST (8*60) +#define LULZBOT_Z_CLEARANCE_DEPLOY_PROBE 5 +#define LULZBOT_Z_CLEARANCE_BETWEEN_PROBES 5 + +/* We use G92 for adjusting the coordinate space in the Yellowfin toolhead, + * however upstream Marlin has made it so G92 adjusts the software endstops, + * which makes G92 unusable for our use case. As an interim measure, revert + * to the previous behavior of G29 using NO_WORKSPACE_OFFSETS +*/ +#define LULZBOT_NO_WORKSPACE_OFFSETS + +/* Enable the probe pins only only when homing/probing, + * as this helps reduce EMI by grounding the lines. + * + * On Mini: + * Z_MIN_PIN are the bed washers. + * + * On TAZ: + * Z_MIN_PIN corresponds to the Z-Home push button. + * LULZBOT_Z_MIN_PROBE_PIN are the bed washers. + */ +#if defined(LULZBOT_MINI_BED) + #define LULZBOT_ENABLE_PROBE_PINS(enable) { \ + if(enable) { \ + /* Set as inputs with pull-up resistor */ \ + SET_INPUT(Z_MIN_PIN); \ + WRITE(Z_MIN_PIN, HIGH); \ + } else { \ + /* Ground to prevent EMI */ \ + SET_OUTPUT(Z_MIN_PIN); \ + WRITE(Z_MIN_PIN, LOW); \ + } \ + } + +#elif defined(LULZBOT_TAZ_BED) + #define LULZBOT_ENABLE_PROBE_PINS(enable) { \ + if(enable) { \ + /* Set both as inputs with pull-up resistor */ \ + SET_INPUT(LULZBOT_Z_MIN_PROBE_PIN); \ + WRITE(LULZBOT_Z_MIN_PROBE_PIN, HIGH); \ + SET_INPUT(Z_MIN_PIN); \ + WRITE(Z_MIN_PIN, HIGH); \ + } else { \ + /* Ground both pins to prevent EMI */ \ + SET_OUTPUT(LULZBOT_Z_MIN_PROBE_PIN); \ + WRITE(LULZBOT_Z_MIN_PROBE_PIN, LOW); \ + SET_OUTPUT(Z_MIN_PIN); \ + WRITE(Z_MIN_PIN, LOW); \ + } \ + } +#endif + +#define LULZBOT_FAN_KICKSTART_TIME 100 +#define LULZBOT_FAN_MIN_PWM 70 +#define LULZBOT_HOST_KEEPALIVE_FEATURE_DISABLED + +#if defined(LULZBOT_USE_LCD_DISPLAY) + #define LULZBOT_REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER + #define LULZBOT_SDSUPPORT + #define LULZBOT_XYZ_HOLLOW_FRAME_DISABLE + #define LULZBOT_MENU_HOLLOW_FRAME_DISABLE + #define LULZBOT_USE_SMALL_INFOFONT + #define LULZBOT_BABYSTEPPING + #define LULZBOT_BABYSTEP_ZPROBE_OFFSET + #define LULZBOT_SHOW_CUSTOM_BOOTSCREEN + #define LULZBOT_ENCODER_PULSES_PER_STEP 2 + #define LULZBOT_ENCODER_STEPS_PER_MENU_ITEM 1 + #define LULZBOT_COOLING_MESSAGES + #define LULZBOT_MENU_BED_LEVELING_GCODE "G28 XY\nM109 S175\nG28 Z\nM109 R145\nG12\nG29\nM104 S0" + #if defined(LULZBOT_Gladiola_GLCD) + // In the experimental Gladiola_GLCD, the encoder direction is reversed. + #define LULZBOT_REVERSE_ENCODER_DIRECTION + #endif + // Confusingly, Marlin shows three separate e-step settings: the active nozzle, nozzle1, nozzle2. + // We hide the first since it is redundant. + #define LULZBOT_HIDE_E_STEPS_FOR_ACTIVE_NOZZLE +#endif + +/*********************************************** COMMON TOOLHEADS PARAMETERS *****************************/ + +#define LULZBOT_DEFAULT_EJERK 10.0 +#if defined(LULZBOT_IS_TAZ) + #define LULZBOT_E_STEPS 830 +#elif defined(LULZBOT_IS_MINI) + #define LULZBOT_E_STEPS 833 +#endif + +/*********************************************** MINI TOOLHEADS *******************************************/ + +#if defined(TOOLHEAD_Gladiola_SingleExtruder) || defined(TOOLHEAD_Albatross_Flexystruder) || defined(TOOLHEAD_Heather_Aero) + #define LULZBOT_TOOLHEAD_VER VERSION_STRING + #define LULZBOT_UUID "351487b6-ca9a-4c1a-8765-d668b1da6585" + #define LULZBOT_EXTRUDERS 1 + #define LULZBOT_X_MAX_POS 175 + #define LULZBOT_X_MIN_POS 0 + #define LULZBOT_Y_MAX_POS 191 + #define LULZBOT_Y_MIN_POS -10 + #define LULZBOT_AO_Hexagon + + #define PWM_MOTOR_CURRENT_E 1250 +#endif /* TOOLHEAD_Gladiola_SingleExtruder || TOOLHEAD_Albatross_Flexystruder || TOOLHEAD_Heather_Aero */ + +#if defined(TOOLHEAD_Gladiola_SingleExtruder) + #define LULZBOT_LCD_TOOLHEAD_NAME "Single Extruder" +// 16 chars max ^^^^^^^^^^^^^^^ + #define LULZBOT_X_MAX_ENDSTOP_INVERTING true +#endif /* TOOLHEAD_Gladiola_SingleExtruder */ + +#if defined(TOOLHEAD_Albatross_Flexystruder) + #define LULZBOT_LCD_TOOLHEAD_NAME "Flexystruder" +// 16 chars max ^^^^^^^^^^^^^^^ + #define LULZBOT_X_MAX_ENDSTOP_INVERTING true +#endif /* TOOLHEAD_Albatross_Flexystruder */ + +#if defined(TOOLHEAD_Heather_Aero) + // Prototype Aero toolhead for Mini + #define LULZBOT_LCD_TOOLHEAD_NAME "Titan AERO" +// 16 chars max ^^^^^^^^^^^^^^^ + #define LULZBOT_X_MAX_ENDSTOP_INVERTING true +#endif /* TOOLHEAD_Heather_Aero */ + +/*********************************************** TAZ TOOLHEADS *******************************************/ + +#if defined(TOOLHEAD_Oliveoil_SingleExtruder) || defined(TOOLHEAD_Angelfish_Aero) + #define LULZBOT_TOOLHEAD_VER VERSION_STRING + #define LULZBOT_UUID "845f003c-aebd-4e53-a6b9-7d0984fde609" + #define LULZBOT_EXTRUDERS 1 + #define LULZBOT_X_MAX_POS 300 + #define LULZBOT_X_MIN_POS -20 + #define LULZBOT_Y_MAX_POS 303 + #define LULZBOT_Y_MIN_POS -20 + #define LULZBOT_AO_Hexagon +#endif /* TOOLHEAD_Oliveoil_SingleExtruder || TOOLHEAD_Angelfish_Aero */ + +#if defined(TOOLHEAD_Oliveoil_SingleExtruder) + #define LULZBOT_LCD_TOOLHEAD_NAME "Single Extruder" +// 16 chars max ^^^^^^^^^^^^^^^ + #define LULZBOT_BUILD_VARIANT " LulzBot" + #define DIGIPOT_MOTOR_CURRENT_E 135,135 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) + #define LULZBOT_X_MAX_ENDSTOP_INVERTING false +#endif /* TOOLHEAD_Oliveoil_SingleExtruder */ + +#if defined(TOOLHEAD_Angelfish_Aero) + // Prototype Aero for TAZ + #define LULZBOT_LCD_TOOLHEAD_NAME "Titan AERO" +// 16 chars max ^^^^^^^^^^^^^^^ + #define LULZBOT_BUILD_VARIANT " LulzBot AERO" + #define DIGIPOT_MOTOR_CURRENT_E 160 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) + #define LULZBOT_X_MAX_ENDSTOP_INVERTING false +#endif /* TOOLHEAD_Angelfish_Aero */ + +#if defined(TOOLHEAD_Kanyu_Flexystruder) + #define LULZBOT_TOOLHEAD_VER VERSION_STRING" Flexystruder" + #define LULZBOT_LCD_TOOLHEAD_NAME "Flexystruder" +// 16 chars max ^^^^^^^^^^^^^^^ + #define LULZBOT_BUILD_VARIANT " LulzBot Flexy" + #define DIGIPOT_MOTOR_CURRENT_E 67 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) + #define LULZBOT_EXTRUDERS 1 + #define LULZBOT_UUID "564bab1c-704c-4225-b329-ac1a093d2638" + #define LULZBOT_X_MAX_ENDSTOP_INVERTING true + #define LULZBOT_X_MAX_POS 288 + #define LULZBOT_X_MIN_POS -27 + #define LULZBOT_Y_MAX_POS 302 + #define LULZBOT_Y_MIN_POS -20 + #define LULZBOT_AO_Hexagon +#endif /* TOOLHEAD_Kanyu_Flexystruder */ + +#if defined(TOOLHEAD_Opah_Moarstruder) + #define LULZBOT_TOOLHEAD_VER VERSION_STRING + #define LULZBOT_LCD_TOOLHEAD_NAME "MOARstruder" +// 16 chars max ^^^^^^^^^^^^^^^ + #define LULZBOT_BUILD_VARIANT " LulzBot MOAR" + #define LULZBOT_DEFAULT_ACCELERATION 250 + #define DIGIPOT_MOTOR_CURRENT_E 135 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) + #define LULZBOT_EXTRUDERS 1 + #define LULZBOT_UUID "d651819d-4a79-4b73-bc5b-ae1fe1aab36b" + #define LULZBOT_X_MAX_ENDSTOP_INVERTING true + #define LULZBOT_X_MAX_POS 290 + #define LULZBOT_X_MIN_POS -20 + #define LULZBOT_Y_MAX_POS 303 + #define LULZBOT_Y_MIN_POS -20 + #define LULZBOT_Moarstruder +#endif /* TOOLHEAD_Opah_Moarstruder */ + +#if defined(TOOLHEAD_Javelin_DualExtruder) || defined(TOOLHEAD_Longfin_FlexyDually) || defined(TOOLHEAD_Yellowfin_DualExtruder) + #define LULZBOT_TOOLHEAD_VER VERSION_STRING" Dual" + #define LULZBOT_BUILD_VARIANT " LulzBot Dual" + #define LULZBOT_SWAP_FAN_PINS_6_AND_8 // For backwards compatibility + #define DIGIPOT_MOTOR_CURRENT_E 160, 160 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) + #define LULZBOT_EXTRUDERS 2 + #define LULZBOT_UUID "c5077702-4ecd-4532-beaf-6acf94acc404" + #define LULZBOT_X_MAX_POS 288 + #define LULZBOT_X_MIN_POS -22 + #define LULZBOT_Y_MAX_POS 303 + #define LULZBOT_Y_MIN_POS -20 + #define LULZBOT_TEMP_SENSOR_1 5 + #define LULZBOT_AO_Hexagon +#endif /* TOOLHEAD_Javelin_DualExtruder || TOOLHEAD_Longfin_FlexyDually || TOOLHEAD_Yellowfin_DualExtruder */ + +#if defined(TOOLHEAD_Javelin_DualExtruder) + #define LULZBOT_LCD_TOOLHEAD_NAME "Dual Extruder 2" +// 16 chars max ^^^^^^^^^^^^^^^ + #undef LULZBOT_WIPE_Y2 + #define LULZBOT_WIPE_Y2 73 + #define LULZBOT_X_MAX_ENDSTOP_INVERTING true +#endif /* TOOLHEAD_Javelin_DualExtruder */ + +#if defined(TOOLHEAD_Longfin_FlexyDually) + #define LULZBOT_LCD_TOOLHEAD_NAME "FlexyDually v2" +// 16 chars max ^^^^^^^^^^^^^^^ + #undef LULZBOT_WIPE_Y2 + #define LULZBOT_WIPE_Y2 73 + #define LULZBOT_X_MAX_ENDSTOP_INVERTING true + #define LULZBOT_DISTINCT_E_FACTORS +#endif /* TOOLHEAD_Longfin_FlexyDually */ + + +#if defined(TOOLHEAD_Yellowfin_DualExtruder) + // Prototype Dual v3 for TAZ. + #define LULZBOT_LCD_TOOLHEAD_NAME "Dual Extruder 3" +// 16 chars max ^^^^^^^^^^^^^^^ + #undef LULZBOT_AFTER_Z_HOME_CMD + #define LULZBOT_AFTER_Z_HOME_CMD "G92 Z5.5\nG0 Z16" // Correction for raised homing button + #undef LULZBOT_WIPE_X1 + #undef LULZBOT_WIPE_X2 + #define LULZBOT_WIPE_X1 -22 + #define LULZBOT_WIPE_X2 -22 + #undef LULZBOT_Z_HOMING_HEIGHT + #define LULZBOT_Z_HOMING_HEIGHT 10 + #undef LULZBOT_Z_SAFE_HOMING_X_POINT + #undef LULZBOT_Z_SAFE_HOMING_Y_POINT + #define LULZBOT_Z_SAFE_HOMING_X_POINT (-22) // X point for Z homing when homing all axis (G28) + #define LULZBOT_Z_SAFE_HOMING_Y_POINT (265) // Y point for Z homing when homing all axis (G28) + #undef LULZBOT_X_MAX_POS + #define LULZBOT_X_MAX_POS 290 + #define LULZBOT_X_MAX_ENDSTOP_INVERTING false + #undef LULZBOT_INVERT_E0_DIR + #define LULZBOT_INVERT_E0_DIR false + #define LULZBOT_AO_Hexagon +#endif /* TOOLHEAD_Yellowfin_DualExtruder */ + +/* HOTEND Variants */ + +#if defined(LULZBOT_Moarstruder) + // LulzBot MOARstruder (40v) + #define LULZBOT_DEFAULT_Kp 55.64 + #define LULZBOT_DEFAULT_Ki 6.79 + #define LULZBOT_DEFAULT_Kd 113.94 +#endif /* LULZBOT_Moarstruder */ + +#if defined(LULZBOT_AO_Hexagon) + // LulzBot AO-Hexagon (24v) + #define LULZBOT_DEFAULT_Kp 28.79 + #define LULZBOT_DEFAULT_Ki 1.91 + #define LULZBOT_DEFAULT_Kd 108.51 +#endif /* LULZBOT_AO_Hexagon */ + +// Heated bed parameters + +//24V 360W silicone heater from NPH on 3mm borosilicate (TAZ 2.2+) +#if defined(LULZBOT_TAZ_BED) + #define LULZBOT_DEFAULT_bedKp 162 + #define LULZBOT_DEFAULT_bedKi 17 + #define LULZBOT_DEFAULT_bedKd 378 + +#elif defined(LULZBOT_MINI_BED) + #define LULZBOT_DEFAULT_bedKp 294 + #define LULZBOT_DEFAULT_bedKi 65 + #define LULZBOT_DEFAULT_bedKd 382 +#endif + +// Nozzle wiping points (varies by toolhead, as the nozzle position varies) + +#define LULZBOT_NOZZLE_CLEAN_START_POINT {LULZBOT_WIPE_X1, LULZBOT_WIPE_Y1, 1} +#define LULZBOT_NOZZLE_CLEAN_END_POINT {LULZBOT_WIPE_X2, LULZBOT_WIPE_Y2, 1} + +// Acceleration, feedrate, motor steps and motor currents for XYZ vary +// by printer model (steps and motor currents for E vary by toolhead). +// Z values additionally vary depending on whether the Z assembly is +// rod or belt driven. + +#if defined(LULZBOT_IS_MINI) + #define PWM_MOTOR_CURRENT_XY 1300 + #define LULZBOT_XY_STEPS 100.5 + #define LULZBOT_DEFAULT_MAX_FEEDRATE {800, 800, 8, 40} // (mm/sec) + #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} + + #define LULZBOT_DEFAULT_XJERK 12.0 + #define LULZBOT_DEFAULT_YJERK 12.0 + #define LULZBOT_DEFAULT_ZJERK 0.4 + + #define LULZBOT_DEFAULT_ACCELERATION 2000 + #define LULZBOT_DEFAULT_TRAVEL_ACCELERATION 3000 + + #define LULZBOT_Z_MAX_POS 160 + #define LULZBOT_Z_MIN_POS 0 + +#elif defined(LULZBOT_IS_TAZ) + #define DIGIPOT_MOTOR_CURRENT_XY 175 + #define LULZBOT_XY_STEPS 100.5 + #define LULZBOT_DEFAULT_XJERK 8.0 + #define LULZBOT_DEFAULT_YJERK 8.0 + #define LULZBOT_DEFAULT_ZJERK 0.4 + #if not defined(LULZBOT_DEFAULT_ACCELERATION) + #define LULZBOT_DEFAULT_ACCELERATION 500 + #endif + #define LULZBOT_DEFAULT_TRAVEL_ACCELERATION 3000 + #define LULZBOT_Z_MIN_POS 0 +#endif + +#if defined(LULZBOT_Gladiola_Mini) || defined(LULZBOT_Gladiola_GLCD) + #define PWM_MOTOR_CURRENT_Z 1630 + #define LULZBOT_Z_STEPS 1600 + +#elif defined(LULZBOT_Huerfano_Mini) + #define PWM_MOTOR_CURRENT_Z 1000 + // Prototype Z-Belt Mini + #define Z_FULL_STEPS_PER_ROTATION 200 + #define Z_MICROSTEPS 16 + #define Z_BELT_PITCH 2 + #define Z_PULLEY_TEETH 24 + #define Z_MOTOR_GEAR_REDUCTION 26.8512396694 + #define LULZBOT_Z_STEPS (Z_FULL_STEPS_PER_ROTATION * Z_MICROSTEPS * Z_MOTOR_GEAR_REDUCTION / double(Z_BELT_PITCH) / double(Z_PULLEY_TEETH)) + #undef LULZBOT_Z_MAX_POS + #define LULZBOT_Z_MAX_POS 183 + +#elif defined(LULZBOT_Oliveoil_TAZ_6) + #define DIGIPOT_MOTOR_CURRENT_Z 200 + #define LULZBOT_DEFAULT_MAX_FEEDRATE {800, 800, 3, 40} // (mm/sec) + #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} + #define LULZBOT_Z_STEPS 1600 + #define LULZBOT_Z_MAX_POS 270 + +#elif defined(LULZBOT_Huerfano_TAZ_7) + #define DIGIPOT_MOTOR_CURRENT_Z 175 + // Prototype Z-belt driven TAZ 7 + #define LULZBOT_DEFAULT_MAX_FEEDRATE {800, 800, 600, 40} // (mm/sec) + #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,10,10000} + #define LULZBOT_Z_STEPS 1790.08264463 + #define LULZBOT_Z_MAX_POS 290 +#endif + +#if defined(PWM_MOTOR_CURRENT_XY) && defined(PWM_MOTOR_CURRENT_Z) && defined(PWM_MOTOR_CURRENT_E) + #define LULZBOT_PWM_MOTOR_CURRENT { \ + PWM_MOTOR_CURRENT_XY, \ + PWM_MOTOR_CURRENT_Z, \ + PWM_MOTOR_CURRENT_E \ + } // Values in milliamps + +#elif defined(DIGIPOT_MOTOR_CURRENT_XY) && defined(DIGIPOT_MOTOR_CURRENT_Z) && defined(DIGIPOT_MOTOR_CURRENT_E) + #define LULZBOT_DIGIPOT_MOTOR_CURRENT { \ + DIGIPOT_MOTOR_CURRENT_XY, \ + DIGIPOT_MOTOR_CURRENT_XY, \ + DIGIPOT_MOTOR_CURRENT_Z, \ + DIGIPOT_MOTOR_CURRENT_E \ + } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) + +#else + #error Motor currents not defined +#endif + +// default steps per unit for LulzBot TAZ. + +#if defined(LULZBOT_DISTINCT_E_FACTORS) && LULZBOT_EXTRUDERS == 2 + #define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS,LULZBOT_E_STEPS} +#else + #define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS} +#endif + +// Gralco's customized Z Offset overlay (also requires dogm_bitmaps_Lulzbot.h) + +#define LULZBOT_ZOFFSET_OVERLAY(zprobe_zoffset) \ + static int dir = 0; \ + static float old_zprobe_zoffset = 0; \ + if(zprobe_zoffset != old_zprobe_zoffset) { \ + dir = (zprobe_zoffset > old_zprobe_zoffset) ? 1 : -1; \ + old_zprobe_zoffset = zprobe_zoffset; \ + } \ + const int left = 5; \ + const int right = 90; \ + const int nozzle = 60; \ + u8g.drawBitmapP(nozzle + 6, 4 - dir,2,12,nozzle_bmp); \ + u8g.drawBitmapP(nozzle + 0,20,3,1,offset_bedline_bmp); \ + u8g.drawBitmapP(left + 0, 47, 3, 16, ccw_bmp); \ + u8g.drawBitmapP(right + 0, 47, 3, 16, cw_bmp); \ + u8g.drawBitmapP(right + 20, 48 - dir, 2, 13, up_arrow_bmp); \ + u8g.drawBitmapP(left + 20, 49 - dir, 2, 13, down_arrow_bmp); + +// Customized splash screen +#define LULZBOT_CUSTOM_BOOTSCREEN() \ + u8g.firstPage(); \ + do { \ + u8g.drawBitmapP(0,0,CEILING(CUSTOM_BOOTSCREEN_BMPWIDTH, 8),CUSTOM_BOOTSCREEN_BMPHEIGHT,custom_start_bmp); \ + u8g.setFont(u8g_font_6x13); \ + u8g.drawStr(61,17,LULZBOT_CUSTOM_MACHINE_NAME); \ + u8g.setFont(u8g_font_04b_03); \ + u8g.drawStr(62,28,LULZBOT_LCD_TOOLHEAD_NAME); \ + u8g.setFont(u8g_font_5x8); \ + u8g.drawStr(63,41,"LulzBot.com"); \ + u8g.setFont(u8g_font_5x8); \ + u8g.drawStr(62,62,"v"); \ + u8g.drawStr(67,62,SHORT_BUILD_VERSION LULZBOT_FW_VERSION); \ + } while( u8g.nextPage() ); + +// Customize version string + +#define LULZBOT_DETAILED_BUILD_VERSION SHORT_BUILD_VERSION LULZBOT_FW_VERSION " (LulzBot " LULZBOT_CUSTOM_MACHINE_NAME " " LULZBOT_LCD_TOOLHEAD_NAME ")" +#define LULZBOT_STRING_DISTRIBUTION_DATE __DATE__ __TIME__ +#define LULZBOT_SOURCE_CODE_URL "https://code.alephobjects.com/diffusion/MARLIN" + +// Bed Probe w/ Rewipe +#define LULZBOT_NUM_REWIPES 1 +#define LULZBOT_BED_PROBE_MIN -2 // How far to push into bed before failing. + +#if defined(LULZBOT_USE_LCD_DISPLAY) + #define LULZBOT_STOP_JOB_CMD card.stopSDPrint(); +#else + #define LULZBOT_STOP_JOB_CMD +#endif + +#define LULZBOT_PROBE_Z_WITH_REWIPE(speed) \ + do_probe_move(LULZBOT_BED_PROBE_MIN, speed); /* probe; if we reach limit, the probe failed */ \ + for(int rewipes = 1; current_position[Z_AXIS] == LULZBOT_BED_PROBE_MIN; rewipes++) { \ + SERIAL_ERRORLNPGM(MSG_REWIPE); \ + LCD_MESSAGEPGM(MSG_REWIPE); \ + do_blocking_move_to_z(10, MMM_TO_MMS(speed)); /* raise nozzle */ \ + Nozzle::clean(0, 2, 0, 0); /* wipe nozzle */ \ + do_probe_move(LULZBOT_BED_PROBE_MIN, speed); /* reprobe */ \ + if(rewipes >= LULZBOT_NUM_REWIPES) { /* max of tries */ \ + SERIAL_ERRORLNPGM("PROBE FAIL CLEAN NOZZLE"); /* cura listens for this message specifically */ \ + LCD_MESSAGEPGM(MSG_LEVEL_FAIL); /* use a more friendly message on the LCD */ \ + BUZZ(25, 880); BUZZ(50, 0); /* play tone */ \ + BUZZ(25, 880); BUZZ(50, 0); \ + BUZZ(25, 880); BUZZ(50, 0); \ + BUZZ(75, 880); BUZZ(50, 0); \ + BUZZ(75, 880); BUZZ(50, 0); \ + BUZZ(75, 880); BUZZ(50, 0); \ + BUZZ(25, 880); BUZZ(50, 0); \ + BUZZ(25, 880); BUZZ(50, 0); \ + BUZZ(25, 880); BUZZ(50, 0); \ + do_blocking_move_to_z(100, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); /* raise head */ \ + LULZBOT_STOP_JOB_CMD; /* stop print job */ \ + clear_command_queue(); \ + print_job_timer.stop(); \ + return NAN; /* abort the leveling in progress */ \ + } \ + } + +// Raise after home cmd, used only on TAZ to lift the print head after homing +#if defined(LULZBOT_AFTER_Z_HOME_CMD) + #define LULZBOT_AFTER_Z_HOME_ACTION \ + if(home_all || homeZ) { \ + enqueue_and_echo_commands_P(PSTR(LULZBOT_AFTER_Z_HOME_CMD)); \ + } +#else + #define LULZBOT_AFTER_Z_HOME_ACTION +#endif + +#endif /* CONDITIONALS_LULZBOT */ diff --git a/Marlin/Configuration_LulzBot.h b/Marlin/Configuration_LulzBot.h index dd58eb3c4..828332acc 100644 --- a/Marlin/Configuration_LulzBot.h +++ b/Marlin/Configuration_LulzBot.h @@ -1,736 +1,42 @@ #ifndef CONFIGURATION_LULZBOT #define CONFIGURATION_LULZBOT -// Change printer model and toolhead here +/* -#define LULZBOT_Oliveoil_TAZ_6 -#define TOOLHEAD_Oliveoil_SingleExtruder + If compiling from the command line: -/* We define the LULZBOT_ values based on which printer or toolhead variants we are compiling - * for, these constants are then placed where appropriate in the following files: - * - * - Configuration.h - * - Configuration_adv.h - * - pins.h - * - Default_Version.h - * - * Using our own set of constants and limiting modification to Marlin's files makes it easier to - * merge from upstream. All values are prefixed with LULZBOT_ so that it is easy to see what - * was changed and where. If a setting is commented out, we define a LULZBOT_{SETTING}_DISABLED - * here, just so we have a record of things that got disabled. - */ + build-all-taz-toolheads.sh -#if ( \ - !defined(LULZBOT_Gladiola_Mini) && \ - !defined(LULZBOT_Huerfano_Mini) && \ - !defined(LULZBOT_Gladiola_GLCD) && \ - !defined(LULZBOT_Oliveoil_TAZ_6) && \ - !defined(LULZBOT_Huerfano_TAZ_7) \ -) || ( \ - !defined(TOOLHEAD_Gladiola_SingleExtruder) && \ - !defined(TOOLHEAD_Albatross_Flexystruder) && \ - !defined(TOOLHEAD_Heather_Aero) && \ - !defined(TOOLHEAD_Oliveoil_SingleExtruder) && \ - !defined(TOOLHEAD_Kanyu_Flexystruder) && \ - !defined(TOOLHEAD_Opah_Moarstruder) && \ - !defined(TOOLHEAD_Javelin_DualExtruder) && \ - !defined(TOOLHEAD_Longfin_FlexyDually) && \ - !defined(TOOLHEAD_Yellowfin_DualExtruder) && \ - !defined(TOOLHEAD_Angelfish_Aero) \ -) - #error Must specify model and toolhead to build: - #error - #error make clean - #error make MODEL= TOOLHEAD= - #error - #error Printer Model Choices: - #error Gladiola_Mini // Lulzbot Mini (Gladiola) - #error Huerfano_Mini // Lulzbot Mini (Huerfano) - #error Gladiola_GLCD // Lulzbot Mini (Gladiola w/ LCD) - #error Oliveoil_TAZ_6 // Lulzbot TAZ 6 (Olive Oil) - #error Huerfano_TAZ_7 // Lulzbot TAZ 7 (Huerfano) - #error - #error Mini Toolhead Choices: - #error Gladiola_SingleExtruder // Standard Single Extruder (Gladiola) - #error Albatross_Flexystruder // Flexystruder (Albatross) - #error Heather_Aero // Titan AERO (Heather) - #error - #error TAZ Toolhead Choices: - #error Oliveoil_SingleExtruder // Standard Single Extruder (TAZ Olive) - #error Kanyu_Flexystruder // Flexystruder (Kanyu) - #error Opah_Moarstruder // Moarstruder (Opah) - #error Javelin_DualExtruder // Dual Extruder v2 (Javelin) - #error Longfin_FlexyDually // FlexyDually (Longfin) - #error Yellowfin_DualExtruder // Dual Extruder v3 (Yellowfin) - #error Angelfish_Aero // Titan AERO (Angelfish) -#endif + Else, if compiling using Arduino IDE, edit lines 38 and 39. -#define LULZBOT_FW_VERSION ".9" + Printer Model Choices: + Gladiola_Mini // Lulzbot Mini (Gladiola) + Huerfano_Mini // Lulzbot Mini (Huerfano) + Gladiola_GLCD // Lulzbot Mini (Gladiola w/ LCD) + Oliveoil_TAZ_6 // Lulzbot TAZ 6 (Olive Oil) + Huerfano_TAZ_7 // Lulzbot TAZ 7 (Huerfano) -// Select options based on printer model + Mini Toolhead Choices: + Gladiola_SingleExtruder // Standard Single Extruder (Gladiola) + Albatross_Flexystruder // Flexystruder (Albatross) + Heather_Aero // Titan AERO (Heather) -#if defined(LULZBOT_Gladiola_Mini) - #define LULZBOT_CUSTOM_MACHINE_NAME "Mini" - #define LULZBOT_IS_MINI - #define LULZBOT_MINI_BED -#endif + TAZ Toolhead Choices: + Oliveoil_SingleExtruder // Standard Single Extruder (TAZ Olive) + Kanyu_Flexystruder // Flexystruder (Kanyu) + Opah_Moarstruder // Moarstruder (Opah) + Javelin_DualExtruder // Dual Extruder v2 (Javelin) + Longfin_FlexyDually // FlexyDually (Longfin) + Yellowfin_DualExtruder // Dual Extruder v3 (Yellowfin) + Angelfish_Aero // Titan AERO (Angelfish) -#if defined(LULZBOT_Huerfano_Mini) - // Prototype Mini w/ Z-Belt - #define LULZBOT_CUSTOM_MACHINE_NAME "Mini Z-Belt" - #define LULZBOT_IS_MINI - #define LULZBOT_MINI_BED -#endif - -#if defined(LULZBOT_Gladiola_GLCD) - #define LULZBOT_CUSTOM_MACHINE_NAME "Mini GLCD" - #define LULZBOT_IS_MINI - #define LULZBOT_MINI_BED - #define LULZBOT_USE_LCD_DISPLAY -#endif - -#if defined(LULZBOT_Oliveoil_TAZ_6) - #define LULZBOT_CUSTOM_MACHINE_NAME "TAZ 6" - #define LULZBOT_IS_TAZ - #define LULZBOT_TAZ_BED - #define LULZBOT_USE_LCD_DISPLAY -#endif - -#if defined(LULZBOT_Huerfano_TAZ_7) - // Prototype TAZ w/ Z-Belt - #define LULZBOT_CUSTOM_MACHINE_NAME "TAZ 7" - #define LULZBOT_IS_TAZ - #define LULZBOT_TAZ_BED - #define LULZBOT_USE_LCD_DISPLAY -#endif - -// Shared values -#define LULZBOT_STRING_CONFIG_H_AUTHOR "(Aleph Objects Inc., LulzBot Diffusion)" -#define LULZBOT_BUFSIZE 10 -#define LULZBOT_EEPROM_SETTINGS -#define LULZBOT_EMERGENCY_PARSER - -// Temperature settings - -#define LULZBOT_TEMP_SENSOR_0 5 -#define LULZBOT_TEMP_SENSOR_BED 7 -#define LULZBOT_TEMP_RESIDENCY_TIME 1 -#define LULZBOT_TEMP_HYSTERESIS 10 -#define LULZBOT_TEMP_WINDOW 10 - -#define LULZBOT_TEMP_BED_RESIDENCY_TIME 1 -#define LULZBOT_TEMP_BED_HYSTERESIS 5 -#define LULZBOT_TEMP_BED_WINDOW 5 - -#define LULZBOT_HEATER_MAXTEMP 305 -#define LULZBOT_EXTRUDE_MINTEMP 120 - -#define LULZBOT_PIDTEMPBED - -#define LULZBOT_MAX_BED_POWER 206 - -#define LULZBOT_THERMAL_PROTECTION_PERIOD 15 // Seconds -#define LULZBOT_THERMAL_PROTECTION_HYSTERESIS 30 // Degrees Celsius - -#define LULZBOT_THERMAL_PROTECTION_BED_PERIOD 15 // Seconds -#define LULZBOT_THERMAL_PROTECTION_BED_HYSTERESIS 10 // Degrees Celsius - -// Motherboard specifics and custom pins for probing. - -#if defined(LULZBOT_IS_MINI) - #define LULZBOT_MOTHERBOARD BOARD_MINIRAMBO - #define LULZBOT_CONTROLLER_FAN_PIN FAN1_PIN // Digital pin 6 - #define LULZBOT_Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN - #define LULZBOT_BAUDRATE 115200 - -#elif defined(LULZBOT_IS_TAZ) - #define LULZBOT_MOTHERBOARD BOARD_RAMBO - #define LULZBOT_CONTROLLER_FAN_PIN FAN2_PIN // Digital pin 2 - #define LULZBOT_Z_MIN_PROBE_ENDSTOP - #define LULZBOT_Z_MIN_PROBE_PIN SERVO0_PIN // Digital pin 22 - #define LULZBOT_BAUDRATE 250000 -#endif - -#define LULZBOT_USE_CONTROLLER_FAN -#define LULZBOT_USE_XMIN_PLUG -#define LULZBOT_USE_YMIN_PLUG -#define LULZBOT_USE_ZMIN_PLUG -#define LULZBOT_USE_XMAX_PLUG -#define LULZBOT_USE_YMAX_PLUG -#define LULZBOT_USE_ZMAX_PLUG - -/* Endstop settings are determined by printer model, except for the - * X_MAX which varies by toolhead. */ - -#if defined(LULZBOT_Gladiola_Mini) || defined(LULZBOT_Gladiola_GLCD) - #define LULZBOT_X_MIN_ENDSTOP_INVERTING true - #define LULZBOT_Y_MIN_ENDSTOP_INVERTING true - #define LULZBOT_Y_MAX_ENDSTOP_INVERTING true - #define LULZBOT_Z_MAX_ENDSTOP_INVERTING true - -#elif defined(LULZBOT_IS_TAZ) || defined(LULZBOT_Huerfano_Mini) - #define LULZBOT_X_MIN_ENDSTOP_INVERTING false - #define LULZBOT_Y_MIN_ENDSTOP_INVERTING false - #define LULZBOT_Y_MAX_ENDSTOP_INVERTING false - #define LULZBOT_Z_MAX_ENDSTOP_INVERTING false -#endif - -#define LULZBOT_Z_MIN_ENDSTOP_INVERTING true -#define LULZBOT_Z_MIN_PROBE_ENDSTOP_INVERTING true - -#define LULZBOT_INVERT_X_DIR false -#define LULZBOT_INVERT_Y_DIR true -#define LULZBOT_INVERT_Z_DIR false -#define LULZBOT_INVERT_E0_DIR true -#define LULZBOT_INVERT_E1_DIR true - -#if defined(LULZBOT_IS_MINI) - #define LULZBOT_HOMING_Z_WITH_PROBE false - #define LULZBOT_INVERT_X_HOME_DIR -1 - #define LULZBOT_INVERT_Y_HOME_DIR 1 - #define LULZBOT_INVERT_Z_HOME_DIR 1 - #define LULZBOT_QUICKHOME - -#elif defined(LULZBOT_IS_TAZ) - #define LULZBOT_HOMING_Z_WITH_PROBE true - #define LULZBOT_INVERT_X_HOME_DIR -1 - #define LULZBOT_INVERT_Y_HOME_DIR 1 - #define LULZBOT_INVERT_Z_HOME_DIR -1 - #define LULZBOT_QUICKHOME -#endif - -#if defined(LULZBOT_MINI_BED) - #define LULZBOT_LEFT_PROBE_BED_POSITION 0 - #define LULZBOT_RIGHT_PROBE_BED_POSITION 164 - #define LULZBOT_BACK_PROBE_BED_POSITION 162 - #define LULZBOT_FRONT_PROBE_BED_POSITION -6 - - #define LULZBOT_HOMING_FEEDRATE_XY (30*60) - #define LULZBOT_HOMING_FEEDRATE_Z (12*60) - -#elif defined(LULZBOT_TAZ_BED) - #define LULZBOT_LEFT_PROBE_BED_POSITION -9 - #define LULZBOT_RIGHT_PROBE_BED_POSITION 288 - #define LULZBOT_BACK_PROBE_BED_POSITION 289 - #define LULZBOT_FRONT_PROBE_BED_POSITION -9 - - #define LULZBOT_HOMING_FEEDRATE_XY (50*60) - #define LULZBOT_HOMING_FEEDRATE_Z (8*60) - - // Only the TAZ models have a Z-homing button - #define LULZBOT_Z_SAFE_HOMING - #define LULZBOT_Z_SAFE_HOMING_X_POINT (-19) - #define LULZBOT_Z_SAFE_HOMING_Y_POINT (258) - #define LULZBOT_Z_HOMING_HEIGHT 5 - #define LULZBOT_AFTER_Z_HOME_CMD "G0 Z5" // Raise to clear homing button -#endif - -#if defined(LULZBOT_MINI_BED) - // Mini has a horizontal wiping pad on the back of the bed - #define LULZBOT_WIPE_X1 115 - #define LULZBOT_WIPE_X2 45 - #define LULZBOT_WIPE_Y1 173 - #define LULZBOT_WIPE_Y2 173 - -#elif defined(LULZBOT_TAZ_BED) - // TAZ has a vertical wiping pad on the left side of the bed - #define LULZBOT_WIPE_X1 -16 - #define LULZBOT_WIPE_X2 -16 - #define LULZBOT_WIPE_Y1 95 - #define LULZBOT_WIPE_Y2 25 -#endif - -#define LULZBOT_NOZZLE_CLEAN_FEATURE - -#define LULZBOT_AUTO_BED_LEVELING_3POINT -#define LULZBOT_ABL_PROBE_PT_1_X LULZBOT_LEFT_PROBE_BED_POSITION -#define LULZBOT_ABL_PROBE_PT_1_Y LULZBOT_FRONT_PROBE_BED_POSITION -#define LULZBOT_ABL_PROBE_PT_2_X LULZBOT_RIGHT_PROBE_BED_POSITION -#define LULZBOT_ABL_PROBE_PT_2_Y LULZBOT_FRONT_PROBE_BED_POSITION -#define LULZBOT_ABL_PROBE_PT_3_X LULZBOT_RIGHT_PROBE_BED_POSITION -#define LULZBOT_ABL_PROBE_PT_3_Y LULZBOT_BACK_PROBE_BED_POSITION - -/* Define probe parameters related to bed leveling, - * e.g. the washers on the bed. These are confusingly - * named Z_MIN_PROBE in Marlin. The Z-Home switch - * is called Z_MIN_ENDSTOP - */ -#define LULZBOT_FIX_MOUNTED_PROBE -#define LULZBOT_PROBE_DOUBLE_TOUCH -#define LULZBOT_X_PROBE_OFFSET_FROM_EXTRUDER 0 -#define LULZBOT_Y_PROBE_OFFSET_FROM_EXTRUDER 0 -#define LULZBOT_Z_PROBE_OFFSET_FROM_EXTRUDER -1.5 -#define LULZBOT_Z_PROBE_OFFSET_RANGE_MIN -2 -#define LULZBOT_Z_PROBE_OFFSET_RANGE_MAX 5 -#define LULZBOT_XY_PROBE_SPEED 6000 -#define LULZBOT_Z_PROBE_SPEED_SLOW (1*60) -#define LULZBOT_Z_PROBE_SPEED_FAST (8*60) -#define LULZBOT_Z_CLEARANCE_DEPLOY_PROBE 5 -#define LULZBOT_Z_CLEARANCE_BETWEEN_PROBES 5 - -/* We use G92 for adjusting the coordinate space in the Yellowfin toolhead, - * however upstream Marlin has made it so G92 adjusts the software endstops, - * which makes G92 unusable for our use case. As an interim measure, revert - * to the previous behavior of G29 using NO_WORKSPACE_OFFSETS */ -#define LULZBOT_NO_WORKSPACE_OFFSETS - -/* Enable the probe pins only only when homing/probing, - * as this helps reduce EMI by grounding the lines. - * - * On Mini: - * Z_MIN_PIN are the bed washers. - * - * On TAZ: - * Z_MIN_PIN corresponds to the Z-Home push button. - * LULZBOT_Z_MIN_PROBE_PIN are the bed washers. - */ -#if defined(LULZBOT_MINI_BED) - #define LULZBOT_ENABLE_PROBE_PINS(enable) { \ - if(enable) { \ - /* Set as inputs with pull-up resistor */ \ - SET_INPUT(Z_MIN_PIN); \ - WRITE(Z_MIN_PIN, HIGH); \ - } else { \ - /* Ground to prevent EMI */ \ - SET_OUTPUT(Z_MIN_PIN); \ - WRITE(Z_MIN_PIN, LOW); \ - } \ - } - -#elif defined(LULZBOT_TAZ_BED) - #define LULZBOT_ENABLE_PROBE_PINS(enable) { \ - if(enable) { \ - /* Set both as inputs with pull-up resistor */ \ - SET_INPUT(LULZBOT_Z_MIN_PROBE_PIN); \ - WRITE(LULZBOT_Z_MIN_PROBE_PIN, HIGH); \ - SET_INPUT(Z_MIN_PIN); \ - WRITE(Z_MIN_PIN, HIGH); \ - } else { \ - /* Ground both pins to prevent EMI */ \ - SET_OUTPUT(LULZBOT_Z_MIN_PROBE_PIN); \ - WRITE(LULZBOT_Z_MIN_PROBE_PIN, LOW); \ - SET_OUTPUT(Z_MIN_PIN); \ - WRITE(Z_MIN_PIN, LOW); \ - } \ - } -#endif - -#define LULZBOT_FAN_KICKSTART_TIME 100 -#define LULZBOT_FAN_MIN_PWM 70 -#define LULZBOT_HOST_KEEPALIVE_FEATURE_DISABLED - -#if defined(LULZBOT_USE_LCD_DISPLAY) - #define LULZBOT_REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER - #define LULZBOT_SDSUPPORT - #define LULZBOT_XYZ_HOLLOW_FRAME_DISABLE - #define LULZBOT_MENU_HOLLOW_FRAME_DISABLE - #define LULZBOT_USE_SMALL_INFOFONT - #define LULZBOT_BABYSTEPPING - #define LULZBOT_BABYSTEP_ZPROBE_OFFSET - #define LULZBOT_SHOW_CUSTOM_BOOTSCREEN - #define LULZBOT_ENCODER_PULSES_PER_STEP 2 - #define LULZBOT_ENCODER_STEPS_PER_MENU_ITEM 1 - #define LULZBOT_COOLING_MESSAGES - #define LULZBOT_MENU_BED_LEVELING_GCODE "G28 XY\nM109 S175\nG28 Z\nM109 R145\nG12\nG29\nM104 S0" - #if defined(LULZBOT_Gladiola_GLCD) - // In the experimental Gladiola_GLCD, the encoder direction is reversed. - #define LULZBOT_REVERSE_ENCODER_DIRECTION - #endif - // Confusingly, Marlin shows three separate e-step settings: the active nozzle, nozzle1, nozzle2. - // We hide the first since it is redundant. - #define LULZBOT_HIDE_E_STEPS_FOR_ACTIVE_NOZZLE -#endif - -/*********************************************** COMMON TOOLHEADS PARAMETERS *****************************/ - -#define LULZBOT_DEFAULT_EJERK 10.0 -#if defined(LULZBOT_IS_TAZ) - #define LULZBOT_E_STEPS 830 -#elif defined(LULZBOT_IS_MINI) - #define LULZBOT_E_STEPS 833 -#endif - -/*********************************************** MINI TOOLHEADS *******************************************/ - -#if defined(TOOLHEAD_Gladiola_SingleExtruder) || defined(TOOLHEAD_Albatross_Flexystruder) || defined(TOOLHEAD_Heather_Aero) - #define LULZBOT_TOOLHEAD_VER VERSION_STRING - #define LULZBOT_UUID "351487b6-ca9a-4c1a-8765-d668b1da6585" - #define LULZBOT_EXTRUDERS 1 - #define LULZBOT_X_MAX_POS 175 - #define LULZBOT_X_MIN_POS 0 - #define LULZBOT_Y_MAX_POS 191 - #define LULZBOT_Y_MIN_POS -10 - #define LULZBOT_AO_Hexagon - - #define PWM_MOTOR_CURRENT_E 1250 -#endif /* TOOLHEAD_Gladiola_SingleExtruder || TOOLHEAD_Albatross_Flexystruder || TOOLHEAD_Heather_Aero */ - -#if defined(TOOLHEAD_Gladiola_SingleExtruder) - #define LULZBOT_LCD_TOOLHEAD_NAME "Single Extruder" -// 16 chars max ^^^^^^^^^^^^^^^ - #define LULZBOT_X_MAX_ENDSTOP_INVERTING true -#endif /* TOOLHEAD_Gladiola_SingleExtruder */ - -#if defined(TOOLHEAD_Albatross_Flexystruder) - #define LULZBOT_LCD_TOOLHEAD_NAME "Flexystruder" -// 16 chars max ^^^^^^^^^^^^^^^ - #define LULZBOT_X_MAX_ENDSTOP_INVERTING true -#endif /* TOOLHEAD_Albatross_Flexystruder */ - -#if defined(TOOLHEAD_Heather_Aero) - // Prototype Aero toolhead for Mini - #define LULZBOT_LCD_TOOLHEAD_NAME "Titan AERO" -// 16 chars max ^^^^^^^^^^^^^^^ - #define LULZBOT_X_MAX_ENDSTOP_INVERTING true -#endif /* TOOLHEAD_Heather_Aero */ - -/*********************************************** TAZ TOOLHEADS *******************************************/ - -#if defined(TOOLHEAD_Oliveoil_SingleExtruder) || defined(TOOLHEAD_Angelfish_Aero) - #define LULZBOT_TOOLHEAD_VER VERSION_STRING - #define LULZBOT_UUID "845f003c-aebd-4e53-a6b9-7d0984fde609" - #define LULZBOT_EXTRUDERS 1 - #define LULZBOT_X_MAX_POS 300 - #define LULZBOT_X_MIN_POS -20 - #define LULZBOT_Y_MAX_POS 303 - #define LULZBOT_Y_MIN_POS -20 - #define LULZBOT_AO_Hexagon -#endif /* TOOLHEAD_Oliveoil_SingleExtruder || TOOLHEAD_Angelfish_Aero */ - -#if defined(TOOLHEAD_Oliveoil_SingleExtruder) - #define LULZBOT_LCD_TOOLHEAD_NAME "Single Extruder" -// 16 chars max ^^^^^^^^^^^^^^^ - #define LULZBOT_BUILD_VARIANT " LulzBot" - #define DIGIPOT_MOTOR_CURRENT_E 135,135 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) - #define LULZBOT_X_MAX_ENDSTOP_INVERTING false -#endif /* TOOLHEAD_Oliveoil_SingleExtruder */ - -#if defined(TOOLHEAD_Angelfish_Aero) - // Prototype Aero for TAZ - #define LULZBOT_LCD_TOOLHEAD_NAME "Titan AERO" -// 16 chars max ^^^^^^^^^^^^^^^ - #define LULZBOT_BUILD_VARIANT " LulzBot AERO" - #define DIGIPOT_MOTOR_CURRENT_E 160 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) - #define LULZBOT_X_MAX_ENDSTOP_INVERTING false -#endif /* TOOLHEAD_Angelfish_Aero */ - -#if defined(TOOLHEAD_Kanyu_Flexystruder) - #define LULZBOT_TOOLHEAD_VER VERSION_STRING" Flexystruder" - #define LULZBOT_LCD_TOOLHEAD_NAME "Flexystruder" -// 16 chars max ^^^^^^^^^^^^^^^ - #define LULZBOT_BUILD_VARIANT " LulzBot Flexy" - #define DIGIPOT_MOTOR_CURRENT_E 67 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) - #define LULZBOT_EXTRUDERS 1 - #define LULZBOT_UUID "564bab1c-704c-4225-b329-ac1a093d2638" - #define LULZBOT_X_MAX_ENDSTOP_INVERTING true - #define LULZBOT_X_MAX_POS 288 - #define LULZBOT_X_MIN_POS -27 - #define LULZBOT_Y_MAX_POS 302 - #define LULZBOT_Y_MIN_POS -20 - #define LULZBOT_AO_Hexagon -#endif /* TOOLHEAD_Kanyu_Flexystruder */ - -#if defined(TOOLHEAD_Opah_Moarstruder) - #define LULZBOT_TOOLHEAD_VER VERSION_STRING - #define LULZBOT_LCD_TOOLHEAD_NAME "MOARstruder" -// 16 chars max ^^^^^^^^^^^^^^^ - #define LULZBOT_BUILD_VARIANT " LulzBot MOAR" - #define LULZBOT_DEFAULT_ACCELERATION 250 - #define DIGIPOT_MOTOR_CURRENT_E 135 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) - #define LULZBOT_EXTRUDERS 1 - #define LULZBOT_UUID "d651819d-4a79-4b73-bc5b-ae1fe1aab36b" - #define LULZBOT_X_MAX_ENDSTOP_INVERTING true - #define LULZBOT_X_MAX_POS 290 - #define LULZBOT_X_MIN_POS -20 - #define LULZBOT_Y_MAX_POS 303 - #define LULZBOT_Y_MIN_POS -20 - #define LULZBOT_Moarstruder -#endif /* TOOLHEAD_Opah_Moarstruder */ - -#if defined(TOOLHEAD_Javelin_DualExtruder) || defined(TOOLHEAD_Longfin_FlexyDually) || defined(TOOLHEAD_Yellowfin_DualExtruder) - #define LULZBOT_TOOLHEAD_VER VERSION_STRING" Dual" - #define LULZBOT_BUILD_VARIANT " LulzBot Dual" - #define LULZBOT_SWAP_FAN_PINS_6_AND_8 // For backwards compatibility - #define DIGIPOT_MOTOR_CURRENT_E 160, 160 // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) - #define LULZBOT_EXTRUDERS 2 - #define LULZBOT_UUID "c5077702-4ecd-4532-beaf-6acf94acc404" - #define LULZBOT_X_MAX_POS 288 - #define LULZBOT_X_MIN_POS -22 - #define LULZBOT_Y_MAX_POS 303 - #define LULZBOT_Y_MIN_POS -20 - #define LULZBOT_TEMP_SENSOR_1 5 - #define LULZBOT_AO_Hexagon -#endif /* TOOLHEAD_Javelin_DualExtruder || TOOLHEAD_Longfin_FlexyDually || TOOLHEAD_Yellowfin_DualExtruder */ - -#if defined(TOOLHEAD_Javelin_DualExtruder) - #define LULZBOT_LCD_TOOLHEAD_NAME "Dual Extruder 2" -// 16 chars max ^^^^^^^^^^^^^^^ - #undef LULZBOT_WIPE_Y2 - #define LULZBOT_WIPE_Y2 73 - #define LULZBOT_X_MAX_ENDSTOP_INVERTING true -#endif /* TOOLHEAD_Javelin_DualExtruder */ - -#if defined(TOOLHEAD_Longfin_FlexyDually) - #define LULZBOT_LCD_TOOLHEAD_NAME "FlexyDually v2" -// 16 chars max ^^^^^^^^^^^^^^^ - #undef LULZBOT_WIPE_Y2 - #define LULZBOT_WIPE_Y2 73 - #define LULZBOT_X_MAX_ENDSTOP_INVERTING true - #define LULZBOT_DISTINCT_E_FACTORS -#endif /* TOOLHEAD_Longfin_FlexyDually */ - - -#if defined(TOOLHEAD_Yellowfin_DualExtruder) - // Prototype Dual v3 for TAZ. - #define LULZBOT_LCD_TOOLHEAD_NAME "Dual Extruder 3" -// 16 chars max ^^^^^^^^^^^^^^^ - #undef LULZBOT_AFTER_Z_HOME_CMD - #define LULZBOT_AFTER_Z_HOME_CMD "G92 Z5.5\nG0 Z16" // Correction for raised homing button - #undef LULZBOT_WIPE_X1 - #undef LULZBOT_WIPE_X2 - #define LULZBOT_WIPE_X1 -22 - #define LULZBOT_WIPE_X2 -22 - #undef LULZBOT_Z_HOMING_HEIGHT - #define LULZBOT_Z_HOMING_HEIGHT 10 - #undef LULZBOT_Z_SAFE_HOMING_X_POINT - #undef LULZBOT_Z_SAFE_HOMING_Y_POINT - #define LULZBOT_Z_SAFE_HOMING_X_POINT (-22) // X point for Z homing when homing all axis (G28) - #define LULZBOT_Z_SAFE_HOMING_Y_POINT (265) // Y point for Z homing when homing all axis (G28) - #undef LULZBOT_X_MAX_POS - #define LULZBOT_X_MAX_POS 290 - #define LULZBOT_X_MAX_ENDSTOP_INVERTING false - #undef LULZBOT_INVERT_E0_DIR - #define LULZBOT_INVERT_E0_DIR false - #define LULZBOT_AO_Hexagon -#endif /* TOOLHEAD_Yellowfin_DualExtruder */ - -/* HOTEND Variants */ - -#if defined(LULZBOT_Moarstruder) - // LulzBot MOARstruder (40v) - #define LULZBOT_DEFAULT_Kp 55.64 - #define LULZBOT_DEFAULT_Ki 6.79 - #define LULZBOT_DEFAULT_Kd 113.94 -#endif /* LULZBOT_Moarstruder */ - -#if defined(LULZBOT_AO_Hexagon) - // LulzBot AO-Hexagon (24v) - #define LULZBOT_DEFAULT_Kp 28.79 - #define LULZBOT_DEFAULT_Ki 1.91 - #define LULZBOT_DEFAULT_Kd 108.51 -#endif /* LULZBOT_AO_Hexagon */ - -// Heated bed parameters - -//24V 360W silicone heater from NPH on 3mm borosilicate (TAZ 2.2+) -#if defined(LULZBOT_TAZ_BED) - #define LULZBOT_DEFAULT_bedKp 162 - #define LULZBOT_DEFAULT_bedKi 17 - #define LULZBOT_DEFAULT_bedKd 378 - -#elif defined(LULZBOT_MINI_BED) - #define LULZBOT_DEFAULT_bedKp 294 - #define LULZBOT_DEFAULT_bedKi 65 - #define LULZBOT_DEFAULT_bedKd 382 -#endif - -// Nozzle wiping points (varies by toolhead, as the nozzle position varies) - -#define LULZBOT_NOZZLE_CLEAN_START_POINT {LULZBOT_WIPE_X1, LULZBOT_WIPE_Y1, 1} -#define LULZBOT_NOZZLE_CLEAN_END_POINT {LULZBOT_WIPE_X2, LULZBOT_WIPE_Y2, 1} - -// Acceleration, feedrate, motor steps and motor currents for XYZ vary -// by printer model (steps and motor currents for E vary by toolhead). -// Z values additionally vary depending on whether the Z assembly is -// rod or belt driven. - -#if defined(LULZBOT_IS_MINI) - #define PWM_MOTOR_CURRENT_XY 1300 - #define LULZBOT_XY_STEPS 100.5 - #define LULZBOT_DEFAULT_MAX_FEEDRATE {800, 800, 8, 40} // (mm/sec) - #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} - - #define LULZBOT_DEFAULT_XJERK 12.0 - #define LULZBOT_DEFAULT_YJERK 12.0 - #define LULZBOT_DEFAULT_ZJERK 0.4 - - #define LULZBOT_DEFAULT_ACCELERATION 2000 - #define LULZBOT_DEFAULT_TRAVEL_ACCELERATION 3000 - - #define LULZBOT_Z_MAX_POS 160 - #define LULZBOT_Z_MIN_POS 0 - -#elif defined(LULZBOT_IS_TAZ) - #define DIGIPOT_MOTOR_CURRENT_XY 175 - #define LULZBOT_XY_STEPS 100.5 - #define LULZBOT_DEFAULT_XJERK 8.0 - #define LULZBOT_DEFAULT_YJERK 8.0 - #define LULZBOT_DEFAULT_ZJERK 0.4 - #if not defined(LULZBOT_DEFAULT_ACCELERATION) - #define LULZBOT_DEFAULT_ACCELERATION 500 - #endif - #define LULZBOT_DEFAULT_TRAVEL_ACCELERATION 3000 - #define LULZBOT_Z_MIN_POS 0 -#endif - -#if defined(LULZBOT_Gladiola_Mini) || defined(LULZBOT_Gladiola_GLCD) - #define PWM_MOTOR_CURRENT_Z 1630 - #define LULZBOT_Z_STEPS 1600 - -#elif defined(LULZBOT_Huerfano_Mini) - #define PWM_MOTOR_CURRENT_Z 1000 - // Prototype Z-Belt Mini - #define Z_FULL_STEPS_PER_ROTATION 200 - #define Z_MICROSTEPS 16 - #define Z_BELT_PITCH 2 - #define Z_PULLEY_TEETH 24 - #define Z_MOTOR_GEAR_REDUCTION 26.8512396694 - #define LULZBOT_Z_STEPS (Z_FULL_STEPS_PER_ROTATION * Z_MICROSTEPS * Z_MOTOR_GEAR_REDUCTION / double(Z_BELT_PITCH) / double(Z_PULLEY_TEETH)) - #undef LULZBOT_Z_MAX_POS - #define LULZBOT_Z_MAX_POS 183 - -#elif defined(LULZBOT_Oliveoil_TAZ_6) - #define DIGIPOT_MOTOR_CURRENT_Z 200 - #define LULZBOT_DEFAULT_MAX_FEEDRATE {800, 800, 3, 40} // (mm/sec) - #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} - #define LULZBOT_Z_STEPS 1600 - #define LULZBOT_Z_MAX_POS 270 - -#elif defined(LULZBOT_Huerfano_TAZ_7) - #define DIGIPOT_MOTOR_CURRENT_Z 175 - // Prototype Z-belt driven TAZ 7 - #define LULZBOT_DEFAULT_MAX_FEEDRATE {800, 800, 600, 40} // (mm/sec) - #define LULZBOT_DEFAULT_MAX_ACCELERATION {9000,9000,10,10000} - #define LULZBOT_Z_STEPS 1790.08264463 - #define LULZBOT_Z_MAX_POS 290 -#endif - -#if defined(PWM_MOTOR_CURRENT_XY) && defined(PWM_MOTOR_CURRENT_Z) && defined(PWM_MOTOR_CURRENT_E) - #define LULZBOT_PWM_MOTOR_CURRENT { \ - PWM_MOTOR_CURRENT_XY, \ - PWM_MOTOR_CURRENT_Z, \ - PWM_MOTOR_CURRENT_E \ - } // Values in milliamps - -#elif defined(DIGIPOT_MOTOR_CURRENT_XY) && defined(DIGIPOT_MOTOR_CURRENT_Z) && defined(DIGIPOT_MOTOR_CURRENT_E) - #define LULZBOT_DIGIPOT_MOTOR_CURRENT { \ - DIGIPOT_MOTOR_CURRENT_XY, \ - DIGIPOT_MOTOR_CURRENT_XY, \ - DIGIPOT_MOTOR_CURRENT_Z, \ - DIGIPOT_MOTOR_CURRENT_E \ - } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) - -#else - #error Motor currents not defined -#endif - -// default steps per unit for LulzBot TAZ. - -#if defined(LULZBOT_DISTINCT_E_FACTORS) && LULZBOT_EXTRUDERS == 2 - #define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS,LULZBOT_E_STEPS} -#else - #define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS} -#endif - -// Gralco's customized Z Offset overlay (also requires dogm_bitmaps_Lulzbot.h) - -#define LULZBOT_ZOFFSET_OVERLAY(zprobe_zoffset) \ - static float old_zprobe_zoffset = 0; \ - static bool up_arrow; \ - if(zprobe_zoffset != old_zprobe_zoffset) { \ - up_arrow = zprobe_zoffset > old_zprobe_zoffset; \ - } \ - old_zprobe_zoffset = zprobe_zoffset; \ - uint8_t noz_pos = -6*zprobe_zoffset; \ - u8g.drawBitmapP(66,noz_pos,2,12,nozzle_bmp); \ - u8g.drawBitmapP(60,24,3,1,offset_bedline_bmp); \ - u8g.drawBitmapP(0,47,3,16,ccw_bmp); \ - u8g.drawStr(27,60,"Z"); \ - u8g.drawBitmapP(34,49,2,10,down_arrow_bmp); \ - u8g.drawBitmapP(85,47,3,16,cw_bmp); \ - u8g.drawStr(107,60,"Z"); \ - u8g.drawBitmapP(113,51,2,10,up_arrow_bmp); \ - if (up_arrow) { \ - u8g.setColorIndex(0); \ - u8g.drawBox(113,46,16,13); \ - u8g.setColorIndex(1); \ - u8g.drawBitmapP(113,48,2,13,longup_arrow_bmp); \ - } else { \ - u8g.setColorIndex(0); \ - u8g.drawBox(34,49,16,13); \ - u8g.setColorIndex(1); \ - u8g.drawBitmapP(34,49,2,13,longdown_arrow_bmp); \ - } - -// Customized splash screen -#define LULZBOT_CUSTOM_BOOTSCREEN() \ - u8g.firstPage(); \ - do { \ - u8g.drawBitmapP(0,0,CEILING(CUSTOM_BOOTSCREEN_BMPWIDTH, 8),CUSTOM_BOOTSCREEN_BMPHEIGHT,custom_start_bmp); \ - u8g.setFont(u8g_font_6x13); \ - u8g.drawStr(61,17,LULZBOT_CUSTOM_MACHINE_NAME); \ - u8g.setFont(u8g_font_04b_03); \ - u8g.drawStr(62,28,LULZBOT_LCD_TOOLHEAD_NAME); \ - u8g.setFont(u8g_font_5x8); \ - u8g.drawStr(63,41,"LulzBot.com"); \ - u8g.setFont(u8g_font_5x8); \ - u8g.drawStr(62,62,"v"); \ - u8g.drawStr(67,62,SHORT_BUILD_VERSION LULZBOT_FW_VERSION); \ - } while( u8g.nextPage() ); - -// Customize version string - -#define LULZBOT_DETAILED_BUILD_VERSION SHORT_BUILD_VERSION LULZBOT_FW_VERSION " (LulzBot " LULZBOT_CUSTOM_MACHINE_NAME " " LULZBOT_LCD_TOOLHEAD_NAME ")" -#define LULZBOT_STRING_DISTRIBUTION_DATE __DATE__ __TIME__ -#define LULZBOT_SOURCE_CODE_URL "https://code.alephobjects.com/diffusion/MARLIN" - -// Bed Probe w/ Rewipe -#define LULZBOT_NUM_REWIPES 1 -#define LULZBOT_BED_PROBE_MIN -2 // How far to push into bed before failing. -#if defined(LULZBOT_USE_LCD_DISPLAY) - #define LULZBOT_STOP_JOB_CMD card.stopSDPrint(); -#else - #define LULZBOT_STOP_JOB_CMD -#endif +// If compiling using the Arduino IDE, change printer model and toolhead here: -#define LULZBOT_PROBE_Z_WITH_REWIPE(speed) \ - do_probe_move(LULZBOT_BED_PROBE_MIN, speed); /* probe; if we reach limit, the probe failed */ \ - for(int rewipes = 1; current_position[Z_AXIS] == LULZBOT_BED_PROBE_MIN; rewipes++) { \ - SERIAL_ERRORLNPGM(MSG_REWIPE); \ - LCD_MESSAGEPGM(MSG_REWIPE); \ - do_blocking_move_to_z(10, MMM_TO_MMS(speed)); /* raise nozzle */ \ - Nozzle::clean(0, 2, 0, 0); /* wipe nozzle */ \ - do_probe_move(LULZBOT_BED_PROBE_MIN, speed); /* reprobe */ \ - if(rewipes >= LULZBOT_NUM_REWIPES) { /* max of tries */ \ - SERIAL_ERRORLNPGM("PROBE FAIL CLEAN NOZZLE"); /* cura listens for this message specifically */ \ - LCD_MESSAGEPGM(MSG_LEVEL_FAIL); /* use a more friendly message on the LCD */ \ - BUZZ(25, 880); BUZZ(50, 0); /* play tone */ \ - BUZZ(25, 880); BUZZ(50, 0); \ - BUZZ(25, 880); BUZZ(50, 0); \ - BUZZ(75, 880); BUZZ(50, 0); \ - BUZZ(75, 880); BUZZ(50, 0); \ - BUZZ(75, 880); BUZZ(50, 0); \ - BUZZ(25, 880); BUZZ(50, 0); \ - BUZZ(25, 880); BUZZ(50, 0); \ - BUZZ(25, 880); BUZZ(50, 0); \ - do_blocking_move_to_z(100, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); /* raise head */ \ - LULZBOT_STOP_JOB_CMD; /* stop print job */ \ - clear_command_queue(); \ - print_job_timer.stop(); \ - return NAN; /* abort the leveling in progress */ \ - } \ - } +#define LULZBOT_Huerfano_TAZ_7 +#define TOOLHEAD_Angelfish_Aero -// Raise after home cmd, used only on TAZ to lift the print head after homing -#if defined(LULZBOT_AFTER_Z_HOME_CMD) - #define LULZBOT_AFTER_Z_HOME_ACTION \ - if(home_all || homeZ) { \ - enqueue_and_echo_commands_P(PSTR(LULZBOT_AFTER_Z_HOME_CMD)); \ - } -#else - #define LULZBOT_AFTER_Z_HOME_ACTION -#endif +#include "Conditionals_LulzBot.h" -#endif /* CONFIGURATION_LULZBOT */ +#endif /* CONFIGURATION_LULZBOT */ \ No newline at end of file diff --git a/Marlin/dogm_bitmaps_LulzBot.h b/Marlin/dogm_bitmaps_LulzBot.h index 10c8af5a5..34d97c599 100644 --- a/Marlin/dogm_bitmaps_LulzBot.h +++ b/Marlin/dogm_bitmaps_LulzBot.h @@ -89,66 +89,42 @@ const unsigned char cw_bmp[] PROGMEM = { //AVR-GCC, WinAVR const unsigned char ccw_bmp[] PROGMEM = { //AVR-GCC, WinAVR /* -000000000001111111100000 -000000000011000000110000 -000000000100000000001000 -000000001000000000000100 -000000011000000000000110 -000000010000000000000010 -000001111100000000000010 -000000111000000000000010 -000000010000000000000010 -000000000000000000000010 -000000000000000000000010 -000000000000000000000110 -000000000000000000000100 -000000000000000000001000 -000000000011000000110000 -000000000001111111100000 +000000011111111000000000 +000000110000001100000000 +000001000000000010000000 +000010000000000001000000 +000110000000000001100000 +000100000000000000100000 +011111000000000000100000 +001110000000000000100000 +000100000000000000100000 +000000000000000000100000 +000000000000000000100000 +000000000000000001100000 +000000000000000001000000 +000000000000000010000000 +000000110000001100000000 +000000011111111000000000 */ - 0x00,0x1f,0xe0, - 0x00,0x30,0x30, - 0x00,0x40,0x08, - 0x00,0x80,0x04, - 0x01,0x80,0x06, - 0x01,0x00,0x02, - 0x07,0xc0,0x02, - 0x03,0x80,0x02, - 0x01,0x00,0x02, - 0x00,0x00,0x02, - 0x00,0x00,0x02, - 0x00,0x00,0x06, - 0x00,0x00,0x04, - 0x00,0x00,0x08, - 0x00,0x30,0x30, - 0x00,0x1f,0xe0 + 0x01,0xfe,0x00, + 0x03,0x03,0x00, + 0x04,0x00,0x80, + 0x08,0x00,0x40, + 0x18,0x00,0x60, + 0x10,0x00,0x20, + 0x7c,0x00,0x20, + 0x38,0x00,0x20, + 0x10,0x00,0x20, + 0x00,0x00,0x20, + 0x00,0x00,0x20, + 0x00,0x00,0x60, + 0x00,0x00,0x40, + 0x00,0x00,0x80, + 0x03,0x03,0x00, + 0x01,0xfe,0x00 }; const unsigned char up_arrow_bmp[] PROGMEM = { //AVR-GCC, WinAVR - /*0000 0110 0000 - 0000 1111 0000 - 0001 1111 1000 - 0011 1111 1100 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000*/ - - 0x06,0x00, - 0x0F,0x00, - 0x1F,0x80, - 0x3F,0xC0, - 0x06,0x00, - 0x06,0x00, - 0x06,0x00, - 0x06,0x00, - 0x06,0x00, - 0x06,0x00 -}; - -const unsigned char longup_arrow_bmp[] PROGMEM = { //AVR-GCC, WinAVR /*0000 0110 0000 0000 1111 0000 0001 1111 1000 @@ -179,31 +155,6 @@ const unsigned char longup_arrow_bmp[] PROGMEM = { //AVR-GCC, WinAVR }; const unsigned char down_arrow_bmp[] PROGMEM = { //AVR-GCC, WinAVR - /*0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0000 0110 0000 - 0011 1111 1100 - 0001 1111 1000 - 0000 1111 0000 - 0000 0110 0000*/ - - 0x06,0x00, - 0x06,0x00, - 0x06,0x00, - 0x06,0x00, - 0x06,0x00, - 0x06,0x00, - 0x3F,0xC0, - 0x1F,0x80, - 0x0F,0x00, - 0x06,0x00 -}; - -const unsigned char longdown_arrow_bmp[] PROGMEM = { //AVR-GCC, WinAVR /*0000 0110 0000 0000 0110 0000 0000 0110 0000