Homing problem using smoothieware on rotary delta

Can anybody help with this, every thing works as it should apart from homing. When I issue G28 the endstops are hit but there seems to be no retract and the machine stops with Pronterface reporting Error: Rotary delta illegal move, Reset or $X or M999 required.
ERROR : Homing cycle failed-- check Max travel settings.
Max travel settings do not seem to alter anything, I have tried setting from 50 to 1000 with no difference in outcome. Any pointers would be very welcome.
( I have the endstop setup from config but cannot find how to upload it)

We need a few more details to help. What printer hardware configuration are you running, what controller (firmware), what is the current configuration on the printer. Etc.

Let us know that info and we can proceed from there.

THANKS Eclsnowman, I thought the upload button above was to put the comment in the conversation.
Hardware configuration is firepick type layout ( hope the photo is clear enough). At the moment I’m using a spare SKR V1.3 board I had because it will run smoothie and the touch screen I’ve lifted off another printer to try this machine. If I can get it running successfully I will change it for a smoothie board so that I can use the wifi.

# 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              # Fixed length for line segments that divide arcs 0 to disable (ñòàðîå çíà÷åíèå 0,2)
mm_max_arc_error                             0.01             # The maximum error for line segments that divide arcs 0 to disable
                                                              # note it is invalid for both the above be 0
                                                              # if both are used, will use largest segment length based on radius
#mm_per_line_segment                         0.2              # Lines can be cut into segments ( not useful with cartesian
                                                              # coordinates robots ).
delta_segments_per_second                    150              # for deltas only same as in Marlin/Delta, set to 0 to disable
                                                              # and use mm_per_line_segment
# Arm solution configuration : Rotatable Delta robot. Translates mm positions into stepper positions
arm_solution      rotary_delta  # selects the delta arm solution

delta_e           152.767     # End effector length, triangle side length in mm 
delta_f           270.200     # Base length, triangle side length in mm 
delta_re          320.000     # Carbon rod length  {370.00}
delta_rf          170.000      # Servo horn length 

delta_z_offset    350.200       # Distance from big pulley shaft to table/bed     {  }
delta_ee_offs      4.300       # Ball joint plane to bottom of end effector surface  
delta_tool_offset  20.000       # Distance between end effector ball joint plane and tip of tool (PnP) 

rotary_delta_calibration.enable    true  

#The steps per degree are calculated as:
#  For Firepick delta robot: 
# (1) First determine the circumference of the big pulley, which has a smooth surface, and calculate the 'teeth it would have'
# (2) Determine the GT2 belt thickness and tooth depth
# (3) Calculate the ACTUAL big pulley circumference taking into account that the GT2 belt affects this as
#     it rests on the big pulley and not into teeth cut into the pulley, the formula is:
#     BIG_PULLEY_CIRCUMFERENCE = BIG_PULLEY_TEETH * TOOTH_SPACING + (BELT_THICKNESS - TOOTH_DEPTH)*6.283185
# (4) Calculate the ACTUAL small pulley circumference taking into account that the GT2 belt affects this as
#     rests into the small pulley as it has teeth cut into the pulley, the formula is:
#     SMALL_PULLEY_CIRCUMFERENCE = SMALL_PULLEY_TEETH * TOOTH_SPACING
# (5) Now determine the pulley reduction which is:
#     PULLEY_REDUCTION = BIG_PULLEY_CIRCUMFERENCE / SMALL_PULLEY_CIRCUMFERENCE
# (6) Finally, given the number of steps a stepper motor needs for a full 360 degree rotation, and the number of microsteps your
#     stepper motor driver chip is set for, you can calculate the STEPS_PER_MM for each axis, which for a Rotary Delta, are the same:
#    [ALPHA/BETA/GAMMA]_STEPS_PER_MM = (XYZ_STEPS_PER_ROTATION*XYZ_MICROSTEPS*PULLEY_REDUCTION)/360
#    e.g. a FirePick Delta mechanism, we can calulate:
#    BIG_PULLEY_CIRCUMFERENCE = 150 * 2 + (1.49 - 0.74) * 6.283185 = 304.712389
#    SMALL_PULLEY_CIRCUMFERENCE = 16 * 2 = 32
#    PULLEY_REDUCTION = 304.712389 / 32 = 9.52226215
#    For a 0.9 degree stepper motor and an a4988   driver set for 16 microsteps = (400 * 16 * 9.52226215)/360 = 169.2846604
#    For a 1.8 degree stepper motor and an a4988   driver set for 16 microsteps = (200 * 16 * 9.52226215)/360 =  84.6423302
#    For a 0.9 degree stepper motor and an drv8825 driver set for 32 microsteps = (400 * 32 * 9.52226215)/360 = 338.5693208
#    For a 1.8 degree stepper motor and an drv8825 driver set for 32 microsteps = (200 * 32 * 9.52226215)/360 = 169.2846604                     
alpha_steps_per_mm    714.6666      # Steps per degree for alpha stepper   
beta_steps_per_mm     714.6666      # Steps per degree for beta stepper
gamma_steps_per_mm    714.6666       # Steps per degree for gamma stepper

