Multiple passes when doing cuts

Issue #130 resolved
Marius Stanciu created an issue

In the particular case that we want to cut into a metal (e.g 1.5 mm thickness aluminium plate) it will be good to be able to do it in multiple passes (many reasons: save tool life, limited power on the motors etc).

When milling it will be nice to have settings to set the desired depth of cut (what we currently have) but to be able to define tools (that get grouped into a tool list). Each tool should have a custom setting, "tool depth of cut", and if the software sees that the depth of cut is bigger than the "tool depth of cut" it will calculate how many passes will be needed to cut the piece at the desired depth of cut.

As an example let say that we want to cut a 1.5 mm thickness aluminium sheet with an end mill with diameter of 1.5 mm. Since it is recommended not to cut at a depth more than half of the diameter of the tool and since we are dealing with a metal, we choose the "tool depth of cut" of about 0.4 mm. In this case, to be able to cut at 1.5 mm depth we need 4 passes * 0.4 (tool depth of cut) = 1.6 mm (a little over the desired depth of cut of 1.5 mm).

1.6 mm is 0.1 mm over our thickness of the material so a warning should be issued that a sacrificial bed it's required otherwise the tool will hit the router table.

Of course the job can be done as it is right now in multiple steps, each time setting a different depth but since the software potentially can do it, we could focus on something else while the CNC is doing the work.

This could be very useful when doing front panels or maybe when cutting into metal core PCB's (MCPCB's). This feature should be added for the CNC job.

Comments (19)

  1. Eliot Phillips

    Currently you can manually generate cut passes at multiple depths to get the job done.

    ... but that's not so great when you use the Mill Holes option for Excellon files.

    I'm milling holes in a board that's .061" with a .03125" diameter end mill and a .006" z-step for each pass. If I generate 10 depth files, it's going to cut every hole on the board at the current depth and then cut every hole on the board at the next depth and so forth.

    If this was automated, it would stay in the same hole doing multiple passes until it had cut the full depth.

    This multi-depth cut is just as useful for board outlines and slot cutting.

  2. Juan Pablo Caram repo owner

    So, does anyone have ideas on how to go about this? There seem to be many ways to do it, some not very convenient as @eliotphillips points out.

    Maybe it is as simple as:

    for path in geometry:
        while (not_full_depth):
            cut_path()
            increase_depth()
    

    Iterating first over paths and then iterating over depths seems do do the trick. Feedback please!

  3. Juan Pablo Caram repo owner

    Alright people! It's now implemented. Please play around with it (carefully) and tell me how it goes. I'm not closing this issue yet because the feature is very experimental at this time.

  4. Yiannis Mandravellos

    Thanks for this! I created a board cutout job, set the "Cut Z" to -1.7 and "Depth/pass" to 0.6. After generating the job, I noticed that the end depth was -1.8 (3*0.6) instead of the expected -1.7. In other words, I think you should limit the step-down so that it doesn't go deeper than the desired final depth.

  5. Marius Stanciu reporter

    Hi, I did not want so say anything until I checked a little bit more, but there might be some small bugs with this. In certain cases, when using multi depth cut, the last cut is duplicated in G-code. I will investigate and let you know.

    Thank you for implementing this!

  6. Marius Stanciu reporter

    Hi JP!

    I detected this issue when I first set a drilling depth of -2.1mm in 3 steps (each step 0.7mm). I will download the last dev version in case it is solved, try again and post the results here. Thanks! Marius

    LE: I confirm the above. Please see the attached files. a.jpg https://www.dropbox.com/s/j69k5dof92ngxma/a.txt?dl=0

    Having a "last pass" might be useful as a finishing pass but it should be an option.

  7. Juan Pablo Caram repo owner

    This is the problem:

    >>> -0.7*3
    -2.0999999999999996
    

    Therefore, it needs to do another pass at -2.1 to complete the required depth. When it's converted to G-code, the precision is limited to 4 decimal places, so it's rounded to -2.1.

    Will work on it.

  8. Juan Pablo Caram repo owner

    There's this nice module:

    >>> x=Decimal('-0.7')
    >>> x*3
    Decimal('-2.1')
    

    Seem's perfect for problems like this, but I can't just be making everything a Decimal instead of a float. Anybody wants to help figure out a criteria for this? If there are lots more cases like this, perhaps this calls for a major overhaul.

  9. dev devowski

    Is that patch available in the latest windows installer version (8.4)?

    I'm using it (8.4, not development) and I cannot find the multiple pass checkbox. Thanx Dev

  10. Log in to comment