Auto Level i3 pro C dual extruder GT2560

Post Reply
Jeffs3dprint
Posts: 2
Joined: Sun Aug 28, 2016 11:14 am

Auto Level i3 pro C dual extruder GT2560

Post by Jeffs3dprint » Sun Aug 28, 2016 10:00 pm

I have added an inductive sensor and am having problems configuring the Marlin firmware. The probe is centered 53 mm behind the extruders. I am using aluminum foil strips under the glass bed which triggers correctly when it stops over them.
I have a couple of problems that may be related.

1) To probe correctly over my aluminum strips, I have to set some strange numbers in the grid.
#define LEFT_PROBE_BED_POSITION -45
#define RIGHT_PROBE_BED_POSITION 120
#define BACK_PROBE_BED_POSITION 130
#define FRONT_PROBE_BED_POSITION 20
Changing these numbers change things other than what I expect. For instance, the front bed position changes the X position, not the Y.

2) Somewhere between a G28 code and G29 the printer 'forgets' where it is. Auto level stop at the last point (back left). If I enter a M114 command I get X = -45, Y = 76, Z= 1.52. X and Y are off. X should be around 0, and Y around 120. When I print like this, the print is not centered and goes off the bed.
If I do M144 after the G28 home I get around what I expect in the center of the bed (x105 Y52 Z1.60)
As a work around I entered the code G92 X0 Y130 ;set position after the G29 in slicer.

; Default start code
G28 ; Home All
G29 ;Auto bed level
G92 X0 y130

The print is now in the center of the bed, but slicer shows the print off the screen when printing (shows correct if I go do a line by line display before printing). It seems to be picking up some of my weird numbers I had to enter to get the probe to stop in the right places

The print and slicer were perfect before adding the auto level.


//============================= Bed Auto Leveling ===========================

#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 -45
    #define RIGHT_PROBE_BED_POSITION 120
    #define BACK_PROBE_BED_POSITION 130
    #define FRONT_PROBE_BED_POSITION 20

     // 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 0
  #define Y_PROBE_OFFSET_FROM_EXTRUDER 53
  #define Z_PROBE_OFFSET_FROM_EXTRUDER -1.6

  #define Z_RAISE_BEFORE_HOMING 4       // (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 8000         // X and Y axis travel speed between probes, in mm/min

  #define Z_RAISE_BEFORE_PROBING 5    //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 5 // 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

Jeffs3dprint
Posts: 2
Joined: Sun Aug 28, 2016 11:14 am

Re: Auto Level i3 pro C dual extruder GT2560

Post by Jeffs3dprint » Thu Sep 01, 2016 12:28 pm

I figured it out! After about 4 days of head-scratching, starting over... I finally have success.

First, I had the wrong sign on the offset. This caused havoc in the centering, auto leveling and Slic3r. Should have been -51 not 53 (remeasured and found it to be 51mm.)

Secondly, comes the confusing part of bed_position verses offset. Yes, they interact with each other. I have made notes on how it calculates the position. I hope this helps.
this took the longest time (hours) as every change I had to upload the new changed firmware moving only one point at a time to see what changed. Then I used the following codes the most to help in troubleshooting

G28 X0 Y0 ; Home X and Y only to the stops. This prevents homing to the center.
G29; auto level command.
M114; to print out current printer position. (Repetier-Host also echos the position in the bottom window)
G1 ?*; where ? = axis to move, and * = to what positon. (example G1 X50 moves X axis to 50)
Software using; Repetier-Host V1.6.2 to enter G codes manually and to have the cursor over the Emergency Stop - just in case (used many times)


After tweeking the numbers for the offset, and probe_bed_positions I finally had the auto level going to the positions I wanted. But a G28 (home) sent the extruder to the center and beyond the back of the printing bed.

3rd correction; I found Z_safe_homing. and tried subtracting from the safe_homing_Y-Point. It worked! With some tweeking I settled on -20 in the X and -100 in the Y.
First print with the new set up. Centered in the bed, Slic3r works perfectly.

I will be posting my probe holder on thingiverse in the near future if others have the use for it.
//============================= Bed Auto Leveling ===========================

#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 5  // left position 21, left probe bed positon - (x probe offset from extruder)
    #define RIGHT_PROBE_BED_POSITION 155  // right position 171, right probe bed positon - (x probe offset from extruder)
    #define BACK_PROBE_BED_POSITION 66    // back positon 117, back probe bed positon - (y probe offset from extruder)
    #define FRONT_PROBE_BED_POSITION -51   // front position 0, Front probe bed position - (y probe offset from extruder)

     // 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 -16  // offset from left extruder
  #define Y_PROBE_OFFSET_FROM_EXTRUDER -51   // offset from centerline of both extruders
  #define Z_PROBE_OFFSET_FROM_EXTRUDER -1.6

  #define Z_RAISE_BEFORE_HOMING 4       // (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 8000         // X and Y axis travel speed between probes, in mm/min

  #define Z_RAISE_BEFORE_PROBING 5    //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 5 // 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-20)    // X point for Z homing when homing all axis (G28) // -20 added
    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2-100)    // Y point for Z homing when homing all axis (G28) //-50 added

  #endif

Post Reply