Bedlevelling with X axis Sag



  • Hi Guys

    I hate to start New topics but I really could not find my answers looking through the forum extensively, there are some tangential approches but certainly no solutions offered appart from rebuild with Linear rails, which I would think with a smart board and Firmware shouldnt be needed.

    I have not been able to use much of my 300x300 print bed on My Hypercube Evolution. I have 12mm Z axis, 10mm Y and 8mm Steel linear rod axis, I know my 6mm alu plate is not super flat but I have a glass plate on top of it. I have several mirror plates I swap out with different surfaces including bare Glass, I can confirm this is level.

    I use a BLTouch and independant Z-axis motor leveling

    I mounted a Dial indicator to my Print head and I have basically less than 0.008mm deviation along the Y axis but 0.25mm sag from the centre of the bed to the edges of the bed on either side.

    I have to conclude its my X axis sagging which has been mentioned as an issue in some posts.

    I have not been able to get rid of all of the error In my bed, so I can print away from the centre of the Bed. I have been working on this for months.

    Here is my Config.g
    ; Configuration file for Duet WiFi (firmware version 1.20 or newer)
    ; executed by the firmware on start-up
    ; Modified 8/5/18

    ; General preferences
    M111 S0 ; Debugging off
    G21 ; Work in millimetres
    G90 ; Send absolute coordinates...
    M83 ; ...but relative extruder moves
    M555 P2 ; Set firmware compatibility to look like Marlin

    ; Network
    M550 PHEvo ; Set machine name
    ;M551 P0000 ; Set password
    M552 S1 ; Enable network
    M587 S"EP15" P"holdfast57" ; Configure access point. You can delete this line once connected
    M586 P0 S1 ; Enable HTTP
    M586 P1 S0 ; Disable FTP
    M586 P2 S0 ; Disable Telnet

    ; Drives
    M667 S1 ; Select CoreXY mode
    M569 P0 S0 ; Drive 0 goes forwards (X axis)
    M569 P1 S0 ; Drive 1 goes backwards (Y axis)
    M569 P2 S1 ; Drive 2 goes backwards (Z axis A)
    M569 P3 S0 ; Drive 3 goes forwards (Extruder Nimble goes forwards, Aero goes backwards)
    M569 P4 S1 ; Drive 4 goes backwards (Z axis B)
    M584 X0 Y1 Z2:4 ; two parallel Z motors connected to drives 2 and 4
    M350 X16 Y16 Z16 E16 I1 ; Configure micro-stepping with interpolation
    M92 X160 Y160 Z400 E2625 ; Set steps per mm (Nimble E2625, Belted Extruder E1062, e3d Titan Aero 799)
    M566 X400 Y400 Z12 E40 ; Set maximum instantaneous speed changes (mm/min) "JERK"
    M203 X18000 Y18000 Z500 E3600 ; Set maximum speeds (mm/min)
    M201 X400 Y400 Z40 E120 ; Set accelerations (mm/s^2)
    M906 X1000 Y1000 Z1000 E900 I30 ; Set motor currents (mA) and motor idle factor in per cent
    M84 S30 ; Set idle timeout
    M671 X-44:352 Y146.5:146.5 S2.5 ; leadscrews at mid left, mid right, Maximum correction S2.5mm

    ; Axis Limits
    M208 X-4 Y-10 Z-2 S1 ; Set axis minima
    M208 X290 Y290 Z290 S0 ; Set axis maxima
    M557 X40:260 Y40:260 S110 ; Define mesh grid

    ; X and Y Endstops and Z Probe
    M574 X1 Y1 S1 ; Define S0 = active low endstop input, S1 = active high microswitches, S3 = motor load detection
    M307 H7 A-1 C-1 D-1 ; Set H3 for BLTouch
    M574 Z1 S2 ; Set endstops controlled by probe
    M558 P9 X0 Y0 Z1 H5 F300 T2000 ; Set Z probe type to BLTouch, the axes for which it is used and the probe + travel speeds F parameter can change speed of probing
    G31 X38 Y30 Z1.56 P25 ; Set Z probe trigger value, offset and trigger height (Bowden mount X21.5 Y0 Z1.64) (Nimble mount 0.4mm nozzle X38 Y30 Z1.4) (Aero mount 0.4mm nozzle X29.88 Y20.14 Z0.29)

    ; Bed Heater
    M143 H0 S155 ; Set temperature limit for heater 0 to 150C
    M305 P0 T100000 B3950 C0 R4700 H0 ; P0 Set thermistor + ADC parameters for heater 0 (Bed)
    M307 H0 A191.1 C765.5 D1.1 B0 ; Set Heater 0 Parameters Computed PID parameters for setpoint change: P500.1, I22.007, D410.8

    ; Extruder Heater
    M143 H1 S300 ; Set temperature limit for heater 1 to 300C
    M143 H3 S300 ; Set temperature limit for heater 1 to 300C
    ;M305 P3 X200 ; Set PT100 thermistor Channel 1 + for extruder (e3d PT100)
    M305 P1 T100000 B4725 C7.060000e-8 R4700 H0 ; Set thermistor + ADC parameters for heater 1 (e3d Thermistor) B4725 or B4138??
    M305 P3 T100000 B4725 C7.060000e-8 R4700 H30 ; Set thermistor + ADC parameters for heater 1 (e3d Thermistor) B4725 or B4138??
    ;M307 H1 A508.2 C176.7 D4.0 B0 ; Set Heater Parameters for Std e3d V6 cartidge/therm/block
    M307 H3 A495.5 C284.9 D4.2 B0 ; Set Heater Parameters for e3d Gold Edition w/copper block
    ;M307 H3 A492.8 C289.8 D4.7 B0 ; Set Heater Parameters for Titan Aero copper block and sock w/PT100
    ;M307 H3 A354 C212.2 D4.6 B0 ; Set Heater Parameters for Titan Aero copper block and sock w/thermistor

    ; Chamber Heater
    M141 H2 ; Set Heater/Thermistor 2 to Chamber Heater/Thermistor
    M143 H2 S70 ; Set temperature limit for Chamber heater to 70C
    M305 P2 T100000 B3950 C0 R4700 H0 ; Set thermistor + ADC parameters for heater 2 (Chamber Thermistor)
    M307 H2 A31.2 C492.9 D100 F2 B0 ; Set Heater Parameters for Chamber heater

    ; Ambient
    ;M305 P103 X400 T22 S"Ambient" ; Set thermistor DHT22/AM2302 on Endstop 3 Duex5
    ;M305 P104 X401 T22 S"Humidity" ; Set hydrometer DHT22/AM2302 on Endstop 3 Duex5

    ; Fans
    M106 P0 S0 I0 F100 H-1 ; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P1 S1 I0 H3 T45 ; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on
    M106 P2 B3 F100 T47:50 H100:101:102 L1 ; Electronics cooling fan that starts to turn on when the MCU temperature (virtual heater 100) reaches 45C and reaches full speed when the MCU temperature reaches 65C or if any TMC2660 drivers (virtual heaters 101 and 102) report that they are over-temperature
    M106 P8 B3 S1 F1000 T43 H100:101:102 ; Electronics cooling fan that starts to turn on when the MCU temperature (virtual heater 100) reaches 45C and reaches full speed when the MCU temperature reaches 65C or if any TMC2660 drivers (virtual heaters 101 and 102) report that they are over-temperature

    ;Lights
    M106 P7 S1

    ; Tools
    M563 P0 D0 H3 F0; tool 0 uses extruder 0, heater 3 and fan 0
    G10 P0 X0 Y0 Z0 ; Set tool 0 axis offsets
    G10 P0 R0 S0 ; Set initial tool 0 active and standby temperatures to 0C

    ; Automatic saving after power loss is not enabled

    ; Custom settings are not configured

    ; Miscellaneous
    T0 ; Select first tool
    M912 P0 S8 ; Set CPU temp reading lower by this amount (-ve is higher)
    M572 D0 S0.05 ; Set Pressure Advance Extruder 0 (Bowden S0.2, Direct 0.05)

    and my bed.g

    ; bed.g
    ; Called using G32
    ; Called to perform Independent Z probe levelling
    ;
    M561 ; clear any bed transform
    G29 S2 ; clear bed transform from mesh levelling file
    G28 ; Home all axis
    G30 P0 X40 Y146.5 Z-99999 ; probe near Left leadscrew
    G30 P1 X290 Y146.5 Z-99999 S2 ; probe near Right leadscrew and calibrate 2 motors

    ; Re-home Z to account for any x carriage sag as is recommended
    G1 X107 Y115 F3600 ; put probe over the centre of the bed, or wherever you want to probe
    G30 ; lower head, stop when probe triggered and set Z to trigger height

    I run G29 once only, not for every print

    My heightmap:
    0_1532225745110_Capture.JPG

    This heightmap is only partially correcting the error around the bed as I both can measure with the dial indicator (before bed transform) and feeler gauges around the print bed (after bed transform).

    Am I doing something in the wrong order or am I doing the wrong thing?


  • administrators

    I presume you use G29 S1 in your slicer start GCode to load the height map.

    Try using a larger number of mesh probe points (smaller grid size in M557). The bed compensation code interpolates the height error linearly between the nearest 4 probe points, but your height error is likely to be a quadratic function of X rather than a triangular function.



  • Thanks David that seems to have improved the situation (yes I include G29 S1 in slicer), I changed the M557 order in config.g to X40:260 Y40:260 S11.

    I very recently did have an extra probe point in each direction (S55) which didnt help that much before, so with your advice I went with a lot more sample points, (I still dont think its quite matches the dial indicator measurements though I think thats because of the math you mentioned, or it could be the influence of the cable loom weight which isnt there with the dial indicator), I know just enough math to just comprehend what your saying is the issue. Though I believe the point is that I need a lot more measurement points not less.

    I adjusted the M557 again to M557 X36:296 Y22:282 S13, (guess big issue here is it took 25mins or something to do all the G29 probing at least I only need to do it once) this seemed to give me a bit more usable area too. I am unable to go any wider due to the limitation of my probe offsets and the size of the printer before I hit the X min/Y min on the printer physically.

    I guess the other option is upgrade to a piezo (zero offset) but I am not that keen due to the cost and I am wanting to use multiple print heads to swap out.

    I wonder if I created a mount to swap in temporarily to only hold the BLTouch in place of the current Nozzle location (zero offset) and did a G29 then swapped the print head back in then I may get more probe area and therefore more accurate levelling to the edge of the plate if I use the height map generated from that, and just use the Independent Z motor levelling for every print and G29 S1 as I have been doing. But I may end up with the variability of the cable loom weight.

    If I was starting from scratch I think I would go the linear rails and Peizo.

    I will continue to experiment, in the mean time it looks like I will be able to use more of my bed now. Thanks


Log in to reply