← Back to CNC Programming

Spindle and Feed Programming

Spindle speed (S) and feed rate (F) are the two cut-rate commands. This page covers S, M03/M04/M05, feed modes G94/G95/G99, G96 constant surface speed, and how to choose values from tooling data.

Concept

Two numbers control how fast the cutting happens: S (spindle speed) and F (feed rate). On a mill, S is nearly always fixed. On a lathe, S can be fixed RPM (G97) or constant surface speed (G96), where the controller changes RPM as the tool moves across changing diameters. Feed can be per minute (G94) or per revolution (G95, or G99 on a Haas lathe).

Why It Matters

Set S too high and the tool overheats; too low and you rub the tool. Set F too high and the tool breaks; too low and you work-harden the part. On a lathe, facing at fixed RPM from the outside diameter to the center means surface speed drops toward zero at the center — that is why G96 exists.

How It Works

Spindle Control: S, M03, M04, M05

S sets spindle speed in RPM. M03 starts clockwise, M04 counter-clockwise, M05 stops. On a mill, right-hand drills, end mills, and face mills use M03. M04 is reserved for left-hand tooling. Typical sequence: S2000 M03. The spindle must be started before the tool engages material.

Feed Modes: G94, G95, G99

The F command means different things depending on the active feed mode and machine type:

CodeMeaningF UnitUsed On
G94Feed per minutemm/min (with G21)Mills
G95 (ISO / FANUC lathe, where configured)Feed per revolutionmm/revLathes per their G-code system
G99 (Haas lathe)Feed per revolutionmm/revHaas lathes

F units also depend on G20/G21. On a mill, F300 means 300 mm/min. On a lathe in G95/G99, F0.2 means 0.2 mm per revolution. At 1000 RPM that is 200 mm/min. If you accidentally program F0.2 on a mill in G94, the tool feeds 0.2 mm/min; F200 on a lathe in per-rev mode means 200 mm per revolution.

Feed Modes G94 (mm/min) F300 tool moves 300 mm every minute G95/G99 (mm/rev) F0.2 tool advances 0.2 mm per spindle revolution

How to Choose Speed and Feed

Values come from the tool manufacturer catalog: cutting speed Vc (m/min) and feed per tooth fz (mm/tooth). Convert them:

For a Ø10 carbide end mill cutting aluminum at Vc = 200 m/min, 2 teeth, fz = 0.05: RPM = 200×1000/(3.14×10) = 6366, round to 6000. Feed = 6000×0.05×2 = 600 mm/min. Use the Cutting Speed Calculator and Feed Rate Calculator. Real values come from the tooling catalog for your specific material group, radial/axial engagement, and the machine's power curve.

Constant Surface Speed (G96) on Lathes

On a lathe, cutting at fixed RPM (G97) means surface speed changes as the tool moves across different diameters. G96 keeps the surface speed (Vc) constant by raising RPM as the cutting diameter gets smaller. Always pair G96 with a maximum RPM limit (G50 Sxxxx); once RPM reaches that limit, it stays there and Vc drops as the diameter shrinks further. Threading uses G97 fixed RPM.

G96 CSS: RPM vs diameter (Vc=180 m/min, cap 2500) 0 2500 G50 cap 2500 RPM D50 D25 D10 Cutting diameter D (mm)
D (mm)Unconstrained RPMActual RPMActual Vc (m/min)
5011461146180
2522922292180
≈22.918 (crossover)25002500180 (cap point)
2028652500157
105730250078.5

Chip Load and Why It Matters

Feed per tooth (fz) is how thick each flute cuts per revolution. Too light and the tool rubs; too heavy and the edge chips. The catalog gives the range for your material and tool; start at a middle value and adjust for finish and tool life. Feed rate = RPM × fz × number of flutes. Radial engagement (ae) affects chip thinning: at light ae, the chip is thinner than fz and you may increase feed to maintain a reasonable chip thickness.

Power and Torque Limits

Even if the math looks fine, the machine may not have enough spindle power. MRR = width × depth × feed. If MRR exceeds what the spindle can drive, the spindle bogs. Compare your planned MRR against the machine's power curve and the tool catalog's maximum MRR; take a light cut first and watch the spindle load.

