Delta Grid Compensation on Cartesian printer

Hello,

I am trying to get delta grid compensation to work on rectangular bed. I have the grid compensation working very well but it only will probe a square.

I have set the following settings:

leveling-strategy.delta-grid.enable true
leveling-strategy.delta-grid.size 7
mm_per_line_segment 1 # necessary for Cartesian using delta-grid
leveling-strategy.delta-grid.is_square true
leveling-strategy.delta-grid.max_x 175 ( i can change this to literally any value with no effect on probing area)
leveling-strategy.delta-grid.max_y 100

the probing area only seems to be adjusted with the ‘leveling-strategy.delta-grid.radius’ setting. by not setting any value the grid defaults to a radius of 50

is there any setting i have missed?

Imported from wikidot

have you your config.txt ?

Hello,

here is my config file

# 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                            15000             # Default rate ( mm/minute ) for G0 moves
mm_per_arc_segment                           0.5              # Arcs are cut into segments ( lines ), this is the length for these segments.  Smaller values mean more resolution, higher values mean faster computation
mm_per_line_segment                          1                # Lines can be cut into segments ( not usefull with cartesian coordinates robots ).

currentcontrol_module_enable true

Arm solution configuration : Cartesian robot. Translates mm positions into stepper positions

alpha_steps_per_mm 320 # Steps per mm for alpha stepper
beta_steps_per_mm 320 # Steps per mm for beta stepper
gamma_steps_per_mm 1600 # Steps per mm for gamma stepper

Planner module configuration : Look-ahead and acceleration configuration

planner_queue_size 32 # DO NOT CHANGE THIS UNLESS YOU KNOW EXACTLY WHAT YOUR ARE DOING
acceleration 1000 # Acceleration in mm/second/second.
z_acceleration 100 # Acceleration for Z only moves in mm/s^2, 0 disables it, disabled by default. DO NOT SET ON A DELTA
junction_deviation 0.05 # Similar to the old “max_jerk”, in millimeters

Stepper module configuration

microseconds_per_step_pulse 2.0 # Duration of step pulses to stepper drivers, in microseconds
base_stepping_frequency 100000 # Base frequency for stepping

Stepper module pins ( ports, and pin numbers, appending “!” to the number will invert a pin )

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 1.9 # X stepper motor current
x_axis_max_speed 10000 # mm/min
alpha_max_rate 10000 # mm/min actuator max speed

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 1.9 # Y stepper motor current
y_axis_max_speed 10000 # mm/min
beta_max_rate 10000 # mm/min actuator max speed

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 2.0 # Z stepper motor current
z_axis_max_speed 600 # mm/min
gamma_max_rate 600 # mm/min actuator max speed

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 and a terminal connected)

#msd_disable false # disable the MSD (USB SDCARD) when set to true
#leds_disable true # disable using leds after config loaded
#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.hotend1.enable true # Whether to activate the extruder module at all. All configuration is ignored if false
extruder.hotend1.steps_per_mm 850 # Steps per mm for extruder stepper
extruder.hotend1.default_feed_rate 600 # Default rate ( mm/minute ) for moves where only the extruder moves
extruder.hotend1.acceleration 200 # Acceleration for the stepper motor mm/sec²
extruder.hotend1.max_speed 150 # mm/s

extruder.hotend1.step_pin 2.3 # Pin for extruder step signal
extruder.hotend1.dir_pin 0.22 # Pin for extruder dir signal
extruder.hotend1.en_pin 0.21 # Pin for extruder enable signal

delta_current 0.6 # Extruder stepper motor current

Extruder module configuration

extruder.hotend2.enable true # Whether to activate the extruder module at all. All configuration is ignored if false
extruder.hotend2.steps_per_mm 850 # Steps per mm for extruder stepper
extruder.hotend2.default_feed_rate 600 # Default rate ( mm/minute ) for moves where only the extruder moves
extruder.hotend2.acceleration 200 # Acceleration for the stepper motor mm/sec²
extruder.hotend2.max_speed 150 # mm/s

extruder.hotend2.step_pin 2.8
extruder.hotend2.dir_pin 2.13
extruder.hotend2.en_pin 4.29

epsilon_current 0.6 # Extruder stepper motor current

Laser module configuration

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

Hotend temperature control configuration

temperature_control.hotend1.enable true # Whether to activate this ( “hotend” ) module at all. All configuration is ignored if false.
temperature_control.hotend1.thermistor_pin 0.23 # Pin for the thermistor to read
temperature_control.hotend1.heater_pin 2.7 # Pin that controls the heater
temperature_control.hotend1.thermistor Semitec #
#temperature_control.hotend1.beta 4480 # or set the beta value
temperature_control.hotend1.set_m_code 104 #
temperature_control.hotend1.set_and_wait_m_code 109 #
temperature_control.hotend1.designator T0 #
temperature_control.hotend1.pwm_frequency 250 #How many times per second to switch the heating element on or off. Set to a low value ( 20 ) if using a Solid State Relay.
temperature_control.hotend1.max_temp 320 # Set maximum temperature
temperature_control.hotend1.min_temp 0 # Set minimum temperature
temperature_control.hotend1.runaway_range 60 #
#temperature_control.hotend1.runaway_heating_timeout 130 #
temperature_control.hotend1.p_factor 48.0 #
temperature_control.hotend1.i_factor 3.753 #
temperature_control.hotend1.d_factor 154 #

