Homing all axis at once using CNC with 5 axis

I have gotten 5 independent axis working but I am unable to home them all at once. I have followed the instructions on: http://smoothieware.org/6axis

I compiled smoothieware with make AXIS=5 PAXIS=5 CNC=1 and edit the config to something that works (see below). This allows me to home all axis one at a time. The comment suggests I should comment out homing_order and all axes should home at once. This does not happen.

I am homing using command $H or G28.2. Is it possible to home all axes at once?

Thanks.

Here is my configuration:

# NOTE Lines must not exceed 132 characters
# Robot module configurations : general handling of movement G-codes and slicing into moves
default_feed_rate                            4000             # Default rate ( mm/minute ) for G1/G2/G3 moves
default_seek_rate                            4000             # Default rate ( mm/minute ) for G0 moves
mm_per_arc_segment                           0.5              # Arcs are cut into segments ( lines )
mm_per_line_segment                          5                # Lines can be cut into segments

# Planner module configuration : Look-ahead and acceleration configuration
planner_queue_size                           32             # DO NOT CHANGE THIS UNLESS YOU KNOW EXACTLY WHAT YOU ARE DOING
acceleration                                 600            # Acceleration in mm/second/second.
z_acceleration                               600              # Acceleration for Z only moves in mm/s^2, 
acceleration_ticks_per_second                1000             # Number of times per second the speed is updated
junction_deviation                           0.02             # Similar to the old "max_jerk", in millimeters,
#z_junction_deviation                        0.0              # for Z only moves, -1 uses junction_deviation
#minimum_planner_speed                       0.0              # sets the minimum planner speed in mm/sec

# Stepper module configuration
microseconds_per_step_pulse                  1                # Duration of step pulses to stepper drivers, in microseconds
base_stepping_frequency                      100000           # Base frequency for stepping, higher gives smoother movement

# Cartesian axis speed limits
x_axis_max_speed                             10000            # mm/min
y_axis_max_speed                             10000            # mm/min
z_axis_max_speed                             10000            # mm/min
a_axis_max_speed                             10000            # mm/min
b_axis_max_speed                             10000            # mm/min

# Stepper module pins ( ports, and pin numbers, appending "!" to the number will invert a pin )
alpha_steps_per_mm                          100             # Steps per mm for alpha stepper
alpha_step_pin                              2.0             # Pin for alpha stepper step signal
alpha_dir_pin                               0.5!            # Pin for alpha stepper direction
alpha_en_pin                                0.4             # Pin for alpha enable pin
alpha_current                               0.4             # X stepper motor current
alpha_max_rate                              10000.0         # mm/min

beta_steps_per_mm                           100         	# Steps per mm for beta stepper
beta_step_pin                               2.1             # Pin for beta stepper step signal
beta_dir_pin                                0.11            # Pin for beta stepper direction
beta_en_pin                                 0.10            # Pin for beta enable
beta_current                                0.4             # Y stepper motor current
beta_max_rate                               10000.0         # mm/min

gamma_steps_per_mm                          100             # Steps per mm for gamma stepper
gamma_step_pin                              2.2             # Pin for gamma stepper step signal
gamma_dir_pin                               0.20!           # Pin for gamma stepper direction
gamma_en_pin                                0.19            # Pin for gamma enable
gamma_current                               0.4             # Z stepper motor current
gamma_max_rate                              10000.0         # mm/min

# A axis
delta_steps_per_mm                    		100     		# may be steps per degree for example
delta_step_pin                              2.3             # Pin for delta stepper step signal
delta_dir_pin                               0.22!           # Pin for delta stepper direction
delta_en_pin                                0.21            # Pin for delta enable
delta_current                               0.4             # Z stepper motor current
delta_max_rate                              10000.0         # mm/min

# B axis
epsilon_steps_per_mm                    	100     		# may be steps per degree for example
epsilon_step_pin                            2.8             # Pin for delta stepper step signal
epsilon_dir_pin                             2.13!           # Pin for delta stepper direction
epsilon_en_pin                              4.29            # Pin for delta enable
epsilon_current                             0.4             # Z stepper motor current
epsilon_max_rate                            10000.0         # mm/min

# Serial communications configuration ( baud rate default to 9600 if undefined )
uart0.baud_rate                              115200         # Baud rate for the default hardware serial port
second_usb_serial_enable                     true           # This enables a second usb serial port (to have both pronterface
pause_button_enable                          false           # Pause button enable

# Extruder module configuration
extruder.hotend.enable 			false	# Whether to activate the extruder module at all. All configuration is ignored if false

# Laser module configuration
laser_module_enable                          false            # Whether to activate the laser module at all. All configuration is

