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:
| Code | Meaning | F Unit | Used On |
|---|---|---|---|
| G94 | Feed per minute | mm/min (with G21) | Mills |
| G95 (ISO / FANUC lathe, where configured) | Feed per revolution | mm/rev | Lathes per their G-code system |
| G99 (Haas lathe) | Feed per revolution | mm/rev | Haas 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.
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:
- RPM = Vc × 1000 / (π × D) where D is tool diameter in mm.
- Feed rate = RPM × fz × number of teeth (Z).
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.
| D (mm) | Unconstrained RPM | Actual RPM | Actual Vc (m/min) |
|---|---|---|---|
| 50 | 1146 | 1146 | 180 |
| 25 | 2292 | 2292 | 180 |
| ≈22.918 (crossover) | 2500 | 2500 | 180 (cap point) |
| 20 | 2865 | 2500 | 157 |
| 10 | 5730 | 2500 | 78.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.
- RPM = 100 × 1000 / (3.1416 × 12) = 2653, round to 2500.
- Feed = 2500 × 0.04 × 4 = 400 mm/min.
- MRR = ae × ap × feed = 12 × 6 × 400 = 28.8 cm³/min.
Estimate net cutting power using a specific cutting force kc (classroom assumption only; look up the real value for your material):
- MRR = 12 × 6 × 400 = 28,800 mm³/min = 28.8 cm³/min.
- Assume kc = 2700 N/mm² for this classroom example. Net cutting power Pc = ae × ap × vf × kc / (60 × 106) = 12 × 6 × 400 × 2700 / (60 × 106) = 1.296 kW.
- Assume drive efficiency η = 0.8, input power ≈ 1.296 / 0.8 = 1.62 kW. Compare this against the machine’s continuous available power at 2500 RPM from its power curve; a 7.5 kW nameplate alone does not prove the headroom.
- If ap doubles to 12 mm with other assumptions unchanged, Pc doubles to about 2.592 kW; whether that exceeds the machine’s limit still requires reading the actual power curve.
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
- Using mm/min feed on a lathe in per-rev mode — F200 on a G95/G99 lathe means 200 mm per revolution. Check the active feed mode.
- Starting spindle before the tool is clear — start M03 at safe Z.
- Forgetting G50 before G96 — without an RPM cap, facing to a small diameter commands excessive speed.
- Setting S without M03 — S2000 alone does not start the spindle.
- Treating G97 as threading-only — fixed RPM is also used for operations where a constant RPM is desired; CSS is for OD/face turning where Vc should be held.
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
- Cutting Speed Calculator and Feed Rate Calculator — companion engineering tools.
- Haas G99 feed-per-rev (lathe) — per-rev feed mode on Haas lathes.
- Sandvik Coromant: Formulas and Definitions for Milling (metric) — supports the net cutting power formula and unit handling; kc = 2700 N/mm² and η = 0.8 are classroom assumptions, not material constants.
- RPM and feed formulas follow standard cutting-speed equations; actual values come from tooling catalogs and the machine's power curve.
- All speeds and feeds on this page are classroom teaching assumptions, not tooling recommendations.