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

    Sovol SV08 Multiple Motion System Upgrade.

    Scheduled Pinned Locked Moved
    My Duet controlled machine
    8
    239
    26.8k
    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.
    • o_lampeundefined
      o_lampe @dwuk3d
      last edited by o_lampe

      @dwuk3d The way you mounted the rear INDX tool bar will not work, because it blocks Y-motion of both IDEX arms. You'll need overlapping motion to have full access to the center of the bed.
      You could turn around the rear IDEX arm and put the INDX tool bar to the very rear of the frame....
      There would also be a problem with the number of filament-holders you've places on each tool bar unless you want 4 filament holders for each extruder + the center one available for both.

      Should Bondtech be aware of your virtual design, they might be convinced by an animated simulaton. If not, try to start a kickstarter campaign...

      Edit: as a sidenote, if you had a moving bed (in Z) instead of a flying gantry you could even print while you change tools. That would be a huge timesafer

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

        @o_lampe thanks for the comments - you are correct about the Y axis issue.

        My initial plan to overcome this is for both of my INDX gantries to have their own independent Z movement (a bit like the MissChanger). I was already planning to do this with the normal toolchanger option.

        I could as you said reverse the 2nd gantry too - but I would like to try first having a tool gantry in a place where both Y gantries could occasionally reach. This would allow individual tools to be loaded onto any of the 4 print heads- which firstly think would look interesting in a video, but more importantly would mean the full build plate area is accessible for every filament colour.

        In terms of the number of tools - I am aiming for 12 colours - so a minimum of 12 in total.

        But I also want a few extra to allow some colours to be duplicated to allow them to be parallel printed.

        Ultimately where I think I am aiming to get to is being able to demonstrate doing up to 12 colour prints of models faster than a single colour print of the same model on most other printers. Plus also have no waste other than a few prime towers. With the prime towers being shaped so that they can be stacked and joined to make useful objects.

        The Bondtech INDX would help me particularly in keeping waste down - as before this I was expecting to have to do some single nozzle multiplexing for a few of the colours.

        I've posted some stuff on the INDX discord - but Bondtech understandably seem much more interested in simpler, single head designs - Even if their prices are quite high I think I will purchase two of their extruders heads and a few Nozzles for my project in a few months,

        Fitting a Duet 1lc toolboard into one of their print heads, plus a Z Lift motor outside is probably going to mess up the aesthetics of the INDX extruder toolheads quite a lot though.

        I am planning to design some covers for my existing toolheads soon to make them look a bit neater - I think I might make them look a bit like the INDX!

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

          @dwuk3d Where did you find the CAD files for the INDX? Annoyingly, the Discord link on https://www.bondtech.se/indx-by-bondtech/ is not valid.

          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 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
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA