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

    Sovol SV08 Multiple Motion System Upgrade.

    Scheduled Pinned Locked Moved
    My Duet controlled machine
    8
    268
    35.5k
    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 @droftarts
      last edited by

      @droftarts I have posted about the problem on the Discord and they say they will update the link with a permanent one - so hopefully it will be fixed soon.

      Re the CAD - it's not to scale - I just knocked up a rough presentation of the components from a few screenshots from the video an the 3D Musketeers Podcast - so that I could play with different configurations.

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

        @dwuk3d Bondtech INDX Projected costs now out - $35 per tool head. Really happy with that.
        $250 for the toolhead/extruder - a bit pricey - but worth it I think for the reduced complexity the solution brings.

        Availability Nov25 - which is quite a while off unfortunately.

        Tool change time 12 secs, with heat up only 4 secs.

        Overall looks very promising.

        I don't think I could justify adding 4 toolheads at that price to my system - but two I think would work quite well - one on each gantry - with the IDEX extruders on the gantries being single colour, or maybe with an MMU/Box Turtle type add-on (which wouldn't have to wait until November).

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

          Might have solved the problem with my Nema8's - which seemed to work before but then stopped working.

          I first thought it might be my new improved design and secondly maybe the firmware.

          With the help of Physics Teacher Anthony - who reminded me that I need to lubricate the bolt - that helped a fair bit and the lifting improved - but the motor still kept stalling.

          The biggest issue though was an oversight on my part re motor speed. I was just using the Dashboard controls - and I'm not sure how to control the speed.

          But when I do a G1 H2 A1 F100 for example it seems to works ok - so I think I was just running the motor too fast from the dashboard in my initial tests.

          If I had just connected up the end stop, and ran the proper homea.g with lower feed rates- It probably would have worked ok.

          Will still investigate over engineering the lift motors a bit - but a good step forward.

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

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

            The biggest issue though was an oversight on my part re motor speed. I was just using the Dashboard controls - and I'm not sure how to control the speed.

            You can change the feedrate in Settings > Machine-specific > Feedrate for move buttons (mm/min). However, it applies to all axis buttons, except extruder axes.

            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 0
            • dwuk3dundefined
              dwuk3d @droftarts
              last edited by

              @droftarts Thanks will try that.

              I guess I should set the maximum feedrate for the motors in the stepper configs too - however the problem with that is gravity - i.e. They can go quite a lot faster downwards than up - and for Z hopping I should use the fully available speed in both directions.

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

                SV08 Double Gantry INDX option - with middle tool rack having independent Z

                Tools can be moved between front and rear gantry.

                Parallel Printing and Parallel tool changes

                Screenshot 2025-03-29 at 17.57.12.png

                A bit messy - but probably what I might end up with -

                INDX on 2 heads on both gantries - with IDEX too - using existing SOVOL heads, with option to offload both IDEX heads when not needed.

                So this is making me think I will probably still do a tool changer upgrade on my printer if I complete the 4 head stage before INDX becomes available.

                Screenshot 2025-03-29 at 18.45.40.png

                Some estimates of tool change/colour change times

                INDX tool change is about 17 seconds in total including reheat and priming.

                XL based on PrusaSlicer about 14 seconds (3 secs quicker).

                Doing the same thing with Bambu Studio and an H2D - Intra Nozzle total change times seem to be estimated at 11.7 seconds (about 5.3 secs quicker). IDEX times likely to be similar

                If you move all swaps to the same Nozzle then Bambu Studio estimates 76secs for a normal Multiplexing filament change.

                Doing the same thing for an X1C comes out as 95 seconds per change -

                An MK4 with MMU3 using the same method is estimating at 67 seconds per change.

                Dual Gantry parallel INDX or Stealtchanger tool changes could be as quick as sub-second - and faster than Ratrig toolshift..

                Parallel printing could then reduce single colour printing by appx 40% on dual gantry for some larger models, and by over 70% for symmetrical models on quad head printer.

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

                  Don't really understand what is happening with my NEMA8 motor.

                  It started working pretty well with the slower speeds, and I created a sort of test bed - and it lifted 500g quite happily.

                  Then it stopped working - it might be electronic, the motor, or my mechanical design - I might be over constraining the bolt

                  5C7F5C43-6B92-4E2C-A2EC-A3CA5C339F63_1_105_c.jpeg

                  Lead Screw Nema11 now arrived - the lead screw is a bit long - 50mm - but will try that - with the coupler for the lead screw not too constrained if I get any trouble.

                  This motor is rated at 1.0A - will be interesting to see how more powerful it is.

                  A7B6EB81-899A-4A65-825B-CBFA8F61535C_1_102_o.jpeg

                  Nema 11 installed - sticks up more than it really needs to - might chop off the lead screw, or try and source one with shorter screw - but managing to lift 500g and the extruder so far
                  21264361-30EE-4CD6-A06B-CB7B34398D0C_1_102_o.jpeg

                  F93E6250-4A40-4BCA-AD5C-B23C2B821331.jpeg Screenshot 2025-03-29 at 22.44.30.png

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

                    Simplified Dual IDEX belt routing.

                    Decided it will be easier to put one 'Ratrig Hybrid' Y Axis motor above (for rear gantry) and below (for front gantry).

                    It will mean that the bed needs to be raised up a bit - due to the height of the bottom motor - but this will be needed eventually anyway when I move
                    to an occasionally moving bed.

                    Will have to redesign the extruder carriage belt couplings so that there is room one of the belts to fit through.

                    583EBB6F-833B-4DB7-8D5A-D5D0EA364865.png 7EE20091-82B1-4C7D-8760-483BBC791185.png

                    I think this should work well for the front gantry in particular as the belt fix point will be very near the Y axis rail carriage.

                    For the rear gantry they are further away - as the fix point is at the top - so there might be a slight pendulum effect.

                    Setup will be mirrored on the other side - could I suppose swap the top and bottom couplings - but I guess it will be better to keep both sides of each gantry the same.

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

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

                      Don't really understand what is happening with my NEMA8 motor.

                      Their internal magnets might have degraded due to overheating? I noticed the same on some NEMA14 pancakes I used to use for extruders. They survived only when I reduced their rated current by 50%.
                      I replaced them with brushless gimbal motors and a selfmade simpleFOC-interface and the problem was gone.Torque/weight ratio improved a lot, too.
                      alt text

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

                        @o_lampe Thanks - looks interesting - especially the gearing you have added.

                        I would like to investigate adding some nylon or metal gears if I can source some suitable ones.

                        I haven't really investigated driving normal motors from Duet - but it would be useful to be able to try something like your motors if I can control them ok with GCODE.

                        I switched away from servo's partly as they didn't play well with parallel gcode processing.

                        I'm wondering whether the type of Servo Motors that BambuLab have started using in the H2D extruder and AMS2 might be of use.

                        I guess the ideal solution would involve some sort of close loop feedback and temperature monitoring.

                        Think I will at least put some speed and reliability testing in my Macros - I think I should be able to home the ZHopper AXIS, do a few up and down movements and check the home point hasn't drifted due to missed steps.
                        Could also I guess use the same method to find the maximum move speeds up and down, plus also use the same method on my U & V axis with their optical end stops.
                        So far in my first steps my Nema11 seems to be able to handle F1000 moves up - which look pretty fast.

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

                          Nema11 seems to be able to handle F1900 on a 1mm pitch lead screw - which is faster than I expected.

                          Started to get a bit warm at end of test - so probably shouldn't push it that hard - will probably limit this ZHopper to F500 or F1000

                          Test sequence was:

                          I homed A.

                          Then lifted it 0.2 slowly (F100)
                          Then lifted it at the test rate 1mm
                          Then lowered it slowly (F100) back to the end stop using G1 H4 - to check how far it had drifted.
                          Then G92 A0 - to reset end stop - and repeat.
                          5 times for each federate

                          31/03/2025, 09:34:54 rate 2000 max pos 0.033 average 0.0107500 total 0.054
                          31/03/2025, 09:34:49 rate 1900 max pos 0.015 average 0.0075000 total 0.038
                          31/03/2025, 09:34:44 rate 1800 max pos 0.015 average 0.0068750 total 0.034
                          31/03/2025, 09:34:38 rate 1700 max pos 0.014 average 0.0044375 total 0.022
                          31/03/2025, 09:34:33 rate 1600 max pos 0.010 average 0.0045625 total 0.023
                          31/03/2025, 09:34:28 rate 1500 max pos 0.014 average 0.0034375 total 0.017
                          31/03/2025, 09:34:22 rate 1400 max pos 0.004 average 0.0018125 total 0.009
                          31/03/2025, 09:34:17 rate 1300 max pos 0.006 average 0.0039375 total 0.020
                          31/03/2025, 09:34:12 rate 1200 max pos 0.008 average 0.0050000 total 0.025
                          31/03/2025, 09:34:06 rate 1100 max pos 0.008 average 0.0030000 total 0.015
                          31/03/2025, 09:34:01 rate 1000 max pos 0.004 average 0.0023125 total 0.012
                          31/03/2025, 09:33:55 rate 900 max pos 0.002 average 0.0006250 total 0.003
                          31/03/2025, 09:33:50 rate 800 max pos 0.003 average 0.0023750 total 0.012
                          31/03/2025, 09:33:44 rate 700 max pos 0.005 average 0.0023125 total 0.012
                          31/03/2025, 09:33:39 rate 600 max pos 0.010 average 0.0057500 total 0.029
                          31/03/2025, 09:33:33 rate 500 max pos 0.002 average 0.0010000 total 0.005
                          31/03/2025, 09:33:27 rate 400 max pos 0.003 average 0.0013750 total 0.007
                          31/03/2025, 09:33:22 rate 300 max pos 0.007 average 0.0036250 total 0.018
                          31/03/2025, 09:33:15 M98 P"0:/macros/Speed TestA.g"
                          rate 200 max pos 0.014 average 0.0061875 total 0.031

                          Test Macro

                          ;Speed TestA.g
                          
                          M98 P"homeA.g"
                          M400
                          G91
                          var maxV = 0
                          var totalV = 0
                          var count = 0
                          var rate = 200
                          while var.rate <= 2000
                              while iterations < 5
                                  G1 A0.2 F100
                                  M400
                                  G1 A1 F{var.rate}
                                  G1 H4 A-2 F100
                                  M400
                                  var pos = abs(move.axes[5].machinePosition)
                                  if var.pos > var.maxV
                                      set var.maxV = var.pos
                                  set var.totalV = var.totalV + var.pos
                                  set var.count = var.count + 1
                          
                                  G92 A0
                                  if var.pos > 0.1
                                      break
                          
                              echo "rate",{var.rate},"max pos",{var.maxV},"average",{var.totalV}/{var.count},"total",{var.totalV}
                              if var.maxV > 0.1 
                                  break
                              set var.rate = var.rate + 100
                              set var.maxV = 0
                              set var.totalV = 0
                              set var.count = 0
                          

                          Config

                          ; 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 P121.0 S0 D2 ; driver 121.0 goes backwards (extruder 0)
                          M569 P122.0 S0 D2 ; driver 122.0 goes backwards (extruder 1)
                          
                          ; 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.1 A1.4 B0.5; set axis mapping
                          M350 X16 Y16 Z16 U16 V16 A16 B16  I1 ; configure microstepping with interpolation
                          M906 X800 Y800 Z800 U800 V800 A750 B150 ; set axis driver currents
                          ; A - 1.8 degree, 0.7mm pitch - 200*16/0.7 = 4571
                          ; A - 1.8 degree, 1mm pitch - 200*16 = 3200
                          M92 X80 Y80 Z533.33 U80 V80 A3200 B629  ; configure steps per mm
                          if exists(global.vMin) == false
                              global vMin = 120
                              global vMax = 340
                              global yMin = -5
                              global yMax = 210
                          M208 X-5:310 Y-5:210 Z0:300 U27:350 V120:340 A0:3 B0:3  ; set minimum and maximum axis limits
                          
                          M566 X540 Y540 Z12 U540 V540 A300 B300 ; set maximum instantaneous speed changes (mm/min)
                          M203 X10000 Y10000 Z720 U10000 V10000 A2000 B200  ; set maximum speeds (mm/min)
                          M201 X10000 Y10000 Z500 U10000 V10000 A2000 B20  ; set accelerations (mm/s^2)
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • o_lampeundefined
                            o_lampe @dwuk3d
                            last edited by o_lampe

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

                            Thanks - looks interesting - especially the gearing you have added.

                            These spur gears were printed with a resin printer using anycubic's tough resin. They don't last for ages, but I can print a whole bunch at once.
                            There are a few user on this board using simpleFOC with it's GCode-compliant step/dir interface.
                            It's a bit of a learning curve to get used to it's PID behaviour... Their development & documentation status isn't as professional as Duet3D's, yet.
                            In the past, I've tagged some threads with sFOC or simpleFOC if you are interested.

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

                              NEMA11 seems to be working quite well.

                              Made some good progress over the last few days on

                              1. Reliable Z height from the two gantries. I switched back to just using the induction probes for now - as using Induction plus tap was getting too confusing.
                              2. trep.g and tpost.g macros - that include heating up, head cleaning and priming.
                              3. Tidying up of macro's so hopefully they work in both multi and single threaded modes.

                              Basic IDEX things like head cleaning and priming are quite a challenge - so I am trying to get them as reliable as possible before attempting some proper multi colour and parallel prints.
                              C428FA56-D57B-4AE9-BA13-64605521F26B.jpeg
                              7E6C746F-A120-4D00-8BF8-6331BFBDC199_4_5005_c.jpeg

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

                                New build plan - based on INDX - which I think looks a lot less complicated than my previous attempt

                                Phase 1 - Dual Gantry, Multi Motion System - current phase - still working on refining macro's and reliability.

                                Phase 2 - Dual Idex on rear gantry only (3 heads) - CoreXYUVW - Still a good testing point for additional kinematics, and avoids the need for motors at the bottom front.
                                75E8DD1B-0714-4372-B256-CF8563FC187A.png

                                Phase 3 - Occasionally moving bed - to allow for bigger prints, and for all heads to access full Y extent of bed.

                                Phase 4 - Nozzle Changer - with INDX on front gantry
                                2206D42B-E3E8-4CF0-A75C-922E621F54A9.png

                                Print types

                                1. Small single colour - using just INDX head on front gantry
                                2. Big Single colour - parallel printing with all 3 heads
                                3. Small multi colour - Most common 2 colours in rear heads, plus 2 of the INDX slots - most colour changes would then be cross gantry parallel changes - so almost instant
                                4. Big multi colour - As Small multi colour - but with some parallel printing too.
                                5. Duplicate prints - - up to 3x speed for single colour using all 3 heads

                                Phase 5 - Only if enough benefits seen from IDEX - Add 4th head - as IDEX on Front Gantry, possibly with stealth changer offload ability for fast non IDEX printing.

                                Phase 4 - AMS - ideally finding a way to connect Bambu Lab AMSs - if not some sort of MMU solution - which will need more Mini5s

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

                                  @dwuk3d
                                  alt text

                                  For a moment, it looked like you were going to mount a second INDX on the back of the front gantry!

                                  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 0
                                  • dwuk3dundefined
                                    dwuk3d @droftarts
                                    last edited by

                                    @droftarts haven't ruled out anything yet about the direction of heads on gantries - but I hadn't thought of opposite directions on the same gantry.

                                    Thinking about it - it might actually make the belt routing a bit simpler as have a linear on each side - as the belts wouldn't need to cross the linear rail carriages.

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

                                      Been working today on tidying up probing and tool change macros which is proving quite difficult.

                                      I'm currently on 3.5.4
                                      B144E24C-AB13-4785-95BC-65DBCBD47283_4_5005_c.jpeg Screenshot 2025-04-03 at 22.01.19.png

                                      Biggest issue I am having is with occasional 'Tool is in use or Axis is in use messages' - the biggest problem with these are that they don't stop execution so a) It can cause head clashes and b) They are quick tricky to track down.

                                      I got a surprising tool temperature requirement - absolute zero - which I need to try and track down the cause.
                                      C67517D7-0120-4AF4-AB92-129BEE86530C_4_5005_c.jpeg
                                      UPDATE: Solved this issue - I had missed out the S on my M568 - so just had 0 - handy to know for the future.

                                      Also I am getting some quite strange behaviour with the U and Z axis - where sometimes when I do a Z move down it seems to also move U left (probably to where X currently is).

                                      If I then move Z up again and U right - it goes a lot further than I am asking - presumably back to its proper position.

                                      It's interesting seeing the head move in 45 degrees - but it is messing up my probing.

                                      See <<< on line 74 in here for the place where it does the strange move.
                                      Update - Solved - I removed all T0 and T1 commands from alignment/homing/cleaning sequences and that seems to have stopped the odd behaviour.
                                      It left the possibility of parts of the macro's being multi threaded by replacing all T0,T1's with M596.1 T0/T1 - which will still do the tool switches when needed.

                                      ;AlignUVZ.g
                                      ;
                                      if exists(global.ballProbeX) == false
                                          abort "XY alignment not found"
                                      
                                      
                                      G90
                                      G1 Z50 F10000
                                      T0
                                      G1 X30 Y30 F20000
                                      
                                      M400
                                      M98 P"0:/macros/FindProbeUV.g"
                                      M574 Z1 S2 K3; Set Z to Ball Probe
                                      G1 H4 Z{global.zHit-1} F300
                                      
                                      if sensors.probes[3].value[0] = 0
                                          echo "Probe not found"
                                          break
                                      ;G1 U204 V149 F10000
                                      
                                      T1
                                      
                                      ; Find basic Z position
                                      
                                      var Zpos = {50,49,48,48,48}
                                      var Zrate = {300,200,100,100,100}
                                      var Upos = {10,8,8,8,8}
                                      var Vpos = {10,8,8,8,8}
                                      var UVrate = {1000,800,300,300,300}
                                      
                                      var prev = false
                                      var pVM = 0
                                      var pUM = 0
                                      
                                      var VM=0
                                      var UM=0
                                      
                                      
                                      while iterations < 2
                                          M574 Z1 S2 K3; Set Z to Ball Probe
                                      
                                          G90
                                          G1 Z{var.Zpos[iterations]} F300
                                          G91 
                                          G1 H4 Z-12 F{var.Zrate[iterations]}
                                          ;echo "Z", {move.axes[2].userPosition}
                                      
                                      
                                          var ZP = move.axes[2].userPosition
                                      
                                          G1 Z5 F5000
                                      
                                          M574 Z1 S2 K0; configure Z axis endstop
                                      
                                          ; Now find U middle
                                      
                                          G91
                                          G1 U{0-var.Upos[iterations]} F5000
                                          G90
                                          G1 Z{var.ZP-0.2} F300
                                      
                                      
                                          G91
                                          M574 U1 S2 K3 ; Configure U axis with Z ball probe
                                          G1 H4 U+10 F{var.UVrate[iterations]}
                                      
                                          ;echo "X1", {move.axes[0].userPosition}
                                          M400
                                          var U1 = move.axes[3].userPosition
                                      
                                          G1 Z5 F300
                                          G1 U{var.Upos[iterations]}  F5000
                                          G1 Z-5 ; <<< Strange move - where it also moves U back
                                          M400
                                          
                                          G1 H4 U-10 F{var.UVrate[iterations]}
                                          ;echo "X2", {move.axes[0].userPosition}
                                          M400
                                          var U2 = move.axes[3].userPosition
                                      
                                          G1 Z5
                                      
                                          G90
                                          set var.UM = (var.U1+var.U2)/2
                                         
                                      
                                          ;echo "XM", {var.XM}
                                          G1 U{var.UM}
                                      
                                          M574 U2 P"!122.io0.in" S1 ; configure U axis endstop
                                      
                                          ; Now V
                                          G91
                                      
                                          G1 V{0-var.Vpos[iterations]} F5000
                                          G1 Z-5 F300
                                          M574 V1 S2 K3
                                      
                                          G1 H4 V+10 F{var.UVrate[iterations]}
                                          ;echo "Y1", {move.axes[1].userPosition}
                                          M400
                                          var V1 = move.axes[4].userPosition
                                      
                                          G1 Z5 F300
                                          G1 V{var.Vpos[iterations]} F5000
                                          G1 Z-5 F300
                                      
                                          G1 H4 V-10 F{var.UVrate[iterations]}
                                          ;echo "Y2", {move.axes[1].userPosition}
                                          M400
                                          var V2 = move.axes[4].userPosition
                                      
                                          set var.VM = (var.V1 + var.V2) / 2
                                      
                                          echo "UM", {var.UM},"VM", {var.VM},"ZP", {var.ZP},"---U1,2",{var.U1},{var.U2},"--V1,2",{var.V1},{var.V2}
                                          if (var.prev == true)
                                              echo "variation U:",{var.pUM-var.UM}, "V:", {var.pVM-var.VM}
                                              
                                          set var.pVM = var.VM
                                          set var.pUM = var.UM
                                          set var.prev = true
                                      
                                          G1 Z5 F300
                                      
                                          G90 
                                          G1 U{var.UM} V{var.VM} F2000
                                      
                                      
                                          M574 V2 P"io4.in" S1 ; U Axis optical
                                      
                                      
                                      M574 Z1 S2 K3; Set Z to Ball Probe
                                      G91
                                      G1 H4 Z-5
                                      var Z1 = move.axes[2].machinePosition
                                      echo "z1",{var.Z1}
                                      
                                      G1 Z5 F1000
                                      G1 U4 F10000
                                      G1 H4 Z-10
                                      var Z2 = move.axes[2].machinePosition
                                      echo "z2",{var.Z2}
                                      
                                      G1 Z5 F1000
                                      
                                      M574 Z1 S2 K0; configure Z axis endstop
                                      
                                      if var.Z1-var.Z2 < 1
                                          echo "z1,z2",{var.Z1},{var.Z2}
                                          abort "possible issue with UV alignment"
                                      
                                      
                                      
                                      
                                      
                                      G90
                                      var adjust = var.UM - global.ballProbeX
                                      echo "adjusting U",{global.ballProbeX - var.UM},"V",{global.ballProbeY - var.VM}
                                      G92 U{global.ballProbeX} V{global.ballProbeY}
                                      
                                      if exists(global.UVAdjusted) == false
                                          global UVAdjusted = true
                                      
                                      
                                      
                                      
                                      
                                      

                                      I have written a little wrapper macro form M596 - M596.1 - which a) Has the ability for M596's to be switched off, and be allows the tool to be specified instead of the motion system.

                                      NB/ At present my tools and motion systems are swapped round - i.e. T0 is in motion system 1, and T1 in ms 0 - This was due to issues I was having when I have a servo on T1 (UV axis) - so I may well swap them back around at some point.

                                      ;M596.1,g
                                      ;M596.1 P-1  ; Ignore M596.1 commands until P-2
                                      
                                      if exists(global.M596_stat) == false
                                          global M596_stat = -1
                                          
                                      if exists(param.P)
                                          if param.P < 0
                                              set global.M596_stat = param.P
                                          else
                                              if global.M596_stat == -2
                                                  M596 P{param.P}
                                      
                                      if exists(param.T) && global.M596_stat == -2
                                          if param.T == 0
                                              M596 P1
                                              T0
                                          else
                                              M596 P0
                                              T1
                                      
                                      
                                      if exists(param.Z) && global.M596_stat == -2
                                      
                                              M596 P0
                                              T1
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • dwuk3dundefined
                                        dwuk3d
                                        last edited by dwuk3d

                                        Ball probe Auto Alignment getting fairly good.

                                        Images of nozzle as was found by printer with no manual adjustment or head movements.
                                        Screenshot 2025-04-04 at 08.36.39.png Screenshot 2025-04-04 at 08.36.54.png

                                        The alignment isn't perfectly on the centre of the nozzles in the camera because I can't guarantee the XY offset between the camera and ball probe - due to the swing out movement based on a servo - which might be a slightly different angle every time.

                                        Checking with the camera I am getting a 0.1mm variation in the X/U axis, and 0.7mm in the Y/V axis.
                                        Not sure if this a consistent difference or whether it varies.

                                        Not sure if this is dirty nozzles, nozzle shape irregularity or RRF Ball Probe macros' or just the sort of error you might get with a ball probe vs camera.

                                        My XY Axis is still on sensorless end stops - so will be interesting to see what difference it makes swapping between sensorless and optical end stops in keeping alignment across reboots.

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

                                          I think I just had a bright moment regarding z-hop: Re-purposing Rc-car servo savers could be the answer to more torque and accuracy, whilst still be backlash-free.
                                          I tried to find a good picture to show how they work and came up with this:
                                          alt text

                                          Twisting the servo arm while the output-side is fixed to the tool head would be translated to vertical lift (or drop if you want to use gravity to your advance).
                                          They usually come with an adjustable spring which isn't shown here.

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

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

                                            Rc-car servo savers

                                            Thanks - are you suggesting having this attached to a non geared stepper motor, or a servo or somehow attaching it to the lead screw to translate big linear movements into smaller more powerful ones?

                                            The final Nema8 I ordered just arrived and its a non lead screw 34 high vs most of the others which were 24 - so hopefully a bit more powerful.
                                            4DE7A816-ADE4-4730-82A2-2B8D8A158B95.jpeg

                                            The Lead Screw Nema 11 still seems to be working quite well in my probing and Z offset tests - but haven't actually tried doing some proper printing with lots of Z Hopping yet. It is noticeably quicker than the tiny linear stepper that I had on the other axis - and I think will end up being quicker the geared belt driven Z Axis of the SV08

                                            The good news with my current 3 rather than 4 headed next step is at least it means one less Z hopper motor to buy.

                                            Shame I bought the 4th Extruder/ 1LC board and 2nd Mini5 - as I think I might be able to get away with the 16 drivers available on the 6HC, Mini5+, plus 3x1LC

                                            Glad I haven't done to termination removal drill out on the Mini5+ board yet.

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