# Hotend temperature control configuration
temperature_control.hotend.enable            false            # Whether to activate this ( "hotend" ) module at all.

# Switch module for fan control
switch.fan.enable                            false             #

## Endstops new syntax (the name is not significant)
# NOTE only a min or a max homing endstop maybe defined

endstop.minx.enable                          true            # enable an endstop
endstop.minx.pin                             1.24^!          # pin
endstop.minx.homing_direction                home_to_min     # direction it moves to the endstop
endstop.minx.homing_position                 0               # the cartesian coordinate this is set to when it homes
endstop.minx.axis                            X               # the axis designator
endstop.minx.max_travel                      500             # the maximum travel in mm before it times out
endstop.minx.fast_rate                       50              # fast homing rate in mm/sec
endstop.minx.slow_rate                       25              # slow homing rate in mm/sec
endstop.minx.retract                         5               # bounce off endstop in mm

endstop.miny.enable                          true            # enable an endstop
endstop.miny.pin                             1.25^!          # pin
endstop.miny.homing_direction                home_to_min     # direction it moves to the endstop
endstop.miny.homing_position                 0               # the cartesian coordinate this is set to when it homes
endstop.miny.axis                            Y               # the axis designator
endstop.miny.max_travel                      500             # the maximum travel in mm before it times out
endstop.miny.fast_rate                       50              # fast homing rate in mm/sec
endstop.miny.slow_rate                       25              # slow homing rate in mm/sec
endstop.miny.retract                         5               # bounce off endstop in mm

endstop.minz.enable                          true            # enable an endstop
endstop.minz.pin                             1.26^!          # pin
endstop.minz.homing_direction                home_to_min     # direction it moves to the endstop
endstop.minz.homing_position                 0               # the cartesian coordinate this is set to when it homes
endstop.minz.axis                            Z               # the axis designator
endstop.minz.max_travel                      500             # the maximum travel in mm before it times out
endstop.minz.fast_rate                       50              # fast homing rate in mm/sec
endstop.minz.slow_rate                       25              # slow homing rate in mm/sec
endstop.minz.retract                         5               # bounce off endstop in mm

# Homing the A axis to min
endstop.mina.enable                          true            # enable an endstop
endstop.mina.pin                             1.27^!          # pin
endstop.mina.homing_direction                home_to_min     # direction it moves to the endstop
endstop.mina.homing_position                 0               # the cartesian coordinate this is set to when it homes
endstop.mina.axis                            A               # the axis designator
endstop.mina.max_travel                      500             # the maximum travel in mm before it times out
endstop.mina.fast_rate                       50              # fast homing rate in mm/sec
endstop.mina.slow_rate                       25              # slow homing rate in mm/sec
endstop.mina.retract                         5               # bounce off endstop in mm

# Homing the B axis to min
endstop.minb.enable                          true            # enable an endstop
endstop.minb.pin                             1.28^!            # pin
endstop.minb.homing_direction                home_to_min     # direction it moves to the endstop
endstop.minb.homing_position                 0             # the cartesian coordinate this is set to when it homes
endstop.minb.axis                            B               # the axis designator
endstop.minb.max_travel                      500             # the maximum travel in mm before it times out
endstop.minb.fast_rate                       50              # fast homing rate in mm/sec
endstop.minb.slow_rate                       25              # slow homing rate in mm/sec
endstop.minb.retract                         5               # bounce off endstop in mm

# optional order in which axis will home, default is they all home at the same time,
# if this is set it will force each axis to home one at a time in the specified order
#homing_order                                 XYZ              # x axis followed by y then z last
#move_to_origin_after_home                    false            # move XY to 0,0 after homing
#endstop_debounce_count                       100              # uncomment if you get noise on your endstops, default is 100
#endstop_debounce_ms                          1                # uncomment if you get noise on your endstops, default is 1 millisecond debounce
#home_z_first true # uncomment and set to true to home the Z first, otherwise Z homes after XY
# optional Z probe
zprobe.enable                                false           # set to true to enable a zprobe

# Panel
panel.enable                                 false           # set to true to enable the panel code

# Example of a custom menu entry, which will show up in the Custom entry.
# NOTE _ gets converted to space in the menu and commands, | is used to separate multiple commands
custom_menu.power_on.enable                false             #
custom_menu.power_on.name                  Power_on          #
custom_menu.power_on.command               M80               #

custom_menu.power_off.enable               false             #
custom_menu.power_off.name                 Power_off         #
custom_menu.power_off.command              M81               #

# Only needed on a smoothieboard
currentcontrol_module_enable                  true           #
return_error_on_unhandled_gcode              false           #

