Auto bed leveling with BLtouch doesnt actuate my Z axis to correct

Hey all,

I can see the finish line for my BLTouch install but have hit another snag. My leveling strategy completes and probes as it should but I see no movement in my Z axis during the print even though their is a visible area of the bed that is too low. Im not sure if im missing something simple in my startup gcode sequence or if it has something todo with gamma_min and gamma_max. Should there be a part of the startup code that saves and loads the probed points?

Here is my startup gcode

G28 Z; home Z in case its somewhere unknown and I ask it togo down 10
G1 Z10;Lower bed so probe has room to extend
M280S3; drop probe down to probing position
G32; run bed leveling strategy

G1X512.5Y80F6000; No bed lowering but move to probe point 1 to set the bed height
G30 Z0.6; Desired Z-offset
M280S7; raise bed probe up

And 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                            4000             # 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                          5                # Lines can be cut into segments ( not usefull with cartesian coordinates robots ).

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

alpha_steps_per_mm 118.52 #changed from 80 Steps per mm for alpha stepper
beta_steps_per_mm 118.52 #changed from 90 Steps per mm for beta stepper
gamma_steps_per_mm 4031.5 #changed from 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 700 # Acceleration in mm/second/second.
#z_acceleration 500 # Acceleration for Z only moves in mm/s^2, 0 disables it, disabled by default. DO NOT SET ON A DELTA
junction_deviation 0.01 # Similar to the old “max_jerk”, in millimeters, see :

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

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

alpha_step_pin 2.1 # Pin for alpha stepper step signal
alpha_dir_pin 0.11 # Pin for alpha stepper direction
alpha_en_pin 0.10 # Pin for alpha enable pin
alpha_current 1.34 # X stepper motor current
x_axis_max_speed 9000 # mm/min
alpha_max_rate 9000.0 # mm/min actuator max speed

beta_step_pin 2.2 # changed from 2.1 Pin for beta stepper step signal
beta_dir_pin 0.20 # changed from 0.11 Pin for beta stepper direction
beta_en_pin 0.19 # changed from 0.1 Pin for beta enable
beta_current 2.0 # changed from 1.5 Y stepper motor current
beta_max_rate 9000.0 # changed from 30000mm/min

gamma_step_pin 2.3 # Pin for gamma stepper step signal
gamma_dir_pin 0.22! # Pin for gamma stepper direction
gamma_en_pin 0.21 # Pin for gamma enable
gamma_current 2.0 # Z stepper motor current
z_axis_max_speed 300 # mm/min
gamma_max_rate 300.0 # 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 false # 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.hotend.enable true # Whether to activate the extruder module at all. All configuration is ignored if false
#for volcano
extruder.hotend.steps_per_mm 807.92 # 810.75 redid March 18 @90 and 250 temp and got 807.92 Steps per mm for extruder stepper extruder grip was at right end of second marking
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 mm/sec²
extruder.hotend.max_speed 100 # mm/s

extruder.hotend.step_pin 2.0 # Pin for extruder step signal
extruder.hotend.dir_pin 0.5 # Pin for extruder dir signal
extruder.hotend.en_pin 0.4 # Pin for extruder enable signal

delta_current 1.34 # 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.
#laser_module_pin 2.5 # this pin will be PWMed to control the laser. Only P2.0 - P2.5, P1.18, P1.20, P1.21, P1.23, P1.24, P1.26, P3.25, P3.26
# can be used since laser requires hardware PWM
#laser_module_maximum_power 1.0 # this is the maximum duty cycle that will be applied to the laser
#laser_module_minimum_power 0.0 # This is a value just below the minimum duty cycle that keeps the laser
# active without actually burning.
#laser_module_default_power 0.8 # This is the default laser power that will be used for cuts if a power has not been specified. The value is a scale between
# the maximum and minimum power levels specified above
#laser_module_pwm_period 20 # this sets the pwm frequency as the period in microseconds

First hotend configuration

temperature_control.hotend.enable true # Whether to activate this ( “hotend” ) module at all.
temperature_control.hotend.heater_pin 2.5 # changed from 2.7 Pin that controls the heater, set to nc if a readonly thermistor is being defined
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 385 # changed from being commected out and 285 is max tem for nozzle change anyways Set maximum temperature - Will prevent heating above 300 by default
temperature_control.hotend.min_temp 0 # Set minimum temperature - Will prevent heating below if set

