Help with 3 independant Z motor leveling



  • I have a RailCore with 3 independent Z leveling screws, 2 on left and 1 on the right.

    I suspect the bed leveling routine is not working correctly as the nozzle is clearly too high on the right hand side of the bed.

    I use a M208 in my config to specify where the bed is which obviously corrects the endstop positions.

    M208 X-10:310 Y-8:293 Z-0:550                 ; set axis minima and low homing switch positions (adjust to make X=0 and Y=0 the edges of the bed)
    

    when setting up M671 is it relevant to the actual X0 Y0 positions , or the corrected ones, which is the corner of my print surface?

    Hoping my question makes sense.

    Regards,

    Paul



  • post your config.g and bed.g

    what do you mean by corrected coordinates?
    the lead screw positions need to be the actual position in reference to 0,0.



  • Hi @Veti
    M208 modifies the original coordinates as after homing 0,0 becomes the print plate corner.
    If I jog to the endstops after homing I get X-10 and Y-8

    I use the endstop locations and for reference I attach my bed and config.g's

    Regards

    Paul.

    Bed.g

    ; New 2/5/2020
    M98 P"0:/macros/Lighting/Red-On.g"
    if !move.axes[0].homed || !move.axes[1].homed	; If the printer hasn't been homed, home it
    M98 P"0:/sys/homex.g"							; home x
    M98 P"0:/sys/homey.g"							; home Y
    M98 P"0:/sys/homez.g"							; home z
    ;
    M561											; clear any bed transform
    ;M558 P9 H5 F120 T24000							; increase dive height
    ;M98 P"0:/sys/bed_FourScrews.g"					; perform bed tramming
    M98 P"0:/sys/bed_ThreeScrews.g"					; perform bed tramming
    ;
    echo "Bed Traming Cycle: 1 - Difference was " ^ move.calibration.initial.deviation ^ "mm"
    ;
    while move.calibration.initial.deviation >= 0.02	; perform additional tramming if previous deviation was over 0.02mm
    	if iterations = 5
    		abort "Too many auto tramming attempts"
    	M98 P"0:/sys/bed_ThreeScrews.g"
    	echo "Bed Traming Cycle: " ^ iterations + 2 ^ " - Difference was " ^ move.calibration.initial.deviation ^ "mm"
    		continue
    
    ;
    
    G28 Z							; home z
    M98 P"0:/macros/Lighting/Red-Off.g"
    M98 P"0:/macros/Lighting/Green-On.g"
    

    config.g

    ; Config file for RailCore II 300 ZL Paul Hewson
    ; Last Change LEDs 03/05/2020
    M111 S0                             	; Debug off
    
    ;Network
    M550 P"RailCore II"                       ; Set machine name
    M552 P192.168.0.7 S1                     ; Enable network and set IP address
    M553 P255.255.255.0                      ; Set netmask
    M554 P192.168.0.1                        ; Set gateway
    M586 P0 S1                               ; Enable HTTP
    M586 P1 S0                               ; Disable FTP
    M586 P2 S1                               ; Enable Telnet
    
    M575 P1 B57600 S1					; Comms parameters for PanelDue
    
    G21                                 	; Work in millimetres
    G90                                		; Send absolute coordinates...
    M83                                 	; ...but relative extruder moves
    
    ; Axis and motor configuration
    M669 K1								; CoreXY mode
    
    ; Drives
    M569 P0 S1                                     ; Drive 0 goes forwards (change to S0 to reverse it) X stepper (Rear)
    M569 P1 S0                                     ; Drive 1 goes backwards	Y Stepper (Front)
    M569 P2 S1                                     ; Drive 2 goes forwards Unused
    M569 P3 S1                                     ; Drive 3 goes forwards Extruder 
    M569 P4 S1                                     ; Drive 4 goes forwards Extruder (unused)
    M569 P5 S1			  	                       ; Drive 5 goes backwards	Front Left Z
    M569 P6 S1				                       ; Drive 6 goes backwards	Rear Left Z
    M569 P7 S1				                       ; Drive 7 goes backwards	Right Z
    M584 X0 Y1 Z5:6:7 E3			 		       ; Map Z to drivers 5, 6, 7. Define unused drivers 3,4,8 and 9 as extruders
    M84 S30                                        ; Set idle timeout
    
    ;Leadscrew locations
    ;M671 X-10:-10:333 Y22.5:277.5:150 S7.5  ;Front left, Rear Left, Right  S7.5 is the max correction - measure your own offsets, to the bolt for the yoke of each leadscrew
    M671 X-34:-34:380 Y22.5:274:155 S7.5
    ;_positions:
    #	-10, 22.5	#Left Front = M671 X-34:-34:380 Y22.5:274:155 
    #  -34, 19 #Left Front
    #	34, 274	#Left Rear
    #	380, 155	#Right
    
    
    
    
    ; Axis and motor configuration
    M350 X16 Y16 Z16 E16 I1	                 ; set 16x microstepping for axes& extruder, with interpolation
    
    ;Endstop Configuration
    M574 X1 S1 P"xstop"			             ; _RRF3
    M574 Y1 S1 P"ystop"			             ; _RRF3
    
    ;Speeds
    ;M906 X1400 Y1400 Z1700 E700 I60	         ; Set motor currents (mA)
    M906 X1280 Y1280 Z1220 E700 I50              ; Johns and a bit of mine!
    ;M906 X1280 Y1280 Z1220 E860 I50             ; JOHNs Set motor currents (mA) and motor idle factor in per cent (docs say rounds to 100, but this is where I'd like them to be)
    ;M201 X4000 Y4000 Z100 E1500              ; Accelerations (mm/s^2)
    M201 X1750 Y1750 Z250 E1500              ; Set accelerations (mm/s^2) JohnOFCII
    ;M203 X24000 Y24000 Z900 E3600            ; Maximum speeds (mm/min)
    M203 X24000 Y24000 Z900 E3600                       ; Set maximum speeds (mm/min) JohnOFCII
    ;M566 X1200 Y1200 Z100 E1500              ; Maximum jerk speeds mm/minute
    M566 X600 Y600 Z200 E3600                ; Set maximum instantaneous (jerk) speed changes JohnOFCII
    M92 X200 Y200 
    M92 Z1600 
    M92 E412	             ; steps/mm
    ; 0.4 nozzleE412
    ;E407 TechOut PLA
    ;M204 P2000 T1700
    ;
    
    M208 X-10:310 Y-8:293 Z-0:550                 ; set axis minima and low homing switch positions (adjust to make X=0 and Y=0 the edges of the bed)
    
    ; Thermistors
    ;Bed Configuration
    ;M308 S0 P"bedtemp" Y"thermistor" A"Bed-Top" T100000 B3950 R4700 H0 L0 ;A"Bed-Top"
    M308 S0 P"exp.thermistor6" Y"thermistor" A"Keenovo" T100000 B3950 R4700 H0 L0 
    M950 H0 C"bedheat" T0
    M140 H0
    M143 H0 S120
    M307 H0 A481.6 C758.5 D11.3 V24.2 B0
    
    ;HotEnd Configuration
    M308 S1 P"e0temp" Y"thermistor" A"Mosquito" T500000 B4723 C1.19622e-7 ; configure sensor 1 as thermistor on pin e0temp
    ;
    ;M308 S1 P"e0temp" Y"thermistor" A"E3Dv6" T100000 B4725 R4700 C7.06e-8 H0 L0	;Removed 19th June 2020
    ;
    M950 H1 C"e0heat" T1				;
    M143 H1 S280
    M307 H1 A461.0 C201.3 D3.6 V24.2 B0        ;
    
    
    ; Other Tempreture Inputs
    ;M308 S6 P"exp.thermistor6" Y"thermistor" A"Keenovo" T100000 B3950 R4700
    M308 S7 P"exp.thermistor7" Y"thermistor" A"Chamber" T100000 B3950 R4700
    M308 S0 P"bedtemp" Y"thermistor" A"Bed-Top" T100000 B3950 R4700
    
    ; Fans
    M950 F0 C"fan0"						;Part Cooling Fan
    M106 P0 H-1 				
    ;
    M950 F1 C"fan1" Q500                           ;Hotend Fan
    M106 P1 S1 H1 T50
    ;
    M950 F2 C"fan2"						;_RRF3_ define fan2
    M106 P2 H-1
    ;
    M106 P0 S0 				; turn off fans
    	
    ; Tool definitions
    M563 P0 D0 H1                       	; Define tool 0
    G10 P0 S0 R0                        	; Set tool 0 operating and standby temperatures
    
    ; Z probe and compensation definition
    M558 P9 C"^zprobe.in" H5 R1 F120 T6000 A5 S0.02  ;BLTouch connected to Z probe IN pin
    M950 S0 C"duex.pwm1"				             ;BLTouch Servo (S0) on duet pwm1
    G31 X-7 Y32 Z1.324 P25                            ; Customize your offsets appropriately - do a paper test, and put the probed value in the Z value here
    M557 X30:280 Y45:240 S20
    
    
    
    ;Lighting
    M950 F8 C"duex.fan8"
    M106 P8 S0 H-1 C"Front Lights"
    M950 F7 C"duex.fan7"
    M106 P7 S0 H-1 C"Red RGB"
    M950 F6 C"duex.fan6"
    M106 P6 S0 H-1 C"Blue RGB"
    M950 F5 C"duex.fan5"
    M106 P5 S0 H-1 C"Green RGB"
    
    
    T0					; select first hot end
    
    ;Let get some lights in the Build area!
    M98 P"0:/macros/Lights On"
    
    M702				;Unload Filament
    
    


  • @PaulHew said in Help with 3 independant Z motor leveling:

    bed_ThreeScrews.g

    post that also



  • threescrews.g

    ;three screw est
    G30 P0 X30 Y45 Z-99999 ;was X15
    G30 P1 X30 Y275 Z-99999 ;was X15
    G30 P2 X300 Y150 Z-99999 S3
    


  • the drive connections must match

    Z5:6:7
    must match
    M671 X-34:-34:380 Y22.5:274:155 S7.5

    location.



  • So I have gone back to basics.
    Calculated my probe offset 7mm left of the nozzle, 35mm behind the nozzle.
    Changed G31 to suit.

    G31 X-7 Y35 Z1.324 P25                            ; Customize your offsets appropriately - do a paper test, and put the probed value in the Z value here
    

    My 3screw.g contains

    G30 P0 X10 Y35 Z-99999
    G30 P1 X10 Y275 Z-99999
    G30 P2 X280 Y150 Z-99999 S3
    

    When I probe it probes @ X17 for points 0 and 1

    Have I configured the G31 wrong?

    I use M208 to define my 0,0 so it will print on the bed and not off it.

    Regards,

    Paul.



  • @PaulHew said in Help with 3 independant Z motor leveling:

    When I probe it probes @ X17 for points 0 and 1

    10-7 = 17. sound correct



  • No, 10-7=3



  • when probing at position 10 the nozzle has to be at x=17

    so 17 -7 = 10

    that way



  • @PaulHew said in Help with 3 independant Z motor leveling:

    Please post your homeZ.g file.

    Thanks.

    Frederick



  • Homez.g as requested

    ; New 2/5/2020
    ; homez.g
    ; called to home the Z axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.8 on Sat May 02 2020 07:42:48 GMT+0100 (British Summer Time)
    G91              ; relative positioning
    G1 H2 Z5 F6000   ; lift Z relative to current position
    G90              ; absolute positioning
    G1 X150 Y150 F6000 ; go to first probe point
    G30              ; home Z by probing the bed
    
    ; Uncomment the following lines to lift Z after probing
    G91             ; relative positioning
    G1 Z5 F100      ; lift Z relative to current position
    G90             ; absolute positioning
    
    


  • @PaulHew said in Help with 3 independant Z motor leveling:

    Homez.g as requested

    G1 X150 Y150 F6000 ; go to first probe point

    Thanks.

    It doesn't appear you are taking into account the Z probe X and Y offsets in the G1 above - assuming you are tying to probe the center of the bed.

    Frederick



  • No, I can probe the centre of the bed with no issues.
    I was struggling with what looked like the Z offsets were not being taken into account and have had 2 gantry crashes.
    Also on the lhs it was trying to probe off of the bed, even though I had defined my offsets.

    I use M208 to define where my bed is but it seems like RRF does not take any of this into consideration when bed tramming.

    My main issue is that I cannot print on the right hand side of my bed, hence why I went back to basics to try and alleviate the issue.
    Nozzle is too far from the bed on the RHS.



  • @PaulHew said in Help with 3 independant Z motor leveling:

    I use M208 to define where my bed is but it seems like RRF does not take any of this into consideration when bed tramming.

    My main issue is that I cannot print on the right hand side of my bed, hence why I went back to basics to try and alleviate the issue.
    Nozzle is too far from the bed on the RHS.

    Here is your M208 X-10:310 Y-8:293 Z-0:550. The values for X and Y I gather are based on the locations of the end stop sensors. Correct?

    I use a different approach.

    My M208 specifies just the printable area - in my case M208 X-150:150 Y-150:150 - which puts 0,0 in the middle of the bed - which is where I like it.

    The X end stop sensor triggers very close to -150 but the Y sensor triggers at +160.

    After homing the firmware thinks X is at -150 and Y is at +150 because the axis min or max value is used with the end stop sensor triggers during a G1 H1 move - even though the actual Y position is +160.

    So after homing X and Y I do this:

    G90			; absolute moves
    G1 X0 Y-10 F6000	; move as needed to place nozzle at bed center (adjusting for actual endstop location)
    G92 X0 Y0		; set this position as X = 0 and Y = 0
    

    When probing the bed the limits are ignored since the probe is offset from the nozzle.

    When using G30 P0 Xaaa Ybbb as an example the firmware takes into account the probe offsets and puts the probe at the specified location.

    When setting the Z=0 datum with a "plain" G30 you have to use a G1 move to position the probe taking into account the probe offsets yourself.

    Frederick


  • Moderator

    Using M208 to set 0,0 or G92 in a homing file are both valid ways of doing it. The important thing is that the lead screw positions in M671 are relative to the 0,0 point.

    The points used for probing should get the probe as close to the lead screws as possible.


Log in to reply