# network settings
network.enable                               true            # enable the ethernet network services
network.webserver.enable                     true            # enable the webserver
network.telnet.enable                        true            # enable the telnet server
#network.ip_address                           auto           # use dhcp to get ip address
# uncomment the 3 below to manually setup ip address
network.ip_address                           192.168.1.213   # the IP address
network.ip_mask                              255.255.255.0   # the ip mask
network.ip_gateway                           192.168.1.1     # the gateway address
#network.mac_override                         xx.xx.xx.xx.xx.xx  # override the mac address, only do this if you have a conflict

The fact your config contains

( as well as step pulses, base frequency etc ) indicates it’s based on an outdated configuration file example.

You should start your configuration again from scratch, basing it on the most recent configuration file example linked to from the wiki page on configuration. And then of course adapting it as indicated on the 6axis documentation page.

Thanks for the quick reply. I have updated my config file based on the wiki file. I kept the endstop definitions in the same file. This unfortunatly does not change the behaviour. All the axes still home one after another.

# NOTE Lines must not exceed 132 characters
# Basic motion configuration
default_feed_rate					1800 	# Default speed (mm/minute) for G1/G2/G3 moves
default_seek_rate					1800 	# Default speed (mm/minute) for G0 moves
mm_per_arc_segment 					0.0  	# Fixed length for line segments that divide arcs, 0 to disable
mm_max_arc_error 					0.01 	# The maximum error for line segments that divide arcs 0 to disable

# Planner module configuration : Look-ahead and acceleration configuration
acceleration						200 	# Acceleration in mm/second/second.
junction_deviation					0.05	# Similar to the old "max_jerk", in millimeters,

# Cartesian axis speed limits
x_axis_max_speed					1800	# mm/min
y_axis_max_speed					1800	# mm/min
z_axis_max_speed					1800	# mm/min
a_axis_max_speed					1800	# mm/min
b_axis_max_speed					1800	# mm/min

# Stepper module pins ( ports, and pin numbers, appending "!" to the number will invert a pin )
alpha_steps_per_mm					379.259 # Steps per mm for alpha stepper
alpha_step_pin						2.0		# Pin for alpha stepper step signal
alpha_dir_pin						0.5!	# Pin for alpha stepper direction
alpha_en_pin						0.4		# Pin for alpha enable pin
alpha_current						0.4		# X stepper motor current
alpha_max_rate						1800.0	# mm/min

beta_steps_per_mm					379.259	# Steps per mm for beta stepper
beta_step_pin						2.1		# Pin for beta stepper step signal
beta_dir_pin						0.11	# Pin for beta stepper direction
beta_en_pin							0.10	# Pin for beta enable
beta_current						0.4		# Y stepper motor current
beta_max_rate						1800.0	# mm/min

gamma_steps_per_mm					379.259	# Steps per mm for gamma stepper
gamma_step_pin						2.2		# Pin for gamma stepper step signal
gamma_dir_pin						0.20!	# Pin for gamma stepper direction
gamma_en_pin						0.19	# Pin for gamma enable
gamma_current						0.4		# Z stepper motor current
gamma_max_rate						1800.0	# mm/min

# A axis
delta_steps_per_mm					379.259	# may be steps per degree for example
delta_step_pin						2.3		# Pin for delta stepper step signal
delta_dir_pin						0.22!	# Pin for delta stepper direction
delta_en_pin						0.21	# Pin for delta enable
delta_current						0.4		# Z stepper motor current
delta_max_rate						1800.0	# mm/min

# B axis
epsilon_steps_per_mm				379.259	# may be steps per degree for example
epsilon_step_pin					2.8		# Pin for delta stepper step signal
epsilon_dir_pin						2.13!	# Pin for delta stepper direction
epsilon_en_pin						4.29	# Pin for delta enable
epsilon_current						0.4		# Z stepper motor current
epsilon_max_rate					1800.0	# mm/min

# Serial communications configuration ( baud rate default to 9600 if undefined )
uart0.baud_rate						115200	# Baud rate for the default hardware serial port
second_usb_serial_enable			false	# This enables a second usb serial port (to have both pronterface

# Extruder module configuration
extruder.hotend.enable				false	# Whether to activate the extruder module at all. All configuration is ignored if false

# Laser module configuration
laser_module_enable					false	# Whether to activate the laser module at all. All configuration is

# Hotend temperature control configuration
temperature_control.hotend.enable	false	# Whether to activate this ( "hotend" ) module at all.
temperature_control.bed.enable		false 	# Disable bed
switch.fan.enable					false   #

## Endstops new syntax (the name is not significant)
# NOTE only a min or a max homing endstop maybe defined

