Merge pull request #8325 from LVD-AC/1.1.x-manual-probe

[1.1.x] PROBE_SELECTED etc.
master
Scott Lahteine 7 years ago committed by GitHub
commit 2a54fd1444
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -310,7 +310,7 @@ void report_current_position();
delta_segments_per_second, delta_segments_per_second,
delta_tower_angle_trim[ABC], delta_tower_angle_trim[ABC],
delta_clip_start_height; delta_clip_start_height;
void recalc_delta_settings(float radius, float diagonal_rod, float tower_angle_trim[ABC]); void recalc_delta_settings();
#elif IS_SCARA #elif IS_SCARA
void forward_kinematics_SCARA(const float &a, const float &b); void forward_kinematics_SCARA(const float &a, const float &b);
#endif #endif
@ -482,7 +482,7 @@ void do_blocking_move_to_xy(const float &x, const float &y, const float &fr_mm_s
// This won't work on SCARA since the probe offset rotates with the arm. // This won't work on SCARA since the probe offset rotates with the arm.
return position_is_reachable(rx, ry) return position_is_reachable(rx, ry)
&& position_is_reachable(rx - X_PROBE_OFFSET_FROM_EXTRUDER, ry - Y_PROBE_OFFSET_FROM_EXTRUDER); && position_is_reachable(rx - (X_PROBE_OFFSET_FROM_EXTRUDER), ry - (Y_PROBE_OFFSET_FROM_EXTRUDER));
} }
#else // CARTESIAN #else // CARTESIAN

