Fan adjustment for quiet Mini. Fan PWM at 122Hz.

- Controller fan on Mini is now driven at 50% for quieter operation.
- Added workaround for setting PWM frequency on controller fan.
- Switched to using FAST_PWM using a prescale of 4.
master
Marcio Teixeira 7 years ago
parent f6ae163b40
commit 630d9107b4

@ -1,20 +1,20 @@
#ifndef CONDITIONALS_LULZBOT #ifndef CONDITIONALS_LULZBOT
#define CONDITIONALS_LULZBOT #define CONDITIONALS_LULZBOT
/* We define the LULZBOT_ values based on which printer or toolhead variants we are compiling /* We define LULZBOT_ macros based on which printer or toolhead we are
* for, these constants are then placed where appropriate in the following files: * building for, these macros are then placed where appropriate in the
* Marlin source.
* *
* - Configuration.h * Using our own set of macros and limiting changes to Marlin's files
* - Configuration_adv.h * to one-liners makes it easier to merge from upstream. All macros are
* - pins.h * prefixed with LULZBOT_ so that it is easy to see what was changed and
* - Default_Version.h * where. If a default setting is commented out in Marlin, we define
* * LULZBOT_{SETTING}_DISABLED here, so we have a record of things that
* Using our own set of constants and limiting modification to Marlin's files makes it easier to * got disabled.
* 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.
*/ */
#define LULZBOT_FW_VERSION ".15" // Change this with each update
#if ( \ #if ( \
!defined(LULZBOT_Gladiola_Mini) && \ !defined(LULZBOT_Gladiola_Mini) && \
!defined(LULZBOT_Hibiscus_Mini2) && \ !defined(LULZBOT_Hibiscus_Mini2) && \
@ -39,9 +39,7 @@
#error Must specify model and toolhead. Please see "Configuration_LulzBot.h" for directions. #error Must specify model and toolhead. Please see "Configuration_LulzBot.h" for directions.
#endif #endif
#define LULZBOT_FW_VERSION ".15" /*********************** PRINTER MODEL CHARACTERISTICS **************************/
// Select options based on printer model
#if defined(LULZBOT_Gladiola_Mini) #if defined(LULZBOT_Gladiola_Mini)
#define LULZBOT_CUSTOM_MACHINE_NAME "LulzBot Mini" #define LULZBOT_CUSTOM_MACHINE_NAME "LulzBot Mini"
@ -135,36 +133,15 @@
#define LULZBOT_UUID "a952577d-8722-483a-999d-acdc9e772b7b" #define LULZBOT_UUID "a952577d-8722-483a-999d-acdc9e772b7b"
#endif #endif
// The Makefile and build-lulzbot-firmware.sh has an option to generate /**************************** GENERAL CONFIGURATION *****************************/
// firmware without any identifying version or build timestamp. This is
// used in internal testing to allow us to binary diff across .hex files.
#if defined(LULZBOT_MASK_VERSION)
#undef LULZBOT_FW_VERSION
#define LULZBOT_FW_VERSION ".xx"
#endif
// Shared values
#define LULZBOT_STRING_CONFIG_H_AUTHOR "(Aleph Objects Inc., LulzBot Git Repository)" #define LULZBOT_STRING_CONFIG_H_AUTHOR "(Aleph Objects Inc., LulzBot Git Repository)"
#define LULZBOT_EEPROM_SETTINGS #define LULZBOT_EEPROM_SETTINGS
#define LULZBOT_EMERGENCY_PARSER #define LULZBOT_EMERGENCY_PARSER
#define LULZBOT_NOZZLE_PARK_FEATURE #define LULZBOT_NOZZLE_PARK_FEATURE
#define LULZBOT_AUTO_REPORT_TEMPERATURES #define LULZBOT_AUTO_REPORT_TEMPERATURES
#define LULZBOT_ADVANCED_OK #define LULZBOT_ADVANCED_OK
#define LULZBOT_HOST_KEEPALIVE_FEATURE_DISABLED
// Marlin 1.1.5 no longer issues MIN_TEMP errors and appears to handle
// thermal runaway via other means. However, since our users expect a
// MIN_TEMP error when disconnecting their print head, this could be
// perceived as a safety issue. This is a workaround in "temperature.cpp"
// to re-enable that functionality.
#define LULZBOT_MIN_TEMP_WORKAROUND \
static int delayBeforeStartMeasuring = OVERSAMPLENR; \
if(delayBeforeStartMeasuring > 0) { \
delayBeforeStartMeasuring--; \
} else { \
if (current_temperature[e] > HEATER_0_MAXTEMP) max_temp_error(0); \
if (current_temperature[e] < HEATER_0_MINTEMP) min_temp_error(0); \
}
// Marlin 1.1.4 has changed the behavior of G92 so that // Marlin 1.1.4 has changed the behavior of G92 so that
// it changes software endstops, making it less useful // it changes software endstops, making it less useful
@ -184,54 +161,18 @@
// so long as UBL is disabled. // so long as UBL is disabled.
#define LULZBOT_G26_BACKWARDS_COMPATIBILITY #define LULZBOT_G26_BACKWARDS_COMPATIBILITY
// Fix for auto0.g, which is broken
#define LULZBOT_AUTOSTART_BUGFIX
// Q&A wants to be able to use M226 on endstops switches
#define LULZBOT_NO_PIN_PROTECTION_ON_M226
// The following should be kept more or less like M999 // The following should be kept more or less like M999
#define LULZBOT_G26_RESET_ACTION \ #define LULZBOT_G26_RESET_ACTION \
Running = true; \ Running = true; \
lcd_reset_alert_level(); lcd_reset_alert_level();
// Temperature settings // Fix for auto0.g, which is broken
#define LULZBOT_AUTOSTART_BUGFIX
#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_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
#if defined(LULZBOT_IS_MINI) // Q&A wants to be able to use M226 on endstops switches
// Heater current: 24V/5.5 Ohms = 4.4A #define LULZBOT_NO_PIN_PROTECTION_ON_M226
#define LULZBOT_MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
#define LULZBOT_WATCH_TEMP_PERIOD 20 // Seconds
#define LULZBOT_WATCH_TEMP_INCREASE 2 // Degrees Celsius
#elif defined(LULZBOT_IS_TAZ)
// Heater current: 24V/1.6 Ohms = 15A
// Set Max Bed Power to 80% for a safety margin on the 15A fuse.
#define LULZBOT_MAX_BED_POWER 206 // limits duty cycle to bed; 255=full current
#define LULZBOT_WATCH_TEMP_PERIOD 40 // Seconds
#define LULZBOT_WATCH_TEMP_INCREASE 10 // Degrees Celsius
#endif
// Motherboard specifics and custom pins for probing. /******************** MOTHERBOARD AND PIN CONFIGURATION ***********************/
#if defined(TOOLHEAD_Devel_ServoDual) #if defined(TOOLHEAD_Devel_ServoDual)
#undef LULZBOT_USE_HOME_BUTTON #undef LULZBOT_USE_HOME_BUTTON
@ -259,7 +200,7 @@
#define LULZBOT_Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN #define LULZBOT_Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
#endif #endif
#define LULZBOT_USE_CONTROLLER_FAN /*********************** HOMING & AXIS DIRECTIONS ******************************/
#define LULZBOT_INVERT_X_DIR false #define LULZBOT_INVERT_X_DIR false
#define LULZBOT_INVERT_Y_DIR true #define LULZBOT_INVERT_Y_DIR true
@ -305,19 +246,6 @@
#define LULZBOT_HOMING_FEEDRATE_Z (3*60) // mm/m #define LULZBOT_HOMING_FEEDRATE_Z (3*60) // mm/m
#endif // LULZBOT_TAZ_BED #endif // LULZBOT_TAZ_BED
#if defined(LULZBOT_USE_AUTOLEVELING) && 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
#elif defined(LULZBOT_USE_AUTOLEVELING) && 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
#endif
// Only the TAZ 6 has a Z-homing button // Only the TAZ 6 has a Z-homing button
#if defined(LULZBOT_USE_HOME_BUTTON) #if defined(LULZBOT_USE_HOME_BUTTON)
#define LULZBOT_Z_SAFE_HOMING #define LULZBOT_Z_SAFE_HOMING
@ -337,6 +265,42 @@
#define LULZBOT_Z_HOMING_HEIGHT 0 #define LULZBOT_Z_HOMING_HEIGHT 0
#endif // LULZBOT_USE_HOME_BUTTON #endif // LULZBOT_USE_HOME_BUTTON
#define LULZBOT_G92_Z(z) \
stepper.synchronize(); \
current_position[Z_AXIS] = z; \
SYNC_PLAN_POSITION_KINEMATIC();
#define LULZBOT_G0_Z(z) \
do_blocking_move_to_z(z);
// On a TAZ, we need to raise the print head after homing to clear the button;
// On the yellowfin we also need to reset the origin to account for the Z home riser.
#if defined(LULZBOT_USE_HOME_BUTTON)
#define LULZBOT_AFTER_Z_HOME_ACTION \
if(home_all || homeZ) { \
LULZBOT_G92_Z(LULZBOT_AFTER_Z_HOME_Z_ORIGIN); \
LULZBOT_G0_Z(LULZBOT_AFTER_Z_HOME_Z_RAISE); \
}
#else
#define LULZBOT_AFTER_Z_HOME_ACTION
#endif
/*********************** AUTOLEVELING / BED PROBE *******************************/
#if defined(LULZBOT_USE_AUTOLEVELING) && 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
#elif defined(LULZBOT_USE_AUTOLEVELING) && 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
#endif
#if defined(LULZBOT_USE_AUTOLEVELING) #if defined(LULZBOT_USE_AUTOLEVELING)
#define LULZBOT_NOZZLE_CLEAN_FEATURE #define LULZBOT_NOZZLE_CLEAN_FEATURE
// Select type of leveling to use: // Select type of leveling to use:
@ -456,57 +420,11 @@
return; \ return; \
} }
#define LULZBOT_FAN_KICKSTART_TIME 100 /*************************** COMMON TOOLHEADS PARAMETERS ***********************/
#define LULZBOT_FAN_MIN_PWM 70
#define LULZBOT_HOST_KEEPALIVE_FEATURE_DISABLED
// For the Pelonis C4010L24BPLB1b-7 fan, we need a relative low
// PWM frequency of about 122Hz PWM for the fan to be speed
// controlled, this can only be accomplished via software PWM
// with a scaling factor of four.
#define LULZBOT_FAN_SOFT_PWM
#define LULZBOT_SOFT_PWM_SCALE 4
#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
#if defined(LULZBOT_USE_AUTOLEVELING)
#define LULZBOT_BABYSTEPPING
#define LULZBOT_BABYSTEP_ZPROBE_OFFSET
#define LULZBOT_MENU_BED_LEVELING_GCODE "G28 XY\nM109 S175\nG28 Z\nM109 R145\nG12\nG29\nM104 S0"
#endif
#define LULZBOT_SHOW_CUSTOM_BOOTSCREEN
#define LULZBOT_ENCODER_PULSES_PER_STEP 2
#define LULZBOT_ENCODER_STEPS_PER_MENU_ITEM 1
#define LULZBOT_COOLING_MESSAGES
#if defined(LULZBOT_Gladiola_MiniLCD) || defined(LULZBOT_Hibiscus_Mini2LCD)
// In the experimental Gladiola_MiniLCD, the encoder direction is reversed.
#define LULZBOT_REVERSE_ENCODER_DIRECTION
#endif
/* Marlin shows three extruders on a dual:
* Extruder - The active nozzle (varies)
* Extruder 1 - The primary extruder
* Extruder 2 - The secondary extruder
*
* The following causes the active nozzle to be
* hidden as seeing three nozzles may be
* confusing to users.
*/
#define LULZBOT_HIDE_ACTIVE_NOZZLE_IN_LCD
#define LULZBOT_HIDE_PID_CONFIG_IN_LCD
#define LULZBOT_HIDE_EXTRA_FAN_CONFIG_IN_LCD
#define LULZBOT_SCROLL_LONG_FILE_NAMES
#define LULZBOT_REORDERED_MENUS
#endif
/*********************************************** COMMON TOOLHEADS PARAMETERS *****************************/
#define LULZBOT_DEFAULT_EJERK 10.0 #define LULZBOT_DEFAULT_EJERK 10.0
/*********************************************** MINI TOOLHEADS *******************************************/ /**************************** MINI TOOLHEADS ***********************************/
#if defined(TOOLHEAD_Gladiola_SingleExtruder) || defined(TOOLHEAD_Albatross_Flexystruder) || defined(TOOLHEAD_Finch_Aerostruder) #if defined(TOOLHEAD_Gladiola_SingleExtruder) || defined(TOOLHEAD_Albatross_Flexystruder) || defined(TOOLHEAD_Finch_Aerostruder)
#define LULZBOT_EXTRUDERS 1 #define LULZBOT_EXTRUDERS 1
@ -551,7 +469,7 @@
#define LULZBOT_E_STEPS 420 #define LULZBOT_E_STEPS 420
#endif /* TOOLHEAD_Finch_Aerostruder */ #endif /* TOOLHEAD_Finch_Aerostruder */
/*********************************************** TAZ TOOLHEADS *******************************************/ /******************************** TAZ TOOLHEADS ********************************/
#if defined(TOOLHEAD_Tilapia_SingleExtruder) || defined(TOOLHEAD_Angelfish_Aerostruder) #if defined(TOOLHEAD_Tilapia_SingleExtruder) || defined(TOOLHEAD_Angelfish_Aerostruder)
#define LULZBOT_EXTRUDERS 1 #define LULZBOT_EXTRUDERS 1
@ -729,7 +647,161 @@
#define LULZBOT_AO_Hexagon #define LULZBOT_AO_Hexagon
#endif /* TOOLHEAD_Devel_ServoDual */ #endif /* TOOLHEAD_Devel_ServoDual */
/*********************************** AXIS TRAVEL LIMITS *******************************************/ /************************ CUSTOMIZE VERSION STRING ***************************/
// The Makefile and build-lulzbot-firmware.sh has an option to generate
// firmware without any identifying version or build timestamp. This is
// used in internal testing to allow us to binary diff across .hex files.
#if defined(LULZBOT_MASK_VERSION)
#undef LULZBOT_FW_VERSION
#define LULZBOT_FW_VERSION ".xx"
#endif
#define LULZBOT_DETAILED_BUILD_VERSION " FIRMWARE_VERSION:" SHORT_BUILD_VERSION LULZBOT_FW_VERSION " EXTRUDER_TYPE:" LULZBOT_M115_EXTRUDER_TYPE
#define LULZBOT_STRING_DISTRIBUTION_DATE __DATE__ __TIME__
#define LULZBOT_SOURCE_CODE_URL "https://code.alephobjects.com/diffusion/MARLIN"
/*************************** 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_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
#if defined(LULZBOT_IS_MINI)
// Heater current: 24V/5.5 Ohms = 4.4A
#define LULZBOT_MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
#define LULZBOT_WATCH_TEMP_PERIOD 20 // Seconds
#define LULZBOT_WATCH_TEMP_INCREASE 2 // Degrees Celsius
#elif defined(LULZBOT_IS_TAZ)
// Heater current: 24V/1.6 Ohms = 15A
// Set Max Bed Power to 80% for a safety margin on the 15A fuse.
#define LULZBOT_MAX_BED_POWER 206 // limits duty cycle to bed; 255=full current
#define LULZBOT_WATCH_TEMP_PERIOD 40 // Seconds
#define LULZBOT_WATCH_TEMP_INCREASE 10 // Degrees Celsius
#endif
// Marlin 1.1.5 no longer issues MIN_TEMP errors and appears to handle
// thermal runaway via other means. However, since our users expect a
// MIN_TEMP error when disconnecting their print head, this could be
// perceived as a safety issue. This is a workaround in "temperature.cpp"
// to re-enable that functionality.
#define LULZBOT_MIN_TEMP_WORKAROUND \
static int delayBeforeStartMeasuring = OVERSAMPLENR; \
if(delayBeforeStartMeasuring > 0) { \
delayBeforeStartMeasuring--; \
} else { \
if (current_temperature[e] > HEATER_0_MAXTEMP) max_temp_error(0); \
if (current_temperature[e] < HEATER_0_MINTEMP) min_temp_error(0); \
}
/******************************** HEATING ELEMENTS *****************************/
#define LULZBOT_PIDTEMP
#define LULZBOT_PIDTEMPBED
// 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_E3D_SOMEstruder_x2)
// Side-by-side LulzBot E3D SOMEstruder (24v) on Yellowfin Dual
#define LULZBOT_DEFAULT_Kp 47.45
#define LULZBOT_DEFAULT_Ki 4.83
#define LULZBOT_DEFAULT_Kd 116.63
#endif /* LULZBOT_E3D_SOMEstruder_x2 */
#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 */
#if defined(LULZBOT_E3D_Titan_Aero)
// LulzBot V6 block with E3D Titan Aero
#define LULZBOT_DEFAULT_Kp 19.83
#define LULZBOT_DEFAULT_Ki 1.53
#define LULZBOT_DEFAULT_Kd 64.16
#endif /* LULZBOT_E3D_Titan_Aero */
// Heated bed variants
//24V 360W silicone heater from NPH on 3mm borosilicate (TAZ 2.2+)
#if defined(LULZBOT_TAZ_BED) && !defined(LULZBOT_TWO_PIECE_BED)
#define LULZBOT_DEFAULT_bedKp 162
#define LULZBOT_DEFAULT_bedKi 17
#define LULZBOT_DEFAULT_bedKd 378
// Modular two piece bed (TAZ 7+)
#elif defined(LULZBOT_TAZ_BED) && defined(LULZBOT_TWO_PIECE_BED)
#define LULZBOT_DEFAULT_bedKp 286.02
#define LULZBOT_DEFAULT_bedKi 54.55
#define LULZBOT_DEFAULT_bedKd 374.90
//24V 360W silicone heater from NPH on 3mm borosilicate (TAZ 2.2+)
#elif defined(LULZBOT_MINI_BED) && !defined(LULZBOT_TWO_PIECE_BED)
#define LULZBOT_DEFAULT_bedKp 294
#define LULZBOT_DEFAULT_bedKi 65
#define LULZBOT_DEFAULT_bedKd 382
// Modular two piece bed (Mini 2+)
#elif defined(LULZBOT_MINI_BED) && defined(LULZBOT_TWO_PIECE_BED)
#define LULZBOT_DEFAULT_bedKp 384.33
#define LULZBOT_DEFAULT_bedKi 72.17
#define LULZBOT_DEFAULT_bedKd 511.64
#endif
/****************************** FAN CONFIGURATION ******************************/
// For the Pelonis C4010L24BPLB1b-7 fan, we need a relative low
// PWM frequency of about 122Hz in order for the fan to turn.
// By default, FAST_PWM_FAN appears to PWM at ~31kHz, but if we
// set a prescale of 4, it divides this by 256 to get us down to
// the frequency we need.
#define LULZBOT_FAST_PWM_FAN
#define LULZBOT_FAST_PWM_SCALE 4
#define LULZBOT_FAN_KICKSTART_TIME 100
#define LULZBOT_FAN_MIN_PWM 70
#define LULZBOT_USE_CONTROLLER_FAN
#if defined(LULZBOT_IS_MINI)
// The Mini fan runs rather loud at full speed.
#define LULZBOT_CONTROLLERFAN_SPEED 120
#else
#define LULZBOT_CONTROLLERFAN_SPEED 255
#endif
// As of Marlin 1.1.5, FAST_PWM_FAN adjusts the frequencies for
// all fans except the controller fan. This workaround allows
// the controller fan PWM freq to be adjusted to 122Hz (this
// may not be necessary, but since the Pelonis fan likes 122Hz,
// we are trying to keep all the fan frequencies at that).
#define LULZBOT_FAST_PWM_CONTROLLER_FAN_WORKAROUND
/******************************* AXIS TRAVEL LIMITS *****************************/
/* Define min and max travel limits based on the printer model using a standard /* Define min and max travel limits based on the printer model using a standard
* toolhead, then define adjustments from the standard for alternative toolheads. * toolhead, then define adjustments from the standard for alternative toolheads.
@ -884,67 +956,34 @@
1 \ 1 \
} }
/*********************************** HEATING ELEMENTS ****************************/ /*************************** REWIPE FUNCTIONALITY *******************************/
/* HOTEND Variants */ #define LULZBOT_NUM_REWIPES 1
#define LULZBOT_BED_PROBE_MIN -3 // Limit on pushing into the bed
#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_E3D_SOMEstruder_x2)
// Side-by-side LulzBot E3D SOMEstruder (24v) on Yellowfin Dual
#define LULZBOT_DEFAULT_Kp 47.45
#define LULZBOT_DEFAULT_Ki 4.83
#define LULZBOT_DEFAULT_Kd 116.63
#endif /* LULZBOT_E3D_SOMEstruder_x2 */
#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 */
#if defined(LULZBOT_E3D_Titan_Aero)
// LulzBot V6 block with E3D Titan Aero
#define LULZBOT_DEFAULT_Kp 19.83
#define LULZBOT_DEFAULT_Ki 1.53
#define LULZBOT_DEFAULT_Kd 64.16
#endif /* LULZBOT_E3D_Titan_Aero */
// Heated bed parameters
//24V 360W silicone heater from NPH on 3mm borosilicate (TAZ 2.2+)
#if defined(LULZBOT_TAZ_BED) && !defined(LULZBOT_TWO_PIECE_BED)
#define LULZBOT_DEFAULT_bedKp 162
#define LULZBOT_DEFAULT_bedKi 17
#define LULZBOT_DEFAULT_bedKd 378
// Modular two piece bed (TAZ 7+)
#elif defined(LULZBOT_TAZ_BED) && defined(LULZBOT_TWO_PIECE_BED)
#define LULZBOT_DEFAULT_bedKp 286.02
#define LULZBOT_DEFAULT_bedKi 54.55
#define LULZBOT_DEFAULT_bedKd 374.90
//24V 360W silicone heater from NPH on 3mm borosilicate (TAZ 2.2+) #define LULZBOT_PROBE_Z_WITH_REWIPE(speed) \
#elif defined(LULZBOT_MINI_BED) && !defined(LULZBOT_TWO_PIECE_BED) /* do_probe_move returns true when it fails to hit an endstop, meaning we need to rewipe */ \
#define LULZBOT_DEFAULT_bedKp 294 for(int rewipes = 0; do_probe_move(LULZBOT_BED_PROBE_MIN, speed); rewipes++) { \
#define LULZBOT_DEFAULT_bedKi 65 if(rewipes >= LULZBOT_NUM_REWIPES) { /* max of tries */ \
#define LULZBOT_DEFAULT_bedKd 382 SERIAL_ERRORLNPGM("PROBE FAIL CLEAN NOZZLE"); /* cura listens for this message specifically */ \
LCD_MESSAGEPGM(MSG_ERR_PROBING_FAILED); /* 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); \
do_blocking_move_to_z(100, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); /* raise head */ \
stop(); /* stop print job */ \
LCD_MESSAGEPGM(MSG_ERR_PROBING_FAILED); /* stop changes the message... */ \
return NAN; /* abort the leveling in progress */ \
} \
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 */ \
}
// Modular two piece bed (Mini 2+) /************ ACCELERATION, FEEDRATES, XYZ MOTOR STEPS AND CURRENTS ************/
#elif defined(LULZBOT_MINI_BED) && defined(LULZBOT_TWO_PIECE_BED)
#define LULZBOT_DEFAULT_bedKp 384.33
#define LULZBOT_DEFAULT_bedKi 72.17
#define LULZBOT_DEFAULT_bedKd 511.64
#endif
// Acceleration, feedrate, motor steps and motor currents for XYZ vary // Values for XYZ vary by printer model, values for E vary by toolhead.
// by printer model (steps and motor currents for E vary by toolhead).
#if defined(LULZBOT_IS_MINI) #if defined(LULZBOT_IS_MINI)
#define LULZBOT_MOTOR_CURRENT_XY 1300 // mA #define LULZBOT_MOTOR_CURRENT_XY 1300 // mA
@ -1045,34 +1084,51 @@
#error Motor currents not defined #error Motor currents not defined
#endif #endif
// default steps per unit for LulzBot TAZ.
#if defined(LULZBOT_DISTINCT_E_FACTORS) && LULZBOT_EXTRUDERS == 2 && !defined(LULZBOT_SWITCHING_EXTRUDER) #if defined(LULZBOT_DISTINCT_E_FACTORS) && LULZBOT_EXTRUDERS == 2 && !defined(LULZBOT_SWITCHING_EXTRUDER)
#define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS,LULZBOT_E_STEPS} #define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS,LULZBOT_E_STEPS}
#else #else
#define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS} #define LULZBOT_DEFAULT_AXIS_STEPS_PER_UNIT {LULZBOT_XY_STEPS,LULZBOT_XY_STEPS,LULZBOT_Z_STEPS,LULZBOT_E_STEPS}
#endif #endif
// Gralco's customized Z Offset overlay (also requires dogm_bitmaps_Lulzbot.h) /*********************************** LCD OPTIONS *******************************/
#define LULZBOT_ZOFFSET_OVERLAY(zprobe_zoffset) \ #if defined(LULZBOT_USE_LCD_DISPLAY)
static int dir = 0; \ #define LULZBOT_REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
static float old_zprobe_zoffset = 0; \ #define LULZBOT_SDSUPPORT
if(zprobe_zoffset != old_zprobe_zoffset) { \ #define LULZBOT_XYZ_HOLLOW_FRAME_DISABLE
dir = (zprobe_zoffset > old_zprobe_zoffset) ? 1 : -1; \ #define LULZBOT_MENU_HOLLOW_FRAME_DISABLE
old_zprobe_zoffset = zprobe_zoffset; \ #define LULZBOT_USE_SMALL_INFOFONT
} \ #if defined(LULZBOT_USE_AUTOLEVELING)
const int left = 5; \ #define LULZBOT_BABYSTEPPING
const int right = 90; \ #define LULZBOT_BABYSTEP_ZPROBE_OFFSET
const int nozzle = 60; \ #define LULZBOT_MENU_BED_LEVELING_GCODE "G28 XY\nM109 S175\nG28 Z\nM109 R145\nG12\nG29\nM104 S0"
u8g.drawBitmapP(nozzle + 6, 4 - dir,2,12,nozzle_bmp); \ #endif
u8g.drawBitmapP(nozzle + 0,20,3,1,offset_bedline_bmp); \ #define LULZBOT_SHOW_CUSTOM_BOOTSCREEN
u8g.drawBitmapP(left + 0, 47, 3, 16, ccw_bmp); \ #define LULZBOT_ENCODER_PULSES_PER_STEP 2
u8g.drawBitmapP(right + 0, 47, 3, 16, cw_bmp); \ #define LULZBOT_ENCODER_STEPS_PER_MENU_ITEM 1
u8g.drawBitmapP(right + 20, 48 - dir, 2, 13, up_arrow_bmp); \ #define LULZBOT_COOLING_MESSAGES
u8g.drawBitmapP(left + 20, 49 - dir, 2, 13, down_arrow_bmp); #if defined(LULZBOT_Gladiola_MiniLCD) || defined(LULZBOT_Hibiscus_Mini2LCD)
// In the experimental Gladiola_MiniLCD, the encoder direction is reversed.
#define LULZBOT_REVERSE_ENCODER_DIRECTION
#endif
/* Marlin shows three extruders on a dual:
* Extruder - The active nozzle (varies)
* Extruder 1 - The primary extruder
* Extruder 2 - The secondary extruder
*
* The following causes the active nozzle to be
* hidden as seeing three nozzles may be
* confusing to users.
*/
#define LULZBOT_HIDE_ACTIVE_NOZZLE_IN_LCD
#define LULZBOT_HIDE_PID_CONFIG_IN_LCD
#define LULZBOT_HIDE_EXTRA_FAN_CONFIG_IN_LCD
#define LULZBOT_SCROLL_LONG_FILE_NAMES
#define LULZBOT_REORDERED_MENUS
#endif
/***************************** CUSTOM SPLASH SCREEN *****************************/
// Customized splash screen
#define LULZBOT_CUSTOM_BOOTSCREEN() \ #define LULZBOT_CUSTOM_BOOTSCREEN() \
u8g.firstPage(); \ u8g.firstPage(); \
do { \ do { \
@ -1088,56 +1144,28 @@
u8g.drawStr(67,62,SHORT_BUILD_VERSION LULZBOT_FW_VERSION); \ u8g.drawStr(67,62,SHORT_BUILD_VERSION LULZBOT_FW_VERSION); \
} while( u8g.nextPage() ); } while( u8g.nextPage() );
// Customize version string /************************* Z-OFFSET LCD ADJUSTMENT ******************************/
#define LULZBOT_DETAILED_BUILD_VERSION " FIRMWARE_VERSION:" SHORT_BUILD_VERSION LULZBOT_FW_VERSION " EXTRUDER_TYPE:" LULZBOT_M115_EXTRUDER_TYPE // Gralco's customized Z Offset LCD overlay (also requires dogm_bitmaps_Lulzbot.h)
#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 -3 // Limit on pushing into the bed
#define LULZBOT_PROBE_Z_WITH_REWIPE(speed) \ #define LULZBOT_ZOFFSET_OVERLAY(zprobe_zoffset) \
/* do_probe_move returns true when it fails to hit an endstop, meaning we need to rewipe */ \ static int dir = 0; \
for(int rewipes = 0; do_probe_move(LULZBOT_BED_PROBE_MIN, speed); rewipes++) { \ static float old_zprobe_zoffset = 0; \
if(rewipes >= LULZBOT_NUM_REWIPES) { /* max of tries */ \ if(zprobe_zoffset != old_zprobe_zoffset) { \
SERIAL_ERRORLNPGM("PROBE FAIL CLEAN NOZZLE"); /* cura listens for this message specifically */ \ dir = (zprobe_zoffset > old_zprobe_zoffset) ? 1 : -1; \
LCD_MESSAGEPGM(MSG_ERR_PROBING_FAILED); /* use a more friendly message on the LCD */ \ old_zprobe_zoffset = zprobe_zoffset; \
BUZZ(25, 880); BUZZ(50, 0); /* play tone */ \
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 */ \
stop(); /* stop print job */ \
LCD_MESSAGEPGM(MSG_ERR_PROBING_FAILED); /* stop changes the message... */ \
return NAN; /* abort the leveling in progress */ \
} \ } \
SERIAL_ERRORLNPGM(MSG_REWIPE); \ const int left = 5; \
LCD_MESSAGEPGM(MSG_REWIPE); \ const int right = 90; \
do_blocking_move_to_z(10, MMM_TO_MMS(speed)); /* raise nozzle */ \ const int nozzle = 60; \
Nozzle::clean(0, 2, 0, 0); /* wipe nozzle */ \ 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); \
#define LULZBOT_G92_Z(z) \ u8g.drawBitmapP(right + 0, 47, 3, 16, cw_bmp); \
stepper.synchronize(); \ u8g.drawBitmapP(right + 20, 48 - dir, 2, 13, up_arrow_bmp); \
current_position[Z_AXIS] = z; \ u8g.drawBitmapP(left + 20, 49 - dir, 2, 13, down_arrow_bmp);
SYNC_PLAN_POSITION_KINEMATIC();
#define LULZBOT_G0_Z(z) \
do_blocking_move_to_z(z);
// On a TAZ, we need to raise the print head after homing to clear the button;
// On the yellowfin we also need to reset the origin to account for the Z home riser.
#if defined(LULZBOT_USE_HOME_BUTTON) /*************************** Z-OFFSET AUTO-SAVE ********************************/
#define LULZBOT_AFTER_Z_HOME_ACTION \
if(home_all || homeZ) { \
LULZBOT_G92_Z(LULZBOT_AFTER_Z_HOME_Z_ORIGIN); \
LULZBOT_G0_Z(LULZBOT_AFTER_Z_HOME_Z_RAISE); \
}
#else
#define LULZBOT_AFTER_Z_HOME_ACTION
#endif
/* Historically, the Lulzbot firmware would save the Z-Offset into the EEPROM /* Historically, the Lulzbot firmware would save the Z-Offset into the EEPROM
* each time it is changed. The latest Marlin made this more difficult since they * each time it is changed. The latest Marlin made this more difficult since they

@ -341,7 +341,7 @@
// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning // PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
// Comment the following line to disable PID and enable bang-bang. // Comment the following line to disable PID and enable bang-bang.
#define PIDTEMP #define PIDTEMP LULZBOT_PIDTEMP
#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current #define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current #define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#if ENABLED(PIDTEMP) #if ENABLED(PIDTEMP)
@ -1542,18 +1542,20 @@
// @section extras // @section extras
// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino // Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino
//#define FAST_PWM_FAN #if defined(LULZBOT_FAST_PWM_FAN)
#define FAST_PWM_FAN
#endif
// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency // Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
// which is not as annoying as with the hardware PWM. On the other hand, if this frequency // which is not as annoying as with the hardware PWM. On the other hand, if this frequency
// is too low, you should also increment SOFT_PWM_SCALE. // is too low, you should also increment SOFT_PWM_SCALE.
#define FAN_SOFT_PWM LULZBOT_FAN_SOFT_PWM //#define FAN_SOFT_PWM
// Incrementing this by 1 will double the software PWM frequency, // Incrementing this by 1 will double the software PWM frequency,
// affecting heaters, and the fan if FAN_SOFT_PWM is enabled. // affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
// However, control resolution will be halved for each increment; // However, control resolution will be halved for each increment;
// at zero value, there are 128 effective control positions. // at zero value, there are 128 effective control positions.
#define SOFT_PWM_SCALE LULZBOT_SOFT_PWM_SCALE #define SOFT_PWM_SCALE 1
// If SOFT_PWM_SCALE is set to a value higher than 0, dithering can // If SOFT_PWM_SCALE is set to a value higher than 0, dithering can
// be used to mitigate the associated resolution loss. If enabled, // be used to mitigate the associated resolution loss. If enabled,

@ -187,7 +187,7 @@
#if ENABLED(USE_CONTROLLER_FAN) #if ENABLED(USE_CONTROLLER_FAN)
#define CONTROLLER_FAN_PIN LULZBOT_CONTROLLER_FAN_PIN // Set a custom pin for the controller fan #define CONTROLLER_FAN_PIN LULZBOT_CONTROLLER_FAN_PIN // Set a custom pin for the controller fan
#define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled
#define CONTROLLERFAN_SPEED 255 // 255 == full speed #define CONTROLLERFAN_SPEED LULZBOT_CONTROLLERFAN_SPEED // 255 == full speed
#endif #endif
// When first starting the main fan, run it at full speed for the // When first starting the main fan, run it at full speed for the

@ -1025,21 +1025,28 @@ void Temperature::init() {
#if HAS_FAN0 #if HAS_FAN0
SET_OUTPUT(FAN_PIN); SET_OUTPUT(FAN_PIN);
#if ENABLED(FAST_PWM_FAN) #if ENABLED(FAST_PWM_FAN)
setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8 setPwmFrequency(FAN_PIN, LULZBOT_FAST_PWM_SCALE); // No prescaling. Pwm frequency = F_CPU/256/8
#endif #endif
#endif #endif
#if HAS_FAN1 #if HAS_FAN1
SET_OUTPUT(FAN1_PIN); SET_OUTPUT(FAN1_PIN);
#if ENABLED(FAST_PWM_FAN) #if ENABLED(FAST_PWM_FAN)
setPwmFrequency(FAN1_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8 setPwmFrequency(FAN1_PIN, LULZBOT_FAST_PWM_SCALE); // No prescaling. Pwm frequency = F_CPU/256/8
#endif #endif
#endif #endif
#if HAS_FAN2 #if HAS_FAN2
SET_OUTPUT(FAN2_PIN); SET_OUTPUT(FAN2_PIN);
#if ENABLED(FAST_PWM_FAN) #if ENABLED(FAST_PWM_FAN)
setPwmFrequency(FAN2_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8 setPwmFrequency(FAN2_PIN, LULZBOT_FAST_PWM_SCALE); // No prescaling. Pwm frequency = F_CPU/256/8
#endif
#endif
#if defined(LULZBOT_FAST_PWM_CONTROLLER_FAN_WORKAROUND) && HAS_CONTROLLER_FAN
SET_OUTPUT(CONTROLLER_FAN_PIN);
#if ENABLED(FAST_PWM_FAN)
setPwmFrequency(CONTROLLER_FAN_PIN, LULZBOT_FAST_PWM_SCALE); // No prescaling. Pwm frequency = F_CPU/256/8
#endif #endif
#endif #endif

Loading…
Cancel
Save