endstop.minx.enable					true	# enable an endstop
endstop.minx.pin					1.24^!	# pin
endstop.minx.homing_direction		home_to_min	# direction it moves to the endstop
endstop.minx.homing_position 		0	# the cartesian coordinate this is set to when it homes
endstop.minx.axis					X	# the axis designator
endstop.minx.max_travel				500	# the maximum travel in mm before it times out
endstop.minx.fast_rate				20	# fast homing rate in mm/sec
endstop.minx.slow_rate				10	# slow homing rate in mm/sec
endstop.minx.retract				5	# bounce off endstop in mm

endstop.miny.enable					true	# enable an endstop
endstop.miny.pin					1.25^!	# pin
endstop.miny.homing_direction		home_to_min	# direction it moves to the endstop
endstop.miny.homing_position		0		# the cartesian coordinate this is set to when it homes
endstop.miny.axis					Y		# the axis designator
endstop.miny.max_travel				500		# the maximum travel in mm before it times out
endstop.miny.fast_rate				20		# fast homing rate in mm/sec
endstop.miny.slow_rate				10		# slow homing rate in mm/sec
endstop.miny.retract				5		# bounce off endstop in mm

endstop.minz.enable					true	# enable an endstop
endstop.minz.pin					1.26^!	# pin
endstop.minz.homing_directio		home_to_min	# direction it moves to the endstop
endstop.minz.homing_position		0		# the cartesian coordinate this is set to when it homes
endstop.minz.axis					Z		# the axis designator
endstop.minz.max_travel				500		# the maximum travel in mm before it times out
endstop.minz.fast_rat				20		# fast homing rate in mm/sec
endstop.minz.slow_rate				10		# slow homing rate in mm/sec
endstop.minz.retract				5		# bounce off endstop in mm

# Homing the A axis to min
endstop.mina.enable					true	# enable an endstop
endstop.mina.pin					1.27^!	# pin
endstop.mina.homing_direction		home_to_min	# direction it moves to the endstop
endstop.mina.homing_position		0		# the cartesian coordinate this is set to when it homes
endstop.mina.axis					A		# the axis designator
endstop.mina.max_travel				500		# the maximum travel in mm before it times out
endstop.mina.fast_rate				20		# fast homing rate in mm/sec
endstop.mina.slow_rate				10		# slow homing rate in mm/sec
endstop.mina.retract				5		# bounce off endstop in mm

# Homing the B axis to min
endstop.minb.enable					true	# enable an endstop
endstop.minb.pin					1.28^!	# pin
endstop.minb.homing_direction		home_to_min	# direction it moves to the endstop
endstop.minb.homing_position		0		# the cartesian coordinate this is set to when it homes
endstop.minb.axis					B 		# the axis designator
endstop.minb.max_travel				500		# the maximum travel in mm before it times out
endstop.minb.fast_rate				20		# fast homing rate in mm/sec
endstop.minb.slow_rate				10		# slow homing rate in mm/sec
endstop.minb.retract				5		# bounce off endstop in mm

#homing_order                                 BAZYX              # x axis followed by y then z last

zprobe.enable						false
panel.enable						false
custom_menu.power_on.enable			false
custom_menu.power_off.enable		false

# Only needed on a smoothieboard
currentcontrol_module_enable		true

# network settings
network.enable						true	# enable the ethernet network services
network.webserver.enable			true	# enable the webserver
network.telnet.enable				true	# enable the telnet server
network.ip_address					192.168.1.213	# the IP address
network.ip_mask						255.255.255.0	# the ip mask
network.ip_gateway					192.168.1.1		# the gateway address
#network.mac_override				xx.xx.xx.xx.xx.xx  # override the mac address, only do this if you have a conflict

In what order do they home?

Now X Y Z A B and when I set the homing order to BAZYX it will home in that order

Ok I got an answers. The “homing together” feature is only about homing XY together. Z will home separately, and ABC will home separately, always. The homing order lets you choose more precisely what homes when, and altogether, only XY will home together. We are editing the documentation now to make this clearer, sorry for the confusion, and thanks for the catch.

1 Like

OK thanks for clearing this up

1 Like

Hi, rebooting this thread with sort of unrelated question. I too am building a 5 axis machine, but want to use XYZBC axes rather than XYZAB. I am using the 5 axis automated build from the getting-smoothie page and have A and B moving on the Delta M4 and Epsilon M5 motors but I want to relate Epsilon M4 to B axis and Zeta M5 to the C Axis. Is it possible to do this?

You define all 6 axis, then set the B axis step/dir pins to the M4 pins, the C axis step/dir pins to the M5 pins, and for the A axis step/dir pin, you still need to define them, so use whatever un-used pins are on your board that won’t cause trouble.

that worked, thanks!

1 Like

That was quick.
Thanks to you too, and welcome to the community!

2 Likes