Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Sovol SV08 Multiple Motion System Upgrade.

    Scheduled Pinned Locked Moved
    My Duet controlled machine
    8
    272
    42.9k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • dwuk3dundefined
      dwuk3d
      last edited by

      Back to printer -

      New Z Hopper motors arrived - bought full linear actuators - which I will take apart - as seems to be most cost effective way to source Nema 11 lead screw motors
      8503D74C-ACFC-4752-BB7D-E55021AD6376.jpeg

      Tap sensoring now working.

      Logic is
      1.Home All
      2. G32 Z motor alignment
      3. Then for each print head
      4. Move other print heads 2mm up so that they are out of the way
      5. Align Z hopper to just trigger optical sensor
      6. Move head down about 0.02 mm to just past the trigger point.
      7. Switch probes/endstops so that the Z axis now has the Z hopper end stop as its trigger. (inverted)
      8. Move Z down until print head hits to bed and then pushes up slightly within the play of the print head to disable the triggered optical sensor.
      9. Repeat for various points of the print bed,

      Short demo - showing tapping and play/flex - which might end up being a problem
      https://youtu.be/5FGALqWV4t8

      Example Tap test macro.

      ;tap A.g
      M98.1 A"B On"
      ;reset probes to correct values
      
      M574 Z1 S2 K0; configure Z axis endstop
      M574 A1 P"122.io2.in" S1 ; configure A axis endstop
      
      
      G90
      G1 Z3 F1000
      G1 D{global.dOffset+2} F1000
      G1 B{global.bOffset+2} F1000
      
      var speed = 400
      ;var w = {224, 224, 324, 324}
      ;var v = {310, 210, 210, 310}
      var w = {160, 200, 200, 160, 324}
      var v = {160, 160, 240, 240, 310}
      var point1 = -1
      
      
      while iterations < 5
          var iGrid = iterations
          G1 W{var.w[var.iGrid]} V{var.v[var.iGrid]} F10000
          ;echo "W",var.w[iterations],"V",var.v[iterations]
          while iterations < 2
      
              M574 Z1 S2 K0; configure Z axis endstop
              M574 A1 P"122.io2.in" S1 ; configure A axis endstop
              var aMax = 0
              var aPos = 0
              var aMin = 99
              while iterations < 1
                  G1 A3 F{var.speed}
                  M400
                  var aProbe = sensors.endstops[6].triggered
                  if var.aProbe
                      abort "A Probe already triggered"
      
                  G1 H4 A-2 F{var.speed}
                  set var.aPos = move.axes[6].machinePosition
                  ;echo "D trigger pos",var.dPos
                  if var.aPos > var.aMax 
                      set var.aMax = var.aPos
                  if var.aPos < var.aMin
                      set var.aMin = var.aPos
      
              var aProbe = false
              if var.aMax-var.aMin > 0.03
                  echo "variation",var.aMax-var.aMin,var.aMin,var.aMax
              while iterations < 4
                  ;echo "i",iterations
                  G1 A{var.aPos-0.01*iterations} F{var.speed}
                  M400
                  set var.aProbe = sensors.endstops[6].triggered
                  if !var.aProbe
                      abort "A Probe not triggered"
                      
                  else
                      if iterations > 1
                          echo "lowered head ",0.01*iterations,"mm"
                      break
      
      
      
              M574 A1 P"122.io3.in" S1 ; configure A axis to temporary Endstop
              M574 Z1 P"!122.io2.in" S1 ; configure Z Axis to A end stop inverted
              var zPos = 0
      
      
              G1 Z{var.zPos+2} F500
              M400
              set var.aProbe = sensors.endstops[2].triggered
      
              if var.aProbe
                  abort "AZ Probe already triggered"
                  
              G1 H4 Z-7 F{var.speed}
              set var.zPos = move.axes[2].machinePosition
              if var.point1 == -1
                  set var.point1 = var.zPos
      
              echo "A zPos",var.zPos,"W",var.w[var.iGrid],"V",var.v[var.iGrid],"point",var.iGrid,"var",var.zPos-var.point1
              G1 Z3 F1000
      
      
      
      ;restore probes
      M574 Z1 S2 K0; configure Z axis endstop
      M574 A1 P"122.io2.in" S1 ; configure A axis endstop 
      ;    122.io3.in - dummy endstop when A swapped out
      
      1 Reply Last reply Reply Quote 0
      • dwuk3dundefined
        dwuk3d
        last edited by

        Printing getting better. I don't think the original problems with the flag in the video a few months ago were dimensional inaccuracies or alignment issues - rather the fact the it was cutting off some of the colours due to Axis limits.

        EC811717-9946-4871-B5D2-3FEAC2AE5C5B_1_201_a.jpeg

        1 Reply Last reply Reply Quote 0
        • dwuk3dundefined
          dwuk3d
          last edited by

          Z offset Tapping now working quite reliably as long as the print heads are clean.

          Lots more work to do on timings and speed, and print head design - but printer starting to come together.

          5B37E1B9-4508-48A3-B8C2-AA04C01E0A50_1_201_a.jpeg

          droftartsundefined 1 Reply Last reply Reply Quote 0
          • droftartsundefined
            droftarts administrators @dwuk3d
            last edited by

            @dwuk3d One of the first multicolour prints we did at RepRapPro with the Tri-colour Mendel, around 2013/14, was a Union Flag!

            alt text

            I don't have any pictures of the print, but the files are here: https://github.com/reprappro/Interesting-3D-Prints/tree/master/RRP Union flag2

            Our other favourite was the multicolour frog: https://www.thingiverse.com/thing:329436

            Ian

            Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

            dwuk3dundefined 1 Reply Last reply Reply Quote 1
            • dwuk3dundefined
              dwuk3d @droftarts
              last edited by

              @droftarts Cool - looks like that 3 colour printer predates the Prusa MMU1 by quite a lot.

              1 Reply Last reply Reply Quote 0
              • dwuk3dundefined
                dwuk3d
                last edited by dwuk3d

                Front extruder now rebuilt with Nema11.

                Had to cut some of the shaft off, and I think I can bring the motor down about another 13mm if I cut more of the shaft off.

                All heads now being on Nema11's should now enable proper Z hopping and (with the aid of a post processor) some independent Mesh adjustment.

                Also moved the front extruder off of sensorless homing on to Optical End stops.

                With the X and B (Z Hopper) Axis sharing a single sensor.

                IMG_7615.jpeg IMG_7616.jpeg IMG_7617.jpeg

                Did find one tiny issue - I accidentally used the wrong filename homeb.g instead of homex.g when I was creating my new optical end stop file - I had previously renamed the homex.g to homex_sensorless.g

                Instead of telling me the homeb.g file already existed I think it just wiped it out - so I had to recreate it from scratch.

                Also - when switching endstops between different Axis I am finding that in order to release an end stop from the old Axis and need to give it another one - so I am using one of the unused io[x].in from one of the boards to swap that into the old axis end stop - so that it releases the end stop - so that I can assign it to the new Axis.

                Not sure if this is the best way to do it - especially as I am gradually using more and more of the io[x].in's for things.

                dc42undefined 1 Reply Last reply Reply Quote 0
                • dc42undefined
                  dc42 administrators @dwuk3d
                  last edited by dc42

                  @dwuk3d said in Sovol SV08 Multiple Motion System Upgrade.:

                  Also - when switching endstops between different Axis I am finding that in order to release an end stop from the old Axis and need to give it another one - so I am using one of the unused io[x].in from one of the boards to swap that into the old axis end stop - so that it releases the end stop - so that I can assign it to the new Axis.

                  Just set the endstop position to 'none' in M574, e.g. M574 X0 will release the IO input that was previously used by the X endstop.

                  Duet WiFi hardware designer and firmware engineer
                  Please do not ask me for Duet support via PM or email, use the forum
                  http://www.escher3d.com, https://miscsolutions.wordpress.com

                  dwuk3dundefined 2 Replies Last reply Reply Quote 0
                  • dwuk3dundefined
                    dwuk3d @dc42
                    last edited by

                    @dc42 Thanks will try that

                    1 Reply Last reply Reply Quote 0
                    • dwuk3dundefined
                      dwuk3d
                      last edited by dwuk3d

                      Still having issues with Multiple motion systems and layer shifts.

                      It went away for a while - but it has now moved from T0 to T1 - during parallel priming.

                      I thought it might be due to my priming being in a replacement command Macro - M801.

                      M801 moves the print head - and then it seems to return back to where it was before calling the macro - sometimes quite fast.

                      So I changed the Macro that calls M801 to pre-position the print head where it will end up after the M801 before calling it - and that has reduced the unexpected moves.

                      Still getting the issue though where on the 3rd perimeter of the T1 priming cycle (which is in parallel to T0) the print head rapidly moves to the wrong place.

                      I wonder if it is macro related.

                      Update - found a pattern I think

                      What is happening is the on motion system 0 - T1 is priming

                      On motion system 1
                      T0
                      --Park XY Macro
                      ----M800 - which moves the T0 Z Hopper B Axis up
                      ----T0
                      ----Move X&Y out of the way
                      ---M800 - which moves to T0 Z Hopper B Axis down.

                      If I change M800 so that it doesn't move the B Axis then I don't get the issue.
                      Or if I remove the M800's from ParkXY

                      I think the B Axis is somehow related to the problem I had with tool 0 also.

                      Tool and Axis definitions attached below

                      ; Smart Drivers
                      M569 P0.0 S1 D2 ; driver 0.0 goes forwards (Z axis)
                      M569 P0.1 S1 D2 ; driver 0.1 goes forwards (Z axis)
                      M569 P0.2 S0 D2 ; driver 0.2 goes backwards (Z axis)
                      M569 P0.3 S1 D2 ; driver 0.3 goes forwards (X axis)
                      M569 P0.4 S0 D2 ; driver 0.4 goes backwards (Y axis)
                      M569 P1.3 S1 D2 ; driver 0.5 goes backwards (Z axis) - changed to 1.3 forwards
                      ;M569 P1.0 S0 D3 V2000 ; driver 1.0 goes backwards (U axis)
                      ;M569 P1.1 S0 D3 V2000 ; driver 1.1 goes backwards (V axis)
                      M569 P1.0 S0 D2; driver 1.0 goes backwards (U axis)
                      M569 P1.1 S0 D2 ; driver 1.1 goes backwards (V axis)
                      M569 P1.4 S0 D2 ; Z-hopper 2
                      M569 P0.5 S1 D2 ; Z-hopper 1
                      M569 P1.5 S0 D2 ; VH Axis Left
                      M569 P1.6 S1 D2 ; VH Axis Right
                      M569 P1.2 S1 D2 ; U AXIS Z Hopper
                      
                      M569 P121.0 S0 D2 ; driver 121.0 goes backwards (extruder 0).  X
                      M569 P122.0 S0 D2 ; driver 122.0 goes backwards (extruder 1).  C
                      M569 P123.0 S0 D2 ; driver 123.0 goes backwards (extruder 2).  U
                      
                      ; Motor Idle Current Reduction
                      M906 I30 ; set motor current idle factor
                      M84 S30 ; set motor current idle timeout
                      
                      ; Axes
                      M584 X0.3 Y0.4 Z0.1:0.2:0.0:1.3 U1.0 V1.5:1.6 W1.1 A1.4 B0.5 D1.2; set axis mapping
                      
                      
                      ; Tools
                      ;     X:Y:Z:U: V:W:A:B:C:D
                      ;     0 1 2 3. 4 5 6 7 8 9
                      
                      
                      M563 P0 D0 H1 F0 ; create tool #0.    XYB
                      M568 P0 R0 S0 ; set initial tool #0 active and standby temperatures
                      ;M563 P1 D1 H2 F2 ; create tool #1
                      
                      ;Tool T1 - Left Nozzle - 2nd Gantry as X and Y.  UVD
                      ;M563 P1 D2 H3 F4
                      M563 P1 D2 X3 Y4 H3 F4
                      G10 P1 X0 Y0 U0 V0 S0 R0
                      M568 P1 R0 S0 ; set initial tool #1 active and standby temperatures
                      
                      ;Tool T2 - Right Nozzle 2nd Gantry as X and Y.   WXA
                      ;M563 P2 D1 H2 F2
                      M563 P2 D1 X5 Y4 H2 F2
                      G10 P2 X0 Y0 U0 V0 S0 R0
                      M568 P2 R0 S0 ; set initial tool #1 active and standby temperatures
                      
                      1 Reply Last reply Reply Quote 0
                      • dwuk3dundefined
                        dwuk3d
                        last edited by

                        Quite good progress made today.

                        Managed to work around the G32 Bed.g alignment issue I occasionally have, and also got the probe alignment to be fairly reliable.

                        Decided to push the speeds up - from 100 to 300, and accelerations up from 2000 to 6000 - all working ok and looking quite impressive.

                        Am now trying to fix the just in time parallel prime synchronisation - to get all colour swaps sub second.

                        The pre-heats from OrcaSlicer that I have specified as 20 seconds - actually vary between 9s and 21 seconds- so even if my delay calculations were perfect it is still pretty much impossible to get perfect timing that way.

                        So plan a - for reprints is to capture the actual time in an array that is echo'd into a file, and then use it to get precise timings for reprints.
                        Am also investigating simulation - some macro's seem to run - but not sure if it is possible to capture actual times.

                        Might have to try and work out the segment print times myself in a post processor - but real printing or simulation likely to be the best solution.

                        Finally doing some comparison prints of the same model with an X1C - there are only 6 colour changes in my flag model, and my accelerations are still quite a lot slower (vs 10,000 on the X1C), but the good news is that my actual print is already about double the speed of the X1C print, plus also the prep time despite all of my alignment stuff is a fair bit quicker too.

                        Comparison video with the two prints side by side in the works.

                        o_lampeundefined 1 Reply Last reply Reply Quote 0
                        • o_lampeundefined
                          o_lampe @dwuk3d
                          last edited by

                          @dwuk3d If you could find a way to prevent the idle tools from oozing, you wouldn't have to use reduced standby-temp. That'd save you from all the preheat hassle.
                          Delay calculations might give you a headache anyway if the idle tool hasn't reached standby temp when you call the preheat macro in a back2back colour change scenario.

                          dwuk3dundefined 1 Reply Last reply Reply Quote 0
                          • dwuk3dundefined
                            dwuk3d @o_lampe
                            last edited by dwuk3d

                            @o_lampe ooze prevention would certainly be handy - although quite tricky to implement on my sovol due to the fact the idle heads are still over the build plate.

                            I guess something like Bambulab H2D ooze protect arm would work.

                            Will order one of the H2D flow blockers and magnets - to see whether its practical to fit one on my toolheads

                            https://uk.store.bambulab.com/products/flow-blocker
                            https://uk.store.bambulab.com/products/nozzle-blocker-magnet-bracket

                            In theory it could be driven by the zhopper motor when it reaches the top of its travel - although on the h2d it is controlled be a separate small motor.

                            My overnight thinking on preheat is rather than getting preheat times exact I might change my reheat process to wait a little bit after the reheat to round up the reheat times to a fix number of seconds for ranges of start temperatures.

                            I think I am going to have to leave reheat / standby in - as some of my print heads could be idle for a long time - maybe several hours in some prints.

                            My current thinking on cooldown / preheat is

                            1. Ooz Shield and or wipe - if tool change time > x1

                            2. Cooldown - if tool change time > x2 seconds

                            3. Reheat - if cooled down

                            4. Extra post reheat delay to make later timings more predictable

                            5. Move out Ooz shield

                            6. Purge out burnt filament to prime tower - if tool change time > x3 seconds

                            7. Prime -to prime tower if tool change time > x1 seconds -

                            Ideally prime should finish exactly when the other tool starts moving out of the way - for sub second tool changes.
                            However when timings not exact it may be better to wait until the other tool head starts moving before doing the final prime wipe.

                            Most of the above would also apply for parallel prints - where a tool is going idle for a little while - to allow the other toolhead to catch up.
                            I plan if possible to slow down the printer of the faster segments to where practical remove most of the idle time, and therefore avoid the need for all of the priming/preheat stuff.

                            Other challenges I have are with prime towers - currently because I want each head to have its own independent prime tower I am creating them in macro's.

                            I think this will work - but it is quite a lot of work getting them to print properly - plus I also have the challenge of missed layers - where some tools are only used a few layers apart - do I keep the prime towers the same height in parallel - which for the IDEX heads might mean extra tool changes for the prime towers, or do I allow the prime towers to drop a bit lower, and then use Z Hoppers to lower down to them when needed.

                            o_lampeundefined 1 Reply Last reply Reply Quote 0
                            • o_lampeundefined
                              o_lampe @dwuk3d
                              last edited by

                              @dwuk3d I came to the same conclusion regarding preheat macros:
                              Start them early, but don't preheat immediately. Add a delay, depending on the current tool temp.

                              The prime tower dilemma will be an even bigger issue when you start using a moving bed.
                              The tower for tool x might not be there where it used to be.
                              In my experience it is important to have the towers at the full height, even when the tool is idle for n layers.
                              I began to use a windshield instead, which is a single perimeter wall around the part created by PrusaSlicer.
                              Not sure if that'd make it easier or worse for your printer.

                              dwuk3dundefined 1 Reply Last reply Reply Quote 0
                              • dwuk3dundefined
                                dwuk3d @o_lampe
                                last edited by dwuk3d

                                @o_lampe thanks, have never tried using windshields - I guess they have the advantage of being close to the part, protecting the part from airflow. Disadvantages I guess are a) needing to be quite large for large parts, b) hiding the part while printing, c) if single shield only then it would be difficult to 'parallel' prime.

                                For single material / multi colour prints on my moving be designs I guess it might be possible to swap prime towers between the heads. However for multi material I am not keen on sharing prime towers - so I guess in this case I could end up needing an impractical number of prime towers.

                                Made reasonable progress yesterday on synchronising timings on reprints - without yet simplifying heat up times.
                                One issue I did encounter though is taking in account the knock on effect of delays on later tool changes, i.e. If I reduce the delay on a tool change to stop it finishing late, I sometimes have to increase the delay on the next one to avoid that one finishing early.

                                Still having issues with Z offsets and repeatable alignment, may have to rethink probing approach again, and probably also need to beef up the strength of my optical end stop holders and flag parts.

                                dwuk3dundefined 1 Reply Last reply Reply Quote 0
                                • dwuk3dundefined
                                  dwuk3d @dwuk3d
                                  last edited by

                                  @dwuk3d Might be time to deploy the Scanning Eddy Z Probe.

                                  Think I will put it on the front Extruder.

                                  Looks a bit tricky wiring up the Can connections and terminations - especially when I want to add another Mini5+ board - which also wants to be terminated.

                                  87851E09-059F-4A50-9D14-72D91598598B_1_102_o.jpeg A2BEF279-EC2A-42B1-887F-2AA22D8A6704_1_102_o.jpeg

                                  dwuk3dundefined 1 Reply Last reply Reply Quote 0
                                  • dwuk3dundefined
                                    dwuk3d @dwuk3d
                                    last edited by

                                    @dwuk3d touch mode on the SZP looks interesting.

                                    Also only just noticed that the Roto tool board includes an SZP built in - so will probably upgrade other print heads to roto toolboards rather than adding further separate SZPs if the touch probing works out ok.

                                    Roto boards also likely to fit better in an INDX.

                                    Rather than adding the 2nd Mini5+ board to my printer for just the two more stepper drivers that I think I am going to need -
                                    to avoid the complication of having to cut the track on the Mini5+ circuit board I think it might be easier to get a 2nd tool distribution board and use my existing !LC boards (that will be replaced by Roto boards) as normal stepper drivers.

                                    So the 3 head setup would then be:
                                    6 drivers on 6HC - should switch this over to U D v1 v2 W A
                                    7 drivers on Mini5+ - should switch over to X Y z1 z2 z3 z4 B
                                    2 more drivers using 1LC boards - rotary and ball probe/camera deployment
                                    2 x tool distribution boards - with 3 spare slots
                                    1x1LC + SZP
                                    2xRoto with built in SZP

                                    1 Reply Last reply Reply Quote 0
                                    • dwuk3dundefined
                                      dwuk3d @dc42
                                      last edited by

                                      @dc42 Thanks

                                      The M574 A0 and M574 D0 seems to work ok

                                      Also - for probes - I have replaced the following
                                      M558 K2 P8 C"122.io3.in" H1 F300 T300 ; configure B Axis to temporary end stop
                                      with
                                      M558 K2 P0 ; configure B Axis to temporary end stop

                                      and that seems to work too.

                                      1 Reply Last reply Reply Quote 0
                                      • dwuk3dundefined
                                        dwuk3d
                                        last edited by

                                        Another Flag printing video.

                                        This time comparing a print on my SV08x3 with an X1c - which was the printer used to print most of the parts.

                                        Print quality improving and colour swap timing getting fairly good on reprints.

                                        Due to sub second vs 60 second plus colour changes the print takes about 8 mins on the SV08, vs about 20 mins on the X1C.

                                        X1C start up time also a fair bit slower - but start up processes not included in this video.

                                        https://youtu.be/5FAYvt4uwtw?si=hTprxJtDPhnTmhrw
                                        0C1BC0C4-B283-4A18-A024-D91B093145A4_1_201_a.jpeg

                                        1 Reply Last reply Reply Quote 1
                                        • dwuk3dundefined
                                          dwuk3d
                                          last edited by dwuk3d

                                          Upgraded my post processor to change all of the ZHops to direct G1 A{global.aOffset+0.4} etc hoping that this might solve the layer shifting problem which I thought might be related to using the A,B & D axis within gcode override Macros M800.1.g that I was currently just using in the prime tower building processing- but it is a lot worse.

                                          I also had an issue when I was manually moving the gantries around when I moved the A.B or D Axis sometimes the U axis would jump to a different place - so there is definitely some sort of incompatibility between my tools definitions and moving gantries or axis that are not overridden in the tool definitions.

                                          I suppose I should try the latest firmware - as I am still on 3.5.4.

                                          But I think that maybe I should try removing all of the tool usage/overrides - and change the X,Y and E movements to be the actual axis in the post processor - however it could get quite complicated with Fans/Heaters etc.

                                          Current tool definitions here

                                          ; Tools
                                          ;     X:Y:Z:U: V:W:A:B:C:D
                                          ;     0 1 2 3. 4 5 6 7 8 9
                                          
                                          
                                          M563 P0 D0 H1 F0 ; create tool #0.    XYB
                                          M568 P0 R0 S0 ; set initial tool #0 active and standby temperatures
                                          ;M563 P1 D1 H2 F2 ; create tool #1
                                          
                                          ;Tool T1 - Left Nozzle - 2nd Gantry as X and Y.  UVD
                                          ;M563 P1 D2 H3 F4
                                          M563 P1 D2 X3 Y4 H3 F4
                                          G10 P1 X0 Y0 U0 V0 S0 R0
                                          M568 P1 R0 S0 ; set initial tool #1 active and standby temperatures
                                          
                                          ;Tool T2 - Right Nozzle 2nd Gantry as X and Y.   WXA
                                          ;M563 P2 D1 H2 F2
                                          M563 P2 D1 X5 Y4 H2 F2
                                          G10 P2 X0 Y0 U0 V0 S0 R0
                                          M568 P2 R0 S0 ; set initial tool #1 active and standby temperatures
                                          
                                          
                                          ; T3 - duplicate mode
                                          M563 P3 D0:1 H1:2 X0:3 Y1:4 F0:1
                                          G10 P3 X0 Y0 U0 V-150 S0 R0
                                          M567 P3 E1:1
                                          M568 P3 S1
                                          
                                          dwuk3dundefined 1 Reply Last reply Reply Quote 0
                                          • dwuk3dundefined
                                            dwuk3d @dwuk3d
                                            last edited by dwuk3d

                                            @dwuk3d

                                            Managed to capture layer shift - see 14:18:02 on this video.
                                            https://youtu.be/oijcrHmkybI?t=70

                                            As far as I can see Gantry2 is idle - waiting for its next print phase. - I jumps back and the two print heads jump inwards - which might be due to the V motors only moving -
                                            as the U & W gantries would then move in a bit - although the U axis does move a little bit after the other ones - so it might be moving too.

                                            Gantry 1 does a ZHop (B Axis) and an actual Z lift - it may be either of these. - will try taking each one out next to see which one makes a difference

                                            In this scenario I am using UVWDA Axis - for gantry 2 - none of which are redirected to X,Y or Z in T2 - but the layer shift is happening in UV & W as far as I can tell from the video.

                                            I tried setting a trigger on the V axis end stop but it didn't fire for some reason. had to do an M122 a little while afterwards.

                                            I've had this issue on the XY axis too.
                                            If I take out the Z Hopping (using AB&D) I don't seem to get it - so I think it is more likely related to them than Z, or maybe a combination.

                                            Update1 - put abort in here - and it didn't layer shift - so now trying it again with the abort just after the G1 Z0.6

                                            G1 B{global.bOffset+0.4} F30000
                                            M802 L2244; Check positions
                                            G1 X137.83 Y191.812 B{global.bOffset+0.4}
                                            M122
                                            abort "before G1 Z"
                                            M802 L2246; Check positions
                                            G1 Z.6
                                            
                                            M400 ; Release Z Axis
                                            G1 B{global.bOffset}
                                            M802 L2249; Check positions
                                            

                                            Update2 - its the G1 Z.6 on T0 (XYB) - that is causing the layer shift on T1 / T2 (UVWAD) - have created dummy AXIS for X&Y on the T1 and T2 tool definitions - will try doing the same for Z next

                                            This is the M122 immediately after the layer shift occurred.

                                            === Diagnostics ===
                                            RepRapFirmware for Duet 3 MB6HC version 3.5.4 (2024-11-24 10:47:10) running on Duet 3 MB6HC v1.02 or 1.02a (standalone mode)
                                            Board ID: 0JD4M-958L1-M2NS0-7JTDG-3SN6K-91FKZ
                                            Used output buffers: 3 of 40 (40 max)
                                            === RTOS ===
                                            Static ram: 155464
                                            Dynamic ram: 130952 of which 28 recycled
                                            Never used RAM 55292, free system stack 143 words
                                            Tasks: NETWORK(1,ready,36.6%,153) ETHERNET(5,nWait 7,0.5%,116) HEAT(3,nWait 6,0.0%,323) Move(4,nWait 6,0.7%,211) CanReceiv(6,nWait 1,0.1%,792) CanSender(5,nWait 7,0.0%,329) CanClock(7,delaying,0.0%,348) TMC(4,nWait 6,9.6%,53) MAIN(1,running,52.4%,103) IDLE(0,ready,0.0%,29), total 100.0%
                                            Owned mutexes: File2(MAIN)
                                            === Platform ===
                                            Last reset 00:08:49 ago, cause: software
                                            Last software reset at 2025-06-04 15:40, reason: User, Gcodes spinning, available RAM 58268, slot 0
                                            Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
                                            Error status: 0x04
                                            MCU temperature: min 45.6, current 46.2, max 47.0
                                            Supply voltage: min 24.0, current 24.2, max 24.3, under voltage events: 0, over voltage events: 0, power good: yes
                                            12V rail voltage: min 12.0, current 12.2, max 12.4, under voltage events: 0
                                            Heap OK, handles allocated/used 198/80, heap memory allocated/used/recyclable 2048/1688/624, gc cycles 28
                                            Events: 0 queued, 0 completed
                                            Driver 0: standstill, SG min 0, mspos 184, reads 57010, writes 0 timeouts 0
                                            Driver 1: standstill, SG min 0, mspos 88, reads 57010, writes 0 timeouts 0
                                            Driver 2: standstill, SG min 0, mspos 440, reads 57010, writes 0 timeouts 0
                                            Driver 3: ok, SG min 0, mspos 488, reads 57010, writes 0 timeouts 0
                                            Driver 4: ok, SG min 0, mspos 1000, reads 57010, writes 0 timeouts 0
                                            Driver 5: standstill, SG min 0, mspos 920, reads 57010, writes 0 timeouts 0
                                            Date/time: 2025-06-04 15:49:07
                                            Slowest loop: 11.61ms; fastest: 0.05ms
                                            === Storage ===
                                            Free file entries: 16
                                            SD card 0 detected, interface speed: 25.0MBytes/sec
                                            SD card longest read time 3.0ms, write time 3.1ms, max retries 0
                                            === Move ===
                                            DMs created 125, segments created 25, maxWait 17980ms, bed compensation in use: none, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00
                                            next step interrupt due in 457 ticks, disabled
                                            Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
                                            === DDARing 0 ===
                                            Scheduled moves 1309, completed 1309, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                                            === DDARing 1 ===
                                            Scheduled moves 1079, completed 1074, hiccups 0, stepErrors 0, LaErrors 0, Underruns [186, 0, 0], CDDA state 3
                                            === Heat ===
                                            Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
                                            Heater 0 is on, I-accum = 0.1
                                            Heater 1 is on, I-accum = 0.0
                                            Heater 2 is on, I-accum = 0.0
                                            === GCodes ===
                                            Movement locks held by null, null
                                            HTTP is idle in state(s) 0
                                            Telnet is idle in state(s) 0
                                            File is doing "G4 P91" in state(s) 0 0, running macro
                                            USB is idle in state(s) 0
                                            Aux is idle in state(s) 0
                                            Trigger is idle in state(s) 0
                                            Queue is idle in state(s) 0
                                            LCD is idle in state(s) 0
                                            SBC is idle in state(s) 0
                                            Daemon is idle in state(s) 0
                                            Aux2 is idle in state(s) 0
                                            Autopause is idle in state(s) 0
                                            File2 is ready with "M122" in state(s) 0
                                            Queue2 is idle in state(s) 0
                                            Q0 segments left 0, axes/extruders owned 0x40000000
                                            Code queue 0 is empty
                                            Q1 segments left 1, axes/extruders owned 0x80000087
                                            Code queue 1 is empty
                                            === CAN ===
                                            Messages queued 7644, received 31143, lost 0, errs 0, boc 0
                                            Longest wait 5ms for reply type 6013, peak Tx sync delay 358, free buffers 50 (min 48), ts 2207/2207/0
                                            Tx timeouts 0,0,0,0,0,0
                                            === Network ===
                                            Slowest loop: 36.77ms; fastest: 0.03ms
                                            Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
                                            HTTP sessions: 3 of 8
                                            = Ethernet =
                                            Interface state: active
                                            Error counts: 0 0 0 0 0 0
                                            Socket states: 2 2 2 2 2 2 0 0
                                            === WiFi ===
                                            Interface state: disabled
                                            Module is disabled
                                            Failed messages: pending 0, notrdy 0, noresp 0
                                            Socket states: 0 0 0 0 0 0 0 0
                                            === Multicast handler ===
                                            Responder is inactive, messages received 0, responses 0
                                            Cancelled printing file 0:/gcodes/TableLeg.gcode, print time was 0h 8m
                                            after Z move - before M400
                                            

                                            The M122 before it occurred should be this one - from. the previous test - where the abort was just before the failure.

                                            	12 M802 L 2244
                                            === Diagnostics ===
                                            RepRapFirmware for Duet 3 MB6HC version 3.5.4 (2024-11-24 10:47:10) running on Duet 3 MB6HC v1.02 or 1.02a (standalone mode)
                                            Board ID: 0JD4M-958L1-M2NS0-7JTDG-3SN6K-91FKZ
                                            Used output buffers: 2 of 40 (40 max)
                                            === RTOS ===
                                            Static ram: 155464
                                            Dynamic ram: 130984 of which 20 recycled
                                            Never used RAM 55268, free system stack 117 words
                                            Tasks: NETWORK(1,ready,37.4%,137) ETHERNET(5,nWait 7,0.6%,316) HEAT(3,nWait 6,0.0%,323) Move(4,nWait 6,0.7%,211) CanReceiv(6,nWait 1,0.1%,771) CanSender(5,nWait 7,0.0%,327) CanClock(7,delaying,0.0%,346) TMC(4,nWait 6,9.6%,53) MAIN(1,running,51.6%,103) IDLE(0,ready,0.0%,29), total 100.0%
                                            Owned mutexes: File2(MAIN)
                                            === Platform ===
                                            Last reset 00:09:55 ago, cause: software
                                            Last software reset at 2025-06-04 15:18, reason: User, Gcodes spinning, available RAM 60108, slot 2
                                            Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
                                            Error status: 0x04
                                            MCU temperature: min 45.2, current 45.8, max 46.1
                                            Supply voltage: min 24.0, current 24.2, max 24.3, under voltage events: 0, over voltage events: 0, power good: yes
                                            12V rail voltage: min 12.0, current 12.2, max 12.4, under voltage events: 0
                                            Heap OK, handles allocated/used 198/80, heap memory allocated/used/recyclable 2048/1628/564, gc cycles 25
                                            Events: 0 queued, 0 completed
                                            Driver 0: standstill, SG min 0, mspos 360, reads 35168, writes 0 timeouts 0
                                            Driver 1: standstill, SG min 0, mspos 856, reads 35168, writes 0 timeouts 0
                                            Driver 2: standstill, SG min 0, mspos 296, reads 35167, writes 0 timeouts 0
                                            Driver 3: ok, SG min 0, mspos 193, reads 35167, writes 0 timeouts 0
                                            Driver 4: ok, SG min 0, mspos 640, reads 35166, writes 0 timeouts 0
                                            Driver 5: standstill, SG min 0, mspos 184, reads 35166, writes 0 timeouts 0
                                            Date/time: 2025-06-04 15:28:15
                                            Slowest loop: 219.49ms; fastest: 0.05ms
                                            === Storage ===
                                            Free file entries: 16
                                            SD card 0 detected, interface speed: 25.0MBytes/sec
                                            SD card longest read time 3.1ms, write time 3.2ms, max retries 0
                                            === Move ===
                                            DMs created 125, segments created 25, maxWait 21911ms, bed compensation in use: none, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00
                                            next step interrupt due in 1447 ticks, disabled
                                            Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
                                            === DDARing 0 ===
                                            Scheduled moves 768, completed 768, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
                                            === DDARing 1 ===
                                            Scheduled moves 1078, completed 1073, hiccups 0, stepErrors 0, LaErrors 0, Underruns [186, 0, 0], CDDA state 3
                                            === Heat ===
                                            Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
                                            Heater 0 is on, I-accum = 0.1
                                            Heater 1 is on, I-accum = 0.0
                                            Heater 2 is on, I-accum = 0.0
                                            === GCodes ===
                                            Movement locks held by null, null
                                            HTTP is idle in state(s) 0
                                            Telnet is idle in state(s) 0
                                            File is doing "G4 P91" in state(s) 0 0, running macro
                                            USB is idle in state(s) 0
                                            Aux is idle in state(s) 0
                                            Trigger is idle in state(s) 0
                                            Queue is idle in state(s) 0
                                            LCD is idle in state(s) 0
                                            SBC is idle in state(s) 0
                                            Daemon is idle in state(s) 0
                                            Aux2 is idle in state(s) 0
                                            Autopause is idle in state(s) 0
                                            File2 is ready with "M122" in state(s) 0
                                            Queue2 is idle in state(s) 0
                                            Q0 segments left 0, axes/extruders owned 0x40000000
                                            Code queue 0 is empty
                                            Q1 segments left 1, axes/extruders owned 0x80000083
                                            Code queue 1 is empty
                                            === CAN ===
                                            Messages queued 7693, received 31652, lost 0, errs 0, boc 0
                                            Longest wait 3ms for reply type 6061, peak Tx sync delay 92, free buffers 50 (min 48), ts 2247/2247/0
                                            Tx timeouts 0,0,0,0,0,0
                                            === Network ===
                                            Slowest loop: 188.10ms; fastest: 0.03ms
                                            Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
                                            HTTP sessions: 3 of 8
                                            = Ethernet =
                                            Interface state: active
                                            Error counts: 0 0 0 0 0 0
                                            Socket states: 2 2 2 2 2 2 0 0
                                            === WiFi ===
                                            Interface state: disabled
                                            Module is disabled
                                            Failed messages: pending 0, notrdy 0, noresp 0
                                            Socket states: 0 0 0 0 0 0 0 0
                                            === Multicast handler ===
                                            Responder is inactive, messages received 0, responses 0
                                            Cancelled printing file 0:/gcodes/TableLeg.gcode, print time was 0h 3m
                                            before Z move
                                            

                                            Looking at the two prints - the only difference between AXIS owned is that before they layer shift Q1 owns B,X & Z, but after the layer shift it owns B,X,Y & Z - It doesn't own UVW - so why they are getting moved I don't know - they are not even owned by the other currently idle in a G4 motion system - which is I think currently on T2

                                            A few lines ahead in the file

                                             M596 P0
                                              
                                            T2  
                                            
                                            
                                            
                                            
                                            
                                            
                                            ;M98 P"0:/macros/changeFilament.g" A previous_extruder  B new_filament_temp  L layer_num  N next_extruder   F first_layer_temperature2
                                            
                                            M98 P"0:/macros/changeFilament.g" A0 B220 L2  N2  F220 
                                            
                                            

                                            Then within the macro it is looping around here - the the G4 P91 - which in this case is waiting for the pre-heat to come in on the other motion system and set the target temp to 200.
                                            The one with the G1 Z.6 that seems to be causing the error.

                                            if exists(param.N) && param.N == 2 ; WVA
                                                
                                                var delayTime = -1
                                                if exists(global.delays) && global.delayCount+2 < #global.delays && param.A == 0
                                                    set global.delayCount = global.delayCount + 2
                                                    set var.delayTime = global.delays[global.delayCount]+global.delays[global.delayCount+1]-1
                                                    if global.delayCount > 2 && global.delays[global.delayCount-1] < 0
                                                        set var.delayTime = var.delayTime + global.delays[global.delayCount-1]/2
                                                    echo {state.thisInput},"delays",global.delayCount,global.delays[global.delayCount],global.delays[global.delayCount+1],var.delayTime
                                                ;M596.1 P0
                                                T2
                                                var startWait = state.upTime+state.msUpTime/1000
                                                if param.A != 0
                                                        set global.startParkUV = -1
                                                echo {state.thisInput},"step 0 - wait for 200",{sensors.analog[2].lastReading}
                                                while (heat.heaters[2].active < 200 && var.delayTime == -1)  || (var.delayTime != -1  && state.upTime+state.msUpTime/1000-var.startWait < var.delayTime )
                                                        if state.status == "cancelling"
                                                            abort "step0 - cancelled"
                                                        while iterations < 5
                                                            G4 P91
                                                        set global.p1state = "inWait"
                                                        if mod(iterations,50) == 9
                                                            if var.delayTime == -1
                                                                echo {state.thisInput},"step 0 - wait for 200",{sensors.analog[param.N+1].lastReading},global.p1state
                                                            else
                                                                echo {state.thisInput},"step 0 - wait for ",{var.delayTime - (state.upTime+state.msUpTime/1000-var.startWait)}," more secs"
                                            

                                            Now trying changing the Layer change sequence to be:

                                            G1 B{global.bOffset+0.4} F30000
                                            M802 L2248; 
                                            G1 X131.989 Y190.411 B{global.bOffset+0.4}
                                            M802 L2250; 
                                            T-1  
                                            G1 Z.6
                                            M400 ; Release Z Axis
                                            T0  
                                            G1 B{global.bOffset}
                                            M802 L2255; 
                                            

                                            The problem has now gone away again after that change - not sure if it has fixed it, or just changed the timing so that it will occur somewhere else.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA