Mesh leveling height map seems mirrored
-
Hi all,
so, I have this i3 cartesian printer with a steel frame. It is driven by a Duet WiFi 2, running the latest 3.3 Firmware. As a print bed it has a 5mm thick aluminum sheet, which was not quite cheap as the thickness was supposed to be quite accurate (not sure if "calibrated" or not, I can't remember). I checked the flatness of the sheet with a steel ruler and seems ok.
Now, I have always have problems with the height map of this printer. It has never been easy to get it right. Today I decided to tackle the issue. I checked that both Z-carriages are at the same height and I run a bed mesh leveling at working temperature, which looks as follows:
Then I checked the height on the four corners with a caliper from a random position on the X-carriage only to found that contrary to the picture above, both right hand side corners are relatively lower than those on the left hand side, exactly as if I had a mirror image of the height map above. Just to make sure that I had the orientation right I placed something on the 0,0 position and I run the leveling again. As expected on the height map appeared where I would have expected, on the origin where the 3 arrows coincide.
I am very puzzled about this issue. I have two additional cartesian printers and same electronics and the mesh leveling never showed such an issue. Any idea on how to troubleshoot this would be much appreciated, because I have no idea where to start...
thanks in advance!
-
When you updated to 3.3 did you also update DWC to 3.3?
Can you confirm that your 0,0 origin point is in the front left corner?
Can you confirm that -X moves to the left, +X moves to the right, -Y moves to the front, +Y moves to the back?Please post your full config.g and homing files.
-
@phaedrux I installed the update by uploading the zip file to the board and it did its magic. Aside from that, yes to all your questions. Before I updated to 3.3 it also saw the same behavior on 3.2.2
Here are the files:
config.g
; Configuration file for Duet WiFi (firmware version 3.11) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool on Mon Feb 04 2019 17:03:09 GMT+0100 (Central European Standard Time) ; General preferences G90 ; Send absolute coordinates... M83 ; ...but relative extruder moves ;Panel Due Setup M575 P1 B57600 S1 ; Network M550 P"Steel" ; Set machine name M552 S1 ; Enable network M586 P0 S1 ; Enable HTTP M586 P1 S0 ; Disable FTP M586 P2 S0 ; Disable Telnet ; Mapping M584 X0 Y1 Z2:3 E4:5:6 ; Drives M569 P0 S0 ; Drive 0 goes backwards M569 P1 S0 ; Drive 1 goes backwards M569 P2 S1 ; Drive 2 goes forwards M569 P3 S0 ; Drive 3 goes backwards M350 X16 Y16 Z16 E16 I1 ; Configure microstepping with interpolation M92 X80.00 Y80.00 Z400.00 E428.7 ; Set steps per mm M566 X600.00 Y600.00 Z18.00 E300.00 ; Set maximum instantaneous speed changes (mm/min) M203 X6000.00 Y6000.00 Z1000.00 E3600.00 ; Set maximum speeds (mm/min) M201 X1500.00 Y1500.00 Z100.00 E10000.00 ; Set accelerations (mm/s^2) M906 X650.00 Y800.00 Z800.00 E800.00 I30 ; Set motor currents (mA) and motor idle factor in per cent M84 S30 ; Axis Limits M208 X-20.8 Y-26.0 Z0 S1 ; Set axis minima M208 X220 Y220 Z200 S0 ; Set axis maxima ; Endstops M574 X1 S3 ; Motor Stall X Endstop M574 Y1 S3 ;M574 Y1 S3 ; Motor Stall Y Endstop M915 X Y S30 F0 R0 ; Stall guard config when not homing M574 Z1 S2 ; Set endstops controlled by probe M558 P5 C"zprobe.in" H5 F300 T6000 ; Set Z probe type to switch and the dive height + speeds G31 P500 X-23 Y7 Z1.70 ; Set Z probe trigger value, offset and trigger height ; The larger the number the closest it gets to the bed ; i.e. 1.50 puts the nozzle closer to the bed than 1.20 M557 X15:185 Y20:200 S17:18 ; Define mesh grid ; Bed Heaters/Thermistors M308 S0 P"bedtemp" Y"thermistor" T100000 B4092 C0 R4700 ; Define thermistor M950 H0 C"bedheat" T0 ; Link pin name with heater M307 H0 B0 S1.00 ; Disable bang-bang mode for the bed heater and set PWM limit M140 H0 ; Links everything on the GUI M143 H0 S95 ; Set temperature limit for heater 0 to 95C ; HotEnd Heaters/Thermistors M308 S1 P"e0temp" Y"thermistor" T100000 B4725 C7.06e-8 R4725 ; Define thermistor M950 H1 C"e0heat" T1 ; Link pin name with heater M143 H1 S290 ; Set temperature limit for heater 1 to 290C ; Bed / HotEnd Autotunes M307 H1 R2.212 C274.1 D8.07 S1.00 V24.2 ; Hotend Autotune //Changed M307 H0 R0.729 C235.0 D3.27 S1.00 ; Bed Autotune //Changed. Silicone heated bed. ; Fans M950 F0 C"fan0" Q500 M106 P0 S0 H-1 ; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off M950 F1 C"fan1" Q500 M106 P1 S0.85 H1 T45 ; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on ; Tools M563 P0 D0 H1 ; 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 ; Automatic power saving M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; Set voltage thresholds and actions to run on power loss ; Custom settings are not configured T0
homeall.g
; homeall.g ; called to home all axes G91 ; set relative mode G1 H2 Z5 F1200 ; lift Z G29 S2 ; to clear the height map before Z homing M561 ;reset bed compensation ; homex.g G1 H2 X0.2 ; Move X by 0.2 mm, clear stall status M400 ; make sure everything has stopped before we make changes M913 X70 ; X motor % current M915 X S2 R0 F0 ; set X sensitivity, do nothing when stall, unfiltered ;M574 X1 S3 ; set endstops to use motor stall G1 H1 X-260 F3600 ; move X back, stopping at the end stop M400 ; make sure everything has stopped M913 X100 ; XY motors to 100% current M915 X S30 R0 F0 ; set X sensitivity high, do nothing when stall, unfiltered M400; ; make sure everything has stopped ; homey.g G1 H2 Y0.2 ; Move Y by 0.2 mm, clear stall status M913 Y75 ; Y motor % current M915 Y S3 R0 F0 ; set X sensitivity, do nothing when stall, unfiltered ;M574 Y S3 ; set endstops to use motor stall G1 H1 Y-260 F4800 ; move X back, stopping at the end stop M400 ; make sure everything has stopped M913 Y100 ; XY motors to 100% current M915 Y S30 R0 F0 ; set Y sensitivity high, pause when stall, filtered M400 ; make sure everything has stopped ;homez.g G90 ; absolute positioning G1 X110 Y110 F6000 ; go to first probe point G30 ; home Z by probing the bed
homex.g
; homex.g ; called to home the X axis G91 ; set relative mode G1 H2 X0.2 ; Move X by 0.2 mm, clear stall status G29 S2 ; to clear the height map before Z homing M561 ;reset bed compensation M400 ; make sure everything has stopped before we make changes M913 X70 ; X motor % current M915 X S2 R0 F0 ; set X sensitivity, do nothing when stall, unfiltered G1 H2 Z5 F1200 ; lift Z G1 H1 X-260 F3600 ; move X back, stopping at the end stop M400 ; make sure everything has stopped M913 X100 ; XY motors to 100% current M915 X S30 R0 F0 ; set X sensitivity high, do nothing when stall, unfiltered G1 H2 Z-5 F1200 ; reset Z G90 ; back to absolute mode
homey.g
; homey.g ; called to home the Y axis G91 ; set relative mode G1 H2 Y0.2 ; Move Y by 0.2 mm, clear stall status G29 S2 ; to clear the height map before Z homing M561 ; reset bed compensation M400 ; make sure everything has stopped before we make changes M913 Y75 ; Y motor % current M915 Y S3 R0 F0 ; set X sensitivity, do nothing when stall, unfiltered G1 H2 Z5 F1200 ; lift Z G1 H1 Y-260 F4800 ; move X back, stopping at the end stop M400 ; make sure everything has stopped M913 Y100 ; XY motors to 100% current M915 Y S30 R0 F0 ; set Y sensitivity high, pause when stall, filtered G1 H2 Z-5 F1200 ; reset z G90 ; back to absolute mode
homez.g
; homez.g ; called to home the Z axis ; G91 ; relative positioning G1 H2 Z5 F6000 ; lift Z relative to current position G90 ; absolute positioning G1 X110 Y110 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
-
@phaedrux I rechecked something...
if the hotend is in the middle of the bed, by pressing +Y on the web interface, the bed comes forward so that the location of the hotend is at higher "Y". Just to be clear...
-
@felixh said in Mesh leveling height map seems mirrored:
by pressing +Y on the web interface, the bed comes forward so that the location of the hotend is at higher "Y". Just to be clear
Yes that is correct for a moving bed cartesian. The bed moves, but it's the nozzle position on the bed that we care about.
-
@felixh said in Mesh leveling height map seems mirrored:
I checked that both Z-carriages are at the same height
In relation to what?
I assume you have 2 Z motors connected to the dual Z driver output?
You have two tilting mechanisms that interact, the X gantry and the bed surface. You need to decide which is going to be the reference plane and then adjust the other to match it. On printers with dual z motors on independent drivers with a z probe, you can have the firmware measure the bed and adjust the x gantry to be tram with the bed tilt. (or tilt the bed to match the gantry with a printer that moves the bed in Z instead).
So what is your reference point?
Your config looks fine and the display of the heightmap should be correct based on your description of the coordinate system and there are no known display bugs with the heightmap. So I think it's a mechanical setup issue.
-
@phaedrux in reference to the motor holders, which I guess should be fine... I have two motors connected to the same driver, so once in a while (quite often, actually), I check that both gantries are at the same height, relative to the correspondent holders
-
That's fine. But once you've set them to the height of the motor holder, you'll need to then manually level the bed to match.
If your bed is fixed and can't be adjusted, then set the Z motors positions to match either side of the bed instead so that the nozzle is touching the bed on either side.
Once you have the X gantry tram to the bed, rerun mesh compensation.
-
@phaedrux I get what you're saying, yes. It does makes sense... I'm going to report back!
-
@phaedrux well... I promised I would report back...
Thanks a lot! At the end of the day it was just the simple "level it the old fashioned way before..."
Can't thank you enough, it was bothering me for a while...