temperature_control.hotend.sensor pt100_e3d
temperature_control.hotend.e3d_amplifier_pin 1.30 # must be a free ADC pin, not a temperature input

#temperature_control.hotend.thermistor_pin 0.24 # changed from 0.23 Pin for the thermistor to read
#temperature_control.hotend.thermistor Semitec # changed from EPCOS100k see
#temperature_control.hotend.beta 4066 # or set the beta value

safety control is enabled by default and can be overidden here, the values show the defaults

temperature_control.hotend.runaway_heating_timeout 600 #CRITICAL TO NEVER COMMENT OUT if the printer loses connection this is how it stays safe if it doesnt get an okay im alive signal within this time it shuts down and restart killing any running esxtruders! I timed and from coldstart took 3 minutes to get to 230 and 9 minutes to get to 285 so set to 600 seconds MAX is default max is 2040 seconds, how long it can take to heat up
temperature_control.hotend.runaway_cooling_timeout 0 # max is 2040 seconds, how long it can take to cool down if temp is set lower
temperature_control.hotend.runaway_range 40 # Max setting is 63°C (was off by default)
temperature_control.hotend.i_max 500

#fOR VOLCANO

temperature_control.hotend.p_factor 85 #OFFICAL PID CALCULATED NO FANS 45.7 3.837 136 JULY 20 2017 PREVIOUS 85 2.427 80 previous 41.7 2.427 and 175 ran again for new ones at full fan at 250
temperature_control.hotend.i_factor 2.427 # 41.7 2.149 203 run at 250 March 18 full fans against bed
temperature_control.hotend.d_factor 80 #

temperature_control.bed.enable false #
temperature_control.bed.thermistor_pin 0.23 #
temperature_control.bed.heater_pin 2.7 #
temperature_control.bed.thermistor EPCOS100K # see
#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 #

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 1.25 #

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

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 true #
#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

filament out detector

#filament_detector.enable false #
#filament_detector.encoder_pin 0.26 # must be interrupt enabled pin (0.26, 0.27, 0.28)
#filament_detector.seconds_per_check 2 # may need to be longer
#filament_detector.pulses_per_mm 1 .0 # will need to be tuned
#filament_detector.bulge_pin 0.27 # optional bulge detector switch and/or manual suspend

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
#corexy_homing false # set to true if homing on a hbot or corexy
alpha_min_endstop 1.24^! # add a ! to invert if endstop is NO connected to ground
#alpha_max_endstop 1.24^ #
alpha_homing_direction home_to_min # or set to home_to_max and set alpha_max
alpha_min 0 # this gets loaded after homing when home_to_min is set
alpha_max 600 # this gets loaded after homing when home_to_max is set
#beta_min_endstop 1.26^ #
beta_max_endstop 1.26^! #
beta_homing_direction home_to_max #
beta_min 0 #
beta_max 600 #
gamma_min_endstop 1.28^! #was 1.28^!
#gamma_max_endstop 1.28^ #
gamma_homing_direction home_to_min #
gamma_min 0 #
gamma_max 600 #

alpha_max_travel 610 # max travel in mm for alpha/X axis when homing
beta_max_travel 625 # max travel in mm for beta/Y axis when homing
gamma_max_travel 600 # 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
#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 4 # "
alpha_slow_homing_rate_mm_s 25 # "
beta_slow_homing_rate_mm_s 25 # "
gamma_slow_homing_rate_mm_s 2 # "

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

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

zprobe.enable true # set to true to enable a zprobe
zprobe.probe_pin 1.29 # pin probe is attached to if NC remove the !
zprobe.slow_feedrate 5 # mm/sec probe feed rate
#zprobe.debounce_count 100 # set if noisy
zprobe.fast_feedrate 70 # move feedrate
zprobe.probe_height 10 # how much above bed to start probe

switch.servo.enable true
switch.servo.input_on_command M280
switch.servo.input_off_command M281
switch.servo.output_pin 2.4
switch.servo.output_type hwpwm
switch.servo.pwm_period_ms 20

associated with zprobe the leveling strategy to use

