Help: mesh compensation ist not correcting right



  • Hi,
    I still have a problem with mesh compensation: from the left side to about 2/3rd (in x-direction) of the print is ok, but then the nozzle is getting more and more closer to the bed so the extrusion is squished... (see pictures and a short .mov below). First I'll post the machine details and what I've allready figured out with help from a FB-Group. After two weeks of struggeling with it, they advised me to ask here for.

    Machine:
    It is a Prusa-like machine, running with Duet 2 wifi (1.04) and RRF3.01RC2. I've configured independent z-motors (see config.g and bed.g). For probing I use an original BLTouch V3.1.

    I've got a good leveled bed, the offset of z-probe is measured serveral times. Here is the first question. When I home all axis and hit G32, then the home-z will change, do I have to re-home z then again (I tried out both - with and without - all with the same poor results).

    config.g:

    G90                                                       ; send absolute coordinates...
    M83                                                       ; ...but relative extruder moves
    M550 P"Mjolnir"                                           ; set printer name
    
    ; Network
    M552 S1                                                   ; enable network
    M586 P0 S1                                                ; enable HTTP
    M586 P1 S1                                                ; enable FTP
    M586 P2 S0                                                ; disable Telnet
    
    ; Drives
    M569 P0 S0                                      		  ; physical drive 0 goes backwards - x-axis
    M569 P1 S0                                       		  ; physical drive 1 goes backwards - y-axis
    M569 P2 S0                                       		  ; physical drive 2 goes backwards - z - left
    M569 P3 S1                                       		  ; physical drive 3 goes forwards  - Extruder
    M569 P4 S0												  ; physical drive 4 goes backwards - z - right
    M584 X0 Y4 Z2:4 E3                                		  ; set drive mapping
    M671 X-36.5:293.5 Y0:0 S1.0 		   	   		 		  ; leadscrews at left (connected to Z) and right (connected to E1) of X axis
    M350 X16 Y16 Z16 E16 I1                                   ; configure microstepping with interpolation
    M92 X100.00 Y100.00 Z400.00 E415.00                       ; set steps per mm
    M566 X420.00 Y420.00 Z20.00 E300.00                       ; set maximum instantaneous speed changes (mm/min)
    M203 X10000.00 Y10000.00 Z360.00 E1800.00                 ; set maximum speeds (mm/min)
    M201 X1000.00 Y1000.00 Z200.00 E2000.00                   ; set accelerations (mm/s^2)
    M906 X800 Y850 Z850 E800 I30                              ; set motor currents (mA) and motor idle factor in per cent
    M84 S30                                                   ; Set idle timeout
    
    ; Axis Limits
    M208 X-1 Y-7.5 Z0 S1                                      ; set axis minima
    M208 X254 Y212 Z310 S0                                    ; set axis maxima
    
    ; Endstops
    M574 X1 S3                                                ; configure sensorless endstop for low end on X
    M574 Y2 S3                                                ; configure sensorless endstop for high end on Y
    M574 Z1 S2                                                ; configure Z-probe endstop for low end on Z
    M591 P2 C"e1_stop" S1									  ; configure extruder endtstop (filament sensor)
    
    ; Stallgaurd Sensitivy
    M915 X S2 F0 H200 R0		        	 				  ; Set X axis Sensitivity
    M915 Y S1 F0 H200 R0		          	 				  ; Set y axis Sensitivity
    
    ; Z-Probe
    M950 S3 C"exp.heater3"                                    ; create servo pin 0 for BLTouch
    M558 P9 C"^zprobe.in" H5 R0.75 S0.003 F60 T3000 A20 B1    ; set Z probe type to bltouch and the dive height + speeds
    G31 P500 X-23.5 Y-36 Z2.432                               ; set Z probe trigger value, offset and trigger height
    M557 X0:230 Y0:175 P20:20                                 ; define mesh grid
    
    ; Heaters
    M308 S0 P"bedtemp" Y"thermistor" T100000 B4138 A"Bed"     ; configure sensor 0 as thermistor on pin bedtemp
    M950 H0 C"bedheat" T0                                     ; create bed heater output on bedheat and map it to sensor 0
    M143 H0 S110                                              ; set temperature limit for heater 0 to 110C
    M307 H0 B0 S1.00                                          ; disable bang-bang mode for the bed heater and set PWM limit
    M140 H0                                                   ; map heated bed to heater 0
    M308 S1 P"e0temp" Y"thermistor" T500000 B4681 C1.143895e-7 A"Nozzle" ; configure sensor 1 as thermistor on pin e0temp
    M950 H1 C"e0heat" T1                                      ; create nozzle heater output on e0heat and map it to sensor 1
    M143 H1 S280                                              ; set temperature limit for heater 1 to 280C
    M307 H1 B0 S1.00                                          ; disable bang-bang mode for heater  and set PWM limit
    M308 S4 P"mcu-temp" Y"mcu-temp" A"MCU"					  ; set virtual heater for MCU
    M308 S5 P"drivers" Y"drivers" A"Driver"				      ; set virtual heater for stepper drivers
    
    ; Fans
    M950 F1 C"fan1" Q500                                      ; create fan 1 on pin fan0 and set its frequency
    M106 P1 S1 H1 T45                                         ; set fan 1 value. Thermostatic control is turned on
    M950 F0 C"fan0" Q500                                      ; create fan 0 on pin fan1 and set its frequency
    M106 P0 S0 H-1                                            ; set fan 0 value. Thermostatic control is turned off
    
    ; Tools
    M563 P0 D0 H1 F0                                          ; define tool 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
    M302 S190 R190
    
    ; Custom settings are not defined
    M501 
    

    bed.g:

    M561 									; Clear any bed transform
    G29 S2									; Clear bed height map
    G28                                     ; Home-all
    G30 P0 X5 Y105 Z-99999					; probe near a leadscrew, half way along Y axis
    G30 P1 X230 Y105 Z-99999 S2 			; probe near a leadscrew and calibrate 2 motors
    G90 									; Absolute Positioning
    G1 X125 Y105 Z25 F5000.0 			    ; go to the middle of the bed
    

    I also checked the z-motors and even changed them today - but the problem still exists. I checked all mechanical components again and again... The only thing: could it be, that the magnets under the bed could cause this? But if so - why only on the right side and not of the left side? (I also put the PSU away to exclude inferences caused by...).

    The start-sequence is in short:

    • Power up
    • Heating bed
    • G32 (with homing)
    • G29 S1 (load meshmap)
    • go to x=0, y=0 z=0.2 pos.
    • heat nozzle
    • purge a bit filament
    • make a little introline for cleaning
    • start the print

    IMG_1213.jpg
    Left-Side:
    IMG_1411.JPG

    Right-Side:
    IMG_1406.JPG

    Mesh-map:
    Mesch_2.JPG



  • Can't see anything wrong with your settings, but it looks like you have a slight twist along the diagonal.

    notice how XY min is high and XY max is low. turn down XY min very slightly and XY max up the same to take out the twist.

    Then redo the heatmap and make sure it's applied in your start up gcode in your slicer,

    Hope that helps

    you can reorient the map display to see it better.



  • @stewwy
    Thank you - where can you see the twist? The Sheet is a magnetic sheet - it wasn't maybe hit exactly to the end. And could this encounter such an effect? The right side is about 0.03 - 0.04 too deep overall...


  • Moderator

    @tom_Nbg said in Help: mesh compensation ist not correcting right:

    When I home all axis and hit G32, then the home-z will change, do I have to re-home z then again

    You haven't posted your homeall, so I don't know exactly what G28 is doing for you, but typically, you'd want to do a single G30 at the center of the bed after correcting for the tilt, since changing the tilt will slightly change the Z position.

    Does running G32 (bed.g) correct for the tilt completely after a single run? Or do you have to run it multiple times to get a good leveling?

    After the tilt is corrected completely, the G29 heightmap should be regenerated at least once. It can be reloaded afterwards provided the tilt can be corrected reliably.

    It's also possible that you have tilt on the Y axis. Correcting tilt on the X axis obviously won't solve that. But a G29 heightmap should.



  • @Phaedrux

    my homes are:

    ; homex.g
    ; called to home the X axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.8 on Mon Jan 20 2020 21:22:54 GMT+0100 (Mitteleuropäische Normalzeit)
    G91                ; relative positioning
    G1 H1 Z5 F180
    G1 H1 X5 F1000     ; move slowly away 
    M913 X30           ; lower motor current to 30% for senserless homing
    G1 H1 X-260 F2000  ; move quickly to X axis endstop and stop there (first pass)
    G1 X10 F1000        ; go slowly back a few mm
    G1 H1 X-260 F2000  ; move to X axis endstop once more (second pass)
    M913 X100          ; Rise motor current to 100% again after sensorless homing
    G90                ; absolute positioning
    G1 X15 F1000	   ; go to X=15
    
    ; homey.g
    ; called to home the Y axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.8 on Mon Jan 20 2020 21:22:54 GMT+0100 (Mitteleuropäische Normalzeit)
    G91                ; relative positioning
    G1 H1 Y-5 F1000     ; move slowly away 
    M913 Y30           ; lower motor current to 30% for senserless homing
    G1 H1 Y230 F2000  ; move quickly to Y axis endstop and stop there (first pass)
    G1 Y-10 F1000        ; go back a few mm
    G1 H1 Y230 F2000  ; move slowly to Y axis endstop once more (second pass)
    M913 Y100          ; Rise motor current to 100% again after sensorless homing
    G1 Y-10 F1000        ; go back a few mm
    G90                ; absolute positioning
    ;G1 Y10 F1000	   ; go to Y=10
    
    ; homez.g
    ; called to home the Z axis
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.8 on Mon Jan 20 2020 21:22:54 GMT+0100 (Mitteleuropäische Normalzeit)
    G90                   ; absolute positioning
    G1 X151 Y141 F3600    ; Move probe to middle of bed - first probing point, regarding Z-probe offsets
    G30                   ; home Z by probing the bed
    
    ; homeall.g
    ; called to home all axes
    ;
    M98 P"homex.g"           ; Call "homex.g"
    M98 P"homey.g"           ; Call "homey.g"
    M98 P"homez.g"           ; Call "homez.g"
    


  • @Phaedrux said in Help: mesh compensation ist not correcting right:
    ...

    It's also possible that you have tilt on the Y axis. Correcting tilt on the X axis obviously won't solve that. But a G29 heightmap should.

    Yes - this was my thought to use the heightmap... 😞
    I'm struggeling with this since 2 weeks around... and it is allways the right side, where the nozzle is too close and on the left, where it seems to be bit too far - as if would the meshmap left/right is mixed up...


  • Moderator

    @tom_Nbg said in Help: mesh compensation ist not correcting right:

    M574 Y2 S3 ; y max endstop

    Does this mean that when you're homing Y you move the bed towards the front of the machine?



  • @Phaedrux
    yes - because of my new carriage I need to home in front
    (but my issue was also in the old config with the old carriage - where I homed in the opposite direction)


  • Moderator

    Ok, just confirming that Y+ is moving the bed to the front (and therefore the nozzle to the front back edge)

    Just want to make sure you're still using a right hand coordinate system with 0,0 having the nozzle at the front left corner of the bed.



  • @Phaedrux
    ah - yes - 0,0 is left front...
    I give up for today 🙂
    my head is exploding... need a bit american horror story now 😉



  • @Phaedrux
    Hi,
    how do I configure or define what "bed type" I have? I mean:

    • if I have a "fixed x-gantry" and a "movable" bed (case 1) or
    • a "fixed bed" and a movable "x-gantry" (case 2). To illustrate see my both pictures below:

    The corrections to be made are allways in the opposite direction when running G32 if I have Case 1 or Case 2. And for mesh compensation the same. And it would explain, why on the right side, which is higher (the nozzle have to move up), it is getting close (because the correction is made in the opposite direction) and why it is on the left side in the opposite - and why the middle is mostly ok because it is more or less the pivot point?

    Could this be the problem or am I on a totally wrong way and didn't see anything else?

    IMG_1428.jpg
    IMG_1429.jpg
    IMG_1430.jpg



  • @tom_Nbg Could be, not familiar with magnetic beds, you should see any twist clearly when you look at the bed map side on, alternatively look at heatmap.csv in a spreadsheet to see the actual numbers, I believe it should be first point and last point in the file for xy0,0 and xy max or x min y max depending on where your probe does it's last probe.
    edit, answer to your 2nd post not the last post



  • @stewwy
    Yes: the measured right side in the heightmap.csv is "deeper" then the left side, but I see, that it is higher - so the values are mixed up... How to tell the printer that?



  • @tom_Nbg
    You have a Cartesian printer
    G32 is bed leveling using the 2 Z motors to level along the x axis. This does not as far as I know happen during printing it merely attempts to correct for errors before you start printing.

    G29 is mesh leveling this is a correction that occurs during printing to correct for hollows and bumps in your bed, although it can correct for an incorrectly leveled bed.



  • @tom_Nbg You can correct for it if you have bed leveling screws, otherwise use (G29)mesh leveling as it looks like you are pretty close anyway


  • Moderator

    @tom_Nbg There's no way of defining bed 'type', and it doesn't matter. So long as you have 'positive' Z moves that move the nozzle away from the bed (eg X gantry on Z moves up) or the bed away from the nozzle (CoreXY with bed moving down), and 'negative' Z moves move the nozzle towards the bed (either nozzle down or bed up), it's effectively the same to the machine coordinates and to the firmware.

    Ian



  • @stewwy
    I run G32 before I start a print. So if the meassured distance on the right side is different to the left one - then the motors are getting corrected independent - and if then I have my case 1 or case 2 as drawn, the corrections are made are wrong. Example: the right side is too high, the right screw has to rise up but the fw "thinks" the bed has to lower down, then the gantry get lowered down and the effect is, that the nozzle is even closer than it should.... and this is it what I have.... So the measured values just need to be inverted or something like this...?


  • Moderator

    @tom_Nbg If that's the case, you probably need to swap the motor wiring of the Z motors. Your M584 command will state two Z drives, eg M584 Z2:4, where Z2 is the 'Z' driver pins, and Z4 is the 'E1' driver pins. Your M671 command defines your leadscrew positions, but importantly, in the order you defined Z motors in M584. So M671 X-20:220 Y100:100 S0.5 defines the Z2 motor/leadscrew at X-20 Y100 and Z4 motor/leadscrew at X220 Y100. If you connect these the wrong way around, after probing, it will move the bed the wrong way, making the levelling worse. Check that the Z motors are each connected to the correct driver.

    See https://duet3d.dozuki.com/Wiki/Bed_levelling_using_multiple_independent_Z_motors

    If that isn't clear, post your config.g (which you should have done at the beginning) and perhaps a picture of your printer and/or wiring.

    Edit: overlooked config in first post!

    Ian


  • Moderator

    @droftarts said in Help: mesh compensation ist not correcting right:

    your config.g (which you should have done at the beginning)

    It's in the first post... 😉


  • Moderator

    @tom_Nbg said in Help: mesh compensation ist not correcting right:

    M584 X0 Y4 Z2:4 E3

    I think I see a problem. You have Y mapped to drive 4 as well as Z. You're missing a mapping for drive 1.


Log in to reply