Adobe Stock; Photos/images
courtesy of Heidenhain

Many 5-axis control users only access a tiny fraction of the power at their fingertips. The demand for quicker, more efficient machining of complex parts has been met with powerful 5-axis CNC control functions, and the full features are astounding. As research and development (R&D) continues in this area, expert tips are emerging – CNC control users now have access to many tool compensation forms unavailable before. These 5-axis machining tools enable CAM programmers to better control their project. One underused control technique to increase flexibility is vector programming.

A vector is a directed variable made up of components in the X, Y, and Z axes – which specify where the beginning and end points of the vector lie – that indicate known direction and length. However, sometimes code will be output in a CNC control without the tool orientation (TXTYTZ) or the surface normal (NXNYNZ). When pieces are missing, flexibility is limited.

There are nine components that make up one line of standard code and the M128, which tells the control that it is in full 5-axis compensation. A normalized vector is a vector with a value of 1 – vector value is calculated from the root sum of the squares of its components.

With vector programming, users don’t need to re-post the program or guess the compensation when a tool wears or a new tool is loaded into a machine. Compensation is made for re-worked tools and, if the correct output is generated, can be used to create uniform oversize or undersize on the workpiece, regardless of the tool’s contact angle. All these benefits result in less machine maintenance and more accurate parts.

The following are 5-axis programming tips for CAM vector output.

Example of a 5-axis part made with the Heidenhain TNC 640 that can benefit from vector programming.

1) Compensate a re-worked tool

With peripheral (swarf) milling, the operator shouldn’t have any problem if using cutter compensation in standard code format (G-code/Heidenhain code) or if using vector output. Users can use any form of vector output because compensation takes place as normal/orthogonal to the tool’s contact edge if not specified. In this case, normal to the tool axis (TXTYTZ) or having surface normal (NXNYNZ) will yield the correct result. If only tool axis vectors are available, the user must use radius compensation and specify the direction of the cutter (cutter comp. left or cutter comp. right) because there isn’t a normal vector to specify the proper direction.

Face milling involves using all parts of the ball end mill (L/R). Think of a tool moving back and forth 3x or 5x across a 3D dome. At the top of the dome, the operator is using more of the bottom of the ball. At the sides of the dome or near the bottom, the operator is using more of the radius or edge of the ball. Many mold finish passes use this technique. If they then want to compensate a re-sharpened tool, perhaps running along and using the L and R of the tool to cut, they will need a nine-place output vector code, allowing the user to compensate along the normal vector and the tool axis.

Figure showing the deviations in a ball end mill’s radii at different attack angles.

2) Create a constant oversize/undersize

When vector code isn’t used, problems such as gouges on the machined surface can occur because the machine doesn’t have enough data to make the proper moves.

If the operator is running 5-axis code, wants to create a constant oversize or undersize, and is using all of the ball end mill (face milling), the most efficient solution is vector code. The programmer should specify the radius and length oversize using delta length (DL) or delta radius (DR). Most likely, these specifications will be the same if using a face milling technique. This will ensure a constant removal or oversize of the machined surface.

3) Compensate using tool contact angle

Every ball end mill has slight deviations in its radius, meaning the radius on a 6mm ball end mill is never uniformly 3mm around the center point. A Heidenhain control can measure part deviations in the radius using a laser tool measuring device inside the machine and can find as many as 30 points to define the radius. This is a special cycle, normally Blum cycle 588 (L/R/DR/DR2). This information is tabulated in a table designated DR2.3DTC and requires a vector program with surface normal blocks (NX NY NZ). For each tool angle, the control reads the appropriate angle and deviation on the ball to create a more accurate surface.

When an angle lies between two data points, interpolation takes place. This can allow precise mold makers, aerospace manufacturers, and medical manufacturers to get closer to true part surface integrity. Validation can take place with Cycle 444 (probe free form surface) and the results should be closer to nominal part surface.

Illustration of face milling.
The X, Y, and Z components that make up the surface normal and tool axis vectors.

4) Use IS Contour

With Heidenhain’s IS Contour function, the leading point is where the tool touches the workpiece, enabling the user to see the points with coordinates to describe the surface. Without this, operators or programmers don’t know where they are because a vector program is driving the tool.

Output in the CAM system must be tool-neutral – the surface points must be output with N vector or T vector.

In addition, the user can read contour points describing the surface directly from the program without having to calculate back to the surface coordinates. The user can also use a point directly from the NC program and check it with a measuring cycle to see if it is within a certain tolerance. A good cycle to validate the surface is cycle 444 – probe-free form surface.

In the actual value display of the Heidenhain TNC, the user will always see the tool leading point.

If a 5-axis control operator is programming finish passes in vector format and uses a reworked or re-sharpened tool, there is no need to recalculate or post new code to the machine – proper vector output takes care of this, providing improved accuracy and time savings.


About the author: Joe Pizzoferrato is a Heidenhain 5x applications engineer. He can be reached at or 847.490.0351 (menu item 2).