Homing to X MAX behaves weird

Hey, 

I have a modified Felix Tec 3 running on Repetier. Since the beginning I am bored of the origin being in the rear right corner with X and Y max being in the front left. As this is opposite of all the usual coordinate systems all parts are printed 180° rotated. 
Today I wanted to change homing to X and Y max which would flip the coordinate system. Everything works fine, except the end of X max homing.

It homes, moves back 5mm (like set), does the second pass (like set), Moves back a few cm (set to 0.1mm), and  tries to move past the endstop a few cm. Obviously the stepper loses steps as soon as it hits the end of the axis (a few mm behind the Endstop trigger point)

Any ideas?

Comments

  • Is your homing direction 1?
    What does M114 return after homing?
    Normally there is no move after what you described, except if you might have set homing position and then in tries to go to that position. To get the rotation correct you needed to invert the x and y motor direction and make end stops use x min for x max endstop and set homing direction to 1 if I see this correctly.
  • X and Y Homing direction is 1
    X and Y motor are also inverted 
    Endstops are configured correctly
    I just ran M114 and it returns: X:250.00 Y:205.00 Z:0.000 E0.0000 which correspond my axis maxima for X and Y
    What I noticed it behaves different when homing all axes so I think it is somehow related to my Z-Probe settings. 
    Where can I set the homing position?
  • Just tried some more: 
    after homing X it goes back 15mm then homes Y, homes Z and tries to move too far to the right at the very end.
  • would help if you posted your config.h 

    Are the X and Y end stops both situated at the max positions.
     
  • Don't know Tec 3 exactly but if it behaves like Pro 1 then measuring using the nozzle bends the bed. So you should probe below the fixture of the bed. That is why z is probed there. And afterwards it moves to homing position in that case. Prue x or y homing does not need that or do it. At least with my pro 1 config so guess same in your case.
  • I made a short Video. Maybe this helps understanding. 

    I just tried switching off Z-Probing all together but it did not change anything about the strange x homing.

    Below the relevant parts of the config file
    #ifndef CONFIGURATION_H
    #define CONFIGURATION_H
    // ################ END MANUAL SETTINGS ##########################
    
    #undef FAN_BOARD_PIN
    #define FAN_BOARD_PIN -1
    #define BOARD_FAN_SPEED 255
    #define BOARD_FAN_MIN_SPEED 0
    #define FAN_THERMO_PIN -1
    #define FAN_THERMO_MIN_PWM 128
    #define FAN_THERMO_MAX_PWM 255
    #define FAN_THERMO_MIN_TEMP 45
    #define FAN_THERMO_MAX_TEMP 60
    #define FAN_THERMO_THERMISTOR_PIN -1
    #define FAN_THERMO_THERMISTOR_TYPE 1
    #undef X_MIN_PIN
    #define X_MIN_PIN -1
    #undef Y_MIN_PIN
    #define Y_MIN_PIN -1
    #undef X_MAX_PIN
    #define X_MAX_PIN ORIG_X_MIN_PIN
    #undef Y_MAX_PIN
    #define Y_MAX_PIN ORIG_Y_MIN_PIN
    
    #define DEFAULT_PRINTER_MODE 0
    
    // ################ Endstop configuration #####################
    
    #define MULTI_ZENDSTOP_HOMING 0
    #define ENDSTOP_PULLUP_X_MIN true
    #define ENDSTOP_X_MIN_INVERTING false
    #define MIN_HARDWARE_ENDSTOP_X false
    #define ENDSTOP_PULLUP_Y_MIN true
    #define ENDSTOP_Y_MIN_INVERTING false
    #define MIN_HARDWARE_ENDSTOP_Y false
    #define ENDSTOP_PULLUP_Z_MIN true
    #define ENDSTOP_Z_MIN_INVERTING true
    #define MIN_HARDWARE_ENDSTOP_Z true
    #define ENDSTOP_PULLUP_Z2_MINMAX true
    #define ENDSTOP_Z2_MINMAX_INVERTING false
    #define MINMAX_HARDWARE_ENDSTOP_Z2 false
    #define ENDSTOP_PULLUP_X_MAX true
    #define ENDSTOP_X_MAX_INVERTING false
    #define MAX_HARDWARE_ENDSTOP_X true
    #define ENDSTOP_PULLUP_Y_MAX true
    #define ENDSTOP_Y_MAX_INVERTING false
    #define MAX_HARDWARE_ENDSTOP_Y true
    #define ENDSTOP_PULLUP_Z_MAX true
    #define ENDSTOP_Z_MAX_INVERTING false
    #define MAX_HARDWARE_ENDSTOP_Z false
    #define ENDSTOP_PULLUP_X2_MIN true
    #define ENDSTOP_PULLUP_Y2_MIN true
    #define ENDSTOP_PULLUP_Z2_MINMAX true
    #define ENDSTOP_PULLUP_X2_MAX true
    #define ENDSTOP_PULLUP_Y2_MAX true
    #define ENDSTOP_X2_MIN_INVERTING false
    #define ENDSTOP_Y2_MIN_INVERTING false
    #define ENDSTOP_X2_MAX_INVERTING false
    #define ENDSTOP_Y2_MAX_INVERTING false
    #define MIN_HARDWARE_ENDSTOP_X2 false
    #define MIN_HARDWARE_ENDSTOP_Y2 false
    #define MAX_HARDWARE_ENDSTOP_X2 false
    #define MAX_HARDWARE_ENDSTOP_Y2 false
    #define X2_MIN_PIN -1
    #define X2_MAX_PIN -1
    #define Y2_MIN_PIN -1
    #define Y2_MAX_PIN -1
    #define Z2_MINMAX_PIN -1
    
    
    
    #define max_software_endstop_r true
    
    #define min_software_endstop_x true
    #define min_software_endstop_y true
    #define min_software_endstop_z false
    #define max_software_endstop_x false
    #define max_software_endstop_y false
    #define max_software_endstop_z true
    #define DOOR_PIN -1
    #define DOOR_PULLUP 1
    #define DOOR_INVERTING 0
    #define ENDSTOP_X_BACK_MOVE 5
    #define ENDSTOP_Y_BACK_MOVE 5
    #define ENDSTOP_Z_BACK_MOVE 1
    #define ENDSTOP_X_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_Y_RETEST_REDUCTION_FACTOR 2
    #define ENDSTOP_Z_RETEST_REDUCTION_FACTOR 4
    #define ENDSTOP_X_BACK_ON_HOME 0.1
    #define ENDSTOP_Y_BACK_ON_HOME 0.1
    #define ENDSTOP_Z_BACK_ON_HOME 0
    #define ALWAYS_CHECK_ENDSTOPS 0
    #define MOVE_X_WHEN_HOMED 0
    #define MOVE_Y_WHEN_HOMED 0
    #define MOVE_Z_WHEN_HOMED 0
    
    // ################# XYZ movements ###################
    
    #define X_ENABLE_ON 0
    #define Y_ENABLE_ON 0
    #define Z_ENABLE_ON 0
    #define DISABLE_X 0
    #define DISABLE_Y 0
    #define DISABLE_Z 0
    #define DISABLE_E 0
    #define INVERT_X_DIR 0
    #define INVERT_X2_DIR 0
    #define INVERT_Y_DIR 0
    #define INVERT_Y2_DIR 0
    #define INVERT_Z_DIR 1
    #define INVERT_Z2_DIR 0
    #define INVERT_Z3_DIR 0
    #define INVERT_Z4_DIR 0
    #define X_HOME_DIR 1
    #define Y_HOME_DIR 1
    #define Z_HOME_DIR -1
    #define X_MAX_LENGTH 250
    #define Y_MAX_LENGTH 205
    #define Z_MAX_LENGTH 225
    #define X_MIN_POS 0
    #define Y_MIN_POS 0
    #define Z_MIN_POS 0
    #define PARK_POSITION_X 5
    #define PARK_POSITION_Y 10
    #define PARK_POSITION_Z_RAISE 10
    
    
    #define DISTORTION_CORRECTION 0
    #define DISTORTION_CORRECTION_POINTS 5
    #define DISTORTION_LIMIT_TO 2
    #define DISTORTION_CORRECTION_R 100
    #define DISTORTION_PERMANENT 1
    #define DISTORTION_UPDATE_FREQUENCY 15
    #define DISTORTION_START_DEGRADE 0.5
    #define DISTORTION_END_HEIGHT 1
    #define DISTORTION_EXTRAPOLATE_CORNERS 0
    #define DISTORTION_XMIN 10
    #define DISTORTION_YMIN 10
    #define DISTORTION_XMAX 190
    #define DISTORTION_YMAX 190
    
    // ##########################################################################################
    // ##                           Movement settings                                          ##
    // ##########################################################################################
    
    #define FEATURE_BABYSTEPPING 1
    #define BABYSTEP_MULTIPLICATOR 4
    
    #define DELTA_SEGMENTS_PER_SECOND_PRINT 180 // Move accurate setting for print moves
    #define DELTA_SEGMENTS_PER_SECOND_MOVE 70 // Less accurate setting for other moves
    #define EXACT_DELTA_MOVES 1
    
    // Delta settings
    #define DELTA_HOME_ON_POWER 0
    
    #define DELTASEGMENTS_PER_PRINTLINE 24
    #define STEPPER_INACTIVE_TIME 10800L
    #define MAX_INACTIVE_TIME 0L
    #define MAX_FEEDRATE_X 200
    #define MAX_FEEDRATE_Y 200
    #define MAX_FEEDRATE_Z 5
    #define HOMING_FEEDRATE_X 50
    #define HOMING_FEEDRATE_Y 50
    #define HOMING_FEEDRATE_Z 3
    #define HOMING_ORDER HOME_ORDER_XYZ
    #define ZHOME_PRE_RAISE 2
    #define ZHOME_PRE_RAISE_DISTANCE 20
    #define RAISE_Z_ON_TOOLCHANGE 0
    #define ZHOME_MIN_TEMPERATURE 0
    #define ZHOME_HEAT_ALL 1
    #define ZHOME_HEAT_HEIGHT 20
    #define ZHOME_X_POS 999999
    #define ZHOME_Y_POS 999999
    #define ENABLE_BACKLASH_COMPENSATION 0
    #define X_BACKLASH 0
    #define Y_BACKLASH 0
    #define Z_BACKLASH 0
    #define RAMP_ACCELERATION 1
    #define STEPPER_HIGH_DELAY 0
    #define DIRECTION_DELAY 0
    #define STEP_DOUBLER_FREQUENCY 12000
    #define ALLOW_QUADSTEPPING 1
    #define DOUBLE_STEP_DELAY 1 // time in microseconds
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_X 800
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Y 800
    #define MAX_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_X 1750
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Y 1750
    #define MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND_Z 100
    #define INTERPOLATE_ACCELERATION_WITH_Z 1
    #define ACCELERATION_FACTOR_TOP 75
    #define MAX_JERK 10
    #define MAX_ZJERK 0.3
    #define PRINTLINE_CACHE_SIZE 16
    #define MOVE_CACHE_LOW 10
    #define LOW_TICKS_PER_MOVE 250000
    #define EXTRUDER_SWITCH_XY_SPEED 100
    #define DUAL_X_AXIS 0
    #define DUAL_X_RESOLUTION 0
    #define X2AXIS_STEPS_PER_MM 100
    #define FEATURE_TWO_XSTEPPER 0
    #define X2_STEP_PIN   ORIG_E1_STEP_PIN
    #define X2_DIR_PIN    ORIG_E1_DIR_PIN
    #define X2_ENABLE_PIN ORIG_E1_ENABLE_PIN
    #define FEATURE_TWO_YSTEPPER 0
    #define Y2_STEP_PIN   ORIG_E1_STEP_PIN
    #define Y2_DIR_PIN    ORIG_E1_DIR_PIN
    #define Y2_ENABLE_PIN ORIG_E1_ENABLE_PIN
    #define FEATURE_TWO_ZSTEPPER 0
    #define Z2_STEP_PIN   ORIG_E1_STEP_PIN
    #define Z2_DIR_PIN    ORIG_E1_DIR_PIN
    #define Z2_ENABLE_PIN ORIG_E1_ENABLE_PIN
    #define FEATURE_THREE_ZSTEPPER 0
    #define Z3_STEP_PIN   ORIG_E2_STEP_PIN
    #define Z3_DIR_PIN    ORIG_E2_DIR_PIN
    #define Z3_ENABLE_PIN ORIG_E2_ENABLE_PIN
    #define FEATURE_FOUR_ZSTEPPER 0
    #define Z4_STEP_PIN   ORIG_E3_STEP_PIN
    #define Z4_DIR_PIN    ORIG_E3_DIR_PIN
    #define Z4_ENABLE_PIN ORIG_E3_ENABLE_PIN
    #define FEATURE_DITTO_PRINTING 0
    #define USE_ADVANCE 1
    #define ENABLE_QUADRATIC_ADVANCE 1
    
    // #################### Z-Probing #####################
    
    #define Z_PROBE_Z_OFFSET 0
    #define Z_PROBE_Z_OFFSET_MODE 1
    #define UI_BED_COATING 0
    #define FEATURE_Z_PROBE 1
    #define EXTRUDER_IS_Z_PROBE 1
    #define Z_PROBE_DISABLE_HEATERS 0
    #define Z_PROBE_BED_DISTANCE 0
    #define Z_PROBE_PIN ORIG_Z_MIN_PIN
    #define Z_PROBE_PULLUP 0
    #define Z_PROBE_ON_HIGH 0
    #define Z_PROBE_X_OFFSET 0
    #define Z_PROBE_Y_OFFSET 0
    #define Z_PROBE_WAIT_BEFORE_TEST 0
    #define Z_PROBE_SPEED 2
    #define Z_PROBE_XY_SPEED 150
    #define Z_PROBE_SWITCHING_DISTANCE 1
    #define Z_PROBE_REPETITIONS 1
    #define Z_PROBE_USE_MEDIAN 0
    #define Z_PROBE_HEIGHT 16.95
    #define Z_PROBE_DELAY 0
    #define Z_PROBE_START_SCRIPT "M226 P18 S0 \n G4 S2"
    #define Z_PROBE_FINISHED_SCRIPT "G1 Z2 \n G4 P300 \n M226 P18 S0"
    #define Z_PROBE_RUN_AFTER_EVERY_PROBE ""
    #define Z_PROBE_REQUIRES_HEATING 0
    #define Z_PROBE_MIN_TEMPERATURE 150
    #define FEATURE_AUTOLEVEL 0
    #define FEATURE_SOFTWARE_LEVELING 0
    #define Z_PROBE_X1 20
    #define Z_PROBE_Y1 20
    #define Z_PROBE_X2 160
    #define Z_PROBE_Y2 20
    #define Z_PROBE_X3 100
    #define Z_PROBE_Y3 160
    #define BED_LEVELING_METHOD 0
    #define BED_CORRECTION_METHOD 0
    #define BED_LEVELING_GRID_SIZE 5
    #define BED_LEVELING_REPETITIONS 5
    #define BED_MOTOR_1_X 0
    #define BED_MOTOR_1_Y 0
    #define BED_MOTOR_2_X 200
    #define BED_MOTOR_2_Y 0
    #define BED_MOTOR_3_X 100
    #define BED_MOTOR_3_Y 200
    #define BENDING_CORRECTION_A 0
    #define BENDING_CORRECTION_B 0
    #define BENDING_CORRECTION_C 0
    #define FEATURE_AXISCOMP 0
    #define AXISCOMP_TANXY 0
    #define AXISCOMP_TANYZ 0
    #define AXISCOMP_TANXZ 0
    #endif
    


  • Yes strange move. Looking into homeX after doing the back move there is one for selecting current extruder:
    #if NUM_EXTRUDER > 1
    #if X_HOME_DIR < 0
    PrintLine::moveRelativeDistanceInSteps((Extruder::current->xOffset - offX) * X_HOME_DIR, 0, 0, 0, homingFeedrate[X_AXIS], true, true);
    PrintLine::moveRelativeDistanceInSteps(-(Extruder::current->xOffset - offX) * X_HOME_DIR, 0, 0, 0, homingFeedrate[X_AXIS], true, true);
    #endif

    So for left extruder it should not move at all and when right extruder was active it would move to the left.
    I don't see how that would move to wrong direction but you can try commenting that part and try again, then it should omit the move it was that move. It is in file Printer.cpp after
    #else // Cartesian printer
    void Printer::homeXAxis() {
    at line 1676 in dev version.

    If that was the case please report what your x offsets are for both extruders.
  • EXT0 had an offset of 0;0;0
    EXT1 had one of -1219;0;0

    after changing The offset for EXT1 to 0;0;0 everything works fine! I was not aware Extruder offsets influence on homing behavior. As EXT1 is just a virtual one for me in this printer for controlling a second heater in EXT0 everything is fine this way.

    I also tried changing the offset from - -1219 to 1219 and it works fine as well. I suppose it makes sense extruder offsets need to be inverted when flipping axes, but didn't expect any strange homing behavior. Something strange happening when switching extruders would have made more sense to me. 

    Anyways thanks a million! 
  • now I ran into another thing I kind of forgot. 
    I use a switch for Z homing underneath the nozzle, so I use the Z-probe settings. 
    Before changing the homing settings it looked like this:
    #define Z_PROBE_FINISHED_SCRIPT "G1 X0 Y0 Z2 \n G4 P300 \n M226 P18 S0"
    to move up after homing and wait for the switch to be pressed before moving down. 
    With every other setting I tried it always moved right into the button. 

    Now obviously it moves across the bed to go to X0 Y0 so I tried again setting it up properly. I wanted to avoid using X250 Y205 Z2 as it makes Z homing possible only in this very spot. 
    But still I can't figure out how to properly set it up, so it works in every location. I also just tried using
    G91 \n G1 Z2 \n G90
    which works if at least X and Y have been homed before. If the printer has not been homed before and I want to home all after homing Z it moves to the Z2 position above the point where the printer was before homing. 

    *kind of confused by all the settings right now*

  • I think I did not really understand why you need to move somewhere and wait for a switch after probing. Can you explain that? Normally there should be no move after that. That can give problems easily if you do several probes as it changes position you think you are at.
  • I use a switch for probing which I manually put underneath the nozzle when homing. This switch has a height of 16.95mm at the point it triggers. If I don't use the line like above the extruder moves down on the switch once, up to untrigger it and down again. After the switch triggers again it moves down into the switch right away as there is no time to move the switch out of the way. 
    If I delete the Z probe finished script and set the ENDSTOP_Z_BACK_ON_HOME  value to anything grater than the Z_PROBE_HEIGHT it works but i cant move any closer to the bed than the value set in ENDSTOP_Z_BACK_ON_HOME.
    Probably it also is something I am not aware of I need to change.  
  • Actually that is what
    Z_PROBE_WAIT_BEFORE_TEST
    is for. If set to 1 it waits with lowering until you hit the probe manually. Was added for e.g. cnc machines where this is required as well for tool changes. More important if you use it for autolevel it waits before every point going down while start/finish are only called once for all points.

    When you use that switch make sure that start height is high 
    #define Z_PROBE_BED_DISTANCE 0
    is surely too close. 10-20 would give you enough room and time for your fingers. You can also use this for homing just use homing order txyz so you can define homing position for Z and you can add raise before homing. Or move manually up before homing since always going 20mm up means you can not home z in the last 20mm of z. But it is more convenient to first raise 20mm so homing always work.

  • Repetier said:
    Actually that is what
    Z_PROBE_WAIT_BEFORE_TEST
    is for. If set to 1 it waits with lowering until you hit the probe manually. Was added for e.g. cnc machines where this is required as well for tool changes. More important if you use it for autolevel it waits before every point going down while start/finish are only called once for all points.
    this didn't work for me
    Repetier said:
    When you use that switch make sure that start height is high 
    #define Z_PROBE_BED_DISTANCE 0
    is surely too close. 10-20 would give you enough room and time for your fingers. You can also use this for homing just use homing order txyz so you can define homing position for Z and you can add raise before homing. Or move manually up before homing since always going 20mm up means you can not home z in the last 20mm of z. But it is more convenient to first raise 20mm so homing always work.
    What I also tried ist setting the
    #define Z_PROBE_BED_DISTANCE 0
    to 20 (which is equal to my Z raise before homing) but it didn't change anything either. 

    I think I remember trying bed leveling a while back and it worked while bed leveling but not during homing. 
    I feel like Z-Probing settings don't matter for Z homing?!

Sign In or Register to comment.