The Right Speed and Feed

A bit of math is involved in programming the appropriate rates for a particular tool.

Machining center programmers specify spindle speed in revolutions per minute (rpm). Many also specify feed rate in per-minute fashion, either inches per minute (ipm) or millimeters per minute (mmpm). With cutting tools used on machining centers, tool diameter does not vary during the machining operation, so for most machining operations, this means one speed (in rpm) and one feed rate (in ipm or mmpm) is determined and used per cutting tool. 

An exception may be a milling cutter that can both plunge and side mill. In such a case, one feed rate is commonly required for plunging and another for side milling. Even so, compared to varying diameters machined on turning centers, which require the use of constant surface speed, cutting-condition variation internal to a given cutting tool is relatively minimal in machining center applications.

Consider a 0.5-inch-diameter carbide drill. Based on the material to be machined, the cutting tool manufacturer may recommend a speed of 250 surface feet per minute (sfm) and a feed rate of 0.004 inch per revolution (ipr). Using these recommendations, the programmer will apply this formula:
rpm = 3.82 * sfm / cutting tool diameter

The speed result, 1,910 rpm (3.82 * 250 / 0.5), will be programmed as S1910.

After determining spindle speed, feed rate in ipm is calculated with this formula:
ipm = rpm * ipr

Using a speed of 1,910 rpm and a feed rate of 0.004 ipr, the feed rate will be 7.64 ipm. Again, only one speed word (S1910) and one feed rate word (F7.64) will be required in the program for this drill, regardless of how many holes must be drilled.

Everything stated here so far is pretty conventional for machining center programming. The only exception may be that feed rate is often programmed directly in per-revolution fashion, which eliminates the feed rate calculation. 

Now consider the feature cutter radius compensation. It allows a range of cutter sizes (diameters) to be used. A programmer may plan on using a 1.0-inch-diameter cutter, but in reality—at the machine—a 0.75- or 1.25-inch-diameter cutter is actually used. If the programmer specifies spindle speed and feed rate based on the planned cutter size, actual cutting conditions used in the program will be incorrect if a different cutter is used. Machining will either be too slow or overly aggressive.

This problem can be easily overcome with a custom macro since it is possible to access the value stored in the cutter radius compensation offset register from within a CNC program. We can determine the actual cutter size (diameter) being used as the program is run and then calculate, right in the program, the exact rpm and ipm values.

There are two ways to use cutter radius compensation: 1) program the work-surface path, which requires the cutter size to be placed in the offset register, or 2) program the cutter’s center-line path, which requires the deviation from a planned cutter size to be place in the offset register. Additionally, the value placed in the cutter radius compensation offset register could be a radial or diameter value, so you must, of course, know what the offset register value represents if you want to use this technique.

For our example, we’ll say the programmer specifies the work-surface path and the value in the offset register is the cutter’s actual radius (a very common method).

For current-model FANUC CNCs, system variables starting with #2401 commonly provide access to geometry registers for cutter radius compensation (you must confirm this in the documentation that came with your machine). In this case, system variable #2403 provides access to offset number 3’s cutter radius compensation geometry register value, which in our example, will be the milling cutter’s radius.

Consider these commands that specify the speed and feed rate for a milling cutter running at 240 sfm and 0.005 ipr:
N340 T03 M06 (1.0 carbide end mill)
#1 = 3.82 * 240 / [#2403*2] (Store appropriate rpm in local variable #1)
N345 G54 G94 G90 S#1 M03 (Work offset, feed rate mode, absolute mode, start spindle)
N350 G00 X-0.75 Y-0.75 (First XY move)
N355 G43 H03 Z-0.6 M08 (Instate tool-length compensation, first Z move, coolant)
N360 G42 D03 Y0.125 (Instate cutter radius compensation)
N365 G01 X2.5 F[#1*0.005] (Begin milling, use appropriate feed rate)

With this program segment, the speed and feed rate will be based on the cutter size that is currently being used. If the setup person stores a value of 0.4375 in geometry offset register number 3 for cutter radius compensation (again, the cutter radius), speed and feed rate will be based on using a 0.875-inch-diameter cutter.

Note that feed rate is also a function of cutter diameter. The bigger the cutter, the more aggressive the feed rate should be. If you have a large range of potential cutter sizes, you can easily incorporate feed-rate-calculating logic statements into the program segment as well:
N360 G42 D03 Y0.125 (Instate cutter radius compensation)
IF[#2403 GT 1.0] THEN #2=0.006
IF[#2404 LE 1.0] THEN #2=0.005
N365 G01 X2.5 F[#1*#2] (Begin milling, use appropriate feed rate)