I’ve been playing with this some more this morning and I’m still really puzzled.
Here’s what the bot looks like with the motors and homing switches labeled, as well as some indications of how the arms should move when given various commands.
If it’s not obvious in the photo, the beta_min
switch is on the opposite side of the beta
motor because of how the arms are driven. A simple way of thinking about it is that when beta
moves it drives the “Y” arm which uses the beta_min
switch. Same is true for the alpha
motor and switch, except it drives the “X” arm.
I’ll also include the end stop settings from my config, but it’s worth mentioning that the I’ve set the config so that when I send G0 X1
, the arm in the top part of the photo moves clockwise (assuming my original position was X0
. If X
is at 10, and I send G0 X5
the arm moves counter-clockwise. Same goes for Y
positions.
My settings are:
soft_endstop.enable true # Enable soft endstops
soft_endstop.x_min 0 # Minimum X position
soft_endstop.x_max 17 # Maximum X position
soft_endstop.y_min 0 # Minimum Y position
soft_endstop.y_max 17 # Maximum Y position
endstops_enable true # The endstop module is enabled by default and can be disabled here
alpha_min_endstop 1.24^ # Pin to read min endstop, add a ! to invert if endstop is NO connected to ground
#alpha_max_endstop 1.25^ # Pin to read max endstop, uncomment this and comment the above if using max endstops
alpha_homing_direction home_to_min # Or set to home_to_max and set alpha_max and uncomment the alpha_max_endstop
alpha_min 0 # This gets loaded as the current position after homing when home_to_min is set
alpha_max 200 # This gets loaded as the current position after homing when home_to_max is set
beta_min_endstop 1.26^ # Pin to read min endstop, add a ! to invert if endstop is NO connected to ground
#beta_max_endstop 1.27^ # Pin to read max endstop, uncomment this and comment the above if using max endstops
beta_homing_direction home_to_min # Or set to home_to_max and set alpha_max and uncomment the alpha_max_endstop
beta_min 0 # This gets loaded as the current position after homing when home_to_min is set
beta_max 200 # This gets loaded as the current position after homing when home_to_max is set
gamma_min_endstop 1.28^! # Pin to read min endstop, add a ! to invert if endstop is NO connected to ground
#gamma_max_endstop 1.29^ # Pin to read max endstop, uncomment this and comment the above if using max endstops
gamma_homing_direction home_to_min # Or set to home_to_max and set alpha_max and uncomment the alpha_max_endstop
gamma_min 0 # This gets loaded as the current position after homing when home_to_min is set
gamma_max 200 # This gets loaded as the current position after homing when home_to_max is set
alpha_max_travel 17 # Max travel in mm for alpha/X axis when homing
beta_max_travel 17 # Max travel in mm for beta/Y axis when homing
gamma_max_travel 17 # Max travel in mm for gamma/Z axis when homing
# Optional enable limit switches, actions will stop if any enabled limit switch is triggered
alpha_limit_enable false # Set to true to enable X min and max limit switches
beta_limit_enable false # Set to true to enable Y min and max limit switches
gamma_limit_enable false # Set to true to enable Z min and max limit switches
# Endstops home at their fast feedrate first, then once the endstop is found they home again at their slow feedrate for accuracy
alpha_fast_homing_rate_mm_s 2 # Alpha/X fast homing feedrate in mm/second
alpha_slow_homing_rate_mm_s 1 # Alpha/X slow homing feedrate in mm/second
beta_fast_homing_rate_mm_s 2 # Beta/Y fast homing feedrate in mm/second
beta_slow_homing_rate_mm_s 1 # Beta/Y slow homing feedrate in mm/second
gamma_fast_homing_rate_mm_s 2 # Gamma/Z fast homing feedrate in mm/second
gamma_slow_homing_rate_mm_s 1 # Gamma/Z slow homing feedrate in mm/second
alpha_homing_retract_mm 1 # Distance to retract from the endstop after it is hit for alpha/X
beta_homing_retract_mm 1 # Distance to retract from the endstop after it is hit for beta/Y
gamma_homing_retract_mm 1 # Distance to retract from the endstop after it is hit for gamma/Z
When I send G28
, the X
arm rotates clockwise, and the Y
arm rotates counter-clockwise.
These are the exact opposite of what I would expect.
If I don’t send G28
, and instead send something like G0 X5
, the X
arm rotates clockwise as expected (since X is increasing). G0 Y5
does the right thing as well (rotating counter-clockwise), since Y
is increasing.
It seems then that G28
is trying to increase X
and Y
from 0 when trying to find the alpha_min
and beta_min
switches.
It’s almost as if it’s using home_to_max
instead home_to_min
. Except if I switch the home_to_max
for both switches, it doesn’t change the behavior at all.
The only thing I can think of is that using the morgan
arm solution is changing the behavior in ways I don’t understand.
I will probably switch to using the default arm solution to see if that changes things, but in the meantime, does anyone have any ideas?