Surface Speed vs Spindle Speed

Vc (m/min) is the speed of the cutting edge relative to the work surface; RPM is spindle speed. They relate by Vc = π × D × RPM / 1000. On a mill the tool diameter is fixed, so RPM is fixed at a chosen Vc. On a lathe the part diameter changes, so G96 varies RPM to hold Vc.

Spindle Direction: M03 vs M04

Drills, end mills, and face mills run in M03 (forward, Haas terminology); M04 is for left-hand tooling. Running a right-hand tool in reverse makes it rub and overheat. On a lathe, confirm forward direction against your machine and tool holder.

Feed in Threading

Threading feed equals the thread lead. For a single-start M10×1.5 thread, lead = pitch = 1.5 mm, so F1.5 mm/rev. Multi-start threads: lead = starts × pitch. Phase synchronization between successive passes is handled by the threading cycle and spindle position feedback; this example uses G97 stable RPM as required by the selected cycle. The exact pass count and infeed depend on the specific cycle (e.g. G76 or G92); consult that cycle’s manual.

Spindle Warm-Up

A cold spindle run at full RPM can grow thermally. Many shops run a short warm-up program that ramps spindle speed over 10–15 minutes before production. This is not a cutting program; it just spins the spindle with no tool in the cut.

Example: Milling and Turning

Mill snippet (Haas, G21, G94): Entry assumptions: after T01 M06 the current position allows a Z move to Z50, H01 and G54 are calibrated, Z50 clears all fixtures on XY traverse, and Z5 at X0 Y0 clears the work face. The tool used in the plunge line is the manufacturer-confirmed center-plunging tool described below.

G21 G17 G90 G94 G40 G49 G80
T01 M06
G54 G90
G00 G43 H01 Z50.
S2000 M03
G00 X0. Y0.
M08
G00 Z5.
G01 Z-2. F100.
G01 X50. F300.

Spindle at 2000 RPM; plunge feed 100 mm/min; cut feed 300 mm/min.

Haas lathe status snippet (G99 per-rev feed, classroom assumption):

G21
G50 S2500
G99
G96 S180 M03
F0.2

This sets metric units, caps RPM at 2500, selects per-rev feed, starts CSS at 180 m/min, and feed 0.2 mm/rev. It assumes diameter programming, tool and fixture clearances verified, and 2500 is a classroom number. At Ø50 the RPM is about 1146; at Ø25 about 2292; at Ø20 the controller reaches the 2500 cap and holds it. Below about Ø22.9 mm the cap holds RPM and surface speed drops below 180.

Starting and Adjusting

Tool catalog speeds are starting points under ideal conditions. Read the catalog's material group, ae/ap, recommended Vc and fz, then calculate and compare against the machine's power and torque limits. On the first cut, watch the spindle load meter and listen to the cut; adjust feed or depth based on what you see and hear. There is no universal percentage rule that applies across every machine, tool, and material.

Feed Rate Override

Feed override scales the commanded feed. A 60 mm feed move at F300 takes 12 seconds; at 50% override (effective F150) that same feed move takes 24 seconds. The whole cycle time does not necessarily double because rapid moves, tool changes, and dwells are also in the cycle. Use override during setup and debugging; run at 100% in production once the program is proven.

Spindle Speed Override and CSS

Under G97 fixed RPM, the spindle override scales S: S2000 at 80% runs at 1600 RPM. Under G96, the override changes the target surface speed rather than directly scaling RPM.

Feed Hold and Single Block

Feed hold pauses axis motion; single block executes one block per cycle start. Behavior inside a canned cycle or threading depends on the control and cycle — consult your manual. Use these during first-piece setup, not in production.

Reading the Tool Catalog

A carbide end mill catalog lists cutting speed Vc for each workpiece material group (P steel, M stainless, K cast iron, N aluminum, S superalloy) and feed per tooth fz for that tool. It also gives maximum axial depth ap and radial engagement ae as fractions of tool diameter. For example, a Ø10 4-flute end mill might list Vc = 120 m/min and fz = 0.05 mm/tooth for P-steel at full slotting (ae = 1×D). For side milling at ae = 0.2×D, the catalog may allow a higher Vc or fz. Read the catalog chart for your exact tool and material, not a generic table.