@ -2333,10 +2333,9 @@ static void clean_up_after_endstop_or_probe_move() {
* @details Used by probe_pt to do a single Z probe. * @details Used by probe_pt to do a single Z probe.
* Leaves current_position[Z_AXIS] at the height where the probe triggered. * Leaves current_position[Z_AXIS] at the height where the probe triggered.
* *
* @param short_move Flag for a shorter probe move towards the bed
* @return The raw Z position where the probe was triggered * @return The raw Z position where the probe was triggered
*/ */
static float run_z_probe(const bool short_move=true) { static float run_z_probe() {
#if ENABLED(DEBUG_LEVELING_FEATURE) #if ENABLED(DEBUG_LEVELING_FEATURE)
if (DEBUGGING(LEVELING)) DEBUG_POS(">>> run_z_probe", current_position); if (DEBUGGING(LEVELING)) DEBUG_POS(">>> run_z_probe", current_position);
@ -2374,7 +2373,7 @@ static void clean_up_after_endstop_or_probe_move() {
#endif #endif
// move down slowly to find bed // move down slowly to find bed
if (do_probe_move(-10 + (short_move ? 0 : -(Z_MAX_LENGTH)), Z_PROBE_SPEED_SLOW)) return NAN; if (do_probe_move(-10, Z_PROBE_SPEED_SLOW)) return NAN;
#if ENABLED(DEBUG_LEVELING_FEATURE) #if ENABLED(DEBUG_LEVELING_FEATURE)
if (DEBUGGING(LEVELING)) DEBUG_POS("<<< run_z_probe", current_position); if (DEBUGGING(LEVELING)) DEBUG_POS("<<< run_z_probe", current_position);
@ -2413,12 +2412,11 @@ static void clean_up_after_endstop_or_probe_move() {
const float nx = rx - (X_PROBE_OFFSET_FROM_EXTRUDER), ny = ry - (Y_PROBE_OFFSET_FROM_EXTRUDER); const float nx = rx - (X_PROBE_OFFSET_FROM_EXTRUDER), ny = ry - (Y_PROBE_OFFSET_FROM_EXTRUDER);
if (printable if (!printable
? !position_is_reachable(nx, ny) ? !position_is_reachable(nx, ny)
: !position_is_reachable_by_probe(rx, ry) : !position_is_reachable_by_probe(rx, ry)
) return NAN; ) return NAN;
const float old_feedrate_mm_s = feedrate_mm_s; const float old_feedrate_mm_s = feedrate_mm_s;
#if ENABLED(DELTA) #if ENABLED(DELTA)
@ -2426,12 +2424,6 @@ static void clean_up_after_endstop_or_probe_move() {
do_blocking_move_to_z(delta_clip_start_height); do_blocking_move_to_z(delta_clip_start_height);
#endif #endif
#if HAS_SOFTWARE_ENDSTOPS
// Store the status of the soft endstops and disable if we're probing a non-printable location
static bool enable_soft_endstops = soft_endstops_enabled;
if (!printable) soft_endstops_enabled = false;
#endif
feedrate_mm_s = XY_PROBE_FEEDRATE_MM_S; feedrate_mm_s = XY_PROBE_FEEDRATE_MM_S;
// Move the probe to the given XY // Move the probe to the given XY
@ -2439,7 +2431,7 @@ static void clean_up_after_endstop_or_probe_move() {
float measured_z = NAN; float measured_z = NAN;
if (!DEPLOY_PROBE()) { if (!DEPLOY_PROBE()) {
measured_z = run_z_probe(printable); measured_z = run_z_probe();
if (!stow) if (!stow)
do_blocking_move_to_z(current_position[Z_AXIS] + Z_CLEARANCE_BETWEEN_PROBES, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); do_blocking_move_to_z(current_position[Z_AXIS] + Z_CLEARANCE_BETWEEN_PROBES, MMM_TO_MMS(Z_PROBE_SPEED_FAST));
@ -2447,11 +2439,6 @@ static void clean_up_after_endstop_or_probe_move() {
if (STOW_PROBE()) measured_z = NAN; if (STOW_PROBE()) measured_z = NAN;
} }
#if HAS_SOFTWARE_ENDSTOPS
// Restore the soft endstop status
soft_endstops_enabled = enable_soft_endstops;
#endif
if (verbose_level > 2) { if (verbose_level > 2) {
SERIAL_PROTOCOLPGM("Bed X: "); SERIAL_PROTOCOLPGM("Bed X: ");
SERIAL_PROTOCOL_F(LOGICAL_X_POSITION(rx), 3); SERIAL_PROTOCOL_F(LOGICAL_X_POSITION(rx), 3);
@ -5592,7 +5579,7 @@ void home_all_axes() { gcode_G28(true); }
r = delta_calibration_radius * 0.1; r = delta_calibration_radius * 0.1;
z_at_pt[CEN] += z_at_pt[CEN] +=
#if HAS_BED_PROBE #if HAS_BED_PROBE
probe_pt(cos(a) * r + dx, sin(a) * r + dy, stow_after_each, 1) probe_pt(cos(a) * r + dx, sin(a) * r + dy, stow_after_each, 1, false)
#else #else
lcd_probe_pt(cos(a) * r, sin(a) * r) lcd_probe_pt(cos(a) * r, sin(a) * r)
#endif #endif
@ -5621,7 +5608,7 @@ void home_all_axes() { gcode_G28(true); }
interpol = fmod(axis, 1); interpol = fmod(axis, 1);
const float z_temp = const float z_temp =
#if HAS_BED_PROBE #if HAS_BED_PROBE
probe_pt(cos(a) * r + dx, sin(a) * r + dy, stow_after_each, 1) probe_pt(cos(a) * r + dx, sin(a) * r + dy, stow_after_each, 1, false)
#else #else
lcd_probe_pt(cos(a) * r, sin(a) * r) lcd_probe_pt(cos(a) * r, sin(a) * r)
#endif #endif
@ -5637,7 +5624,6 @@ void home_all_axes() { gcode_G28(true); }
z_at_pt[axis] /= _7P_STEP / steps; z_at_pt[axis] /= _7P_STEP / steps;
} }
float S1 = z_at_pt[CEN], float S1 = z_at_pt[CEN],
S2 = sq(z_at_pt[CEN]); S2 = sq(z_at_pt[CEN]);
int16_t N = 1; int16_t N = 1;
@ -5675,6 +5661,7 @@ void home_all_axes() { gcode_G28(true); }
LOOP_XYZ(axis) { LOOP_XYZ(axis) {
delta_endstop_adj[axis] -= 1.0; delta_endstop_adj[axis] -= 1.0;
recalc_delta_settings();
endstops.enable(true); endstops.enable(true);
if (!home_delta()) return; if (!home_delta()) return;
@ -5688,6 +5675,7 @@ void home_all_axes() { gcode_G28(true); }
LOOP_CAL_ALL(axis) z_at_pt[axis] -= z_at_pt_base[axis]; LOOP_CAL_ALL(axis) z_at_pt[axis] -= z_at_pt_base[axis];
print_G33_results(z_at_pt, true, true); print_G33_results(z_at_pt, true, true);
delta_endstop_adj[axis] += 1.0; delta_endstop_adj[axis] += 1.0;
recalc_delta_settings();
switch (axis) { switch (axis) {
case A_AXIS : case A_AXIS :
h_fac += 4.0 / (Z03(CEN) +Z01(__A) +Z32(_CA) +Z32(_AB)); // Offset by X-tower end-stop h_fac += 4.0 / (Z03(CEN) +Z01(__A) +Z32(_CA) +Z32(_AB)); // Offset by X-tower end-stop
@ -5705,7 +5693,7 @@ void home_all_axes() { gcode_G28(true); }
for (int8_t zig_zag = -1; zig_zag < 2; zig_zag += 2) { for (int8_t zig_zag = -1; zig_zag < 2; zig_zag += 2) {
delta_radius += 1.0 * zig_zag; delta_radius += 1.0 * zig_zag;
recalc_delta_settings(delta_radius, delta_diagonal_rod, delta_tower_angle_trim); recalc_delta_settings();
endstops.enable(true); endstops.enable(true);
if (!home_delta()) return; if (!home_delta()) return;
@ -5718,7 +5706,7 @@ void home_all_axes() { gcode_G28(true); }
LOOP_CAL_ALL(axis) z_at_pt[axis] -= z_at_pt_base[axis]; LOOP_CAL_ALL(axis) z_at_pt[axis] -= z_at_pt_base[axis];
print_G33_results(z_at_pt, true, true); print_G33_results(z_at_pt, true, true);
delta_radius -= 1.0 * zig_zag; delta_radius -= 1.0 * zig_zag;
recalc_delta_settings(delta_radius, delta_diagonal_rod, delta_tower_angle_trim); recalc_delta_settings();
r_fac -= zig_zag * 6.0 / (Z03(__A) +Z03(__B) +Z03(__C) +Z03(_BC) +Z03(_CA) +Z03(_AB)); // Offset by delta radius r_fac -= zig_zag * 6.0 / (Z03(__A) +Z03(__B) +Z03(__C) +Z03(_BC) +Z03(_CA) +Z03(_AB)); // Offset by delta radius
} }
r_fac /= 2.0; r_fac /= 2.0;
@ -5731,7 +5719,7 @@ void home_all_axes() { gcode_G28(true); }
z_temp = MAX3(delta_endstop_adj[A_AXIS], delta_endstop_adj[B_AXIS], delta_endstop_adj[C_AXIS]); z_temp = MAX3(delta_endstop_adj[A_AXIS], delta_endstop_adj[B_AXIS], delta_endstop_adj[C_AXIS]);
delta_height -= z_temp; delta_height -= z_temp;
LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp; LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp;
recalc_delta_settings(delta_radius, delta_diagonal_rod, delta_tower_angle_trim); recalc_delta_settings();
endstops.enable(true); endstops.enable(true);
if (!home_delta()) return; if (!home_delta()) return;
@ -5751,7 +5739,7 @@ void home_all_axes() { gcode_G28(true); }
z_temp = MAX3(delta_endstop_adj[A_AXIS], delta_endstop_adj[B_AXIS], delta_endstop_adj[C_AXIS]); z_temp = MAX3(delta_endstop_adj[A_AXIS], delta_endstop_adj[B_AXIS], delta_endstop_adj[C_AXIS]);
delta_height -= z_temp; delta_height -= z_temp;
LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp; LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp;
recalc_delta_settings(delta_radius, delta_diagonal_rod, delta_tower_angle_trim); recalc_delta_settings();
switch (axis) { switch (axis) {
case A_AXIS : case A_AXIS :
a_fac += 4.0 / ( Z06(__B) -Z06(__C) +Z06(_CA) -Z06(_AB)); // Offset by alpha tower angle a_fac += 4.0 / ( Z06(__B) -Z06(__C) +Z06(_CA) -Z06(_AB)); // Offset by alpha tower angle
@ -6038,7 +6026,7 @@ void home_all_axes() { gcode_G28(true); }
delta_height -= z_temp; delta_height -= z_temp;
LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp; LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp;
} }
recalc_delta_settings(delta_radius, delta_diagonal_rod, delta_tower_angle_trim); recalc_delta_settings();
NOMORE(zero_std_dev_min, zero_std_dev); NOMORE(zero_std_dev_min, zero_std_dev);
// print report // print report
@ -8997,7 +8985,7 @@ inline void gcode_M205() {
if (parser.seen('X')) delta_tower_angle_trim[A_AXIS] = parser.value_float(); if (parser.seen('X')) delta_tower_angle_trim[A_AXIS] = parser.value_float();
if (parser.seen('Y')) delta_tower_angle_trim[B_AXIS] = parser.value_float(); if (parser.seen('Y')) delta_tower_angle_trim[B_AXIS] = parser.value_float();
if (parser.seen('Z')) delta_tower_angle_trim[C_AXIS] = parser.value_float(); if (parser.seen('Z')) delta_tower_angle_trim[C_AXIS] = parser.value_float();
recalc_delta_settings(delta_radius, delta_diagonal_rod, delta_tower_angle_trim); recalc_delta_settings();
} }
/** /**
* M666: Set delta endstop adjustment * M666: Set delta endstop adjustment
@ -9440,8 +9428,6 @@ inline void gcode_M226() {
if (parser.seen('I')) thermalManager.bedKi = scalePID_i(parser.value_float()); if (parser.seen('I')) thermalManager.bedKi = scalePID_i(parser.value_float());
if (parser.seen('D')) thermalManager.bedKd = scalePID_d(parser.value_float()); if (parser.seen('D')) thermalManager.bedKd = scalePID_d(parser.value_float());
thermalManager.updatePID();
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOPAIR(" p:", thermalManager.bedKp); SERIAL_ECHOPAIR(" p:", thermalManager.bedKp);
SERIAL_ECHOPAIR(" i:", unscalePID_i(thermalManager.bedKi)); SERIAL_ECHOPAIR(" i:", unscalePID_i(thermalManager.bedKi));
@ -11409,17 +11395,13 @@ void process_parsed_command() {
#endif // HAS_BED_PROBE #endif // HAS_BED_PROBE
#if PROBE_SELECTED #if ENABLED(DELTA_AUTO_CALIBRATION)
#if ENABLED(DELTA_AUTO_CALIBRATION)
case 33: // G33: Delta Auto-Calibration case 33: // G33: Delta Auto-Calibration
gcode_G33(); gcode_G33();
break; break;
#endif // DELTA_AUTO_CALIBRATION
#endif // PROBE_SELECTED #endif // DELTA_AUTO_CALIBRATION
#if ENABLED(G38_PROBE_TARGET) #if ENABLED(G38_PROBE_TARGET)
case 38: // G38.2 & G38.3 case 38: // G38.2 & G38.3
@ -12355,18 +12337,20 @@ void ok_to_send() {
* Recalculate factors used for delta kinematics whenever * Recalculate factors used for delta kinematics whenever
* settings have been changed (e.g., by M665). * settings have been changed (e.g., by M665).
*/ */
void recalc_delta_settings(float radius, float diagonal_rod, float tower_angle_trim[ABC]) { void recalc_delta_settings() {
const float trt[ABC] = DELTA_RADIUS_TRIM_TOWER, const float trt[ABC] = DELTA_RADIUS_TRIM_TOWER,
drt[ABC] = DELTA_DIAGONAL_ROD_TRIM_TOWER; drt[ABC] = DELTA_DIAGONAL_ROD_TRIM_TOWER;
delta_tower[A_AXIS][X_AXIS] = cos(RADIANS(210 + tower_angle_trim[A_AXIS])) * (radius + trt[A_AXIS]); // front left tower delta_tower[A_AXIS][X_AXIS] = cos(RADIANS(210 + delta_tower_angle_trim[A_AXIS])) * (delta_radius + trt[A_AXIS]); // front left tower
delta_tower[A_AXIS][Y_AXIS] = sin(RADIANS(210 + tower_angle_trim[A_AXIS])) * (radius + trt[A_AXIS]); delta_tower[A_AXIS][Y_AXIS] = sin(RADIANS(210 + delta_tower_angle_trim[A_AXIS])) * (delta_radius + trt[A_AXIS]);
delta_tower[B_AXIS][X_AXIS] = cos(RADIANS(330 + tower_angle_trim[B_AXIS])) * (radius + trt[B_AXIS]); // front right tower delta_tower[B_AXIS][X_AXIS] = cos(RADIANS(330 + delta_tower_angle_trim[B_AXIS])) * (delta_radius + trt[B_AXIS]); // front right tower
delta_tower[B_AXIS][Y_AXIS] = sin(RADIANS(330 + tower_angle_trim[B_AXIS])) * (radius + trt[B_AXIS]); delta_tower[B_AXIS][Y_AXIS] = sin(RADIANS(330 + delta_tower_angle_trim[B_AXIS])) * (delta_radius + trt[B_AXIS]);
delta_tower[C_AXIS][X_AXIS] = cos(RADIANS( 90 + tower_angle_trim[C_AXIS])) * (radius + trt[C_AXIS]); // back middle tower delta_tower[C_AXIS][X_AXIS] = cos(RADIANS( 90 + delta_tower_angle_trim[C_AXIS])) * (delta_radius + trt[C_AXIS]); // back middle tower
delta_tower[C_AXIS][Y_AXIS] = sin(RADIANS( 90 + tower_angle_trim[C_AXIS])) * (radius + trt[C_AXIS]); delta_tower[C_AXIS][Y_AXIS] = sin(RADIANS( 90 + delta_tower_angle_trim[C_AXIS])) * (delta_radius + trt[C_AXIS]);
delta_diagonal_rod_2_tower[A_AXIS] = sq(diagonal_rod + drt[A_AXIS]); delta_diagonal_rod_2_tower[A_AXIS] = sq(delta_diagonal_rod + drt[A_AXIS]);
delta_diagonal_rod_2_tower[B_AXIS] = sq(diagonal_rod + drt[B_AXIS]); delta_diagonal_rod_2_tower[B_AXIS] = sq(delta_diagonal_rod + drt[B_AXIS]);
delta_diagonal_rod_2_tower[C_AXIS] = sq(diagonal_rod + drt[C_AXIS]); delta_diagonal_rod_2_tower[C_AXIS] = sq(delta_diagonal_rod + drt[C_AXIS]);
update_software_endstops(Z_AXIS);
axis_homed[X_AXIS] = axis_homed[Y_AXIS] = axis_homed[Z_AXIS] = false;
} }
#if ENABLED(DELTA_FAST_SQRT) #if ENABLED(DELTA_FAST_SQRT)

@ -227,7 +227,7 @@ void MarlinSettings::postprocess() {
// Make sure delta kinematics are updated before refreshing the // Make sure delta kinematics are updated before refreshing the
// planner position so the stepper counts will be set correctly. // planner position so the stepper counts will be set correctly.
#if ENABLED(DELTA) #if ENABLED(DELTA)
recalc_delta_settings(delta_radius, delta_diagonal_rod, delta_tower_angle_trim); recalc_delta_settings();
#endif #endif
// Refresh steps_to_mm with the reciprocal of axis_steps_per_mm // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm

@ -487,7 +487,7 @@
// Delta calibration menu // Delta calibration menu
// uncomment to add three points calibration menu option. // uncomment to add three points calibration menu option.
// See http://minow.blogspot.com/index.html#4918805519571907051 // See http://minow.blogspot.com/index.html#4918805519571907051
#define DELTA_CALIBRATION_MENU //#define DELTA_CALIBRATION_MENU
// uncomment to add G33 Delta Auto-Calibration (Enable EEPROM_SETTINGS to store results) // uncomment to add G33 Delta Auto-Calibration (Enable EEPROM_SETTINGS to store results)
#define DELTA_AUTO_CALIBRATION #define DELTA_AUTO_CALIBRATION
@ -506,7 +506,7 @@
#endif #endif
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes // Set the radius for the calibration probe points - max 0.9 * DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 73.5 // mm #define DELTA_CALIBRATION_RADIUS 73.5 // mm
// Set the steprate for papertest probing // Set the steprate for papertest probing
#define PROBE_MANUALLY_STEP 0.025 #define PROBE_MANUALLY_STEP 0.025

@ -506,7 +506,7 @@
#endif #endif
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes // Set the radius for the calibration probe points - max 0.9 * DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 73.5 // mm #define DELTA_CALIBRATION_RADIUS 73.5 // mm
// Set the steprate for papertest probing // Set the steprate for papertest probing
#define PROBE_MANUALLY_STEP 0.025 #define PROBE_MANUALLY_STEP 0.025

@ -496,7 +496,7 @@
#endif #endif
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes // Set the radius for the calibration probe points - max 0.9 * DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 121.5 // mm #define DELTA_CALIBRATION_RADIUS 121.5 // mm
// Set the steprate for papertest probing // Set the steprate for papertest probing
#define PROBE_MANUALLY_STEP 0.025 #define PROBE_MANUALLY_STEP 0.025

@ -496,7 +496,7 @@
#endif #endif
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes // Set the radius for the calibration probe points - max 0.9 * DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 78.0 // mm #define DELTA_CALIBRATION_RADIUS 78.0 // mm
// Set the steprate for papertest probing // Set the steprate for papertest probing
#define PROBE_MANUALLY_STEP 0.025 #define PROBE_MANUALLY_STEP 0.025

@ -482,7 +482,7 @@
#endif #endif
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes // Set the radius for the calibration probe points - max 0.9 * DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 110.0 // mm #define DELTA_CALIBRATION_RADIUS 110.0 // mm
// Set the steprate for papertest probing // Set the steprate for papertest probing
#define PROBE_MANUALLY_STEP 0.025 #define PROBE_MANUALLY_STEP 0.025

@ -500,7 +500,7 @@
#endif #endif
#if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_AUTO_CALIBRATION) || ENABLED(DELTA_CALIBRATION_MENU)
// Set the radius for the calibration probe points - max DELTA_PRINTABLE_RADIUS for non-eccentric probes // Set the radius for the calibration probe points - max 0.9 * DELTA_PRINTABLE_RADIUS for non-eccentric probes
#define DELTA_CALIBRATION_RADIUS 121.5 // mm #define DELTA_CALIBRATION_RADIUS 121.5 // mm
// Set the steprate for papertest probing // Set the steprate for papertest probing
#define PROBE_MANUALLY_STEP 0.025 #define PROBE_MANUALLY_STEP 0.025

@ -215,6 +215,12 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS],
#if HAS_PID_HEATING #if HAS_PID_HEATING
/**
* PID Autotuning (M303)
*
* Alternately heat and cool the nozzle, observing its behavior to
* determine the best PID values to achieve a stable temperature.
*/
void Temperature::PID_autotune(const float temp, const int8_t hotend, const int8_t ncycles, const bool set_result/*=false*/) { void Temperature::PID_autotune(const float temp, const int8_t hotend, const int8_t ncycles, const bool set_result/*=false*/) {
float input = 0.0; float input = 0.0;
int cycles = 0; int cycles = 0;
@ -466,7 +472,7 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS],
bedKp = workKp; \ bedKp = workKp; \
bedKi = scalePID_i(workKi); \ bedKi = scalePID_i(workKi); \
bedKd = scalePID_d(workKd); \ bedKd = scalePID_d(workKd); \
updatePID(); }while(0) }while(0)
#define _SET_EXTRUDER_PID() do { \ #define _SET_EXTRUDER_PID() do { \
PID_PARAM(Kp, hotend) = workKp; \ PID_PARAM(Kp, hotend) = workKp; \
@ -502,14 +508,6 @@ uint8_t Temperature::soft_pwm_amount[HOTENDS],
Temperature::Temperature() { } Temperature::Temperature() { }
void Temperature::updatePID() {
#if ENABLED(PIDTEMP)
#if ENABLED(PID_EXTRUSION_SCALING)
last_e_position = 0;
#endif
#endif
}
int Temperature::getHeaterPower(int heater) { int Temperature::getHeaterPower(int heater) {
return heater < 0 ? soft_pwm_amount_bed : soft_pwm_amount[heater]; return heater < 0 ? soft_pwm_amount_bed : soft_pwm_amount[heater];
} }

@ -438,12 +438,19 @@ class Temperature {
*/ */
#if HAS_PID_HEATING #if HAS_PID_HEATING
static void PID_autotune(const float temp, const int8_t hotend, const int8_t ncycles, const bool set_result=false); static void PID_autotune(const float temp, const int8_t hotend, const int8_t ncycles, const bool set_result=false);
#endif
/** /**
* Update the temp manager when PID values change * Update the temp manager when PID values change
*/ */
static void updatePID(); #if ENABLED(PIDTEMP)
FORCE_INLINE static void updatePID() {
#if ENABLED(PID_EXTRUSION_SCALING)
last_e_position = 0;
#endif
}
#endif
#endif
#if ENABLED(BABYSTEPPING) #if ENABLED(BABYSTEPPING)

@ -204,7 +204,7 @@ uint16_t max_display_update_time = 0;
void lcd_control_retract_menu(); void lcd_control_retract_menu();
#endif #endif
#if ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_CALIBRATION_MENU) || ENABLED(DELTA_AUTO_CALIBRATION)
void lcd_delta_calibrate_menu(); void lcd_delta_calibrate_menu();
#endif #endif
@ -2558,7 +2558,7 @@ void kill_screen(const char* lcd_msg) {
// Move Axis // Move Axis
// //
#if ENABLED(DELTA) #if ENABLED(DELTA)
if (axis_homed[Z_AXIS]) if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
#endif #endif
MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu); MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu);
@ -2673,7 +2673,7 @@ void kill_screen(const char* lcd_msg) {
// //
// Delta Calibration // Delta Calibration
// //
#if ENABLED(DELTA_CALIBRATION_MENU) #if ENABLED(DELTA_CALIBRATION_MENU) || ENABLED(DELTA_AUTO_CALIBRATION)
MENU_ITEM(submenu, MSG_DELTA_CALIBRATE, lcd_delta_calibrate_menu); MENU_ITEM(submenu, MSG_DELTA_CALIBRATE, lcd_delta_calibrate_menu);
#endif #endif
@ -2742,22 +2742,22 @@ void kill_screen(const char* lcd_msg) {
void _goto_tower_z() { _man_probe_pt(cos(RADIANS( 90)) * delta_calibration_radius, sin(RADIANS( 90)) * delta_calibration_radius); } void _goto_tower_z() { _man_probe_pt(cos(RADIANS( 90)) * delta_calibration_radius, sin(RADIANS( 90)) * delta_calibration_radius); }
void _goto_center() { _man_probe_pt(0,0); } void _goto_center() { _man_probe_pt(0,0); }
void _lcd_set_delta_height() { #endif // DELTA_CALIBRATION_MENU
update_software_endstops(Z_AXIS);
} #if ENABLED(DELTA_CALIBRATION_MENU) || ENABLED(DELTA_AUTO_CALIBRATION)
void lcd_delta_settings() { void lcd_delta_settings() {
START_MENU(); START_MENU();
MENU_BACK(MSG_DELTA_CALIBRATE); MENU_BACK(MSG_DELTA_CALIBRATE);
MENU_ITEM_EDIT(float52, MSG_DELTA_DIAG_ROG, &delta_diagonal_rod, DELTA_DIAGONAL_ROD - 5.0, DELTA_DIAGONAL_ROD + 5.0); MENU_ITEM_EDIT_CALLBACK(float52, MSG_DELTA_DIAG_ROG, &delta_diagonal_rod, delta_diagonal_rod - 5.0, delta_diagonal_rod + 5.0, recalc_delta_settings);
MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_DELTA_HEIGHT, &delta_height, delta_height - 10.0, delta_height + 10.0, _lcd_set_delta_height); MENU_ITEM_EDIT_CALLBACK(float52, MSG_DELTA_HEIGHT, &delta_height, delta_height - 10.0, delta_height + 10.0, recalc_delta_settings);
MENU_ITEM_EDIT(float43, "Ex", &delta_endstop_adj[A_AXIS], -5.0, 5.0); MENU_ITEM_EDIT_CALLBACK(float43, "Ex", &delta_endstop_adj[A_AXIS], -5.0, 5.0, recalc_delta_settings);
MENU_ITEM_EDIT(float43, "Ey", &delta_endstop_adj[B_AXIS], -5.0, 5.0); MENU_ITEM_EDIT_CALLBACK(float43, "Ey", &delta_endstop_adj[B_AXIS], -5.0, 5.0, recalc_delta_settings);
MENU_ITEM_EDIT(float43, "Ez", &delta_endstop_adj[C_AXIS], -5.0, 5.0); MENU_ITEM_EDIT_CALLBACK(float43, "Ez", &delta_endstop_adj[C_AXIS], -5.0, 5.0, recalc_delta_settings);
MENU_ITEM_EDIT(float52, MSG_DELTA_RADIUS, &delta_radius, DELTA_RADIUS - 5.0, DELTA_RADIUS + 5.0); MENU_ITEM_EDIT_CALLBACK(float52, MSG_DELTA_RADIUS, &delta_radius, delta_radius - 5.0, delta_radius + 5.0, recalc_delta_settings);
MENU_ITEM_EDIT(float43, "Tx", &delta_tower_angle_trim[A_AXIS], -5.0, 5.0); MENU_ITEM_EDIT_CALLBACK(float43, "Tx", &delta_tower_angle_trim[A_AXIS], -5.0, 5.0, recalc_delta_settings);
MENU_ITEM_EDIT(float43, "Ty", &delta_tower_angle_trim[B_AXIS], -5.0, 5.0); MENU_ITEM_EDIT_CALLBACK(float43, "Ty", &delta_tower_angle_trim[B_AXIS], -5.0, 5.0, recalc_delta_settings);
MENU_ITEM_EDIT(float43, "Tz", &delta_tower_angle_trim[C_AXIS], -5.0, 5.0); MENU_ITEM_EDIT_CALLBACK(float43, "Tz", &delta_tower_angle_trim[C_AXIS], -5.0, 5.0, recalc_delta_settings);
END_MENU(); END_MENU();
} }
@ -2765,7 +2765,6 @@ void kill_screen(const char* lcd_msg) {
START_MENU(); START_MENU();
MENU_BACK(MSG_MAIN); MENU_BACK(MSG_MAIN);
#if ENABLED(DELTA_AUTO_CALIBRATION) #if ENABLED(DELTA_AUTO_CALIBRATION)
MENU_ITEM(submenu, MSG_DELTA_SETTINGS, lcd_delta_settings);
MENU_ITEM(gcode, MSG_DELTA_AUTO_CALIBRATE, PSTR("G33")); MENU_ITEM(gcode, MSG_DELTA_AUTO_CALIBRATE, PSTR("G33"));
MENU_ITEM(gcode, MSG_DELTA_HEIGHT_CALIBRATE, PSTR("G33 P1")); MENU_ITEM(gcode, MSG_DELTA_HEIGHT_CALIBRATE, PSTR("G33 P1"));
#if ENABLED(EEPROM_SETTINGS) #if ENABLED(EEPROM_SETTINGS)
@ -2773,17 +2772,20 @@ void kill_screen(const char* lcd_msg) {
MENU_ITEM(function, MSG_LOAD_EEPROM, lcd_load_settings); MENU_ITEM(function, MSG_LOAD_EEPROM, lcd_load_settings);
#endif #endif
#endif #endif
MENU_ITEM(submenu, MSG_AUTO_HOME, _lcd_delta_calibrate_home); MENU_ITEM(submenu, MSG_DELTA_SETTINGS, lcd_delta_settings);
if (axis_homed[Z_AXIS]) { #if ENABLED(DELTA_CALIBRATION_MENU)
MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_X, _goto_tower_x); MENU_ITEM(submenu, MSG_AUTO_HOME, _lcd_delta_calibrate_home);
MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Y, _goto_tower_y); if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) {
MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Z, _goto_tower_z); MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_X, _goto_tower_x);
MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_CENTER, _goto_center); MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Y, _goto_tower_y);
} MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Z, _goto_tower_z);
MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_CENTER, _goto_center);
}
#endif
END_MENU(); END_MENU();
} }
#endif // DELTA_CALIBRATION_MENU #endif // DELTA_CALIBRATION_MENU || DELTA_AUTO_CALIBRATION
#if IS_KINEMATIC #if IS_KINEMATIC
extern float feedrate_mm_s; extern float feedrate_mm_s;

Loading…
Cancel
Save