SOLVED: Homing already homed XY axis fails



  • Hello there,

    I am using a corexy printer with stall detection for sensorless homig of X and Y. This basically works, however there is a problem when X and Y are already homed and I want to home a second time, for example when using G28 in the default startup gcode of my slicer.

    What happens is, that X and Y only move a tiny bit, don't return to the low end and report both axis homed but the carriage is somewhere relative to their last position.

    Help is much appreciated!
    Cheers, Markus

    Here is my homex.g (homey.g is identical):

    ;Sensorless Homing XY
    M564 H0 		; allow movement of axis that have not been homed
    M400 			; make sure everything has stopped before we make changes
    M915 X Y S3 F0 R0 H400	; configure stall detection
    M913 X40 Y40 		; reduce motor current to 40% to prevent belts slipping
    G91 			; use relative positioning
    G1 Z5 F6000 S2 		; lift Z relative to current position
    G1 X30 Y30 F3600	; wake up motors and move away from current position
    G1 S1 X-330 Y-330 F3600 ; move right/back 330mm, stopping at the endstop
    G1 X6 Y5 		; position nozzle over ultrabase
    M400 			; make sure everything has stopped before we reset the motor currents
    M913 X100 Y100 		; motor currents back to 100%
    G90 			; back to absolute positioning
    G92 X0 Y0		; Set X and Y to 0
    M574 X1 Y1 S1 		; define active low microswitches
    


  • I'm just guessing but are you reaching axis minimum before the axes stall out?

    Check what you have for M208. I bet your stopping at the minimum and then setting that to your new home position.



  • It also seems to me that even if this works, because you're moving at 45 degrees, you will get a motor stall when the print head hits EITHER X or Y limit, with no guarantee at all the you'll have hit the other. So if your print head were at X=150, Y=10, your print head would move back to X=140, Y=0, and the motor would stall, since it cannot move Y any further. If it now thinks that X=0, you're going to have a problem.



  • I deliberately positioned the head at X 150 and Y 30 and started homing. What happens is that Y hits the axis low end earlier but X continues moving to the low end and stops there and homing seems to finish as expected.

    Do you think that this behavior is any different in a second homing pass?



  • @rs4race
    Currently:
    M208 X0 Y0 Z0 S1
    M208 X300 Y300 Z410 S0


  • administrators

    @toskium said in Homing already homed XY axis fails:

    G1 S1 X-330 Y-330 F3600 ; move right/back 330mm, stopping at the endstop

    Why are you moving both X and Y when you only want to home X?

    See https://duet3d.dozuki.com/Wiki/ConfiguringRepRapFirmwareCoreXYPrinter#Section_Homing_files if you haven't already.



  • @dc42 TBH I thought I could take a shortcut since it first appeared to be working. I will change the homex and homey.g files so they only home their respective axis and try again. Maybe that is all it takes.


  • administrators

    @dc42 said in Homing already homed XY axis fails:

    G1 S1 X-330 Y-330 F3600 ; move right/back 330mm, stopping at the endstop

    When you execute that on a CoreXY machine, it should move the print head until either the X or the Y axis reaches its endstop; then stop. On a Cartesian printer the move will continue until both X and Y have reached the endstops.



  • @dc42 I modified my homex.g and homey.g files so they only home their own axis. However nothing has changed in the outcome. For testing the homex.g looks like this:

    ;Sensorless Homing XY
    M564 H0 		; allow movement of axis that have not been homed
    M400 			; make sure everything has stopped before we make changes
    M915 X Y S3 F0 R0 H400	; configure stall detection
    M913 X40 Y40		; reduce motor current to 40% to prevent belts slipping
    G91 			; use relative positioning
    ;G1 Z5 F6000 S2 		; lift Z relative to current position
    G1 X30 F4600		; move away from home
    G1 S1 X-330 F4600 	; move right/back 330mm, stopping at the endstop
    G1 X6 	 		; move away from home
    M400 			; make sure everything has stopped before we reset the motor currents
    M913 X100 Y100		; motor currents back to 100%
    G90 			; back to absolute positioning
    G92 X0			; Set X and Y to 0
    M574 X1 Y1 S1 		; define active low microswitches
    

    What I observed is, that the G1 S1 X-330 F4600 is not executed at all. It only does G1 X30 F4600 and the G1 X6 afterwards.

    In addition to that, if I do move X and Y at the same time, the first triggered endstop does not terminate the movement at all.

    In case it helps, here is my config.g:

    ; Configuration file for Duet WiFi (firmware version 1.20 or newer)
    ; executed by the firmware on start-up
    ;
    ; generated by RepRapFirmware Configuration Tool on Wed Jul 11 2018 18:31:06 GMT+0200 (W. Europe Daylight Time)
    
    ; General preferences
    G90                              ; Send absolute coordinates...
    M83                              ; ...but relative extruder moves
    M555 P1                          ; Set firmware compatibility to look like RepRapFirmare
    
    M667 S1                          ; Select CoreXY mode
    
    ; Network
    M550 PHypercube Evolution 001    ; Set machine name
    M552 S1                          ; Enable network
    ;*** Access point is configured manually via M587
    M586 P0 S1                       ; Enable HTTP
    M586 P1 S0                       ; Disable FTP
    M586 P2 S0                       ; Disable Telnet
    
    ; Drives
    M569 P0 S1                       ; Drive 0 goes forwards
    M569 P1 S1                       ; Drive 1 goes forwards
    M569 P2 S1                       ; Drive 2 goes forwards
    M569 P3 S0                       ; Drive 3 goes forwards
    M350 X16 Y16 Z16 E16 I1          ; Configure microstepping with interpolation
    M92 X160 Y160 Z3200 E2649        ; Set steps per mm
    M566 X900 Y900 Z12 E40           ; Set maximum instantaneous speed changes (mm/min)
    M203 X12000 Y12000 Z600 E1800    ; Set maximum speeds (mm/min)
    M201 X3000 Y3000 Z250 E120       ; Set accelerations (mm/s^2)
    M906 X1600 Y1600 Z1600 E800 I30  ; Set motor currents (mA) and motor idle factor in per cent
    M84 S30                          ; Set idle timeout
    
    ; Axis Limits
    M208 X0 Y0 Z0 S1                 ; Set axis minima
    M208 X300 Y300 Z410 S0           ; Set axis maxima
    
    ; Endstops
    M574 X1 Y1 S3                    ; Set endstops controlled by motor load detection
    M574 Z1 S2 			 ; Set endstops controlled by probe ( Z-endstop is Z-probe)
    
    ; Z-Probe
    M558 P8 A3 I1 H3 R1 F480 T6000
    G31 P100 X0 Y0 Z0.05                               ; Set Z probe trigger value, offset and trigger height
    
    ; Heaters
    M307 H0 B0 S1.00                 ; Disable bang-bang mode for the bed heater and set PWM limit
    M305 P0 T100000 B4138 C0 R4700  ; Default Values Set thermistor + ADC parameters for heater 0 (bed)
    M143 H0 S150                     ; Set temperature limit for heater 0 to 150C (bed)
    M305 P1 T100000 B4138 C0 R4700   ; Set thermistor + ADC parameters for heater 1 (hotend)
    M143 H1 S350                     ; Set temperature limit for heater 1 to 350C (hotend)
    
    ; Fans
    M106 P0 S0.3 I0 F500 H-1         ; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P1 S1 I0 F500 H1 T45        ; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on
    M106 P2 S1 I0 F500 H1 T45        ; Set fan 2 value, PWM signal inversion and frequency. Thermostatic control is turned on
    
    ; Tools
    M563 P0 D0 H1                    ; Define tool 0
    G10 P0 X0 Y0 Z0                  ; Set tool 0 axis offsets
    G10 P0 R0 S0                     ; Set initial tool 0 active and standby temperatures to 0C
    
    ; Automatic saving after power loss is not enabled
    
    ; Custom settings
    M557 X0:300 Y0:300 S30 ; probe from X=15 to 285, Y=15 to 285mm with a mesh spacing of 30mm
    
    ; Pressure Advance
    M572 D0 S0.06
    
    ; Enable use of sys/config-override.g
    M501
    


  • Update:

    The repeated homing seems to work 99% now, I decreased the the current to the steppers from 1600mA to 1300mA in config.g. I am wondering if this might have been the reason behind the problem all the time.

    The steppers I am using are the 0.9° high torque motors from E3D, in case you like to read the datasheet, it can be found here: https://e3d-online.dozuki.com/Item/High_torque_motor

    What happens sometimes is that when the steppers get a bit temperature the stall threshold seems to be too low and it triggers early, however immediate homing again works fine, regardless the temperature.
    Unfortunately it does not work reliable when I increase the stall threshold by 1.



  • @toskium stall detection is a very tricky way to home the printer. Lots of variables and some of them change during operation. A simple switch is far more reliable.



  • @phaedrux It appears so, I was intrigued by the concept and less cables sounded like a nice bonus. But it is rather difficult to set up compared to a switch. It looks like it is working for now, I will mark this as solved, so nobody will invest more time in this.


 

Looks like your connection to Duet3D was lost, please wait while we try to reconnect.