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?


  • Moderator

    Firmware version?
    Config.g?



  • @Phaedrux

    
    
    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.

    and

    Board: Duet 3 MB6HC (MB6HC)
    DSF Version: 3.1.1
    Firmware: RepRapFirmware for Duet 3 MB6HC 3.1.1 (2020-05-19b2)


  • Moderator

    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
    

  • Moderator

    And when do you use the probe?

    Can you post your slicer start gcode?



  • @Phaedrux

    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
    
    


  • @Phaedrux

    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.



  • Is the bed mesh being shut off on the second layer?


  • Moderator

    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.



  • @Phaedrux Duet mount.txt
    Here you go. This is a 7z file type zip.


  • Moderator

    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
    


  • @Phaedrux
    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##.

    @baird1fa
    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.



  • @Phaedrux

    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.

    @3dML
    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.


  • Moderator

    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
    

    G1 Z100

    As I said, adding ;E to those Z move lines may be enough to have the parser ignore them.



  • @Phaedrux
    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.

    @baird1fa
    The ;Layer 1 part of the comment which is what I think DWC reads should be fine. I have not tested if the , Z = 0.300 part of the comment causes any issue.



  • @Phaedrux
    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.


  • Moderator

    For the ending script you can put M0 in the slicer end gcode and then put all of the commands in stop.g. M0 will call stop.g when present.



  • @3dML

    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.



  • @Phaedrux said in Second layer jump:

    For the ending script you can put M0 in 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.



  • @Phaedrux

    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 download.png


  • Moderator

    Can you share one of your newly sliced gcode files after your changes?



  • @Phaedrux Of course Drag chain mount.gcode This one still has the Babystep reset at Layer 2 and it appears that I still need to do that.


Log in to reply