# 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                                 1000            # Acceleration in mm/second/second.
junction_deviation                           0.05             # Similar to the old "max_jerk", in millimeters,
                                                              # see https://github.com/grbl/grbl/blob/master/planner.c#L409
                                                              # and https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.8
                                                              # Lower values mean being more careful, higher values means being
                                                              # faster and have more jerk
#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

# Cartesian axis speed limits
x_axis_max_speed                             30000            # mm/min
y_axis_max_speed                             30000            # mm/min
z_axis_max_speed                             30000            # mm/min

# Stepper module pins ( ports, and pin numbers, appending "!" to the number will invert a pin )
alpha_step_pin                               2.2              # Pin for alpha stepper step signal
alpha_dir_pin                                2.6!             # Pin for alpha stepper direction
alpha_en_pin                                 2.1              # Pin for alpha enable pin
alpha_current                                0.8                # X stepper motor current
alpha_max_rate                               30000.0          # mm/min 
alpha_max_travel                             1000             # max travel in mm for alpha/X axis when homing 

beta_step_pin                                0.19              # Pin for beta stepper step signal
beta_dir_pin                                 0.20!             # Pin for beta stepper direction
beta_en_pin                                  2.8               # Pin for beta enable
beta_current                                 0.8                # Y stepper motor current
beta_max_rate                                30000.0           # mm/min 
beta_max_travel                              1000              # max travel in mm for beta/Y axis when homing 

gamma_step_pin                               0.22              # Pin for gamma stepper step signal
gamma_dir_pin                                2.11!             # Pin for gamma stepper direction
gamma_en_pin                                 0.21              # Pin for gamma enable
gamma_current                                0.8               # Z stepper motor current
gamma_max_rate                               30000.0           # mm/min 
gamma_max_travel                             252.000           # max travel in mm for gamma/Z axis when homing (max homing for a delta)


# 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
                                                                         # and a terminal connected)
#leds_disable                                true             # disable using leds after config loaded
#msd_disable                                 false            # disable the MSD (USB SDCARD) when set to true
#dfu_enable                                  false            # for linux developers, set to true to enable DFU
#watchdog_timeout                            10               # watchdog timeout in seconds, default is 10, set to 0 to disable the watchdog

# Extruder module configuration
extruder.hotend.enable                          true             # Whether to activate the extruder module at all. All configuration is ignored if false
extruder.hotend.steps_per_mm                    98.100             # Steps per mm for extruder stepper 
extruder.hotend.default_feed_rate               600              # Default rate ( mm/minute ) for moves where only the extruder moves
extruder.hotend.acceleration                    500              # Acceleration for the stepper motor, as of 0.6, arbitrary ratio
extruder.hotend.max_speed                       50               # mm/s

extruder.hotend.step_pin                        2.13              # Pin for extruder step signal
extruder.hotend.dir_pin                         0.11             # Pin for extruder dir signal
extruder.hotend.en_pin                          2.12             # Pin for extruder enable signal

