first layer height



  • Hello,

    I feel like my first layer is being smashed as it is wider that subsequent layers. I'm running version 3 of the firmware. I have the homeall file set to tell the firmware it is at z=.1. My general printing layer height is .2mm. Here is the code. Do I have it setup correctly?

    G91 ; relative positioning
    G1 H2 Z5 F12000 ; lift Z relative to current position
    G1 H1 X-205 Y-205 F1800 ; move quickly to X and Y axis endstops and stop there (first pass)
    G1 H2 X5 Y5 F12000 ; go back a few mm
    G1 H1 X-205 Y-205 F600 ; move slowly to X and Y axis endstops once more (second pass)
    G1 H1 Z-305 F600 ; move Z down stopping at the endstop
    G1 Z3 F600 ; go back a few mm
    G1 H1 Z-305 F120 ; move slowly to Z axis endstop once more (second pass)
    G90 ; absolute positioning
    G92 Z.1 ; set Z position to axis minimum (you may want to adjust this)
    G91 ; relative positioning
    G1 Z-305 F120 ; move slowly to Z axis endstop once more (second pass)
    G90 ; absolute positioning
    G1 X0 Y0 F6000 ; go to first bed probe point


  • Moderator

    @mlaustin6 said in first layer height:

    G92 Z.1

    Are you sure that you are 0.1mm away from the bed when homed?

    What is your first layer height?

    Is the bed leveled?

    Have you considered getting a Z probe?



  • I am sure. I have a Prusa i3 steel, and I leveled the bed with one of those .1mm flat steel tools. My first layer height is .2mm. It makes no sense for a z probe for me as the machine is older, and it never really needs leveling once set.


  • Moderator

    Just as a wild test, try changing G92 Z.1 to G92 Z0.1.


  • administrators

    You set the Z coordinate before the second homing move. Put your G92 Z.1 code at the end of the file. Also, you may want to remove the last G1 X0 Y0 code or at least put a G1 Z3 before it.


  • Moderator

    @chrishamm said in first layer height:

    You set the Z coordinate before the second homing move. Put your G92 Z.1 code at the end of the file.

    That last long z move doesn't have a H1 so it's not homing anything.


  • administrators

    @Phaedrux said in first layer height:

    @chrishamm said in first layer height:

    You set the Z coordinate before the second homing move. Put your G92 Z.1 code at the end of the file.

    That last long z move doesn't have a H1 so it's not homing anything.

    Ah yes, I only read the "second pass" comment. But it explains why the nozzle goes to Z=0 provided it is the minimum as defined in config.g.



  • @chrishamm said in first layer height:

    You set the Z coordinate before the second homing move. Put your G92 Z.1 code at the end of the file. Also, you may want to remove the last G1 X0 Y0 code or at least put a G1 Z3 before it.

    I put G92 Z0.1 at the end. I added the zero. Why remove G1 X0 Y0? I want homing to go there. What does G1 Z3 do? Would that be so it doesn't crash into the board?



  • @Phaedrux said in first layer height:

    @chrishamm said in first layer height:

    You set the Z coordinate before the second homing move. Put your G92 Z.1 code at the end of the file.

    That last long z move doesn't have a H1 so it's not homing anything.

    I added that. Strange the RRF 3.0 generator did not include that while the older generator did.


  • administrators

    I just tried to generate the homeall.g with three switches and it appears to generate the H1 parameter for my setup. How does this homeall.g work for you?

    G91 ; relative positioning
    G1 H2 Z5 F12000 ; lift Z relative to current position
    G1 H1 X-205 Y-205 F1800 ; move quickly to X and Y axis endstops and stop there (first pass)
    G1 H2 X5 Y5 F12000 ; go back a few mm
    G1 H1 X-205 Y-205 F600 ; move slowly to X and Y axis endstops once more (second pass)
    G90 ; absolute positioning
    G1 X0 Y0 F6000 ; go to first bed probe point
    G91 ; relative positioning
    G1 H1 Z-305 F600 ; move Z down stopping at the endstop
    G1 Z3 F600 ; go back a few mm
    G1 H1 Z-305 F120 ; move slowly to Z axis endstop once more (second pass)
    G90 ; absolute positioning
    G92 Z0.1 ; set Z position to axis minimum
    G1 Z3 F12000 ; lift the head again
    

    This will home X+Y first, then go to X=0 Y=0, and then home Z.



  • I think Z0.1 did the trick rather than Z.1. Thank you.



  • HI All,

    I feel like I am still having an issue with this. My first layer is clearly being smashed down. I have a G92 Z0.1 set, and Slic3r has a .2mm layer height on all layers. it's as if the first layer is dishing out filament for .2mm layer but in reality it seems the first layer is at .1mm. It's flatter than all the other layers. What could I be doing wrong?


  • Moderator

    Can you repost your current homing files and config file?
    How is your Z axis setup?
    What do you have configured in your slicer for the first layer?
    Is the bed level?
    Is the extruder calibrated?
    Are you using mesh compensation?



  • Sure. See below for those details. It's a Prusa P3 Steel, so the Z axis has 2 motors. It is level to the Y axis. The bed is leveled using a .1mm metal feeler gauge. It's a 3mm aluminum bed with Printbite on top. I have a 3 point leveling setup, and it is fairly level, not perfect like cast aluminum plate. The first layer as all layers are .2mm. I don't have any extra extrusion parameters. The extruder is calibrated, so I get 100mm when extruding 100mm. I am not using mesh compensation setup.

    Home all
    G91 ; relative positioning
    G1 H2 Z5 F12000 ; lift Z relative to current position
    G1 H1 X-205 Y-205 F1800 ; move quickly to X and Y axis endstops and stop there (first pass)
    G1 H2 X5 Y5 F12000 ; go back a few mm
    G1 H1 X-205 Y-205 F600 ; move slowly to X and Y axis endstops once more (second pass)
    G90 ; absolute positioning
    G1 X0 Y0 F6000 ; go to first bed probe point
    G91 ; relative positioning
    G1 H1 Z-305 F600 ; move Z down stopping at the endstop
    G1 H2 Z3 F600 ; go back a few mm
    G1 H1 Z-305 F120 ; move slowly to Z axis endstop once more (second pass)
    G90 ; absolute positioning
    G92 Z0.1 ; set Z position to axis minimum

    Home X
    G91 ; relative positioning
    ;G1 H2 Z5 F12000 ; lift Z relative to current position
    G1 H1 X-205 F1800 ; move quickly to X axis endstop and stop there (first pass)
    G1 H2 X5 F2400 ; go back a few mm
    G1 H1 X-205 F600 ; move slowly to X axis endstop once more (second pass)
    G90 ; absolute positioning

    Home Y
    G91 ; relative positioning
    G1 H2 Z5 F12000 ; lift Z relative to current position
    G1 H1 Y-205 F1800 ; move quickly to Y axis endstop and stop there (first pass)
    G1 H2 Y5 F12000 ; go back a few mm
    G1 H1 Y-205 F600 ; move slowly to Y axis endstop once more (second pass)
    G1 H2 Z-5 F12000 ; lower Z again
    G90 ; absolute positioning

    Home Z
    G91 ; relative positioning
    G1 H1 Z-305 F600 ; move Z down stopping at the endstop
    G1 H2 Z3 F600 ; go back a few mm
    G1 H1 Z-305 F120 ; move slowly to Z axis endstop once more (second pass)
    G90 ; absolute positioning
    G92 Z0.1 ; set Z position to axis minimum

    Config.g
    ; General preferences
    G90 ; send absolute coordinates...
    M83 ; ...but relative extruder moves
    M550 P"P3 Steel" ; set printer name

    ; Network
    M552 S1 ; enable network
    M586 P0 S1 ; enable HTTP
    M586 P1 S0 ; disable FTP
    M586 P2 S1 ; enable Telnet

    ; Drives
    M569 P0 S1 ; physical drive 0 goes forwards
    M569 P1 S1 ; physical drive 1 goes forwards
    M569 P2 S0 ; physical drive 2 goes backwards
    M569 P3 S1 ; physical drive 3 goes forwards
    M584 X0 Y1 Z2 E3 ; set drive mapping
    M350 X128 Y128 Z128 E128 I0 ; configure microstepping without interpolation
    M92 X640.00 Y640.00 Z3200.00 E2335.5 ; set steps per mm
    M566 X900.00 Y900.00 Z12.00 E1500.00 ; set maximum instantaneous speed changes (mm/min)
    M203 X12000.00 Y12000.00 Z180.00 E12000.00 ; set maximum speeds (mm/min)
    M201 X1400.00 Y1400.00 Z50.00 E9000.00 ; set accelerations (mm/s^2)
    M906 X1200 Y1200 Z1000 E1400 I30 ; set motor currents (mA) and motor idle factor in per cent
    M84 S30 ; Set idle timeout

    ; Axis Limits
    M208 X0 Y-13 Z0 S1 ; set axis minima
    M208 X200 Y195 Z300 S0 ; set axis maxima

    ; Endstops
    M574 X1 S1 P"!xstop" ; configure active-high endstop for low end on X via pin xstop
    M574 Y1 S1 P"!ystop" ; configure active-high endstop for low end on Y via pin ystop
    M574 Z1 S1 P"!zstop" ; configure active-high endstop for low end on Z via pin zstop

    ; Z-Probe
    M558 P0 H2 F120 T6000 ; disable Z probe but set dive height, probe speed and travel speed
    M557 X0:200 Y0:200 S1 ; define mesh grid

    ; Heaters
    M308 S0 P"bedtemp" Y"thermistor" T100000 B4066 C9.264103e-8 ; 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 S120 ; set temperature limit for heater 0 to 120C
    M307 H0 A62.4 C118.9 D3.0 B0 S1.00 ; disable bang-bang mode for the nozzle heater and set PWM limit
    M308 S1 P"e0temp" Y"thermistor" T100000 B4725 C7.06e-8 ; 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 S300 ; set temperature limit for heater 1 to 300C
    M307 H1 A387.2 C120.9 D3.1 B0 S1.00 ; disable bang-bang mode for the nozzle heater and set PWM limit

    ; Fans
    M950 F0 C"fan0" Q500 ; create fan 0 on pin fan0 and set its frequency
    M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off
    M950 F1 C"fan1" Q500 ; create fan 1 on pin fan1 and set its frequency
    M106 P1 S1 H-1 ; set fan 1 value. Thermostatic control is turned off
    M950 F2 C"fan2" Q500
    M106 P2 S1 H1 T100

    ; 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

    ; Custom settings are not defined
    M207 S3 R-0.1 F6000 T6000 Z0.1 ; Firmware retraction F is retract mm/m and T is detract mm/m
    M572 D0 S0.8 ; pressure advance

    ; Miscellaneous
    M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss


  • Moderator

    Have you tried baby stepping the first layer until it looks right and then adding that babystep value to the G92 Z in your homeall?

    No probe? I'd be curious to see a heightmap of the bed surface.

    Unrelated, but using higher than x16 microstepping isn't recommended.



  • I do not have a probe. I should probably comment out the probe section. It was put there using the reprap configurator. I have not done baby stepping. How and why would I do that? I have the z end stop setup to where it is on at .1mm, and stepping it .05mm in DWC until it reaches .2mm turns off the red light. I thought that may have been an issue where .2mm was still triggering the end stop.

    So should I change it to x16 micro stepping? Why is it not recommended?



  • Nice, a few more P3Steels around! I'm building up quite a list of mods for these!

    With no z-probe how are you keeping your two z-axis screws aligned? Are they seperately driven? Do you drive to the end of the axis and stall?



  • @DocTrucker said in first layer height:

    Nice, a few more P3Steels around! I'm building up quite a list of mods for these!

    With no z-probe how are you keeping your two z-axis screws aligned? Are they seperately driven? Do you drive to the end of the axis and stall?

    My error. I sent that without thinking. The only probe I have is the z end stop. I was thinking bed leveling probe when I responded. .

    Yeah it’s a great machine. I was thinking of building a core xy, but this has worked out well for me for what I do at the moment. Yeah I’ve done my own mods over time.


  • Moderator

    @mlaustin6 said in first layer height:

    I do not have a probe. I should probably comment out the probe section. It was put there using the reprap configurator.

    You can leave the probe section. It's currently set as manual probing, so if you ever did send a probe command like G30 or G29 it would prompt you to manually job the nozzle to touch the bed. Not really practical for doing a heightmap, but can sometimes be handy.

    I have not done baby stepping. How and why would I do that?

    During the first layer you can use the baby stepping buttons in the DWC interface to adjust the Z height of the first layer to get it dialed in. By adding that amount to the G92 in your homeall you make the adjustment permanent.

    I also suspect that your bed may not be flat, so even if it's level, there may be a raised section.

    If you print a test object like this, does it cover the bed uniformly? bedlevel_nozzle_0.4_200x200-0.3-0.8.stl

    So should I change it to x16 micro stepping? Why is it not recommended?

    I would suggest x16 with interpolation to x256 enabled. You'd have to recalculate the steps per mm to match. Reason being that the Duet has drivers that will take a x16 microstep and internally translate it to x256 for the motors without putting that step generation load on the CPU. So you get the benefit of quieter and smoother motors without hitting the CPU with x256 stepping. You'll probably just notice that it's quieter. But in some cases if you try and move too many axis too fast at once you can saturate the step generation and hiccups will ensue causing micro pauses, or in worst cases long stalls. You can check to see if you're being affected by this by running M122 after a print and seeing if you have a large hiccup count. The only cases where using a higher microstepping could be beneficial is with an XY axis with a steps per mm below 80, or an extruder below 400 (usually ungeared direct drive).



  • @mlaustin6 no problem, I assumed you had got a limit switch but badly explained myself!

    As steppers move under the control of the Duet it is likely that a stationary position will be part a few microsteps past a full step. When powered down the stepper naturally settles to the next physical step that can be in advance or retard of the steppers current position. The potential end result for systems with an x gantry like ours is the motors can move in opposing directions loosing aligment - or becoming less parrallel to - the bed surface.

    With a z probe the duet can align the gantry to the bed by checking two points on either side of the bed and correcting. Other options with independent drives are two accurate z limit switches. If the motors are hard wired together then your only real options are; to force them into the top of the machine to stall the steppers and hope they settle at a consistant point, or check against the bed manually before each build.

    Edit: if your board has stall detection then you can try using that without z-probe but it may not be very accurate due to the reduction drive of the screw.



  • @Phaedrux

    The bed is flat to my eyes. It’s a new bed, and that is why I went 3 point leveling because the last one got warped. I have a flat tile it was put on, and no edges were lifted. No air gaps either as it didn’t move easily on the tile. Also, the .1mm feeler gauge moves around on all corners and in the middle, granted some spots are a little tighter but not enough to make it difficult to move with one finger. So doubling that at .2mm should not cause a smashed first layer.

    So if I use the baby steps, would I add the value to the g92 line?

    I’m going to try testing it tomorrow using a file without filament at a slow speed and insert a .1mm and .2mm feeler gauge as it moves. That will give me an idea if the is actually moving to .2. Another option is to use a .01mm feeler gauge and just say the bed is at zero at see what happens.



  • @DocTrucker

    The motors are not hard wired together. They each have their own slot on the board. I assume that’s what you meant. Where can I find more info on how to setup this type of z probe?



  • @Phaedrux

    Looking at M122 results, the hiccups are as follows:

    Hiccups: 9898(0)

    I'm guessing that means zero and not 9898 hiccups.



  • @mlaustin6 If the motors are using two sockets close together on the board, and near the z-driver then you are probably using the sockets that are wired together. If you have mapped drives to use one of the spare extruder drives for the second z axis then you can look at using either two z axis limit switches or a z-probe to level the bed.

    I've not tried using two limit switches. You may get some information from this following thread and then reading through the gcode guide:

    https://forum.duet3d.com/topic/11007/dual-z-axis-homing-problem/2

    My toddler son is off nursery today (nothing serious) so I won't get much spare time but I will have a look at my machine and give you an example of z-probe assisted levelling.

    Reason I mention the levelling is that it could easily give a squished first layer on one side of the bed.


  • Moderator

    @mlaustin6 said in first layer height:

    @Phaedrux

    Looking at M122 results, the hiccups are as follows:

    Hiccups: 9898(0)

    I'm guessing that means zero and not 9898 hiccups.

    Nope those are hiccups. Enough to potentially be an issue. Is that after a full print? Or just homing?

    What firmware verison exactly are you using? Send M115.


Log in to reply