Auto bed leveling Z Lift before retract probe February 13, 2015 11:46AM |
Registered: 9 years ago Posts: 20 |
#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line) #define Z_PROBE_REPEATABILITY_TEST // If not commented out, Z-Probe Repeatability test will be included if Auto Bed Leveling is Enabled. #ifdef ENABLE_AUTO_BED_LEVELING // There are 2 different ways to pick the X and Y locations to probe: // - "grid" mode // Probe every point in a rectangular grid // You must specify the rectangle, and the density of sample points // This mode is preferred because there are more measurements. // It used to be called ACCURATE_BED_LEVELING but "grid" is more descriptive // - "3-point" mode // Probe 3 arbitrary points on the bed (that aren't colinear) // You must specify the X & Y coordinates of all 3 points #define AUTO_BED_LEVELING_GRID // with AUTO_BED_LEVELING_GRID, the bed is sampled in a // AUTO_BED_LEVELING_GRID_POINTSxAUTO_BED_LEVELING_GRID_POINTS grid // and least squares solution is calculated // Note: this feature occupies 10'206 byte #ifdef AUTO_BED_LEVELING_GRID // set the rectangle in which to probe #define LEFT_PROBE_BED_POSITION 30 #define RIGHT_PROBE_BED_POSITION 180 #define BACK_PROBE_BED_POSITION 160 #define FRONT_PROBE_BED_POSITION 5 // set the number of grid points per dimension // I wouldn't see a reason to go above 3 (=9 probing points on the bed) #define AUTO_BED_LEVELING_GRID_POINTS 2 #else // not AUTO_BED_LEVELING_GRID // with no grid, just probe 3 arbitrary points. A simple cross-product // is used to esimate the plane of the print bed #define ABL_PROBE_PT_1_X 15 #define ABL_PROBE_PT_1_Y 180 #define ABL_PROBE_PT_2_X 15 #define ABL_PROBE_PT_2_Y 20 #define ABL_PROBE_PT_3_X 170 #define ABL_PROBE_PT_3_Y 20 #endif // AUTO_BED_LEVELING_GRID // these are the offsets to the probe relative to the extruder tip (Hotend - Probe) // X and Y offsets must be integers #define X_PROBE_OFFSET_FROM_EXTRUDER 34 #define Y_PROBE_OFFSET_FROM_EXTRUDER -4 #define Z_PROBE_OFFSET_FROM_EXTRUDER -6.2 #define Z_RAISE_BEFORE_HOMING 5 // (in mm) Raise Z before homing (G28) for Probe Clearance. // Be sure you have this distance over your Z_MAX_POS in case #define XY_TRAVEL_SPEED 2000 // X and Y axis travel speed between probes, in mm/min #define Z_RAISE_BEFORE_PROBING 15 //How much the extruder will be raised before traveling to the first probing point. #define Z_RAISE_BETWEEN_PROBINGS 5 //How much the extruder will be raised when traveling from between next probing points //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell //#define SLED_DOCKING_OFFSET 0 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like. //If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk //The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it. // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile. #define PROBE_SERVO_DEACTIVATION_DELAY 300 //If you have enabled the Bed Auto Leveling and are using the same Z Probe for Z Homing, //it is highly recommended you let this Z_SAFE_HOMING enabled!!! #define Z_SAFE_HOMING // This feature is meant to avoid Z homing with probe outside the bed area. // When defined, it will: // - Allow Z homing only after X and Y homing AND stepper drivers still enabled // - If stepper drivers timeout, it will need X and Y homing again before Z homing // - Position the probe in a defined XY point before Z Homing when homing all axis (G28) // - Block Z homing only when the probe is outside bed area. #ifdef Z_SAFE_HOMING #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2) // X point for Z homing when homing all axis (G28) #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2) // Y point for Z homing when homing all axis (G28) #endif #ifdef AUTO_BED_LEVELING_GRID // Check if Probe_Offset * Grid Points is greater than Probing Range #if X_PROBE_OFFSET_FROM_EXTRUDER < 0 #if (-(X_PROBE_OFFSET_FROM_EXTRUDER * AUTO_BED_LEVELING_GRID_POINTS) >= (RIGHT_PROBE_BED_POSITION - LEFT_PROBE_BED_POSITION)) #error "The X axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS" #endif #else #if ((X_PROBE_OFFSET_FROM_EXTRUDER * AUTO_BED_LEVELING_GRID_POINTS) >= (RIGHT_PROBE_BED_POSITION - LEFT_PROBE_BED_POSITION)) #error "The X axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS" #endif #endif #if Y_PROBE_OFFSET_FROM_EXTRUDER < 0 #if (-(Y_PROBE_OFFSET_FROM_EXTRUDER * AUTO_BED_LEVELING_GRID_POINTS) >= (BACK_PROBE_BED_POSITION - FRONT_PROBE_BED_POSITION)) #error "The Y axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS" #endif #else #if ((Y_PROBE_OFFSET_FROM_EXTRUDER * AUTO_BED_LEVELING_GRID_POINTS) >= (BACK_PROBE_BED_POSITION - FRONT_PROBE_BED_POSITION)) #error "The Y axis probing range is not enough to fit all the points defined in AUTO_BED_LEVELING_GRID_POINTS" #endif #endif #endif #endif // ENABLE_AUTO_BED_LEVELING
Re: Auto bed leveling Z Lift before retract probe February 13, 2015 12:22PM |
Registered: 9 years ago Posts: 329 |
Re: Auto bed leveling Z Lift before retract probe February 13, 2015 12:47PM |
Registered: 9 years ago Posts: 20 |
Re: Auto bed leveling Z Lift before retract probe February 13, 2015 12:57PM |
Registered: 9 years ago Posts: 329 |
static void engage_z_probe() { // Engage Z Servo endstop if enabled #ifdef SERVO_ENDSTOPS if (servo_endstops[Z_AXIS] > -1) { #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) servos[servo_endstops[Z_AXIS]].attach(0); #endif servos[servo_endstops[Z_AXIS]].write(servo_endstop_angles[Z_AXIS * 2]); #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) delay(PROBE_SERVO_DEACTIVATION_DELAY); servos[servo_endstops[Z_AXIS]].detach(); #endif } #endif } static void retract_z_probe() { // Retract Z Servo endstop if enabled #ifdef SERVO_ENDSTOPS if (servo_endstops[Z_AXIS] > -1) { #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) servos[servo_endstops[Z_AXIS]].attach(0); #endif servos[servo_endstops[Z_AXIS]].write(servo_endstop_angles[Z_AXIS * 2 + 1]); #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) delay(PROBE_SERVO_DEACTIVATION_DELAY); servos[servo_endstops[Z_AXIS]].detach(); #endif } #endif }
Re: Auto bed leveling Z Lift before retract probe February 13, 2015 01:07PM |
Registered: 9 years ago Posts: 20 |
static void retract_z_probe() { // Retract Z Servo endstop if enabled #ifdef SERVO_ENDSTOPS if (servo_endstops[Z_AXIS] > -1) { #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) servos[servo_endstops[Z_AXIS]].attach(0); #endif do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]+3); servos[servo_endstops[Z_AXIS]].write(servo_endstop_angles[Z_AXIS * 2 + 1]); do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]-3); #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) delay(PROBE_SERVO_DEACTIVATION_DELAY); servos[servo_endstops[Z_AXIS]].detach(); #endif } #endif }I had to lower afterwards, because somehow the position would not fit after wards.
Re: Auto bed leveling Z Lift before retract probe February 13, 2015 02:17PM |
Registered: 9 years ago Posts: 329 |
do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]+3);to the beginning of the engage code, and compensating for the 3mm by reducing the 'lift before probing' value in Configuration.h? Hmmm...
Re: Auto bed leveling Z Lift before retract probe February 20, 2015 10:23AM |
Registered: 10 years ago Posts: 371 |
Quote
This step is also optional. Because of how some people's Z-Probe is constructed, it is best to raise the nozzle prior to retracting the probe. The Enhanced G29 code handles this circumstance. But as it turns out, the stock G28 command is also guilty of this bad behavior. If you need the G28 command to raise the nozzle prior to retracting the probe, make the following changes in Marlin_Main.cpp :
QuoteFind the following code: // Retract Servo endstop if enabled #ifdef SERVO_ENDSTOPS if (servo_endstops[axis] > -1) { servos[servo_endstops[axis]].write(servo_endstop_angles[axis * 2 + 1]); } #endif #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) if (axis==Z_AXIS) retract_z_probe(); #endifadd these lines of code immediately after the "// Retract Servo endstop if enabled" comment.
#if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) if (axis==Z_AXIS) do_blocking_move_relative(0, 0, Z_RAISE_BEFORE_PROBING); #endif
It should look like this when you have made the change:
// Retract Servo endstop if enabled #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) if (axis==Z_AXIS) do_blocking_move_relative(0, 0, Z_RAISE_BEFORE_PROBING); #endif #ifdef SERVO_ENDSTOPS if (servo_endstops[axis] > -1) { servos[servo_endstops[axis]].write(servo_endstop_angles[axis * 2 + 1]); } #endif #if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0) if (axis==Z_AXIS) retract_z_probe(); #endif
Re: Auto bed leveling Z Lift before retract probe February 23, 2015 07:44PM |
Registered: 9 years ago Posts: 6 |