Homing X&Y moves Z leadscrews differently?
-
Hi, I have just finished building the latest version of my 'Prusalike' printer.
I am now slowly working through all the code to make it work properly and have hit a problem!
I am using the standard 'homex.g', 'homey.g' & 'homez.g' macros pretty well unaltered.
Whenever I home X or Y or Z the Z moves within the macro move the Z leadscrews on each side differently
Not by much but enough to put my X gantry out of alignment!
Any help would be much appreciated. -
@handyandy
I should add that I am using sensorless homing, but I don't think that has any influence on it? -
@handyandy Please post your config.g and homing macros. Please also send M122 in the console and post the response.
Are your Z motors and leadscrews the same on both sides? If you put a piece of tape on each leadscrew, like a flag, do they go out of sync when you move them?
Ian
-
@handyandy
Hi Administrator, Please resend your post I think I deleted it (by accident - honestly!) -
@handyandy you haven’t deleted my post, but you may have blocked me… so you might not see this, either!
@droftarts said in Homing X&Y moves Z leadscrews differently?:
@handyandy Please post your config.g and homing macros. Please also send M122 in the console and post the response.
Are your Z motors and leadscrews the same on both sides? If you put a piece of tape on each leadscrew, like a flag, do they go out of sync when you move them?
Ian
-
@droftarts said in Homing X&Y moves Z leadscrews differently?:
@handyandy you haven’t deleted my post, but you may have blocked me… so you might not see this, either!
@droftarts said in Homing X&Y moves Z leadscrews differently?:
@handyandy Please post your config.g and homing macros. Please also send M122 in the console and post the response.
Are your Z motors and leadscrews the same on both sides? If you put a piece of tape on each leadscrew, like a flag, do they go out of sync when you move them?
Ian
-
@droftarts
Hi, here is the information you requested...M122 === Diagnostics === RepRapFirmware for Duet 2 WiFi/Ethernet version 3.5.1 (2024-04-19 14:40:46) running on Duet WiFi 1.02 or later Board ID: 08DGM-917NK-F2MS4-7J9F4-3S46K-1GSSD Used output buffers: 3 of 26 (26 max) === RTOS === Static ram: 23256 Dynamic ram: 72760 of which 0 recycled Never used RAM 14152, free system stack 126 words Tasks: NETWORK(2,nWait 6,15.2%,215) HEAT(3,nWait 5,0.1%,328) Move(4,nWait 5,0.0%,298) MAIN(1,running,84.6%,759) IDLE(0,ready,0.0%,29), total 100.0% Owned mutexes: === Platform === Last reset 00:01:45 ago, cause: power up Last software reset at 2024-05-20 15:12, reason: User, Gcodes spinning, available RAM 13528, slot 1 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0041f000 BFAR 0xe000ed38 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x04 Aux0 errors 0,0,0 MCU temperature: min 24.4, current 25.6, max 26.0 Supply voltage: min 23.7, current 23.8, max 23.9, under voltage events: 0, over voltage events: 0, power good: yes Heap OK, handles allocated/used 99/0, heap memory allocated/used/recyclable 2048/8/8, gc cycles 0 Events: 0 queued, 0 completed Driver 0: standstill, SG min 0 Driver 1: standstill, SG min 0 Driver 2: standstill, SG min 0 Driver 3: standstill, SG min n/a Driver 4: standstill, SG min n/a Driver 5: Driver 6: Driver 7: Driver 8: Driver 9: Driver 10: Driver 11: Date/time: 2024-05-20 18:05:29 Cache data hit count 3762969277 Slowest loop: 15.45ms; fastest: 0.16ms I2C nak errors 0, send timeouts 0, receive timeouts 0, finishTimeouts 0, resets 0 === Storage === Free file entries: 10 SD card 0 detected, interface speed: 20.0MBytes/sec SD card longest read time 0.9ms, write time 0.0ms, max retries 0 === Move === DMs created 83, segments created 5, maxWait 51363ms, bed compensation in use: none, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00 no step interrupt scheduled Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0 === DDARing 0 === Scheduled moves 33, completed 33, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === Heat === Bed heaters 0 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0 === GCodes === Movement locks held by null HTTP is idle 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 Daemon is idle in state(s) 0 Autopause is idle in state(s) 0 Q0 segments left 0 Code queue 0 is empty === Network === Slowest loop: 21.51ms; fastest: 0.07ms Responder states: HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) HTTP sessions: 1 of 8 === WiFi === Interface state: active Module is connected to access point Failed messages: pending 0, notrdy 0, noresp 0 Firmware version 2.1.0 MAC address b4:e6:2d:53:15:f2 Module reset reason: Turned on by main processor, Vcc 3.46, flash size 4194304, free heap 42932 WiFi IP address 192.168.1.109 Signal strength -49dBm, channel 9, mode 802.11n, reconnections 0 Clock register 00002002 Socket states: 0 0 0 0 0 0 0 0
20/05/2024, 18:04:56 G28 Z Error: Must home axes [Y] before homing [Z]
-
@droftarts
Hi, more...; ========================================================================================================= ; Part of the 'sys' folder ; homex.g - Sensorless home the X-axis. ; Written or Modified by Andy Taylor May 2024 ; ========================================================================================================= ; M98 P"0:/sys/SubMacros/CurrentSenseHoming" ; Call macro/subprogram ; G91 ; Relative XYZ positioning M564 S0 H0 ; Limit axes - allow movement outside of boundaries and of non-homed axes M17 X Z ; Energise X & Z motors to ensure they're not stalled G4 P100 ; Wait 100ms ; G0 Z5 F1000 ; Lift Z relative to current position G0 H2 X5 F6000 ; Move X relative to current position G0 H1 X-300 F6000 ; Move quickly to ensure X-axis endstop contact and stop there (first pass) G0 H2 X5 F1000 ; Move slowly back a few mm G0 H1 X-300 F2000 ; Move slowly to X-axis endstop once more (second pass) G0 H2 X5 F1000 ; Move slowly back a few mm G0 H2 X0 F6000 ; Move to X0 home position G0 Z-5 F1000 ; Lower Z back again M400 ; Wait for current moves to finish ; G4 P200 ; Wait 200ms M564 S1 H1 ; Limit axes - limit movement to within boundaries and only for homed axes G90 ; Absolute XYZ positioning ; G0 X5 F6000 ; Move here... G92 X0 ; and make this position X home ; M98 P"0:/sys/SubMacros/CurrentSenseNormal" ; Call macro/subprogram ; ; ========================================================================================================= ;
; ========================================================================================================= ; Part of the 'sys' folder ; homey.g - Sensorless home the Y-axis. ; Written or Modified by Andy Taylor May 2024 ; ========================================================================================================= ; M98 P"0:/sys/SubMacros/CurrentSenseHoming" ; Call macro/subprogram ; G91 ; Relative XYZ positioning M564 S0 H0 ; Limit axes - allow movement outside of boundaries and of non-homed axes M17 Y Z ; Energise Y & Z motors to ensure they're not stalled G4 P100 ; Wait 100ms ; G0 Z5 F1000 ; Lift Z relative to current position G0 H2 X5 F6000 ; Move Y relative to current position G0 H1 Y-300 F6000 ; Move quickly to ensure Y-axis endstop contact and stop there (first pass) G0 H2 Y5 F1000 ; Move slowly back a few mm G0 H1 Y-10 F2000 ; Move slowly to Y-axis endstop once more (second pass) G0 H2 Y5 F1000 ; Move slowly back a few mm G0 H2 Y0 F6000 ; Move to Y0 home position G0 Z-5 F1000 ; Lower Z back again M400 ; Wait for current moves to finish ; G4 P200 ; Wait 200ms M564 S1 H1 ; Limit axes - limit movement to within boundaries and only for homed axes G90 ; Absolute XYZ positioning ; G0 Y0 F6000 ; Move here... G92 Y0 ; and make this position Y home ; M98 P"0:/sys/SubMacros\CurrentSenseNormal" ; Call macro/subprogram ; ; ========================================================================================================= ;
; ========================================================================================================= ; Part of the 'sys' folder ; homez.g - Home the XY&Z axes in turn. ; Written or Modified by Andy Taylor May 2024 ; ========================================================================================================= ; M98 P"0:/sys/SubMacros/CurrentSenseHoming" ; Call macro/subprogram ; G91 ; Relative XYZ positioning M564 S0 H0 ; Limit axes - allow movement outside of boundaries and of non-homed axes M17 X Y Z ; Energise X, Y and Z motors to ensure they're not stalled G4 P100 ; Wait 100ms ; ; Sensorless home the X-axis... =========================================================================== ; G0 Z5 F1000 ; Lift Z relative to current position G0 H2 X5 F6000 ; Move X relative to current position G0 H1 X-300 F6000 ; Move quickly to ensure X-axis endstop contact and stop there (first pass) G0 H2 X5 F1000 ; Move slowly back a few mm G0 H1 X-300 F2000 ; Move slowly to X-axis endstop once more (second pass) G0 H2 X5 F1000 ; Move slowly back a few mm G0 Z-5 F1000 ; Lower Z back again M400 ; Wait for current moves to finish ; G4 P200 ; Wait 200ms ; ; Sensorless home the Y-axis... =========================================================================== ; G0 Z5 F1000 ; Lift Z relative to current position G0 H2 Y5 F6000 ; Move Y relative to current position G0 H1 Y-300 F6000 ; Move quickly to ensure Y-axis endstop contact and stop there (first pass) G0 H2 Y5 F1000 ; Move slowly back a few mm G0 H1 Y-300 F2000 ; Move slowly to Y-axis endstop once more (second pass) G0 H2 Y5 F1000 ; Move slowly back a few mm G0 Z-5 F1000 ; Lower Z back again M400 ; Wait for current moves to finish ; G4 P200 ; Wait 200ms ; ; Use the SuperPINDA to home the Z-axis... =============================================================== ; G90 ; Absolute XYZ positioning G0 X30 Y30 Z20 F10000 ; Move quickly to a safe probing position with the Pinda above the print plate G30 ; Home Z by probing the bed G0 Z2 F6000 ; Make a small Z movement G90 ; Absolute XYZ positioning G0 X0 Y0 Z0 F6000 ; Move to final XYZ home position G0 Z2 ; Lift Z for safety/convenience M400 ; Wait for current moves to finish ; G4 P200 ; Wait 200ms M564 S1 H1 ; Limit axes - limit movement to within boundaries and only for homed axes ; G0 X5 Y5 F6000 ; Move here... G92 X0 Y0 ; and make this position X & Y home ; M98 P"0:/sys/SubMacros/CurrentSenseNormal" ; Call macro/subprogram ; ; ========================================================================================================= ;
; ========================================================================================================= ; Part of the 'sys/SubMacros' folder ; CurrentSenseHoming - Set the current and sensitivity for homing and non-printing routines. ; Written or Modified by Andy Taylor May 2024 ; ========================================================================================================= ; M915 X S2 F0 H400 R0 ; Configure X motor stall detection M915 Y S2 F0 H400 R0 ; Configure Y motor stall detection M913 X50 Y40 Z60 ; Set the XYZ motors to reduced % current for non-print moves... ; (this is set 100% initially in config.g) ; ; ========================================================================================================= ;
; ========================================================================================================= ; Part of the 'sys/SubMacros' folder ; CurrentSenseNormal - Set the current and sensitivity for normal routines. ; Written or Modified by Andy Taylor May 2024 ; ========================================================================================================= ; M915 X S3 F0 H200 R0 ; Configure X motor stall detection M915 Y S3 F0 H200 R0 ; Configure Y motor stall detection M913 X100 Y100 Z100 ; Set the XY motors back to 100% of their normal config.g values ; ; ========================================================================================================= ;
-
@droftarts
Hi, As well as the different leadscrew movement in the homing routines I also get...
In general Z axis movements (=/- 25mm) I get a 'squeal' from the Z motors with no movement then the uneven movement of 5-8mm. If I command 5mm or under it does not 'squeal' but at 5mm you see the uneven movement. Small commander moves of 1mm seem to work ok!
I hope you can help, it's driving me crazy! -
@handyandy I've tidied up your posts to make them readable. Please post your config.g as well.
In general Z axis movements (=/- 25mm) I get a 'squeal' from the Z motors with no movement then the uneven movement of 5-8mm. If I command 5mm or under it does not 'squeal' but at 5mm you see the uneven movement. Small commander moves of 1mm seem to work ok!
This basically sounds like you're trying to move the Z axis too fast. Probably one side is binding more than the other, which causes it to lose steps. That short moves work probably means you have acceleration and/or maximum speed set too high.
Does homing work correctly?
Ian
-
@droftarts
Hi I think you may be right with Z being to fast. I have run Z from F500 insteps up to F1300 with the noises or uneven movement. Above that it's bad. So I was going to alter the config.g file M203 to limit Z to between 1000.00 to 1250.00 - what do you think?
Here is the config.g as it was with M203 Z2400.00!!!!; =========================================================================================================m18 ; Part of the 'sys' folder ; config.g - Main configuration file executed by the firmware (v3.4) automatically on start-up. ; Generated largely by the RepRapFirmware Configuration Tool v3.3.10 on Wed 23rd Feb 2022 12:43:28 ; Modified - Andy Taylor May 2024 ; ; ========================================================================================================= ; General & Network settings ; ========================================================================================================= ; M669 K0 ; Printer kinematics type is 'Cartesian' M550 P"Bear/Hemera Revo" ; Set the printers name ; M552 S1 ; Enable networking as a client M586 P0 S1 ; Enable HTTP M586 P1 S0 ; Disable FTP M586 P2 S0 ; Disable Telnet M575 P1 S1 B57600 ; Set serial comms parameters to support the PanelDue ; ; ========================================================================================================= ; Drives ; ========================================================================================================= ; M569 P0 S0 F10 ; Physical (X) drive 0 direction is backwards M569 P1 S1 F10 ; Physical (Y) drive 1 direction is forwards M569 P2 S0 F5 ; Physical (Z) drive 2 direction is backwards M569 P3 S1 F14 ; Physical (E) drive 3 direction is forwards M584 X0 Y1 Z2 E3 ; Set drive mapping ; M350 X16 Y16 Z16 E16 I1 ; Configure micro stepping with interpolation, and turn it on M92 X200.00 Y200.00 Z1600.00 E397.00 ; Set axis steps/mm ; ; Settings copied from Prusa MK4 values... M201 X2500.00 Y2500.00 Z200.00 E2500.00 ; Set maximum acceleration (mm/s^2) M203 X12000.00 Y12000.00 Z2400.00 E6000.00 ; Set maximum feedrate (mm/min) M204 P2000.0 T2000.0 ; Set printing and travel accelerations (mm(s^2)) ;M205 X8.0 Y8.0 Z2.0 E10.0 ; Set maximum instantaneous (jerk) speed changes (mm/sec) - alternative to M566 M566 X480.0 Y480.0 Z120.0 E600.0 ; Set maximum instantaneous (jerk) speed changes (mm/min) ; M906 X1260 Y1260 Z1000 E1050 I30 ; Set 75% motor currents (mA) and motor idle factor in percent M84 S30 ; Set idle timeout to 30 seconds M564 S0 H0 ; Limit axes - Allow movement outside boundaries and for non-homed axes ; ; ========================================================================================================= ; Axis Limits ; ========================================================================================================= ; M208 X-1 Y-4 Z0 S1 ; Set axis minima (allows for safety & purge line placement) M208 X245 Y220 Z220 S0 ; Set axis maxima (final set on assembly and first running) ; absolute maximum axis travels are X250 Y225 Z225 ; but working maximums are reduced due to homing requirements ; ========================================================================================================= ; X&Y Endstops ; ========================================================================================================= ; M574 X1 S3 ; Configure sensorless endstop for low end on X-axis M574 Y1 S3 ; Configure sensorless endstop for low end on Y-axis M574 Z1 S2 ; Configure Z-probe endstop for low end on Z-axis ; ; ========================================================================================================= ; Z-Probe (superPINDA) ; ========================================================================================================= ; M558 P5 C"^zprobe.in" H1.5 F600 T8000 A3 S0.03 ; Set Z probe to be SuperPINDA G31 P500 X21.318 Y4.25 Z1.55 ; Set Z probe trigger value, offset and trigger height. ; 1.55 is the calculated Set Z probe trigger value, offset and ; trigger height. The larger the number the closest it gets to ; the bed. ; i.e. 1.60 puts the nozzle closer to the bed than 1.20 M557 X10:235 Y10:210 P4:3 ; Define mesh grid min:max positions and number of probe points in X & Y directions ; ; ========================================================================================================= ; Heated Bed ; ========================================================================================================= ; M308 S0 P"bedtemp" Y"thermistor" T100000 B4138 ; Configure sensor 0 as thermistor on pin bedtemp M950 H0 C"bedheat" T0 ; Create bed heater output on bedheat and map it to sensor 0 M307 H0 B0 S1.00 ; Disable bang-bang mode for the bed heater and set PWM limit M307 H0 R0.283 K0.275:0.000 D10.59 E1.35 S1.00 B0 ; Results from actual PID tuning M140 H0 ; Map heated bed to heater 0 M143 H0 S110 ; Set temperature limit for heater 0 to 110°C ; ; ========================================================================================================= ; Extruder/Nozzle ; ========================================================================================================= ; M308 S1 P"e0temp" Y"thermistor" T100000 B4725 C7.06e-8 ; Configure sensor 1 as thermistor on pin e0temp M950 H1 C"e0heat" T1 ; Create nozzle heater output on e0heat and map it to sensor 1 M307 H1 B0 S1.00 ; Disable bang-bang mode for heater and set PWM limit M307 H1 R4.153 K0.495:0.000 D3.20 E1.35 S1.00 B0 V24.3 ; Results from actual PID tuning M143 H1 S300 ; Set temperature limit for heater 1°C to 290°C ; ; ========================================================================================================= ; Fans (F0=Part cooling fan, F1=extruder/nozzle fan) ; ========================================================================================================= ; M950 F0 C"fan0" Q500 ; Create fan 0 on pin fan0 and set its frequency M106 P0 S0 H-1 ; Set fan 0 value. Thermostatic control is turned off M950 F1 C"fan1" Q500 ; Create fan 1 on pin fan1 and set its frequency M106 P1 S1 H1 T45 ; Set fan 1 value. Thermostatic control is turned on at 45°C ; ; ========================================================================================================= ; Heater Fault Scenario ; ========================================================================================================= ; M570 H0 S180 ; Bed heater fault if <temperature in 180 seconds M570 H1 S100 ; Nozzle heater fault if <temperature in 100 seconds ; ; ========================================================================================================= ; Tools (T0=extruder) ; ========================================================================================================= ; M563 P0 S"Extruder" D0 H1 F0 ; Define tool 0 (extruder) G10 P0 X0 Y0 Z0 ; Set tool 0 axis offsets G10 P0 R0 S0 ; Set initial tool 0 active and standby temperatures to 0°C M302 S190 R190 ; Allow extrusion starting from 190°C and retractions already from 190°C ; ; ========================================================================================================= ; Miscellaneous Settings ; ========================================================================================================= ; M501 ; Read stored parameters in 0:/sys/config-override.g G21 ; Work in millimetres G90 ; Absolute XYZ positioning... M83 ; Relative extruder positioning ; ; ========================================================================================================= ; M143 H1 S300 ; Set temperature limit for heater 1°C to 290°C ;
-
@handyandy With M92 Z1600, ie 1600 steps per mm on Z, and then running it at 2400mm/min (40mm/s), would produce 64,000 steps per second at full speed! The driver can do this, but I doubt the motors can. Your acceleration is also high (M201), as is your jerk (M566).
For reference, and I'm also running a Bear axis with a Hemera (but V6, not Revo), I use:
M92 Z800 ; set steps per mm M566 Z12 ; set maximum instantaneous speed changes (mm/min) M203 Z600 ; set maximum speeds (mm/min) M201 Z20 ; set accelerations (mm/s^2)
This is quite slow, and though my Z motors are quite puny, they never skip! I could probably tune them to run faster, but it's less important in Z for me. To tune, start slow, then increase, check over long distances. See https://docs.duet3d.com/en/How_to_guides/Calibration#h-6-tuning-motion
Also, setting
M204 P2000.0 T2000.0
limits acceleration, when you have set your accelerations higher with M201.Ian
-
@droftarts
Hi, reducing the feed rates for the Z axis looks to be the solution. Anything below F1200 seems to work well. Thanks for your help.
Just one more question... you mention setting M204 P2000.0 T2000.0 in config.g
Are your values for P & T rather high? If M204 is there to limit the maximum accelerations shouldn't the values be equal or only slightly greater the the values in M201? -
@handyandy M201 is for specifying the machine limits, i.e. how fast the axis can accelerate without the risk of skipping steps. M204 is for use by the slicer, which can limit acceleration to lower values in an attempt to improve print quality.
-
@handyandy What I meant was that you have that M204 line in your config.g. It overrides the setting in M201. Slicers have a habit of putting in M204 at low rates, overriding the acceleration rate you want, as machines generally print quieter with low acceleration.
The main reason to use M204 is to make all moves have the same acceleration. M201 defines the acceleration per axis, but on diagonal moves, the acceleration is faster as it moves at the limit of both X and Y. Eg if M201 X1000 Y1000 is set, a straight X move will use acceleration of 1000mm/s^2, but the acceleration of a 45° diagonal move will be 1414, with both motors accelerating at 1000mm/s^2. Setting M204 P1000 would set all moves to the same acceleration.
Ian