Hotend temperature control configuration

temperature_control.hotend2.enable true # Whether to activate this ( “hotend” ) module at all. All configuration is ignored if false.
temperature_control.hotend2.thermistor_pin 0.23 # Pin for the thermistor to read
temperature_control.hotend2.heater_pin 2.7 # Pin that controls the heater
temperature_control.hotend2.thermistor Semitec #
#temperature_control.hotend2.beta 4480 # or set the beta value
temperature_control.hotend2.set_m_code 104 #
temperature_control.hotend2.set_and_wait_m_code 109 #
temperature_control.hotend2.designator T1 #
temperature_control.hotend2.pwm_frequency 250 #How many times per second to switch the heating element on or off. Set to a low value ( 20 ) if using a Solid State Relay.
temperature_control.hotend2.max_temp 320 # Set maximum temperature
temperature_control.hotend2.min_temp 0 # Set minimum temperature
temperature_control.hotend2.runaway_range 60 #
#temperature_control.hotend2.runaway_heating_timeout 130 #
temperature_control.hotend2.p_factor 48.0 #
temperature_control.hotend2.i_factor 3.753 #
temperature_control.hotend2.d_factor 154 #

temperature_control.bed.enable true #
temperature_control.bed.thermistor_pin 0.24 #
temperature_control.bed.heater_pin 2.5 #
#temperature_control.bed.thermistor EPCOS100K #
temperature_control.bed.beta 4480 # 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.runaway_range 25 #
temperature_control.bed.pwm_frequency 5 #

temperature_control.bed.p_factor 53.4 #
temperature_control.bed.i_factor 0.803 #
temperature_control.bed.d_factor 886 #

Switch module for fan control

switch.fan.enable true #
switch.fan.input_on_command M106 #
switch.fan.input_off_command M107 #
switch.fan.output_pin 2.4 #
switch.fan.output_type pwm # pwm output settable with S parameter in the input_on_comand
switch.fan.pwm_period_ms 50 #

switch.misc.enable false #
switch.misc.input_on_command M42 #
switch.misc.input_off_command M43 #
switch.misc.output_pin 0.26 #

Endstops

endstops_enable true # the endstop module is enabled by default and can be disabled here
#corexy_homing false # set to true if homing on a hbit or corexy
alpha_min_endstop 1.24^ # add a ! to invert if endstop is NO connected to ground
#alpha_max_endstop 1.25^ #
alpha_homing_direction home_to_min # or set to home_to_max and set alpha_max
alpha_min -152 # this gets loaded after homing when home_to_min is set
alpha_max 300 # this gets loaded after homing when home_to_max is set
beta_min_endstop 1.26^ #
#beta_max_endstop 1.27^ #
beta_homing_direction home_to_min #
beta_min -152 #
beta_max 300 #
gamma_min_endstop 1.28^ #
#gamma_max_endstop 1.29v! #
gamma_homing_direction home_to_min #
gamma_min 0 #
gamma_max 180 #

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
#move_to_origin_after_home false # move XY to 0,0 after homing

#probe endstop
#probe_pin 1.29 # optional pin for probe

alpha_fast_homing_rate_mm_s 50 # feedrates in mm/second
beta_fast_homing_rate_mm_s 50 # "
gamma_fast_homing_rate_mm_s 20 # "
alpha_slow_homing_rate_mm_s 25 # "
beta_slow_homing_rate_mm_s 25 # "
gamma_slow_homing_rate_mm_s 6 # "

alpha_homing_retract_mm 5 # distance in mm
beta_homing_retract_mm 5 # "
gamma_homing_retract_mm 4 # "

#endstop_debounce_count 100 # uncomment if you get noise on your endstops, default is 100

Switch module for servo control

switch.servo.enable true #
switch.servo.input_on_command M280 # M280 S7.5 would be midway
switch.servo.input_off_command M281 # same as M280 S0 0% duty cycle, effectively off
switch.servo.output_pin 1.23 # must be a PWM capable pin
switch.servo.output_type hwpwm # H/W pwm output settable with S parameter in the input_on_comand
switch.servo.pwm_period_ms 20 # set period to 20ms (50Hz) default is 50Hz

optional Z probe

zprobe.enable true # set to true to enable a zprobe
zprobe.probe_pin 1.28^ # pin probe is attached to if NC remove the !
zprobe.slow_feedrate 6 # mm/sec probe feed rate
#zprobe.debounce_ms 1 # set if noisy
zprobe.fast_feedrate 190 # move feedrate mm/sec
zprobe.probe_height 3 # how much above bed to start probe