# extruder offset
#extruder.hotend.x_offset                        0                # x offset from origin in mm
#extruder.hotend.y_offset                        0                # y offset from origin in mm
#extruder.hotend.z_offset                        0                # z offset from origin in mm

# firmware retract settings when using G10/G11, these are the defaults if not defined, must be defined for each extruder if not using the defaults
#extruder.hotend.retract_length                  4               # retract length in mm
#extruder.hotend.retract_feedrate                50              # retract feedrate in mm/sec
#extruder.hotend.retract_recover_length          0               # additional length for recover
#extruder.hotend.retract_recover_feedrate        8               # recover feedrate in mm/sec (should be less than retract feedrate)
#extruder.hotend.retract_zlift_length            0               # zlift on retract in mm, 0 disables
#extruder.hotend.retract_zlift_feedrate          6000            # zlift feedrate in mm/min (Note mm/min NOT mm/sec)

delta_current                                1.0              # First extruder stepper motor current

# Hotend temperature control configuration
temperature_control.hotend.enable            true             # Whether to activate this ( "hotend" ) module at all.
                                                              # All configuration is ignored if false.
temperature_control.hotend.thermistor_pin    0.24             # Pin for the thermistor to read
temperature_control.hotend.heater_pin        2.7              # Pin that controls the heater
temperature_control.hotend.thermistor        Semitec        # see http://smoothieware.org/temperaturecontrol#toc5 Semitec
#temperature_control.hotend.beta             4066             # or set the beta value

temperature_control.hotend.set_m_code        104              #
temperature_control.hotend.set_and_wait_m_code 109            #
temperature_control.hotend.designator        T                #
temperature_control.hotend.max_temp         255
# Set maximum temperature - Will prevent heating above 300 by default
temperature_control.hotend.min_temp         0                # Set minimum temperature - Will prevent heating below 0 by default

temperature_control.hotend.p_factor         27.6             # permanently set the PID values after an auto pid
temperature_control.hotend.i_factor         1.612              #14.12 1.42  35.00
temperature_control.hotend.d_factor         199.00                 #

temperature_control.hotend.max_pwm          255               # max pwm, 64 is a good value if driving a 12v resistor with 24v.

# Hotend2 temperature control configuration
#temperature_control.hotend2.enable            false             # Whether to activate this ( "hotend" ) module at all.
                                                              # All configuration is ignored if false.

temperature_control.bed.enable               true             #
temperature_control.bed.thermistor_pin       0.23             #
temperature_control.bed.heater_pin           2.5              #
temperature_control.bed.thermistor           EPCOS100K
# see http://smoothieware.org/temperaturecontrol#toc5
#temperature_control.bed.beta                4066             # or set the beta value

temperature_control.bed.set_m_code           140              #
temperature_control.bed.set_and_wait_m_code  190              #
temperature_control.bed.designator           B                #

#temperature_control.bed.bang_bang            false           # set to true to use bang bang control rather than PID
#temperature_control.bed.hysteresis           2.0             # set to the temperature in degrees C to use as hysteresis

temperature_control.bed.p_factor         257.4             # permanently set the PID values after an auto pid
temperature_control.bed.i_factor         16.111              #773.50  147.53  1013.87    
temperature_control.bed.d_factor         1028.0                 
                                                              # when using bang bang

# Switch module for fan control
switch.fan.enable                            false            #
switch.fan.input_on_command                  M106             #
switch.fan.input_off_command                 M107             #
switch.fan.output_pin                        nc               #
switch.fan.output_type                       pwm              # pwm output settable with S parameter in the input_on_comand
#switch.fan.max_pwm                           255              # set max pwm for the pin default is 255

#switch.misc.enable                           false            #
#switch.misc.input_on_command                 M42              #
#switch.misc.input_off_command                M43              #
#switch.misc.output_pin                       nc               #
#switch.misc.output_type                      digital          # just an on or off pin

# automatically toggle a switch at a specified temperature. Different ones of these may be defined to monitor different temperatures and switch different swithxes
# useful to turn on a fan or water pump to cool the hotend
#temperatureswitch.hotend.enable              false             #
#temperatureswitch.hotend.designator          T                # first character of the temperature control designator to use as the temperature sensor to monitor
#temperatureswitch.hotend.switch              misc             # select which switch to use, matches the name of the defined switch
#temperatureswitch.hotend.threshold_temp      60.0             # temperature to turn on (if rising) or off the switch
#temperatureswitch.hotend.heatup_poll         15               # poll heatup at 15 sec intervals
#temperatureswitch.hotend.cooldown_poll       60               # poll cooldown at 60 sec intervals

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

# Endstops
endstops_enable                              true             # the endstop module is enabled by default and can be disabled here
delta_homing                                 true             # forces all three axis to home a the same time regardless of
                                                              # what is specified in G28
alpha_min_endstop                            nc               #
alpha_max_endstop                            1.28!^                # add ! to invert pullup if switch is NO to ground
alpha_homing_direction                       home_to_max      # Home up
alpha_max                                    0                #   
beta_min_endstop                             nc               #
beta_max_endstop                             1.26!^            #
beta_homing_direction                        home_to_max      #
beta_max                                     0                #  
gamma_min_endstop                            nc               #
gamma_max_endstop                            1.24!^             #
gamma_homing_direction                       home_to_max       #
gamma_max                                    252.000            #

alpha_fast_homing_rate_mm_s                  50              # homing feedrates in mm/second
beta_fast_homing_rate_mm_s                   50              #
gamma_fast_homing_rate_mm_s                  50
 #
alpha_slow_homing_rate_mm_s                  10               #
beta_slow_homing_rate_mm_s                   10               #
gamma_slow_homing_rate_mm_s                  10

alpha_homing_retract_mm                      2                # retract/bounce distance after homing in mm
beta_homing_retract_mm                       2                #
gamma_homing_retract_mm                      2                #

alpha_trim                                   0                # software trim for alpha stepper endstop (in mm)
beta_trim                                    0                 # software trim for beta stepper endstop (in mm)
gamma_trim                                   0                 # software trim for gamma stepper endstop (in mm)

# optional enable limit switches, actions will stop if any enabled limit switch is triggered (all are set for delta)
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

#homing_order                                 XYZ              

move_to_origin_after_home                    true              # move XY to 0,0 after homing
#endstop_debounce_count                       100              # uncomment if you get noise on your endstops

## Z-probe
# See http://smoothieware.org/zprobe
zprobe.enable	                              false	         # Set to true to enable a zprobe
zprobe.probe_pin	                          nc	         # Pin probe is attached to, if NC remove the !
zprobe.slow_feedrate	                      5	             # Mm/sec probe feed rate
#zprobe.debounce_ms	                          1	             # Set if noisy
zprobe.fast_feedrate	                      80	         # Move feedrate mm/sec
zprobe.probe_height	                          20	         # How much above bed to start probe
#gamma_min_endstop	                          nc	         # Normally 1.28. Change to nc to prevent conflict,

# Levelling strategy

# Example for the delta calibration strategy
leveling-strategy.delta-calibration.enable     false	      # Enable basic delta calibration
leveling-strategy.delta-calibration.radius     70	          # the probe radius

# Example for the delta grid leveling strategy
leveling-strategy.delta-grid.enable	            false	      # Enable grid leveling
leveling-strategy.delta-grid.radius	            70	          # Grid radius in millimeters
leveling-strategy.delta-grid.size	             3	          # Grid size, must be an odd number
leveling-strategy.delta-grid.do_home	        false	      # Whether to home before calibration
leveling-strategy.delta-grid.save	            false         # Whether to automatically save the grid
leveling-strategy.delta-grid.initial_height     30	          # Height at which to start probling
leveling-strategy.delta-grid.probe_offsets      0,-34,0       # probe offsets x,y,z (Z should always be 0)

# kill button (used to be called pause) maybe assigned to a different pin, set to the onboard pin by default
kill_button_enable                           false             # set to true to enable a kill button
#kill_button_pin                                               # kill button pin. default is same as pause button 2.12 (2.11 is another good choice)

# Panel
panel.enable                                 true             
# set to true to enable the panel code
panel.lcd                                    reprap_discount_glcd     # set type of panel
panel.encoder_a_pin                          3.25!^            # encoder pin
panel.encoder_b_pin                          3.26!^            # encoder pin

# Example for reprap discount GLCD
# on glcd EXP1 is to left and EXP2 is to right, pin 1 is bottom left, pin 2 is top left etc.
# +5v is EXP1 pin 10, Gnd is EXP1 pin 9
panel.lcd                                   reprap_discount_glcd     #
panel.spi_channel                           0                 # spi channel to use  ; GLCD EXP1 Pins 3,5 (MOSI, SCLK)
panel.spi_cs_pin                            0.16              # spi chip select     ; GLCD EXP1 Pin 4
panel.encoder_a_pin                         3.25!^            # encoder pin         ; GLCD EXP2 Pin 3
panel.encoder_b_pin                         3.26!^            # encoder pin         ; GLCD EXP2 Pin 5
panel.click_button_pin                      0.28!^            # click button        ; GLCD EXP1 Pin 2
panel.buzz_pin                              1.30              # pin for buzzer      ; GLCD EXP1 Pin 1 (1,31)
#panel.button_pause_pin                      2.11^             # kill/pause          ; GLCD EXP2 Pin 8 either
#panel.back_button_pin                       2.11!^            # back button         ; GLCD EXP2 Pin 8 or (2.11!^)

# pins used with other panels
#panel.up_button_pin                         0.1!              # up button if used
#panel.down_button_pin                       0.0!              # down button if used
#panel.click_button_pin                      0.18!             # click button if used

panel.menu_offset                            0                 # some panels will need 1 here

panel.alpha_jog_feedrate                     6000              # x jogging feedrate in mm/min
panel.beta_jog_feedrate                      6000              # y jogging feedrate in mm/min
panel.gamma_jog_feedrate                     200               # z jogging feedrate in mm/min

panel.hotend_temperature                     210               # temp to set hotend when preheat is selected
panel.bed_temperature                        60               # temp to set bed when preheat is selected

# 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                true              #
custom_menu.power_on.name                  Power_on          #
custom_menu.power_on.command               M80               #

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

# Only needed on a smoothieboard
currentcontrol_module_enable                 false            #

return_error_on_unhandled_gcode              false            #

# network settings
network.enable                               false            # 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.3.222    # the IP address
network.ip_mask                              255.255.255.0    # the ip mask
network.ip_gateway                           192.168.3.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

Having never done a rotary delta I will have to review the details to get an idea of where the problem resides. But perhaps one of the smoothie guru’s like @Arthur_Wolf would be a better starting point.

Thanks Eric hopefully Arthur_Wolf will notice the post shortly

I’d appreciate a video of the homing.

Also, can you try adding to your config:

delta_halt_on_error false

Also, try setting the W parameter to 1 (M665 W1 I think) and try running the homing again?

Looking at the code, it looks like you’re trying (through config or movement) to ask the machine to do something that’s mathematically impossible.

2 Likes

Your input is very much appreciated Arthur, I will try and make a short video tomorrow.
with regard to the line you’ve highlighted in the file, I have seen this in the eeprom somewhere so I will go through it tomorrow and post again.

Thanks to you Arthur homing is successful!! , as I hope the vids show. There is still a problem I have to overcome and that is when the arms are below the horizontal homing stops when the arms reach horizontal and it shows “homing cycle failed- check the max_travel settings” but whatever I try makes no difference. but if I raise the arms to just 1 or 2 degrees above horizontal homing works as it should (I think) problem, the vids are larger than this program will allow .

The option I added prevents it from complaining, but it’s complaining for a good reason you need to figure out based on the math.
For the video, try youtube.

It was complaining for a very good reason Arthur, and as usual the problem was right in front of me-- I had entered the wrong dimention for the Delta_Z_Offset . There is still a lot of tweeking to do but it is now basically working as it should. I managed to upload a video of it homing at the end of a “print” ( I have yet to install extruder and hot end) The video is on Vimeo I think you can find it seaching for Rotary Delta 3D Printer

3 Likes

1 Like

So glad you got this to work, I added the video to the gallery on the wiki.

2 Likes