Add support for BQ heated bed kit with Hephestos 2

This commit is contained in:
João Brázio 2017-07-06 18:10:06 +01:00 committed by Scott Lahteine
parent ce834bb78e
commit 2065591daf
8 changed files with 116 additions and 71 deletions

View file

@ -616,8 +616,18 @@
#else
#define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
#endif
/**
* Heated bed requires settings
*/
#if HAS_HEATER_BED
#define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, v)
#ifndef MAX_BED_POWER
#define MAX_BED_POWER 255
#endif
#ifndef HEATER_BED_INVERTING
#define HEATER_BED_INVERTING false
#endif
#define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, (v) ^ HEATER_BED_INVERTING)
#endif
/**

View file

@ -2312,10 +2312,10 @@ static void clean_up_after_endstop_or_probe_move() {
const float nx = lx - (X_PROBE_OFFSET_FROM_EXTRUDER), ny = ly - (Y_PROBE_OFFSET_FROM_EXTRUDER);
if (printable)
if (printable) {
if (!position_is_reachable_by_probe_xy(lx, ly)) return NAN;
else
if (!position_is_reachable_xy(nx, ny)) return NAN;
}
else if (!position_is_reachable_xy(nx, ny)) return NAN;
const float old_feedrate_mm_s = feedrate_mm_s;
@ -4308,7 +4308,7 @@ void home_all_axes() { gcode_G28(true); }
#endif
ABL_VAR int left_probe_bed_position, right_probe_bed_position, front_probe_bed_position, back_probe_bed_position;
ABL_VAR float xGridSpacing, yGridSpacing;
ABL_VAR float xGridSpacing = 0, yGridSpacing = 0;
#if ENABLED(AUTO_BED_LEVELING_LINEAR)
ABL_VAR uint8_t abl_grid_points_x = GRID_MAX_POINTS_X,
@ -7081,6 +7081,10 @@ inline void gcode_M104() {
#endif
const int8_t e=-2
) {
#if !(HAS_TEMP_BED && HAS_TEMP_HOTEND) && HOTENDS <= 1
UNUSED(e);
#endif
SERIAL_PROTOCOLCHAR(' ');
SERIAL_PROTOCOLCHAR(
#if HAS_TEMP_BED && HAS_TEMP_HOTEND
@ -12735,13 +12739,13 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) {
#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
if (ELAPSED(ms, previous_cmd_ms + (EXTRUDER_RUNOUT_SECONDS) * 1000UL)
&& thermalManager.degHotend(active_extruder) > EXTRUDER_RUNOUT_MINTEMP) {
bool oldstatus;
#if ENABLED(SWITCHING_EXTRUDER)
oldstatus = E0_ENABLE_READ;
const bool oldstatus = E0_ENABLE_READ;
enable_E0();
#else // !SWITCHING_EXTRUDER
bool oldstatus;
switch (active_extruder) {
case 0: oldstatus = E0_ENABLE_READ; enable_E0(); break;
default: oldstatus = E0_ENABLE_READ; enable_E0(); break;
#if E_STEPPERS > 1
case 1: oldstatus = E1_ENABLE_READ; enable_E1(); break;
#if E_STEPPERS > 2

View file

@ -20,25 +20,24 @@
*
*/
/**
* Configuration.h
*
* Basic settings such as:
*
* - Type of electronics
* - Type of temperature sensor
* - Printer geometry
* - Endstop configuration
* - LCD controller
* - Extra features
*
* Advanced settings can be found in Configuration_adv.h
*
*/
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
#define CONFIGURATION_H_VERSION 010100
//===========================================================================
//================================= README ==================================
//===========================================================================
/**
* BQ Hephestos 2 Configuration
*
* This configuration supports the standard Hephestos 2 with or without the
* heated bed kit featured at https://store.bq.com/en/heated-bed-kit-hephestos2
*
* Enable the following option to activate all functionality related to the heated bed.
*/
//#define HEPHESTOS2_HEATED_BED_KIT
//===========================================================================
//============================= Getting Started =============================
//===========================================================================
@ -269,7 +268,13 @@
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_BED 0
#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
#define TEMP_SENSOR_BED 70
#define HEATER_BED_INVERTING true
#else
#define TEMP_SENSOR_BED 0
#endif
// Dummy thermistor constant temperature readings, for use with 998 and 999
#define DUMMY_THERMISTOR_998_VALUE 25
@ -293,7 +298,7 @@
// The minimal temperature defines the temperature below which the heater will not be enabled It is used
// to check that the wiring to the thermistor is not broken.
// Otherwise this would lead to the heater being powered on all the time.
#define HEATER_0_MINTEMP 15
#define HEATER_0_MINTEMP 5
#define HEATER_1_MINTEMP 5
#define HEATER_2_MINTEMP 5
#define HEATER_3_MINTEMP 5
@ -303,12 +308,12 @@
// When temperature exceeds max temp, your heater will be switched off.
// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
// You should use MINTEMP for thermistor short/failure protection.
#define HEATER_0_MAXTEMP 250
#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define HEATER_3_MAXTEMP 275
#define HEATER_4_MAXTEMP 275
#define BED_MAXTEMP 150
#define BED_MAXTEMP 110
//===========================================================================
//============================= PID Settings ================================
@ -362,7 +367,10 @@
// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
//#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
#endif
#if ENABLED(PIDTEMPBED)
@ -414,7 +422,7 @@
*/
#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders
//#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
#define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed
//===========================================================================
//============================= Mechanical Settings =========================
@ -499,14 +507,14 @@
* Override with M92
* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]]
*/
#define DEFAULT_AXIS_STEPS_PER_UNIT { 160, 160, 8000, 204 }
#define DEFAULT_AXIS_STEPS_PER_UNIT { 160, 160, 8000, 210.02 }
/**
* Default Max Feed Rate (mm/s)
* Override with M203
* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]]
*/
#define DEFAULT_MAX_FEEDRATE { 250, 250, 2, 200 }
#define DEFAULT_MAX_FEEDRATE { 167, 167, 3.3, 167 }
/**
* Default Max Acceleration (change/s) change = mm/s
@ -514,7 +522,7 @@
* Override with M201
* X, Y, Z, E0 [, E1[, E2[, E3[, E4]]]]
*/
#define DEFAULT_MAX_ACCELERATION { 800, 800, 20, 1000 }
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 3000 }
/**
* Default Acceleration (change/s) change = mm/s
@ -524,8 +532,8 @@
* M204 R Retract Acceleration
* M204 T Travel Acceleration
*/
#define DEFAULT_ACCELERATION 800 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 1000 // E acceleration for retracts
#define DEFAULT_ACCELERATION 1000 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 1000 // X, Y, Z acceleration for travel (non printing) moves
/**
@ -536,8 +544,8 @@
* When changing speed and direction, if the difference is less than the
* value set here, it may happen instantaneously.
*/
#define DEFAULT_XJERK 10.0
#define DEFAULT_YJERK 10.0
#define DEFAULT_XJERK 20.0
#define DEFAULT_YJERK 20.0
#define DEFAULT_ZJERK 0.4
#define DEFAULT_EJERK 1.0
@ -690,7 +698,7 @@
#define Z_PROBE_OFFSET_RANGE_MAX 0
// Enable the M48 repeatability test to test probe accuracy
//#define Z_MIN_PROBE_REPEATABILITY_TEST
#define Z_MIN_PROBE_REPEATABILITY_TEST
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
// :{ 0:'Low', 1:'High' }
@ -817,7 +825,7 @@
*/
//#define AUTO_BED_LEVELING_3POINT
//#define AUTO_BED_LEVELING_LINEAR
//#define AUTO_BED_LEVELING_BILINEAR
#define AUTO_BED_LEVELING_BILINEAR
//#define AUTO_BED_LEVELING_UBL
//#define MESH_BED_LEVELING
@ -839,12 +847,12 @@
// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
#define GRID_MAX_POINTS_Y 4
// Set the boundaries for probing (where the probe can reach).
#define LEFT_PROBE_BED_POSITION X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER
#define LEFT_PROBE_BED_POSITION X_MIN_POS + (X_PROBE_OFFSET_FROM_EXTRUDER)
#define RIGHT_PROBE_BED_POSITION X_MAX_POS - (X_PROBE_OFFSET_FROM_EXTRUDER)
#define FRONT_PROBE_BED_POSITION Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER
#define FRONT_PROBE_BED_POSITION Y_MIN_POS + (Y_PROBE_OFFSET_FROM_EXTRUDER)
#define BACK_PROBE_BED_POSITION Y_MAX_POS - (Y_PROBE_OFFSET_FROM_EXTRUDER)
// The Z probe minimum outer margin (to validate G29 parameters).
@ -1011,12 +1019,12 @@
// @section temperature
// Preheat Constants
#define PREHEAT_1_TEMP_HOTEND 210
#define PREHEAT_1_TEMP_BED 70
#define PREHEAT_1_TEMP_HOTEND 205
#define PREHEAT_1_TEMP_BED 50
#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
#define PREHEAT_2_TEMP_HOTEND 240
#define PREHEAT_2_TEMP_BED 110
#define PREHEAT_2_TEMP_HOTEND 245
#define PREHEAT_2_TEMP_BED 50
#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
/**

View file

@ -161,8 +161,8 @@
// then extrude some filament every couple of SECONDS.
#define EXTRUDER_RUNOUT_PREVENT
#if ENABLED(EXTRUDER_RUNOUT_PREVENT)
#define EXTRUDER_RUNOUT_MINTEMP 190
#define EXTRUDER_RUNOUT_SECONDS 30
#define EXTRUDER_RUNOUT_MINTEMP 170
#define EXTRUDER_RUNOUT_SECONDS 60
#define EXTRUDER_RUNOUT_SPEED 1500 // mm/m
#define EXTRUDER_RUNOUT_EXTRUDE 5 // mm
#endif
@ -369,7 +369,7 @@
#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate
#define DEFAULT_MINTRAVELFEEDRATE 0.0
//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated
#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated
// @section lcd
@ -447,7 +447,7 @@
#define LCD_INFO_MENU
// Scroll a longer status message into view
//#define STATUS_MESSAGE_SCROLLING
#define STATUS_MESSAGE_SCROLLING
// On the Info Screen, display XY with one decimal place when possible
#define LCD_DECIMAL_SMALL_XY
@ -720,7 +720,7 @@
// enter the serial receive buffer, so they cannot be blocked.
// Currently handles M108, M112, M410
// Does not work on boards using AT90USB (USBCON) processors!
//#define EMERGENCY_PARSER
#define EMERGENCY_PARSER
// Bad Serial-connections can miss a received command by sending an 'ok'
// Therefore some clients abort after 30 seconds in a timeout.
@ -729,7 +729,7 @@
//#define NO_TIMEOUTS 1000 // Milliseconds
// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary.
//#define ADVANCED_OK
#define ADVANCED_OK
// @section fwretract

View file

@ -5,11 +5,18 @@ NOTE: The look and feel of the Hephestos 2 while navigating the LCD menu will ch
## Changelog
* 2016/03/01 - Initial release
* 2016/03/21 - Activated 4-point auto leveling by default
Updated miscellaneous z-probe values
* 2016/06/21 - Disabled hot bed related options
Activated software endstops
SD printing now disables the heater when finished
* 2016/07/13 - Update the `DEFAULT_AXIS_STEPS_PER_UNIT` for the Z axis
Increased the `DEFAULT_XYJERK`
* 2016/12/13 - Configuration updated.
* 2017/07/06 - Configuration updated to the latest Marlin version.
Added support for the official BQ heated bed kit.

View file

@ -107,3 +107,12 @@
#define Z_MIN_PIN 19 // IND_S_5V
#define Z_MAX_PIN 18 // Z-MIN Label
#endif
//
// This pin is used by the official Hephestos 2 heated bed upgrade kit
//
#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
#undef HEATER_BED_PIN
#define HEATER_BED_PIN 8
#endif

View file

@ -1721,33 +1721,33 @@ void Temperature::isr() {
#endif
}
else {
if (soft_pwm_count_0 <= pwm_count_tmp) WRITE_HEATER_0(0);
if (soft_pwm_count_0 <= pwm_count_tmp) WRITE_HEATER_0(LOW);
#if HOTENDS > 1
if (soft_pwm_count_1 <= pwm_count_tmp) WRITE_HEATER_1(0);
if (soft_pwm_count_1 <= pwm_count_tmp) WRITE_HEATER_1(LOW);
#if HOTENDS > 2
if (soft_pwm_count_2 <= pwm_count_tmp) WRITE_HEATER_2(0);
if (soft_pwm_count_2 <= pwm_count_tmp) WRITE_HEATER_2(LOW);
#if HOTENDS > 3
if (soft_pwm_count_3 <= pwm_count_tmp) WRITE_HEATER_3(0);
if (soft_pwm_count_3 <= pwm_count_tmp) WRITE_HEATER_3(LOW);
#if HOTENDS > 4
if (soft_pwm_count_4 <= pwm_count_tmp) WRITE_HEATER_4(0);
if (soft_pwm_count_4 <= pwm_count_tmp) WRITE_HEATER_4(LOW);
#endif // HOTENDS > 4
#endif // HOTENDS > 3
#endif // HOTENDS > 2
#endif // HOTENDS > 1
#if HAS_HEATER_BED
if (soft_pwm_count_BED <= pwm_count_tmp) WRITE_HEATER_BED(0);
if (soft_pwm_count_BED <= pwm_count_tmp) WRITE_HEATER_BED(LOW);
#endif
#if ENABLED(FAN_SOFT_PWM)
#if HAS_FAN0
if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(0);
if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(LOW);
#endif
#if HAS_FAN1
if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN1(0);
if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN1(LOW);
#endif
#if HAS_FAN2
if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN2(0);
if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN2(LOW);
#endif
#endif
}
@ -1856,13 +1856,13 @@ void Temperature::isr() {
#endif
}
#if HAS_FAN0
if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(0);
if (soft_pwm_count_fan[0] <= pwm_count_tmp) WRITE_FAN(LOW);
#endif
#if HAS_FAN1
if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN1(0);
if (soft_pwm_count_fan[1] <= pwm_count_tmp) WRITE_FAN1(LOW);
#endif
#if HAS_FAN2
if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN2(0);
if (soft_pwm_count_fan[2] <= pwm_count_tmp) WRITE_FAN2(LOW);
#endif
#endif // FAN_SOFT_PWM

View file

@ -369,10 +369,14 @@ FORCE_INLINE void _draw_centered_temp(const int16_t temp, const uint8_t x, const
}
FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater, const bool blink) {
#if !HEATER_IDLE_HANDLER
UNUSED(blink);
#endif
#if HAS_TEMP_BED
bool isBed = heater < 0;
const bool isBed = heater < 0;
#else
const bool isBed = false;
constexpr bool isBed = false;
#endif
if (PAGE_UNDER(7)) {
@ -852,12 +856,15 @@ static void lcd_implementation_status_screen() {
#define DEFINE_LCD_IMPLEMENTATION_DRAWMENU_SETTING_EDIT_TYPE(_type, _name, _strFunc) \
inline void lcd_implementation_drawmenu_setting_edit_ ## _name (const bool sel, const uint8_t row, const char* pstr, const char* pstr2, _type * const data, ...) { \
UNUSED(pstr2); \
lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, _strFunc(*(data))); \
} \
inline void lcd_implementation_drawmenu_setting_edit_callback_ ## _name (const bool sel, const uint8_t row, const char* pstr, const char* pstr2, _type * const data, ...) { \
UNUSED(pstr2); \
lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, _strFunc(*(data))); \
} \
inline void lcd_implementation_drawmenu_setting_edit_accessor_ ## _name (const bool sel, const uint8_t row, const char* pstr, const char* pstr2, _type (*pget)(), void (*pset)(_type), ...) { \
UNUSED(pstr2); UNUSED(pset); \
lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, _strFunc(pget())); \
} \
typedef void _name##_void