associated with zprobe the leveling strategy to use

leveling-strategy.delta-grid.enable true
leveling-strategy.delta-grid.radius 115
leveling-strategy.delta-grid.is_square true
leveling-strategy.delta-grid.do_home false
leveling-strategy.delta-grid.size 11
leveling-strategy.delta-grid.max_x 150
leveling-strategy.delta-grid.max_y 100
leveling-strategy.delta-grid.probe_offsets 0,-43,0 # probe offsets x,y,z (Z should always be 0)
leveling-strategy.delta-grid.save true
leveling-strategy.delta-grid.initial_height 5
mm_per_line_segment 1
save_g92 true

kill button (used to be called pause) maybe assigned to a different pin, set to the onboard pin by default

kill_button_enable true # set to true to enable a kill button
kill_button_pin 2.12 # kill button pin. default is same as pause button 2.12 (2.11 is another good choice)

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

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.26^ # encoder pin ; GLCD EXP2 Pin 3
panel.encoder_b_pin 3.25^ # encoder pin ; GLCD EXP2 Pin 5
panel.click_button_pin 1.30!^ # click button ; GLCD EXP1 Pin 2
panel.buzz_pin 1.31 # pin for buzzer ; GLCD EXP1 Pin 1
#panel.back_button_pin 2.11!^ # back button ; GLCD EXP2 Pin 8
panel.encoder_resolution 100 # the number of pulses the encoder emits per detent/click

kill_button_enable true # set to true to enable a kill button
kill_button_pin 2.11 # kill button pin. default is same as pause button 2.12 (Add ^ for external buttons)
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 185 # temp to set hotend when preheat is selected
panel.bed_temperature 60 # temp to set bed when preheat is selected

turn the PSU off when the hotend temp cools below 50, only do this once M1100 S1 has been executed to arm it

temperatureswitch.psu_off.enable true #
temperatureswitch.psu_off.designator T # first character of the temperature control designator to use as the temperature sensor to monitor
temperatureswitch.psu_off.switch psu # select which switch to use, matches the name of the defined switch
temperatureswitch.psu_off.threshold_temp 50.0 # temperature to trigger at when falling
temperatureswitch.psu_off.heatup_poll 30 # poll heatup every 30 seconds
temperatureswitch.psu_off.cooldown_poll 30 # poll cooldown every 30 seconds
temperatureswitch.psu_off.arm_mcode 1100 # M1100 S1 will arm it
temperatureswitch.psu_off.trigger falling # only trigger when the temp falls below after being above
temperatureswitch.psu_off.inverted false # turn the switch off when we trigger (by default switches on when rising and off when falling)

switch.psu.enable true # turn atx on/off
switch.psu.input_on_command M81 #
switch.psu.input_off_command M80 #
switch.psu.output_pin 1.22 #
switch.psu.output_type digital # on/off only
switch.psu.fail_safe_set_to 1 # so the ATX turns off on a system crash
#switch.psu.ignore_on_halt false # so the ATX does not turn off on a HALT condition (like limit trigger)
# However leave commented or set to false if you want the ATX to turn off for an over heat fault condition

leave_heaters_on_suspend true #
after_suspend_gcode G91_G0Z5_G90_G1X-100Y120_G1 #

Hi dksre,

I know you are having your own problems, but i was wondering if you might be able to share some information about your setup with me.

I am currently using 3 Point Levelling on my Cartesian printer but i am not having very good results with it, i want to convert to using Delta Grid Levelling.

I had done some reading on the Z Probe section in the Documentation but i am still not 100% on what needs to be done, i am confused about the part where it says the 0,0 needs to be set to the centre of the bed. Is this done in the slicing software?

If my bed is 362 x 362 then would my origin be 0,0 with the minimum travel limits being -181 and the maximum 181?

Any help you could provide in terms of detailed information on your setup would be great.

Thanks Again

Alex

Hi Alex,

Yes to have 0,0 in the center of the bed you set as follows for beta as an example for a 300 bed :

beta_homing_direction home_to_min #
beta_min -150 #
beta_max 150 #

Hope that helps

Hi dksre,

That’s good thank you! This information is now also added as an example in the Wiki so it is much clearer.

I have now got it working nicely and it seems to be performing very well.

There is one problem in that because my Probe Offsets are -25, -30, i am loosing these amounts from my printable area as i have to define the Grid Radius as 150 instead of the maximum 180 it should be as the printer attempts to probe outside of the bed, i have not tested yet the levelling performance in the area outside of the defined radius at the moment, but according to the Wiki this will provide inadequate results.

It would be great if the latest Marlin Grid procedure could be ported over as this works very well also.

Thanks

Alex

Hi Alex,

Glad you were able to get it working.

Yes my probe is also offset 30mm in your axis so I’m having to sacrifice probing area in both axis in order to not have hotend attempt to go off the bed. I have tried the delta grid max x and y settings with no change to printer behavior during probing…

At this stage my larger printer with rectangular bed will have to remain non smoothieware because of this issue