Can't Repeat Homing Axes w/ Multiple Motors
-
Hi all! First post here, please forgive any indiscretions. I'll get right to it:
I can only get my multi motor axis homing programs to work after initial startup. If I don't reset the machine (cycle emergency stop), the axis will only drive a single motor when I send a homing command again. To be clear - first time I run the homing program it drives all the motors, motors respond to endstops, the gantry squares up, everything is peachy. Second time I run the homing program it drives a single motor and binds up the axis.
I've searched the forum for a few hours, but can't quite find a similar issue to the one I'm facing. Which is weird, because this forum has solved every problem I've had for months now. Very good work, guys!
My printer is a large format cartesian design - single motor X-axis, dual motor Y-axis, quad motor Z-axis. Homing and config files copied and pasted below. Pictures available if necessary. Thank you for your time!
; Configuration file for Duet 3 (firmware version 3)
; executed by the firmware on start-up; General preferences
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"MONOLITH1" ; set printer name; Network
M552 P0.0.0.0 S1 ; enable network and acquire dynamic address via DHCP
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet; Drives
M569 P0.0 S1 ; physical drive 0.0 goes forwards
M569 P0.1 S1 ; physical drive 0.1 goes forwards
M569 P0.2 S1 ; physical drive 0.2 goes forwards
M569 P0.3 S1 ; physical drive 0.3 goes forwards
M569 P0.4 S1 ; physical drive 0.4 goes forwards
M569 P0.5 S1 ; physical drive 0.5 goes forwards
M584 Y0.0:0.1 Z0.2:0.3:0.4:0.5 ; set drive mapping
M350 Y16:16 Z16:16:16:16 ; configure microstepping with interpolation
M92 Y800.00:800.00 Z800.00:800.00:800.00:800.00 ; set steps per mm
M566 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set maximum instantaneous speed changes (mm/min)
M203 Y1000.00:1000.00 Z2000.00:2000.00:2000.00:2000.00 ; set maximum speeds (mm/min)
M201 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set accelerations (mm/s^2)
M906 Y1000:1000 Z2500:2500:2500:2500 I15 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout; Axis Limits
M208 Y0 Z0 S1 ; set axis minima
M208 Y830 Z830 S0 ; set axis maxima; Endstops
M574 Y1 S1 P"io0.in+io1.in" ; configure endstop for low end on Y
M574 Z2 S1 P"io2.in+io3.in+io4.in+io5.in" ; configure endstop for high end on Z; Z-Probe
M558 P0 H5 F120 T6000 ; disable Z probe but set dive height, probe speed and travel speed
M557 X15:215 Y0:0 S20 ; define mesh grid; Heaters
M308 S0 P"temp0" Y"thermistor" T100000 B4138 ; configure sensor 0 as thermistor on pin temp0
M950 H0 C"out0" T0 ; create bed heater output on out0 and map it to sensor 0
M307 H0 B1 S1.00 ; enable bang-bang mode for the bed heater and set PWM limit
M140 H0 ; map heated bed to heater 0
M143 H0 S120 ; set temperature limit for heater 0 to 120C
M308 S1 P"temp1" Y"thermistor" T100000 B4138 ; configure sensor 1 as thermistor on pin temp1
M950 H1 C"out1" T1 ; create nozzle heater output on out1 and map it to sensor 1
M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit; Fans
M950 F0 C"out3" Q500 ; create fan 0 on pin out3 and set its frequency
M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off
M950 F1 C"out4" Q500 ; create fan 1 on pin out4 and set its frequency
M106 P1 S1 H1 T45 ; set fan 1 value. Thermostatic control is turned on; Tools
M563 P0 D0 H1 F0 ; 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; Enable movement before homing
M564 H0
; homez.g
; called to home the Z axis
;
G91 ; relative positioning
M584 Z0.2 U0.3 V0.4 W0.5 ; break up Z drives
M350 Z16 U16 V16 W16
M92 Z800.00 U800.00 V800.00 W800.00
M566 Z100.00 U100.00 V100.00 W100.00
M203 Z1000.00 U1000.00 V1000.00 W1000.00
M201 Z100.00 U100.00 V100.00 W100.00
M906 Z2500 U2500 V2500 W2500 I15
;
M574 Z2 S1 P"io2.in" ; break up endstops for independent homing
M574 U2 S1 P"io3.in"
M574 V2 S1 P"io4.in"
M574 W2 S1 P"io5.in"
G1 H2 Z-5 U-5 V-5 W-5 F2000 ; lower Z relative to current position
G1 H1 Z900 U900 V900 W900 F2000 ; move Z up until the endstop is triggered
G1 H2 Z-5 U-5 V-5 W-5 F6000 ; realitive positioning (adjust axes' relative height)
G1 H1 Z900 U900 V900 W900 F240 ; move Z up until the endstop is triggered
G1 H2 Z-15 U-15 V-15 W-15 F500 ; realitive positioning (adjust axes' relative height)
G4P2000 ; pause for dramatic effect (to allow user to scan for errors)
;
M574 Z0 C"nil"
M574 U0 C"nil"
M574 V0 C"nil"
M574 W0 C"nil"
M574 Z2 S1 P"io2.in+io3.in+io4.in+io5.in" ; recombine endstops for high end on Z
G90
;
; Recombine Drives
M584 Y0.0:0.1 Z0.2:0.3:0.4:0.5 P3 ; set drive mapping
M350 Y16:16 Z16:16:16:16 ; configure microstepping with interpolation
M92 Y800.00:800.00 Z800.00:800.00:800.00:800.00 ; set steps per mm
M566 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set maximum instantaneous speed changes (mm/min)
M203 Y1000.00:1000.00 Z2000.00:2000.00:2000.00:2000.00 ; set maximum speeds (mm/min)
M201 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set accelerations (mm/s^2)
M906 Y1000:1000 Z2500:2500:2500:2500 I15 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout; Endstops
M574 Y1 S1 P"io0.in+io1.in" ; configure endstop for low end on Y
M574 Z2 S1 P"io2.in+io3.in+io4.in+io5.in" ; configure endstop for high end on ZG92 Z750
; homez.g
; called to home the Z axis
;
G91 ; relative positioning
M584 Y0.0 A0.1 ; break up Z drives
M350 Y16 A16
M92 Y800.00 A800.00
M566 Y100.00 A100.00
M203 Y2000.00 A2000.00
M201 Y100.00 A100.00
M906 Y1000 A1000 I15
;
M574 Y1 S1 P"io1.in" ; break up endstops for independent homing
M574 A1 S1 P"io0.in"
G1 H2 Y5 A5 F1000 ; lower Z relative to current position
G1 H1 Y-900 A-900 F500 ; move Z up until the endstop is triggered
G1 H2 Y5 A5 F6000 ; realitive positioning (adjust axes' relative height)
G1 H1 Y-100 A-100 F500 ; move Z up until the endstop is triggered
G1 H2 Y15 A15 F500 ; realitive positioning (adjust axes' relative height)
G4P2000 ; pause for dramatic effect (to allow user to scan for errors)
;
M574 Y0 C"nil"
M574 A0 C"nil"
M574 Y1 S1 P"io0.in+io1.in" ; recombine endstops for high end on Z
G90
;
; Recombine Drives
M584 Y0.0:0.1 Z0.2:0.3:0.4:0.5 P3 ; set drive mapping
M350 Y16:16 Z16:16:16:16 ; configure microstepping with interpolation
M92 Y800.00:800.00 Z800.00:800.00:800.00:800.00 ; set steps per mm
M566 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set maximum instantaneous speed changes (mm/min)
M203 Y1000.00:1000.00 Z2000.00:2000.00:2000.00:2000.00 ; set maximum speeds (mm/min)
M201 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set accelerations (mm/s^2)
M906 Y1000:1000 Z2500:2500:2500:2500 I15 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout; Endstops
M574 Y1 S1 P"io0.in+io1.in" ; configure endstop for low end on Y
M574 Z2 S1 P"io2.in+io3.in+io4.in+io5.in" ; configure endstop for high end on ZG92 Y0
-
Hi,
Why are you "breaking up" the drive assignment?
That is not needed with v3 firmware - if you are not using 3.2.2 you should update.
With v3 you can have multiple axis motors each with their own endstop sensor.
When homing such an axis each motor is driven until it's associated endstop sensor is triggered.
I have 3 Z steppers and it works just fine.
Do you have some special reason for "breaking up" the drive assignment?
Frederick
-
@alexteela said in Can't Repeat Homing Axes w/ Multiple Motors:
M350 Y16:16 Z16:16:16:16 ; configure microstepping with interpolation
M92 Y800.00:800.00 Z800.00:800.00:800.00:800.00 ; set steps per mm
M566 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set maximum instantaneous speed changes (mm/min)
M203 Y1000.00:1000.00 Z2000.00:2000.00:2000.00:2000.00 ; set maximum speeds (mm/min)
M201 Y100.00:100.00 Z100.00:100.00:100.00:100.00 ; set accelerations (mm/s^2)
M906 Y1000:1000 Z2500:2500:2500:2500 I15 ; set motor currents (mA) and motor idle factor in per centYou only ever need multiple values per driver for extruders. For the other axis you only need to define it once for the axis.
As @fcwilt says you don't need to split the axis up into separate letters unless you want to move them independently outside of homing.
-
Is it just me? According to the description, the machine is Cartesian with single motor for X, two motors for Y and four motors for Z. That's 7 motors yet only 6 defined/available. Config has nothing defined for the X axis. No motor, no speed, no acceleration, nothing. How does that work then?
-
@deckingman said in Can't Repeat Homing Axes w/ Multiple Motors:
Is it just me? According to the description, the machine is Cartesian with single motor for X, two motors for Y and four motors for Z. That's 7 motors yet only 6 defined/available. Config has nothing defined for the X axis. No motor, no speed, no acceleration, nothing. How does that work then?
It's based on the Infinite Improbability Drive - you never know what is going to print until you print it.
Frederick
-
Just to clear things up a bit - I have another board that will be driving X axis and the extruders. There is no X configuration because I haven't finished building the machine yet, haha.
Glad to hear about the ability to home the axis without breaking the drives up! I'll update the firmware and programs tonight to see if it has any effect on my problem. Thank you for the tip!
Infinite improbability drive, hahaha! Definitely going to use that as an explanation in the machine shop tomorrow!
-
@fcwilt said in Can't Repeat Homing Axes w/ Multiple Motors:
@deckingman said in Can't Repeat Homing Axes w/ Multiple Motors:
Is it just me? According to the description, the machine is Cartesian with single motor for X, two motors for Y and four motors for Z. That's 7 motors yet only 6 defined/available. Config has nothing defined for the X axis. No motor, no speed, no acceleration, nothing. How does that work then?
It's based on the Infinite Improbability Drive - you never know what is going to print until you print it.
Frederick
42
-
@alexteela said in Can't Repeat Homing Axes w/ Multiple Motors:
Z0.2:0.3:0.4:0.5
Sorry for the long delay! I've been tinkering and trying to figure out the next bug that has emerged.
Updating the firmware and config fixed my issues with homing the Y axis multiple times, but I haven't been able to get all 4 of the Z axis motors to turn. For some reason I'm only getting movement from the 0.4 and 0.5 drives, though all 4 motors are energized. I've seen a lot of posts with more than two Z motors on this forum, so I don't think it's a firmware bug. Here's my updated config:
; Configuration file for Duet 3 (firmware version 3)
; executed by the firmware on start-up; General preferences
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"MONOLITH1" ; set printer name; Network
M552 P0.0.0.0 S1 ; enable network and acquire dynamic address via DHCP
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet; Drives
M569 P0.0 S1 ; physical drive 0.0 goes forwards
M569 P0.1 S1 ; physical drive 0.1 goes forwards
M569 P0.2 S1 ; physical drive 0.2 goes forwards
M569 P0.3 S1 ; physical drive 0.3 goes forwards
M569 P0.4 S1 ; physical drive 0.4 goes forwards
M569 P0.5 S1 ; physical drive 0.5 goes forwards
M584 Y0.0:0.1 Z0.2:0.3:0.4:0.5 ; set drive mapping
M350 Y16 Z16 ; configure microstepping with interpolation
M92 Y800.00 Z800.00 ; set steps per mm
M566 Y100.00 Z100.00 ; set maximum instantaneous speed changes (mm/min)
M203 Y1000.00 Z500.00 ; set maximum speeds (mm/min)
M201 Y100.00 Z100.00 ; set accelerations (mm/s^2)
M906 Y650 Z800 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout; Axis Limits
M208 Y0 Z0 S1 ; set axis minima
M208 Y750 Z750 S0 ; set axis maxima; Endstops
M574 Y1 S1 P"io1.in+io0.in" ; configure endstop for low end on Y
M574 Z2 S1 P"io2.in+io3.in+io4.in+io5.in" ; configure endstop for high end on Z; Enable movement before homing
M564 H0Any one have any ideas?
-
Whoops. Figured it out again, haha. I over-torqued the brackets for the motors in question. Loosening the brackets freed them up and now all is well. Thanks again to everyone for your help!
-
Nothing directly related to your problem jumps out.
Three minor things I see:
- No X axis - good for printing 2D objects I suppose.
- M350 is missing parameter I1
- M564 H0 in your config file is not a terribly good idea.
You can always create a pair of macros to allow/not allow movement of an un-homed axis.
Frederick