3D Milling on the Tormach 440!
Introduction
Usually, our Tormach PCNC440 mill is used to make precise metal parts, like brackets, fixtures, robot components, or wheel hubs. But it can also sculpt complex 3D geometries for more artistic purposes. Like any CNC milling job, choosing workholding that is secure but doesn’t block you from cutting all the features is critical. That’s where the rotary table comes in, I will use this accessory instead of a vise to securely hold the stock material. The rotary allows me to manually rotate the part precisely, without having to remove it from the machine.
Starting with an STL
When machining, usually you want to avoid STLs. They are difficult to edit, and because they are made of only triangles, it can be difficult to make accurate holes and curves. Accuracy is not important for this model, so it’s ok. I’m using this Statue of Liberty model from Thingiverse. Visit our Ultimaker page for more links to sites with free 3D models.
Upload the STL to your Fusion 360 account. You can also use Insert > Mesh, but uploading gives you more editing options (like converting to a solid).
Model Editing & Stock
Before we start CAM in the Manufacture workspace in Fusion, we need to consider the stock material and how to hold it in the machine. I’m starting with a rough-cut block of machining wax, which is 39.75mm x 37.3mm x 90mm. For machining on multiple sides, it’s helpful to have an exact size block. This will simplify setup and help avoid errors. Most of the sides of my block are straight enough already, so I will machine the rough side down to so I have a 37.3mm square.
Next, I’m drawing a sketch of my stock. This is not completely necessary, but it is helpful as a reference when scaling the STL to fit using Modify > Scale. Here I used Create > Rectangle > Center Rectangle to match it to the origin. Luckily, the origin in my STL was in a logical spot, this isn’t always the case.
In the Manufacture space, I started by creating a setup. A setup defines the stock to be cut, and where the origin is. This is very important, whatever is defined here should match what goes into the CNC machine exactly. In this case, I’m using the top center because this will be easy to find, and as I rotate the piece, this point never moves.
Here I had to select my Z axis and X axis manually, because Z is always up, and I’ll be cutting this with the statue on it’s side. I was able to use YZ plane and the Y axis from the STL to define those two. These are direction only, not the actual axis position. The origin is defined from the stock box point. I also selected the mesh (STL) as my model, otherwise it would not position the stock correctly. In the stock tab, I entered the exact dimensions of my piece. Everything is centered except the x-axis, the model is up against the origin to make room for the chuck jaws at the bottom of the model.
Toolpaths
Now I can add some tool paths. The general strategy for 3D milling is to use a flat end mill to rough (remove a lot of material) and then a smaller ball end mill to finish (get the fine details). For roughing, I’ll use a 3D adaptive toolpath and for finishing I’ll use scallop. There are a ton of options for 3D finishing, so some trial and error will be involved. The same goes for the settings for the toolpath, it may take a few tries to get it to do what you want.
There’s a lot of settings here, but there’s a few key changes I made:
Feeds & Speeds were taken from Bantam Tools, but the spindle speed was dropped from 12,000 to 10,000, the maximum for the Tormach.
I drew a custom machining boundary with a sketch, to keep it from cutting the base of the statue, where the fixture will be.
Rest machining from setup should be on, otherwise it will try to cut everything in one pass.
I set the bottom height to a little below half the model. That way I can remove nearly all the excess material from just two sides without needing a longer tool.
Optimal load controls my width of cut (WOC), which I set to 30% of the tool diameter
Maximum Roughing Stepdown controls the depth of cut (DOC), which I set to about 200% of the tool diameter. A little aggressive, but wax is very easy to machine.
Stock to leave is enabled, this leaves a little material left over which my finishing pass can bite into.
Next I set up a finishing toolpath. I chose scallop because there’s a lot of varied geometry, and scallop seemed to handle it the best.
Lots of settings here as well. The key things I edited are:
Shaft & Holder helps prevent collisions. Here I’m using a 1/16″ cutter with a 1/8″ shank, so the depth I can cut to is limited.
I chose the same machining boundary as the previous, with contact only enabled. That way it’s only cutting on the model, and ignores the rest of the surrounding material.
The cutting bottom height is the same as before.
I chose inside->out which seemed the most efficient here, and a small stepover of .05mm for fine detail, about 30% of the tool diameter again.
Looks pretty good, we have successfully frozen Han Solo in carbonite. There’s some obvious areas the tool couldn’t reach, so we’ll save those for another setup. While I’m in simulate, I will right click and choose Stock > Save Stock… which allows me to save the simulated model as an STL. This will come in handy later.
Now, to save some time and effort, I right click my first setup and choose Duplicate. This will be the basis of the opposite side. Edit the setup, choose flip Z. Once the toolpaths are regenerated, it’s almost ready to go. But, I noticed the torch was below the halfway point. This will be pretty delicate, so I’ll duplicate the existing adaptive to get it to cut the rest.
For the second adaptive, I limited the machining boundary, turned off rest machining, and changed the Top and Bottom Height to get it to only cut what I wanted it to. Then I reduced the optimal load a lot for very light cutting.
For the last two sides, roughing isn’t necessary, as most of the material is removed already. So I duplicated the setup, changed the z-axis direction, deleted adaptive, and then edited the scallop.
There was a lot of trial and error for the best parameters here, but I landed on disabling contact point boundary, and using rest machining. I used ‘From file’, and used the STL (Save Stock…) from the previous simulation. I also dropped the Adjustment Offset to 0 to make sure it machined everything.
Setting Up
Ok, so it looks like I’m ready to go. Just post process the files and get set up. But, it looks like I made a couple of mistakes in my setup:
Mistake 1: I was picturing mounting the rotary table on the left, but because of the handwheel, it can only mount on the right. Simple fix here, flip the X axis in my setup and re-generate. So now my origin is set to the axis of rotation of the chuck, with X zero being on the face of the chuck. This is good, because I can do all measuring without the part in there.
Mistake 2: I hadn’t considered the toolholder diameter when sketching out the machining boundary for the part. So I shrunk it by the toolholder radius, to make sure it would not collide with the chuck jaws. So, I can’t machine much of the statue’s base with the stock size I had.
Mounting the rotary and stock
The rotary can be mounted with 2 bridge clamps, the same ones from the vise. The location is a little tricky for the front, but I was able to tighten it down as illustrated. There’s slots all over, so it can be mounted horizontally as well, if needed.
For the stock, I did this outside the machine to make it easier to access all the sides. A 4-jaw chuck is tricky to center, but more versatile. It can hold round, square, pipe and other odd shapes, and even hold them off-center. Each jaw can be moved interdependently and even flipped. I used the ‘sharp’ side of the jaws for the most contact, but added some small washers to avoid cracking the wax. This would not be necessary with metal stock. Then I used calipers to measure the distance for each jaw, adjusting each until the part was centered and the jaws were tight.
Setting the origin and rotational angle
After mounting the rotary, I need to find an angle to start with. Since I’m using square stock, I start by using a dial test indicator to check how flat the top is. I can jog the Y axis back and forth, and if the measurements match, top is perfectly flat. Then, I can zero the digital readout (DRO) on the rotary, like a caliper. Once I start rotating in one direction, I should just keep going that way throughout the whole process, including cutting. The rotary has some backlash, which means when you change direction, you can move the handwheel a little bit before the chuck ‘catches up’, which introduces some error.
To find the origin, I used the edge finder. I was originally intending to do all zeroing off of the stock. I was a little dubious as to how square and symmetrical it was, so I decided to zero off of the chuck instead. The x-axis was easy, I touched the faceplate of the chuck, and, being to the left of zero, set the current position at -.1″
For the Y axis, I measured one side, and set that as zero. Then, I jogged to the other side, at the same z-level, and measured that. Then, I halved the readout of the current position. Since the offset of .1 and -.1 cancels each other out from both sides, finding the distance from one side to the other and dividing it by 2 means that zero is now in the middle of those two points.
For the z-axis, I actually used the back of the chuck. I used calipers to find the distance from center to the top of the base part, then used an object of known diameter as a feeler gauge, as usual.
While machining I noticed the cut did not match up perfectly from each side, but was pretty good. There’s a lot of factors here, so I would need to be very meticulous to get it to be more accurate.
Roughing
I started with the roughing toolpaths. I post-processed all my toolpaths into g-code and loaded these into the Tormach. I opened up the first roughing path, and jogged around, looking at the preview on the screen to verify it looked like it’s cutting in the correct place in all axes, and that there’s no collisions. In this case especially, it’s smart to slow down the Max Velocity slider on PathPilot and use Single Block mode to make sure it looks right at the beginning of the cut.
After side 1 was done, I rotated the stock 180 degrees to rough the other side. Because of how I set up my origin and toolpaths, I didn’t need to do anything other than load the next path and push Start.
Finishing
It’s taking off a small amount of material on all sides, so it doesn’t really matter what order I ran these in. After loading the 1/16″ ball endmill and re-zeroing the z axis (because tool length has changed), I’m ready to run. Just like with roughing, I simply rotate between operations and load the next g-code. Check carefully here, in the names of my files I had mixed up 90 degrees with 270 degrees, but I was able to catch that and run the correct g-code for each side.
And here is the finished product! I hope this gives you some ideas for creative projects (or creative workholding!) on the Tormach.