Help Sorting Out Minimum Z on a Delta Printer
I'm having issues after upgrading my firmware, getting sane values for minimum Z. If I set minimum Z using M208 to say, 1.2mm (M208 Z1.2 S1), it solves the problem of the head being too close to properly extrude. However, I end up having problems with the slicer (Cura), with layers getting mashed together and making a mess, when Cura tries to create something like a brim with a height of .2. If I take out the M208, the printer will actually try printing at Z = .2, which causes a different problem. I've never had this problem before and am not sure how to fix it, either in firmware/gcode or in Cura settings somehow. Printer is a Rostock Max v4 with Duet 2 Wifi, running RRF 3.3. My apologies if I'm just being a noob.
Can you post your config.g, homeall.g, homez.g, and bed.g if it exists? Can you post a sliced gcode file or at least the first 50 or so lines of it? Can you send M122 and M98 P"config.g" in the Gcode console in DWC and post the results?
That should give us a much better idea of what is happening in your setup.
Your M208 Z minimum should be 0 or very slightly negative to allow more baby stepping range, but if you're having to set it to something positive to print there is a serious problem somewhere. It sounds like you might not be using your probe to set the Z0 position correctly before the print, or not doing an autocalibration and your homed height is not quite right.
When in doubt, go through these again
@phaedrux I'm not sure it's the best solution, but I did find a solution: M290, in the preamble for every print. Seems to have solved all of the issues I was seeing. I can still post the files, if there is still interest. Thanks.
I don't think that's the right solution.
@daveman1010220 can you post your config?
@jay_s_uk have a look:
; Configuration file for Duet WiFi (firmware version 3) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v3.3.0 on Sun Aug 08 2021 15:27:21 GMT-0400 (Eastern Daylight Time) ; General preferences ; M555 P2 ; emulate marlin firmware M575 P1 S1 B57600 ; enable support for PanelDue M550 P"RMAXV4" ; set printer name M111 S0 ; debug off ; Network M552 S1 ; enable network M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet G21 ; work in millimeters G90 ; send absolute coordinates... M83 ; ...but relative extruder moves ; Drives M569 P0 S1 ; physical drive 0 goes forwards M569 P1 S1 ; physical drive 1 goes forwards M569 P2 S1 ; physical drive 2 goes forwards M569 P3 S1 ; physical drive 3 goes forwards M584 X0 Y1 Z2 E3 ; set drive mapping ; Axis Limits ; M208 Z1.1 S1 ; set minimum Z - Trying something... ; Endstops M574 X2 S1 P"xstop" ; configure active-high endstop for high end on X via pin xstop M574 Y2 S1 P"ystop" ; configure active-high endstop for high end on Y via pin ystop M574 Z2 S1 P"zstop" ; configure active-high endstop for high end on Z via pin zstop M665 L340.500:340.500:340.500 R144.000 H350.000 B135.0 X0.000 Y0.000 Z0.000 ; Standard Injection Molded Arms - adjusted L and H values for new carbon fiber arms M666 X0.000 Y0.000 Z0.000 A0.00 B0.00 ; put your endstop adjustments here, or let auto calibration find them ; motion control parameters M350 X16 Y16 Z16 E16 I1 ; Set 16x micro-stepping w/ Interpolation M92 X200 Y200 Z200 ; Set axis steps/mm M92 E182.0 ; Set extruder steps/mm M906 X1300 Y1300 Z1300 E1200 I50 ; Set motor currents (mA) and idle current % M201 X1200 Y1200 Z1200 E5000 ; Accelerations (mm/s^2) M203 X12000 Y12000 Z12000 E15000 ; Maximum speeds (mm/min) M566 X500 Y500 Z500 E2000 ; Maximum instant speed changes mm/minute M84 S30 ; Set idle timeout ; Z-Probe ; M558 P1 C"zprobe.in" H5 F120 T6000 ; set Z probe type to unmodulated and the dive height + speeds M558 P5 C"zprobe.in+zprobe.mod" I0 A5 S0.05 R0.4 H20 F1500 G31 P100 X0 Y0 Z-0.01 ; Probe trigger and offset values Glass Plate Only M557 R85 S20 ; define mesh grid ; Heaters M308 S0 P"bedtemp" Y"thermistor" T100000 B4388 R4700 H30 L0 A"Bed Thermistor" M950 H0 C"bedheat" T0 ; create bed heater output on bedheat and map it to sensor 0 M140 H0 ; map heated bed to heater 0 M143 H0 S120 ; set temperature limit for heater 0 to 120C M308 S1 P"e0temp" Y"thermistor" T100000 B4388 R4700 C7.06e-8 H30 L0 A"Hotend Thermistor" 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 ; Fans M950 F0 C"fan0" ; create fan 0 on pin fan0 and set its frequency M106 P0 S1 H-1 ; set fan 0 value. Thermostatic control is turned off M950 F1 C"fan1" ; I think this fan might actually be set to "always on" as a pin. M106 P1 S0.5 H-1 M950 F2 C"fan2" ; create fan 1 on pin fan2 and set its frequency M106 P2 T50 S0.7 H1 ; set fan 1 value. Thermostatic control is turned on ; Tools M563 P0 S"HE-300" 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 ; Custom settings are not defined ; Miscellaneous M557 R135 S30 ; default bed mapping M501 ; load saved parameters from non-volatile memory T0 ; select first tool M375 ; load height map
M203 Z15000 G91 ; use relative positioning G1 H1 X750 Y750 Z750 F5000 ; move all carriages up, stopping at the endstops G1 H2 X-5 Y-5 Z-5 F500 ; move all towers down 5mm G1 H1 X8 Y8 Z8 F500 ; move towers slowly up 8mm, stopping at the endstops G1 H2 X-5 Y-5 Z-5 F500 ; move carriages down 5mm G90 ; back to absolute positioning
M561 ; clear any bed transform G28 ; home all towers ; Probe the bed at 3 peripheral and 3 halfway points, and perform 6-factor auto compensation ; Before running this, you should have set up your Z-probe trigger height to suit your build, in the G31 command in config.g. G30 P0 X0 Y84.9 H0 Z-99999 G30 P1 X73.53 Y-42.45 H0 Z-99999 G30 P2 X-73.53 Y-42.45 H0 Z-99999 G30 P3 X0 Y42.4 H0 Z-99999 G30 P4 X36.72 Y-21.2 H0 Z-99999 G30 P5 X-36.72 Y-21.2 H0 Z-99999 G30 P6 X0 Y0 H0 Z-99999 S6
A sample of my generated print:
;FLAVOR:Marlin ;TIME:19847 ;Filament used: 1.02411m ;Layer height: 0.15 ;MINX:-20.134 ;MINY:-26.388 ;MINZ:0.2 ;MAXX:20.097 ;MAXY:28.034 ;MAXZ:16.05 ;Generated with Cura_SteamEngine 4.10.0 M140 S60 M105 M190 S60 M104 S190 M105 M109 S190 M82 ;absolute extrusion mode G28 G1 Z15.0 F6000 G92 E0 G1 F200 E3 G92 E0 M290 R1 S.9 G92 E0 G92 E0 G1 F2700 E-3.2 ;LAYER_COUNT:100 ;LAYER:0 M107 G1 F600 Z1.2 G0 F3600 X-3.676 Y-6.757 Z1.2 ;TYPE:SKIRT G1 F600 Z0.2 G1 F2700 E0 G1 F600 X-4.4 Y-6.421 E0.00332 G1 X-5.154 Y-6.159 E0.00664 G1 X-5.931 Y-5.973 E0.00996 G1 X-6.722 Y-5.866 E0.01328 G1 X-7.393 Y-5.838 E0.01607 G1 X-11.863 Y-5.838 E0.03465 G1 X-12.66 Y-5.878 E0.03797 G1 X-13.45 Y-5.997 E0.04129 G1 X-14.224 Y-6.195 E0.04461 G1 X-14.974 Y-6.47 E0.04794 G1 X-15.692 Y-6.817 E0.05125 G1 X-16.373 Y-7.235 E0.05457 G1 X-17.008 Y-7.719 E0.05789 G1 X-17.517 Y-8.189 E0.06077 G1 X-18.053 Y-8.781 E0.06409
I'm running a print right now and can post the M122 and M98 when it's done. Thanks!
; Axis Limits ; M208 Z1.1 S1 ; set minimum Z - Trying something...
It's commented out, is that intentional? Having the minimum Z position reachable be 1.1 doesn't make a lot of sense. Make it 0 or -0.5.
M375 ; load height map
Don't load the heightmap in config.g. You don't want to apply any correction until you've established the Z0 position with a G30 otherwise you can get weird unexplained offsets. Sound familiar?
When are you calling G32 to run bed.g? In your slicer start gcode you have it home all towers and start the print. This will reset your Z0 position to whatever the homed height is set to. I suggest you run G32 before each print instead of just G28.
If you want to apply a mesh compensation to the bed surface you'll need to recreate the mesh after doing a G32 and then either probe the mesh each time before the print, or load the previously saved mesh with G29 S1.
@phaedrux The M208 is commented out because I couldn't get the right behavior with it. I tried making it negative as well, which just showed the problems with the print gcode, trying to print at Z=.2, which doesn't really work. Didn't know that about the height map, it was in the original code that came with the printer. I'll take it out. In general, I'm not in any hurry when I print, so I usually do run calibrations before every major print, if only by running macros. Putting it directly into the slicer is a great idea. Incidentally, here is the macro I usually run to create a mesh of the bed:
G28 M117 Bed Mapping RostockMAX v4 M558 P5 I0 A1 S0.05 R0.4 H20 F2500 M104 S0 M140 S0 M106 P0 S0 G29 M500 G4 S1 M106 P2 T50 S0.5 H1 G28 M117 NOTE Any Auto-Probe (G32) done after bed mapping will disable previous bed mapping!
That macro is ok, but it's still homing the towers and then going right into creating the mesh. You should be doing a G32 calibration before hand.
Every time it homes the towers, the true Z position is lost and you're just going to be using the homed height which isn't always accurate. Doing an autocalibration and doing a G30 at the center of the bed is the best (only) way to be certain the firmware knows where the bed surface truly is.
nothing untoward with your config that I can see.
your slicer needs changing from marlin flavour to reprap though.
I would suggest starting from here https://duet3d.dozuki.com/Wiki/Calibrating_a_delta_printer#Section_Running_auto_calibration_for_the_first_time in the delta calibration page.
That should help you establish Z0 correctly.
Could you also post your config-override?
@jay_s_uk Yeah, I need to change something. Getting weird effects with my prints that I've never had in the past. The calibrations continue.
Here is config-override.g:
M665 L340.500:340.500:340.500 R142.241 H346.794 B135.0 X0.301 Y0.430 Z0.000 M666 X0.128 Y-0.020 Z-0.107 A0.00 B0.00 ; Heater model parameters M307 H0 R0.129 C700.000:700.000 D10.00 S1.00 V0.0 B1 I0 M307 H1 R2.429 C140.000:140.000 D5.50 S1.00 V0.0 B0 I0 ; Workplace coordinates G10 L2 P1 X0.00 Y0.00 Z0.00 G10 L2 P2 X0.00 Y0.00 Z0.00 G10 L2 P3 X0.00 Y0.00 Z0.00 G10 L2 P4 X0.00 Y0.00 Z0.00 G10 L2 P5 X0.00 Y0.00 Z0.00 G10 L2 P6 X0.00 Y0.00 Z0.00 G10 L2 P7 X0.00 Y0.00 Z0.00 G10 L2 P8 X0.00 Y0.00 Z0.00 G10 L2 P9 X0.00 Y0.00 Z0.00
After doing an auto calibration are you saving the results with M500?
@phaedrux I actually went through the delta calibration guide and copied the M665 and M666 params directly. Is M500 something that should be run after an auto calibration?
@daveman1010220 what type of Z probe are you using? You have the trigger height set to -0.01 which seems to me to be an unusual value. If it's a nozzle contact probe, then the trigger height is almost certainly more negative than that.