leveling-strategy.three-point-leveling.enable true # Set to true to enable the leveling strategy that probes three points to define
# a plane and then keeps the Z parallel to that plane. This is useful if
# your Z plate/bed is not perfectly aligned with your XY gantry
leveling-strategy.three-point-leveling.point1 512.5,80 # The first probe point (X, Y)
leveling-strategy.three-point-leveling.point2 512.5,555 # The second probe point (X, Y)
leveling-strategy.three-point-leveling.point3 62.5,555 # The third probe point (X, Y)
leveling-strategy.three-point-leveling.home_first true # Home the X and Y axes before probing
leveling-strategy.three-point-leveling.tolerance 0.03 # The probe tolerance in millimetres, anything less that this will be
# ignored, default is 0.03mm
leveling-strategy.three-point-leveling.probe_offsets -1.5,-46,0 # The probe offset from nozzle, must be X,Y,Z (Z should always be 0),
# default is no offset. This is used if your nozzle is not exactly
# at the same position as where your tool would be.
leveling-strategy.three-point-leveling.save_plane false # Set to true to allow the bed plane to be saved with M500, default is false

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)

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.0.99 # the IP address
network.ip_mask 255.255.255.0 # the ip mask
network.ip_gateway 192.168.0.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

Azteeg specific settings do not change

currentcontrol_module_enable true #
digipot_max_current 2.3 # max current
digipot_factor 113.5 # factor for converting current to digipot value

Imported from wikidot

Everything looks fine, should work. Can you exagerate your bed slant by a lot to see if it’s really not doing it’s job ?
Can you also flash to tboth the very latest firmware and very latest eàxample config file ( and port your values over to it ) ?
Also can you try enabling the “save to SD card” system for that strategy, probe, save, reset the board, and see if it works then ?

Thanks.

Hey Arthur thanks for having a look, it is now compensating. I cant quite put my finger on what ended up fixing it and almost think it was the fact that the bed wasnt hugely off to begin with. I did some controlled tests and did see some compensation occuring although not very good compensation. Could you help me answer a few questions on my mind while im trying to get this finished?

I am particularly confused about configuring Z height, I have a min Z endstop so my bed drops as I print and when I home it raises up and a set screw contacts the switch. Would I not be using this to set the Z height instead of

G28
G0 Z0
Adjusting Z until the bed is touching the nozzle
M306 Z0
M500

I guess this would be more for a user with a Zmax endstop?

This value is important because this is the reference all the probe points are made relative to. Would you say thats correct?

Next is in my startup gcode I say this
G30 Z0.6; Desired Z-offset
Does that make sense in my use of G30? Basically my understanding of G30 is that saying G30 Z0.6 means it will extend the probe make contact with the bed record that distance and then look at the value 0.6 and now that it knows exactly where the bed is go up 0.6 from there. Is that accurate?

Lastly I get this error during my prints
READ: WARNING: probe is not within tolerance: 0.082600 > 0.030000
READ: DEBUG: plane normal= 0.000684, -0.000693, 0.999999
READ: Probe completed, bed plane defined
READ: ok

Wondering if that is why despite auto bed leveling I am getting some sides of my bed nicely level and other sides with gaps as if its not compensating correctly.

I know my questions are kinda all over the place but would really appreciate your thoughts

I think the simplest solution for you is to set the gamma_min value to whatever you need. That way when you home the Z will be at the value you want, end of story.

So I ended up updating my firmware and porting my config as you recommended and I switched to rectangular grid probing. Everything looks like its working but im looking to figure out one last piece of the puzzle.

Currently I run this at the start of every print

    G28;
    G1 Z10; necssary to have room for probe when drop it down
    M280 S3.0 ; Deploy BLT probe pin
    G32;
    M280 S7.0 ; Raise BLT probe pin
    G28;
    M306 Z0
    G28

This works but there is a flaw I beleive that if after homing my home point is not actually the same level as the print before doing an M306 Z0 will not give the same bed conditions as the print before. Instead I think that using G30 is a better way to get real time information of the beds condition at the start of each print.

    G28;
    G1 Z10; necssary to have room for probe when drop it down
    M280 S3.0 ; Deploy BLT probe pin
    G32;
    M280 S7.0 ; Raise BLT probe pin
    G28;
    G1 Z10; necssary to have room for probe when drop it down
    M280 S3.0 ; Deploy BLT probe pin
    G30; find out how far the bed actually is 
    M280 S7.0 ; Raise BLT probe pin
    //say G30 returns a value of 7.5 and I know the distance between my fully extended probe and the tip of my nozzle is 1mm(z probe offset) how would I code 
        the last portion so that using this information it sets my nozzle directly against the bed at that point before the print commences?

Could you give me a hand with the last step here or does that not make sense for some reason?