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, MarkusHere 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 -
@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.
-
@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.