[3.6.0-rc.2] changed behaviour while homing on coreXY
-
Hi folks, today I updated to 3.6-rc2.
Everything was working fine until I tried to home the machine.
Then I noticed that when homing to y, the tool head moves diagonally instead of just moving to the y end stop. I had a surprised face and lets say I am grateful for the HW estopIts an e3d tool changer (coreXY) and I have the following file homey.g (minimal example) that worked as I intended it in 3.5.4:
; homey.g ; called to home the Y axis G91 ; relative positioning M400 ; make sure everything has stopped before we change the motor currents M913 X20 Y20 ; drop motor currents to 20% G1 H2 X2 F1800 ; move x so that the endstop is free to pass G1 H1 Y-282 F1800 ; move quickly to Y axis endstop and stop there (first pass) G1 Y2 F1000 ; go back a few mm G1 H1 Y-5 F300 ; move slowly to Y axis endstop once more (second pass) G90 ; absolute positioning M400 ; make sure everything has stopped before we reset the motor currents M913 X100 Y100 ; motor currents back to 100%
So, the problem I found lighs in line 7: There I want to make shure to leave room for the X endstop to pass.
This moves the toolhead out of way enough. After that the homing sequence for y begins.the homing move in line 8:
3.5.4: moves straight to the y endstop, the machine moves only in y
3.6-rc.2: moves diagonally towards y and x endstopWhen i comment out line 7
;G1 H2 X2 F1800
the homing sequence for y is performed now, but of course there is possibly not enough room to pass the x endstop while doing so.Was there a change in behaviour since 3.5.4 that didnt make it into the release notes or did I miss something? Or is this unintended behaviour?
Thanks in advance! -
@marvineer G1 H2 on a coreXY setup will only move a single motor. That's intended.
I'm also pretty sure this has been this behaviour for ages so what you're describing for 3.6 is correct behaviour -
@jay_s_uk Yep, maybe I was not clear in my first post:
The point is: line 8 behavs differently depending if line 7 is commented out or not.
Thats where the sense stops making sense to meThis is the difference in behaviour for me:
In fact, this returns the old, intended behaviour:
G1 H2 X2 F1800 ; move x so that the endstop is free to pass M400 G1 H1 Y-282 F1800 ; move quickly to Y axis endstop and stop there (first pass)
-
@marvineer my toolchanger is working correctly when homing, however the G1 H2 moves in my homing files have both X and Y parameters so as to move in either the X or the Y direction: For example:
; homex.g ; called to home the x axis ; DC42 reduced stall sensitivity from 4 to 2 ; DC42 replaced G1 S parameters by H ; DC42 removed redundant G4 and M574 commands G91 ; use relative positioning G1 H2 X0.5 Y0.5 F10000 ; energise motors to ensure they are not stalled M400 ; make sure everything has stopped before we change the motor currents M913 X25 Y25 ; drop motor currents to 25% G1 H2 Z3 F5000 ; lift Z 3mm G1 H1 X-400 F3000 ; move left 400mm, stopping at the endstop G1 H2 X2 Y2 F2000 ; move away from end G1 H1 X-400 F3000 ; repeat the homing move because it doesn't always work first time G1 H2 X2 Y2 F2000 ; move away from end G1 H2 Z-3 F1200 ; lower Z G90 ; back to absolute positioning M400 ; make sure everything has stopped before we reset the motor currents M913 X100 Y100 ; motor currents back to 100%
PS - does it make any difference if you use M17 X Y first to enable both motors?
-
@dc42 Hi!
The following also doesnt work:
M913 X20 Y20 ; drop motor currents to 20% M17 X Y G1 H2 X2 F1800 ; move in x so that the endstop is free to pass (individual motor mode) M17 X Y G1 H1 Y-282 F1800 ; move quickly to Y axis endstop and stop there (first pass) G0 Y2 ; go back a few mm
I changed my homing script to the following (note the Y2 in the G1 H2 command). And now the move works as intended. This also is a bit cleaner anyways:
G91 ; relative positioning M400 ; make sure everything has stopped before we change the motor currents M913 X20 Y20 ; drop motor currents to 20% G1 H2 X2 Y2 F1800 ; move in x so that the endstop is free to pass (individual motor mode) G1 H1 Y-282 F1800 ; move quickly to Y axis endstop and stop there (first pass) G0 Y2 ; go back a few mm G1 H1 Y-4 F300 ; move slowly to Y axis endstop once more (second pass) G90 ; absolute positioning ...
I still think the behavoir in my first script is not as it should be?
But I can live well with this simple change. Thank you very much! -
undefined marvineer marked this topic as a question
-
undefined marvineer has marked this topic as solved
-
@marvineer thanks, I'll take a look at it.
-
undefined dc42 has marked this topic as unsolved
-
@marvineer I'm sorry, I can't reproduce that. I ran this macro file after power up, before any other motor movement and wihtur sending any M17 commands first:
; homey.g ; called to home the Y axis G91 ; relative positioning M400 ; make sure everything has stopped before we change the motor currents M913 X20 Y20 ; drop motor currents to 20% G1 H2 X2 F1800 ; move x so that the endstop is free to pass G1 H1 Y-282 F3000 ; move quickly to Y axis endstop and stop there (first pass) G1 Y2 F1000 ; go back a few mm ;G1 H1 Y-5 F300 ; move slowly to Y axis endstop once more (second pass)
This is similar to your file except that I had to increase the speed of the G1 H1 move to F3000 because I am using stall detect endstops. The head moves diagonally for the 2mm move and in the Y direction for the homing move.
Could it be that 20% current is not always enough to move the motor on your machine?
-
@dc42 Hi! I have increased the motor current to 40 percent during homing -> still the same
I have reduced the speed even further but still the same.
I do not notice the clicking sound of skipped steps either, so I still think there are no steps being sent to the right motor (looking from the front)I am out of ideas, but maybe you have something to try for me?
This is the response of M122:
=== Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.6.0-rc.2 (2025-03-31 12:17:13) running on Duet 3 MB6HC v1.0 or earlier (SBC mode) Board ID: 08DJM-956L2-G43S4-6JTD4-3SS6J-TA7GH Used output buffers: 1 of 40 (36 max) === RTOS === Static ram: 137420 Dynamic ram: 101532 of which 356 recycled Never used RAM 104604, free system stack 142 words Tasks: SBC(2,nWait 7,1.9%,793) HEAT(3,nWait 6,0.0%,325) Move(4,nWait 6,0.0%,242) TMC(4,nWait 6,3.0%,343) CanReceiv(6,nWait 1,0.1%,796) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.0%,350) MAIN(1,running,94.6%,101) IDLE(0,ready,0.4%,29) USBD(3,blocked,0.0%,149), total 100.0% Owned mutexes: HTTP(MAIN) === Platform === Last reset 00:04:31 ago, cause: power up Last software reset at 2025-04-06 15:09, reason: User, Platform spinning, available RAM 104084, slot 2 Software reset code 0x2000 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0043c000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a === Storage === Free file entries: 20 SD card 0 not detected, interface speed: 37.5MBytes/sec SD card longest read time 0.0ms, write time 0.0ms, max retries 0 === Move === Segments created 6, maxWait 126600ms, bed comp in use: none, height map offset 0.000, hiccups added 0/0 (0.00/0.00ms), max steps late 0, ebfmin 0.00, ebfmax 0.00 Pos req/act/dcf: -31536.00/-31536/0.00 -2000.00/-2000/0.00 16000.00/16000/0.00 0.00/0/0.00 0.00/0/0.00 Next step interrupt due in 9 ticks, disabled Driver 0: standstill, SG min 14, mspos 8, reads 18409, writes 26 timeouts 0 Driver 1: standstill, SG min 40, mspos 776, reads 18403, writes 32 timeouts 0 Driver 2: standstill, SG min 26, mspos 696, reads 18403, writes 32 timeouts 0 Driver 3: standstill, SG min n/a, mspos 8, reads 18417, writes 18 timeouts 0 Driver 4: standstill, SG min n/a, mspos 8, reads 18417, writes 18 timeouts 0 Driver 5: standstill, SG min n/a, mspos 8, reads 18417, writes 18 timeouts 0 Phase step loop runtime (us): min=0, max=38, frequency (Hz): min=1865, max=2148 === DDARing 0 === Scheduled moves 12, completed 12, LaErrors 0, Underruns [0, 0, 0] Segments left 0, axes/extruders owned 0x00000000, drives owned 0x00000000 Code queue is empty === DDARing 1 === Scheduled moves 0, completed 0, LaErrors 0, Underruns [0, 0, 0] Segments left 0, axes/extruders owned 0x00000000, drives owned 0x00000000 Code queue is empty === Heat === Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1 -1 -1 -1 -1, ordering errs 0 === GCodes === Movement locks held by null, null HTTP* is doing "M122" in state(s) 0 Telnet is idle in state(s) 0 File is idle in state(s) 0 USB is idle in state(s) 0 Aux is idle in state(s) 0 Trigger* is idle in state(s) 0 Queue is idle in state(s) 0 LCD is idle in state(s) 0 SBC is idle in state(s) 0 Daemon is idle in state(s) 0 Aux2 is idle in state(s) 0 Autopause is idle in state(s) 0 File2 is idle in state(s) 0 Queue2 is idle in state(s) 0 === Filament sensors === Driver 29: no data received, errs: frame 0 parity 0 ovrun 0 pol 0 ovdue 0 === CAN === Messages queued 2321, received 8507, lost 0, ignored 0, errs 0, boc 0 Longest wait 1ms for reply type 6028, peak Tx sync delay 329, free buffers 50 (min 49), ts 1287/1286/0 Tx timeouts 0,0,0,0,0,0 === SBC interface === Transfer state: 5, failed transfers: 0, checksum errors: 0 RX/TX seq numbers: 41930/41930 SPI underruns 0, overruns 0 State: 5, disconnects: 0, timeouts: 0 total, 0 by SBC, IAP RAM available 0x27a7c Buffer RX/TX: 0/0-0, open files: 0 === Duet Control Server === Duet Control Server version 3.6.0-rc.2 (2025-03-31 10:53:52, 64-bit) HTTP+Executed: > Executing M122 Code buffer space: 4096 Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0 Full transfers per second: 0.31, max time between full transfers: 141.5ms, max pin wait times: 27.1ms/15.0ms Codes per second: 0.00 Maximum length of RX/TX data transfers: 5013/796
And this is my config.g:
; here we define everything connected to the main board ; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"MultiPrint" ; set printer name M669 K1 ; select CoreXY mode M80 C"!pson" ; invert the PS_ON output for Meanwell power supply ; Network ;M552 P0.0.0.0 S1 ; enable network and set IP address ;M553 P255.255.255.0 ; set netmask ;M554 P192.168.1.254 ; set gateway ;M586 P0 S1 ; enable HTTP ;M586 P1 S0 ; disable FTP ;M586 P2 S0 ; disable Telnet ; PanelDue 5.0i with custom logo M575 P1 S1 B115200 ; wait for expansion boards to start G4 S1 ; lower SPI transfer max wait Time for quicker system respone (default 25 ms and 5ms if file open) ; ignore this if 3 or more events are in queue M576 S6 F3 P3 ; Define inputs and their trigger if necessary M950 J5 C"^io5.in" ; input 5 - ActiveToolDetect (Tool Detect Switch) M950 J6 C"^io7.in" ; input 6 - OpenDoorDetect M581 P6 T2 S1 R0 ; define rising edge trigger --> door opened (trigger2.g) M581 P6 T3 S0 R0 ; define falling edge trigger --> door closed (trigger3.g) M582 T2 ; check for trigger (necessary, we might start with door open) M950 J7 C"^io8.in" ; input 7 - E-Stop (trigger 0) M581 P7 T0 S1 R0 ; define rising edge trigger --> emergency stop (M112) (NOT-HALT) ; check if e-stop is triggerd at startup if sensors.gpIn[7].value == 1 M291 T0 P"pull e-stop and reset machine to continue" R"e-stop is active" M300 M582 T0 abort "e-stop is active - pull e-stop and reset machine to continue" ; Lights M950 P0 C"1.out1" Q500 ; main M950 P1 C"1.out0" Q500 ; head if sensors.gpIn[6].value == 1 ; door is closed M98 P"/macros/Lights/set.g" D"main" B0.75 ; turn on main light else M98 P"/macros/Lights/set.g" D"main" B0.05 ; LED Strip M950 E0 U18 T1 C"0.led" ; Drives D3: stealthChop2 V4000: switch from stealthChop to to spreadCycle mode at 0.1 mm/sec speed (quiet at standstill) M569 P0.2 S0 ; physical drive 0.2 goes backwards (X - Axis) M569 P0.1 S0 ; physical drive 0.1 goes backwards (Y - Axis) M569 P0.0 S1 ; physical drive 0.0 goes forwards (Z - Axis) M569 P0.3 S0 ; physical drive 0.3 goes backwards (C - COUPLER) M569 P1.0 S1 ; physical drive 1.0 goes forwards (B - BRUSH) M569 P0.4 S1 ; physical drive 0.4 goes forwards (E0 - V6) M569 P0.5 S1 ; physical drive 0.5 goes forwards (E1 - Volcano) M569 P121.0 S0 ; physical drive 121.0 goes forwards (E2 - HighTemp Direct) M584 X0.2 Y0.1 Z0.0 C0.3 B1.0 E0.4:0.5:121.0 ; set drive mapping M350 X16 Y16 Z16 B16 E16:16:16 I1 ; configure microstepping with interpolation M350 C16 I0 ; configure microstepping without interpolation M92 X100 Y100 Z1600 C91.022 B128 E400:400:400 ; set steps per mm M98 P"/macros/Speeds/set_speed.g" S"startup" ; set speeds, jerk and accel. for the beginning M566 Z20 C2 B8 E450:900:450 ; set maximum instantaneous speed changes (mm/min) M203 Z800 C8000 B1000 E4500:5500:4500 ; set maximum speeds (mm/min) M201 Z400 C500 B500 E10000:23000:6000 ; set accelerations (mm/s^2) M906 X1800 Y1800 Z1130 B500 I20 ; set motor currents (mA) and motor idle factor in per cent (X Y Z B) M906 C500 E1000:1000:1000 I10 ; set motor currents (mA) and motor idle extruder motors to 10% M84 S15 ; Set idle timeout ;spindle M950 R0 C"^vfd" Q900 L10000 ; Spindle 0 uses out9/vfd as RPM pin with 200 Hz PWM freq and has a max RPM of 10000 ; limits M98 P"/macros/Boundaries/ToolHead.g" ; set dynamic axis Limits M208 Z0:264.6 C-45:360 B0:23 ; set static axis limits (min:max) ; Endstops M574 X1 S1 P"^io3.in" ; configure active-high endstop for low end on X via pin ^io1.in M574 Y1 S1 P"^io4.in" ; configure active-high endstop for low end on Y via pin ^io2.in M574 Z2 S1 P"^io2.in" ; configure active-high endstop for high end on Z via pin ^io7.in M574 C0 ; No C endstop M574 B1 S1 P"^1.io3.in" ; configure active-high endstop for low end on B via pin ^io5.in ; Z-Probe M558 P8 C"io1.in" H2.5:0.7 F600:300 I0 A8 S0.003 T20000 ; set Z probe type to switch and the dive height + speeds G31 P200 X0 Y0 Z0 ; set Z probe trigger value, offset and trigger height M557 X-140:140 Y-90:90 S20:30 ; Define mesh grid ;Stall Detection M915 X Y S5 F1 R1 ; X and Y Axes ; Heaters M308 S0 P"temp0" Y"thermistor" A"Bed" T100000 B4138 ; configure sensor 0 as thermistor on pin temp0 ; BED ; correction val for port "temp0": H=-19; L=0 M950 H0 C"out0" T0 Q5 ; create bed heater output on out0 and map it to sensor 0 with a PWM freq of 5 Hz M307 H0 B0 R1.240 C413.8 D3.17 S1 ; disable bang-bang mode for the bed heater and set PWM limit M140 H0 ; map heated bed to heater 0 M143 H0 S200 ; set temperature limit for bed heater 0 to 200C M308 S1 P"temp1" Y"thermistor" A"T0" T100000 B4138 ; configure sensor 1 as thermistor on pin temp3 ; TOOL 0 ; correction val for port "temp3": H=-7; L=13 M950 H1 C"out1" T1 ; create nozzle heater output on out3 and map it to sensor 1 M307 H1 R2.320 K0.406:0.085 D5.66 E1.35 S1.00 B0 V24.0 ; disable bang-bang mode for heater and set PWM limit M143 H1 S285 ; set temperature limit for heater 1 to 285C M308 S2 P"temp2" Y"thermistor" A"T1" T100000 B4138 ; configure sensor 2 as thermistor on pin temp3 ; TOOL 1 ; correction val for port "1.temp0": H=-6; L=3 M950 H2 C"out2" T2 ; create nozzle heater output on 1.out1 and map it to sensor 2 M307 H2 R2.016 K0.366:0.030 D5.70 E1.35 S1.00 B0 V24.5 ; disable bang-bang mode for heater and set PWM limit M143 H2 S285 ; set temperature limit for heater 2 to 285C M308 S3 P"121.temp0" Y"thermistor" A"T2" T100000 B4138 ;configure sensor 3 as thermistor on pin 121.temp0 ; TOOL 2 ; correction val for port "121.temp0": H=-13; L=0 M950 H3 C"121.out0" T3 ; create nozzle heater output on 121.out0 and map it to sensor 3 M307 H3 R2.409 K0.350:0.180 D5.36 E1.35 S1.00 B0 V23.9 ; disable bang-bang mode for heater and set PWM limit M143 H3 S250 ; set temperature limit for heater 3 to 250C ; Fans M950 F0 C"out4" Q500 ; create fan 0 on pin out9 and set its frequency M106 P0 S0 H-1 L0.2 C"T0" ; set fan 0 value. Thermostatic control is turned off M950 F1 C"out7" Q500 ; create fan 1 on pin out8 and set its frequency M106 P1 S1 H1 T60 ; set fan 1 value. Thermostatic control is turned on M950 F2 C"out5" Q500 ; create fan 2 on pin 1.out6 and set its frequency M106 P2 S0 H-1 L0.2 C"T1" ; set fan 2 value. Thermostatic control is turned off M950 F3 C"out8" Q500 ; create fan 3 on pin 1.out7 and set its frequency M106 P3 S1 H2 T60 ; set fan 3 value. Thermostatic control is turned on M950 F4 C"121.out1" Q500 ; create fan 4 on pin 121.out1 and set its frequency M106 P4 S0 H-1 L0.4 C"T2" ; set fan 4 value. Thermostatic control is turned off M950 F5 C"121.out2" Q500 ; create fan 5 on pin 121.out2 and set its frequency M106 P5 S1 H3 T60 ; set fan 5 value. Thermostatic control is turned on M950 F6 C"!out6+out6.tach" Q500 ; create fan 6 on pin out4, this is a PWM fan so the output needs to be inverted, and using out4.tach as a tacho input M106 P6 S0 H-1 C"Filterbox" ; set fan 6 value. Thermostatic control is turned off M106 P6 S0 ; Input Shaping ;M593 P"zvdd" F42.2 ; cancel ringing at 42.2Hz ;(https://forum.e3d-online.com/threads/accelerometer-and-resonance-measurements-of-the-motion-system.3445/) ; Tools M563 P0 S"V6 Bowden" D0 H1 F0 ; define tool 0 G10 P0 X-8.02 Y38.97 Z-4.68 ; set tool 0 axis offsets G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C M572 D0 S0.2 ; pressure advance T0 M308 S8 Y"linear-analog" P"1.io0.in" A"T0FilamentScale" B-65 C3240 ; Filament Weight Scale for tool 0 M563 P1 S"Volcano Bowden" D1 H2 F2 ; define tool 1 G10 P1 X-7.92 Y38.96 Z-13.2 ; set tool 1 axis offsets G10 P1 R0 S0 ; set initial tool 1 active and standby temperatures to 0C M572 D1 S0.3 ; pressure advance T1 M308 S9 Y"linear-analog" P"1.io1.in" A"T1FilamentScale" B45 C4100 ; Filament Weight Scale for tool 1 M563 P2 S"Hemera Direct" D2 H3 F4 ; define tool 2 G10 P2 X21.05 Y43.75 Z-5.7 ; set tool 2 axis offsets G10 P2 R0 S0 ; set initial tool 2 active and standby temperatures to 0C M591 D2 P3 C"121.io1.in" ; Configure filament sensing for tool 2 M572 D2 S0.05 ; pressure advance T2 M308 S10 Y"linear-analog" P"1.io2.in" A"T2FilamentScale" B-233 C8500 ; Filament Weight Scale for tool 2 M563 P3 S"Spindle" R0 ; define tool 3 G10 P3 X0 Y52.50 Z-78.7 ; set tool 3 axis offsets M563 P4 S"Pen" ; define tool 4 G10 P4 X0 Y50.0 Z-21.0 ; set tool 4 axis offsets ; PowerFail Script (use M916 to resume the print from where it stopped) M911 S23.6 R23.8 P"M913 X0 Y0" ; set voltage thresholds and actions to run on power loss ;MCU Temp Calibration M912 P0 S8 ;room temp: 20°C (reportet MCU temp right after startup: 12°C) M308 S5 Y"mcu-temp" A"6HC MCU" ;show MCU-temp of Mainboard (MB6HC) in DWC (Tools -> Extra) Graph M308 S6 Y"mcu-temp" P"1.dummy" A"3HC MCU" ;show MCU-temp of CAN expansion board 1 (3HC) in DWC (Tools -> Extra) Graph M308 S7 Y"mcu-temp" P"121.dummy" A"1LC MCU" ;show MCU-temp of CAN expansion board 121 (1LC) in DWC (Tools -> Extra) Graph ;DHT Sensor (temp and humidity) M308 S11 P"io6.out" Y"dht22" A"Chamber" ; define DHT22 temperature sensor M308 S12 P"S11.1" Y"dhthumidity" A"Rel. Humidity[%]" ; attach DHT22 humidity sensor to secondary output of temperature sensor
If you or anyone suspect something inside a called macro, you can have a look at my public repo:
https://github.com/marvineer98/MultiPrint_RRF_config/tree/backup -
@marvineer What exactly are you seeing happen? As reported by dc42 he sees an initial diagonal move followed by a Y direction move for the homing move. Is that different to what you are seeing? Perhaps if you post a video of what you are seeing that will help? My understanding is that you should see what dc42 has reported and that is the expected movement.