Calculator Worked Example

Choose: Ø12 carbide end mill, 4 flutes, material AISI 1045 steel, Vc = 100 m/min, fz = 0.04 mm/tooth, full slot (ae = 12 mm), ap = 6 mm.

Estimate net cutting power using a specific cutting force kc (classroom assumption only; look up the real value for your material):

Plunge vs Cut Feed

On a mill, the plunge feed (Z direction into the part) is usually lower than the horizontal cut feed. This example uses a tool confirmed by the manufacturer to be capable of center plunging, and follows the manufacturer’s allowed plunge strategy. Do not assume every end mill can plunge axially; many peripheral end mills cannot. Program a separate lower F for the Z plunge line (e.g. F100) and a higher F for the XY cut (e.g. F400). The machine holds the modal F until a new F is given.

Spindle Direction on a Lathe

On a horizontal lathe, M03 is the normal forward direction for OD turning with a right-hand insert, viewed from the headstock end facing the chuck. Confirm the direction on your specific machine: sub-spindle and live-tooling arrangements can change the convention. Never assume M03 on every lathe.

Feed Units with G20/G21

F units depend on both G20/G21 and G94/G95/G99. With G21 (metric): G94 F300 = 300 mm/min; G95/G99 F0.2 = 0.2 mm/rev. With G20 (inch): G94 F12 = 12 in/min; G95 F0.008 = 0.008 in/rev. Mixing inch and metric by forgetting G20/G21 is a classic source of a 25.4× feed error.

Surface Speed Reference for Common Materials

Classroom starting ranges (always confirm against the tool catalog): high-speed steel in steel, 20–40 m/min; carbide in steel, 100–250 m/min; carbide in aluminum, 200–500 m/min; carbide in stainless, 80–150 m/min; carbide in titanium, 40–80 m/min. These ranges depend on coating, coolant, engagement, and machine rigidity. They are not tooling recommendations.

Why Spindle Override Matters in Production

A tool that chatters at full catalog speed can sometimes be cured by dropping spindle speed 10–20% rather than reducing feed. Chatter is a stability problem, not a power problem. Use the override knob during first piece to find a stable speed window, then write that S value into the program for repeatability.

When to Change Speed or Feed Mid-Job

If the tool wears early, first identify the wear mode (flank, crater, notch, built-up edge), check the material/tool match and the catalog-recommended parameters, and verify setup rigidity. Only after confirming the feed is too light and the manufacturer permits it should you adjust feed. If the surface finish is poor, check tool runout, spindle speed, and tool nose radius before changing feed. If the spindle bogs, reduce axial depth or feed rather than pushing the machine. These adjustments are made on the first piece, not during production, and then written back into the program for repeatability.

Recording the Working Values

After the first piece is proven, write the final S and F values into the program and note them on the setup sheet. If a future batch runs the same part, the operator should not have to rediscover the cut from scratch. This documentation is part of process control: the program, the setup sheet, and the tool list should all agree on the spindle speed and feed used.

Common Mistakes

Practice

1. On a Haas lathe in G99, what does F0.2 mean?

Show answer

0.2 mm per revolution. At S1000, actual table feed = 1000 × 0.2 = 200 mm/min.

2. Why does a lathe use G96 (CSS) for facing?

Show answer

As the tool moves across the face, the cutting diameter changes. CSS holds surface speed Vc constant (up to the G50 RPM cap), which is the cutting-parameter target; feed and chip load are set separately by F and the tool geometry.

3. Ø10 end mill, 2 teeth, Vc=100 m/min, fz=0.05. What RPM and feed?

Show answer

RPM = 100×1000/(3.14×10) = 3183, use 3000. Feed = 3000×0.05×2 = 300 mm/min.

4. Why is G50 S2500 written before G96?

Show answer

It caps maximum RPM so facing to a small diameter does not command unsafe speed. Below the cap, RPM rises as diameter shrinks; at the cap, RPM holds and Vc drops.

5. Why use G97 for threading on a lathe?

Show answer

Phase synchronization is handled by the threading cycle and spindle position feedback; this example uses G97 stable RPM as required by the selected cycle. The feed equals the thread lead. Consult the specific cycle manual for pass count and infeed.

Sources