Second layer jump
Hello, I'm hoping someone here can help me out. I seem to be having a strange issue with my Duet 3 powered printer. When I start a print I first home the machine and heat up the bed. Once the bed it heated to the desired set point; the probe is centered on the bed and does a G30 to set the tool offset then the G29 is run to do a bed mesh.
Then after the nozzle heats up and purges out a bit of filament. Then the print begins. At this point I use the baby steps to get the first layer height right. and I'll admit that this part is done by eye. I do this because I change the nozzle almost every print and it is a bit tedious to go through the bed probe offset procedure each time.
Once I have the first layer printing well, I'm confident that all will be well. But lately I have noticed that it seems that the second layer is very under extruded. Often this isn't a problem especially when I'm printing with 0.4 or 0.5 Layer heights and 1.2mm nozzles. But I'm not printing with a 0.4mm nozzle and 0.2mm layer heights.
Watching it more closely it almost looks like what is happening is that the first layer has the baby steps applied but after that it removes the baby steps (nothing in my sliced file to do that).
For instance on this current print I'm printing I had a babystep offset of +0.2mm and the first layer height of 0.3mm. The first layer printed nicely and when it finished the second layer started and I noticed that the nozzle was nearly double the height it should have been off the part. It was printing very similar to how a part prints over supports with 1 layer of separation. I then removed the babystep (set it to zero) and then the second layer started to print properly. The third layer also is printing correctly.
Is there a strange setting that I may have enabled where the baby steps are only applied to the first layer?
0:/sys/config.g ; Configuration file for Duet 3 (firmware version 3) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v2.1.8 on Fri Apr 24 2020 14:40:15 GMT-0600 (Central Standard Time) ; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"Duet3" ; set printer name M667 S1 ; select CoreXY mode ; Drives M569 P0.0 S1 ; physical drive 0.0 goes backwards M569 P0.1 S0 ; physical drive 0.1 goes backwards M569 P0.2 S0 ; physical drive 0.2 goes backwards M569 P0.4 S0 ; physical drive 0.4 goes backwards M569 P0.5 S0 ; physical drive 0.5 goes forwards M584 X0.2 Y0.1 Z0.4 E0.5:0.0 ; set drive mapping M350 X32 Y32 Z32 E16:16 I1 ; configure microstepping with interpolation M92 X201.00 Y201.00 Z1589.40 E879:837 ; set steps per mm M566 X1200.00 Y1200.00 Z100.00 E240.00:240.00 ; set maximum instantaneous speed changes (mm/min) M203 X15000.00 Y15000.00 Z1200.00 E2400.00:2400.00 ; set maximum speeds (mm/min) M201 X800.00 Y800.00 Z40.00 E300.00:300.00 ; set accelerations (mm/s^2) M906 X1800 Y1800 Z1200 E1000:1000 I30 ; set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout ; Axis Limits M208 X-186.5 Y-175 Z-10 S1 ; set axis minima M208 X186.5 Y175 Z588.05 S0 ; set axis maxima ; Endstops M574 X1 S1 P"io0.in" ; configure active-high endstop for low end on X via pin io0.in use a NC switch M574 Y1 S1 P"io1.in" ; configure active-high endstop for low end on Y via pin io1.in use a NC switch M574 Z2 S1 P"io2.in" ; configure active-high endstop for high end on Z via pin io2.in use a NC switch ; Z-Probe M950 S1 C"io4.out" ; Set pin4 out as servo out 0 M558 P9 C"^io4.in" H3 F200 T12000 ; set Z probe type to BL touch and the dive height + speeds G31 P500 X50.0 Y48.9 Z3.199 ; set Z probe trigger value, offset and trigger height M557 X-130:170 Y-120:140 S60:52 ; define mesh grid M280 P1 S160 ; Reset Probe just in case M402 ; Retract probe just in case ; Heaters M308 S0 P"temp0" Y"thermistor" T100000 B4138 ; configure sensor 0 as thermistor on pin temp0 M950 H0 C"out0" T0 ; create bed heater output on out0 and map it to sensor 0 M140 H0 ; map heated bed to heater 0 M143 H0 S165 ; set temperature limit for heater 0 to 165C M307 H0 B1 S1.00 ; Enable bang-bang mode for the bed heater and set PWM limit M308 S1 P"temp1" Y"pt1000" R2200 ; configure sensor 1 as PT1000 on pin temp1 M950 H1 C"out1" T1 ; create nozzle heater output on out1 and map it to sensor 1 M143 H1 S450 ; set temperature limit for heater 1 to 450C M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit M308 S2 P"temp2" Y"pt1000" R2200 ; configure sensor 2 as PT1000 on pin temp2 M950 H2 C"out2" T2 ; create nozzle heater output on out2 and map it to sensor 2 M143 H2 S450 ; set temperature limit for heater 2 to 450C M307 H2 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit M308 S3 P"temp3" Y"thermistor" T100000 B4138 ; configure sensor 3 as thermistor on pin temp0 M950 H3 C"out3" T3 ; create chamber heater output on out3 and map it to sensor 3 M141 H3 ; map heated chamber to heater 3 M143 H3 S75 ; set temperature limit for heater 3 to 75C M307 H3 B1 ; disable bang-bang mode for heater and set PWM limit ;Heater Tuning parameters M307 H0 A253.1 C685.6 D0.7 V24.9 B0 ; PID model for Heater 0 M307 H1 A529.2 C249.3 D5.7 V24.8 B0 ; PID model for heater 1 M307 H2 A418.3 C213.8 D3.6 V24.8 B0 ; PID model for heater 2 M307 H3 A90 C1500 D600 V24.8 B1 ; BANG-BANG model for heater 3 ;Virtual Heaters M308 S4 Y"mcu-temp" A"MCU" ; create mcu temperature M308 S5 Y"drivers" A"Stepper driver" ; create driver temperatures ; Fans M950 F0 C"out7" Q500 ; create fan 0 on pin out4 and set its frequency used for circ pump M106 P0 T45 S1 H1:2 ; set fan 0 value. Thermostatic control is turned on M950 F1 C"out8" Q500 ; create fan 1 on pin out5 and set its frequency used for radiator fans M106 P1 T85 S1 H1:2 ; set fan 1 value. Thermostatic control is turned on M950 F2 C"out4" Q500 ; create fan 2 on pin out7 and set its frequency used for Part cooling fan M106 P2 S0.0 ; set fan 2 value. Thermostatic control is turned off M950 F3 C"out5" Q500 ; create fan 3 on pin out8 and set its frequency used for board cooling fan M106 P3 T35:55 H4:5 ; set fan 3 value. Thermostatic control is proportional to the CPU or driver temps M950 F4 C"out6" Q500 ; create fan 4 on pin out 6 and set its frequency used. for bed cooling fan M106 P4 S0.0 ; set fan 4 value. Thermostatic control is turned off. Controlled by Gcode only ; Tools M563 P0 S"Primary" D0 H1 F2 ; 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 M563 P1 S"Secondary" D1 H2 F2 ; define tool 1 G10 P1 X25.58 Y0 Z0 ; set tool 1 axis offsets G10 P1 R0 S0 ; set initial tool 1 active and standby temperatures to 0C ; Custom settings M572 D0:1 S0.03:0.03 ; Set Pressure advance settings ;G28 Z ; Home Z ;G28 X Y ; Home X and Y ;M280 P1 S120 ; Probe Self test T0 ; Set tool 0 active ;G1 X0 Y0 F12000 ; Move print head to middle of bed ; Miscellaneous M501 ; Load Config-overide.g M911 S22.0 R23.5 P"M913 X50 Y50 Z50 E30:30 G91 M83 G1 Z3 E-5 F1000" ; Set the power loss resume parameters
Here you go.
Board: Duet 3 MB6HC (MB6HC)
DSF Version: 3.1.1
Firmware: RepRapFirmware for Duet 3 MB6HC 3.1.1 (2020-05-19b2)
How bout your homing files and bed.g if used. Do you have anything in tool change files?
Here is the home files, but I don't use the bed.g (G32) anywhere.
; homex.g ; called to home the X axis ; ; generated by RepRapFirmware Configuration Tool v2.1.8 on Fri Apr 24 2020 14:40:15 GMT-0600 (Central Standard Time) G91 ; relative positioning ;G1 H2 Z10 F6000 ; lift Z relative to current position G1 H1 X-361 F2400 ; move quickly to X axis endstop and stop there (first pass) G1 X5 F6000 ; go back a few mm G1 H1 X-361 F360 ; move slowly to X axis endstop once more (second pass) ;G1 H2 Z-10 F6000 ; lower Z again G90 ; absolute positioning G1 X 0 F12000 ; move to center
; homey.g ; called to home the Y axis ; ; generated by RepRapFirmware Configuration Tool v2.1.8 on Fri Apr 24 2020 14:40:15 GMT-0600 (Central Standard Time) G91 ; relative positioning ;G1 H1 Z10 F6000 ; lift Z relative to current position G1 H1 Y-355 F2400 ; move quickly to Y axis endstop and stop there (first pass) G1 Y5 F6000 ; go back a few mm G1 H1 Y-355 F360 ; move slowly to Y axis endstop once more (second pass) ;G1 H1 Z-10 F6000 ; lower Z again G90 ; absolute positioning G1 Y 0 F12000 ; move to center
; homez.g ; called to home the Z axis ; ; generated by RepRapFirmware Configuration Tool v2.1.8 on Fri Apr 24 2020 14:40:15 GMT-0600 (Central Standard Time) G91 ; relative positioning ;G1 H2 Z-10 F750 ; lift Z relative to current position G1 H1 Z585 F1000 ; move Z up until the endstop is triggered G1 H2 Z-5 F600 ; back off of limit for second pass G1 H1 Z8 F500 ; Second pass at limit switch
And when do you use the probe?
Can you post your slicer start gcode?
I use the probe at the start of every print. First as a G30 command then as the G29 command
M106 P4 S100 ;Turn on chamber circ fan M140 S[bed0_temperature] ; Set bed to temp M141 S[extruder2_temperature] ; Chamber heaters G28 Z G28 X Y ; Home all G1 Z10 F1000 ; Bring up Z G1 X-55 Y-48 F12000 ; Offset for z probe M18 E0:1 ; Disable extruder stepper motors as they cause interference with BLtouch deployment M190 S[bed0_temperature] ; Hold until bed at temp G30 ; Probe bed single point and set offset of Z G29 ; Bed mesh probe M104 S[extruder0_temperature] T0 ; Set nozzle 1 to temp M104 S[extruder1_temperature] T1 ; Set nozzle 2 to temp G1 Z10 F400 ; Lower bed while heating G1 X-30 Y165 F12000 ; move head over purge bucket while heating G1 Z-1 F200 ; Lower head down to purge bucket M109 T0 S[extruder0_temperature] ; Hold until nozzle 1 at temp M109 T1 S[extruder1_temperature] ; Hold until nozzle 2 at temp M106 P4 S[extruder3_temperature] ; Turn set chamber fan speed (speed depends on Filament) G92 E0 ; Set extruder to 0 G1 E10 F120 ; Extrude 10mm of filament into purge G92 E0 ; Reset Extruder count to 0 G1 E-0.5 F500 ; Retract 0.5mm of filament G1 Z0.5 F900 ; Raise nozzle to .5mm over bed ;M201 X600 Y600 Z100 E10000 ; Set acceleration ;M207 X5 ; Set Jerk
The print I'm currently doing just started the second layer, but on this print I added a post processor to simplify3D that changes ; layer 2, to ; layer 2, \n M290 R0 S0. This seems to have worked around the problem, because at least now I don't have to stand at the printer waiting for the second layer to start. On this print that took 45minutes.
I'd very much like to know why this happens. Perhaps it is related to the other issue I have where the layer graph doesn't show the first layer until after it completes the second layer; at which time it shows that 8 layers are complete. I tried to remove all the comments from my Gcode (except any that start with L) to see if that would fix that issue or this issue, but no such luck. I'm still showing that I'm printing layer 1 even though I'm on layer.
3dML last edited by
Is the bed mesh being shut off on the second layer?
Can you share a complete gcode file? If it's too large to upload, zip it and change the file extension to .txt and upload it. Or host it on dropbox or similar.
@3dML no it’s still working. I can see the motor turning as the tool moves across the bed on any layer.
@Phaedrux I will get one uploaded shortly. But it really doesn’t matter the file, it seems to be an issue no matter the GCode file.
G90 M82 M106 S0 M106 P4 S100 ;Turn on chamber circ fan M140 S80 ; Set bed to temp M141 S0 ; Chamber heaters G28 Z G28 X Y ; Home all G1 Z10 F1000 ; Bring up Z G1 X-55 Y-48 F12000 ; Offset for z probe M18 E0:1 ; Disable extruder stepper motors as they cause interference with BLtouch deployment M190 S80 ; Hold until bed at temp G30 ; Probe bed single point and set offset of Z G29 ; Bed mesh probe M104 S260 T0 ; Set nozzle 1 to temp M104 S0 T1 ; Set nozzle 2 to temp G1 Z10 F400 ; Lower bed while heating G1 X-30 Y165 F12000 ; move head over purge bucket while heating G1 Z-1 F200 ; Lower head down to purge bucket M109 T0 S260 ; Hold until nozzle 1 at temp M109 T1 S0 ; Hold until nozzle 2 at temp M106 P4 S255 ; Turn set chamber fan speed (speed depends on Filament) G92 E0 ; Set extruder to 0 G1 E10 F120 ; Extrude 10mm of filament into purge G92 E0 ; Reset Extruder count to 0 G1 E-0.5 F500 ; Retract 0.5mm of filament G1 Z0.5 F900 ; Raise nozzle to .5mm over bed ;M201 X600 Y600 Z100 E10000 ; Set acceleration ;M207 X5 ; Set Jerk ; process Process1 ; layer 1, Z = 0.300 T0 G92 E0.0000 G1 E-1.0000 F2400 ; feature skirt ; tool H0.300 W0.600 G1 Z1.000 F1200 G1 X57.323 Y53.200 F12000 G1 Z0.300 F1200 G1 E-0.0500 F2400 G92 E0.0000
I think part of the layer count problem is from these lines in your start gcode:
G1 Z10 F1000 ; Bring up Z
G1 Z10 F400 ; Lower bed while heating
G1 Z-1 F200 ; Lower head down to purge bucket
G1 Z0.5 F900 ; Raise nozzle to .5mm over bed
You can try adding a ;E in the comments to make it think it's an extrusion move and not a layer change and ignore it. Another option is to move as much of the slicer start gcode into start.g which gets called before any slicer gcode. If you need moves after a temp is set by the slicer you can add a macro call in the slicer start gcode. This gets the Z moves out of the gcode file so they aren't parsed at all by DWC.
The negative Z move is a bit odd as well because you're in absolute coordinate mode when it's sent. I'm thinking that you probably want those Z moves to be in relative mode instead.
Not sure if this is directly related to the jump you're seeing but it may be.
Also, do you have Z hop enabled? There's always a larger Z move before the layer change.
G1 Z1.000 F1200 G1 X57.323 Y53.200 F12000 G1 Z0.300 F1200
3dML last edited by 3dML
With G90 set at the beginning of file those Z moves should not make any difference unless G91 or G92 Z## is called. The only G91 is at the end of the file and only G92 E0 after each non extrusion move. This may be because the slicer is set to relative extrusion. I found no G91 Z##.
Layer change comments from some slicers can cause issues with the gcode processing.
; layer 1, Z = 0.300 ; layer 1, Z = 0.500
Try deleting these comments from the file and test. I don't see anything else wrong the the file other then 1mm Z hop is excessive for 0.2 layers.
I will see what I can do about moving some of that stuff out of the starting script and put it in either the start.g or a macro.
I do have Zhop enabled and the layer counts seem to work fine for every other layer, just not the first layer. It goes from layer 0 to layer 8 once it is done the first one. And then it is off by 8 layers for the rest of the print.
I have run some test where I stripped out all of the comments, and in the case where there are no comments DWC didn't find any layers. I even did a test where I removed all the comments except for the layer comments and yielded the same result. But I haven't tried only removing the layer comments.
The same goes for the end gcode
; layer end M18 E0:1 ; Disable Extruder Stepper motors G91 G1 Z100 G90 G28 Z ; Home Z G28 X Y ; Home X and Y axis M106 S0 ; Turn off cooling fan ;M98 P"0/macros/Slow_cool.g" ; Slowly cools the bed and build chamber *comment for non PC or ABS parts M104 S0 ; turn off extruder M140 S0 ; turn off bed M141 S0 ; Turn off chamber heater
As I said, adding
;Eto those Z move lines may be enough to have the parser ignore them.
3dML last edited by
I follow your thought now with the Z moves causing the parser to think it is a layer change but if that is the case why doesn't it trigger a layer change for every Z hop move? (The Programmer in me is highly intrigued and demands that I find an explanation for this Layer phenomena.)
This may work but why not for Z hop?
As I said, adding ;E to those Z move lines may be enough to have the parser ignore them.
;Layer 1part of the comment which is what I think DWC reads should be fine. I have not tested if the
, Z = 0.300part of the comment causes any issue.
I had forgotten about that one in the ending script. I have completed moving things into macros. It wasn't a big deal to do it, I just needed to make 3 macros because of the heater settings and waits. I have tested the starting script for months and I'm happy with it so I don't really need to "convenience " of having it in the slicer.
But I will add the E in the comment for that one in the ending script.
I'm going to leave my M280 R0S0 in there for now and I'll remove it if it is causing issues.
For the ending script you can put
M0in the slicer end gcode and then put all of the commands in
stop.g. M0 will call stop.g when present.
The ;Layer 1, Z = 0.300 is not something that I'm doing intentionally, It is what ever is built into Simplify3D version 4.1.2. I can see if I can change that somehow and I'll report back with my findings.
For the ending script you can put
M0in the slicer end gcode and then put all of the commands in
stop.g. M0 will call stop.g when present.
I do like the sounds of that. Thanks.
So I have tested a new print with the start up macros rather than using the starting script I previously had.
It appears that the issue with the layers not showing up has been partially resolved. rather than showing layer 8 for the second layer, it now shows layer 2 and it show that layer 2 and 3 take about the same amount of time (But there should actually be 4 layers for the bottom). So it looks like layer 1 and 2 are missing and layer 2 is layer 3 and so on.
Having said all of that it still appears that I have the baby stepping issue. Any baby steps that get applied to the first layer seem to get doubled up or re-applied on the second layer.
Here is a screen capture of the layer time plot
Can you share one of your newly sliced gcode files after your changes?