Cutter Radius Offsets
Up to this point we have covered rapid feeds, linear feeds and arc feeds. Knowing how to do these will get us a long way toward writing a program to cut something we need on the CNC machine. However, if you have run the G-Code we have developed so far on a simulator or perhaps your own CNC machine, you will have noticed something. The center of the cutter is moving on the vectors leaving us a finished part that is smaller than what we wanted. How much smaller? I am glad you asked. It depends on the diameter of the cutter you are using. For example, if I were to use a .250 inch flat end mill to cut a 1 inch square from some material, I would end up with a .750 inch square. Why, because half of the cutter, .125 inch is cutting across the vector into my material. By the time I finish the job, I have lost .125 on all four side or .250 off the length and width of the finished piece. So the question is how to fix it. Well, there are two ways you can do it.
1) Recalculate the Tool paths
Start by taking a good look at the vector and control point image to the left. Click the image to see a larger version of the vector and control point offset image. In this example we want to profile this 1 inch square. This square is depicted in the drawing by a gray vectors. Additionally the control points, the points that we would use to calculate our G1 feeds from are shown in red with their coordinates. As stated above if we were to use these control points to cut this profile the square would end up smaller than we intended. To solve this problem we have to move the control points in such a way they the edge of the tool will be on the vectors we wish to cut. In this example we are cutting on the X an Y plane using a .250 inch flat end mill. Since we know the cutter diameter is .250 inch we know the radius is half that, or .125 inch. Let's examine the bottom left corner of the square. It is located at (1, 1). To determine our new control point we have to move it the radius of the tool below the original point to cut on the bottom line of the vector. This takes care of half of it but we need to move the point left so that on the last pass of the profile we do not clip the edge of the square off. We also need to move the point to the left by the radius of the tool. So subtracting .125 inch from 1 inch gives is .875 inch for both X and Y. This becomes our new control point marked in green. This has to be done for every control point of the drawing. Moving it either left or right on the X-Axis and up or down on the Y-Axis to compensate for the radius of the tool we are using. Once you have all the control points for the drawing translated, you can then write the code to do the profile. The Yellow dashed vectors indicate the center of the tool at it is cutting, leaving the edge of the tool on the gray vectors. The end result is the 1 inch square profile we were looking for.
I realize that was a very simple example, but the same is true whether you have a complex shape you are cutting or a simple one. The only challenge is one you start cutting angular profiles where the distance you move on the X or Y axis may be more. To figure these out use some simple trigonometric functions with the angle to determine the new point. If you want an example of this let me know through the CONTACT US link at the top of the page and I will do one for you.
So all is well, we have a set of points and a G-Code program written to use the .250 inch end mill, but what happens when we discover that our end mill is broken and the closest I have is a .375 inch end mill? Well, recalculate the new control points and write a new program. Simple huh??? Yeah right!!! Who wants to do that, there has to be a better way. There is and it is called cutter radius offsets. Let's take a look at that next.
2) Use Cutter Radius Offsets
Remember our discussion on arc feeds using the G2 and G3 commands. There was one for clockwise (CW) movement and one for counter clockwise movement (CCW). Well cutter radius compensation has two commands as well, but they are referred to left and right rather than CW or CCW. Only because the idea of CW and CCW doesn't really fit in this category. A cutter could be going CW around a profile, but be either on the left side of the vector or the right side of the vector. The inverse is also true, the cutter could be moving CCW and be on either the left or right side of the vector. The way to visualize it is this. Always thing of the cutter moving around the vector. Even if your machine's table moves always think of the cutter doing the moving. With this in mind, regardless if the cutter is traveling CW or CCW we want to be on one side of the vector or another. Either the left or the right. If we were cutting the profile of the square above and traveling in a CW direction around the perimeter, we would want the cutter to the LEFT of the vector, if we were instead cutting a pocket on the inside of the square going in a CW direction we would want the cutter to be on the right side of the vector. Now, let's change that up and say we are traveling CCW around the vector cutting a profile, we would want the cutter on the right side of the vector. If we were cutting a pocket going CCW we would be on the left side of the vector. I think the easiest way to visualize the left or right is to imagine you are the cutter. Which direction are you going? As you travel along the vector, are you on the Left or the Right side? Look at the image to the left to see this in pictorial form.
The command for selecting cutter compensation are G41 and G42. G41 selects cutter compensation of the cutter radius to the LEFT of the direction of travel. G42 selects cutter compensation of the cutter radius to the RIGHT of the direction of travel. Now that we know how to select which offset we would like to use, how do we apply the actual value of the offset.
Getting the Offset