---
title: "Why Did the Spindle Stop but Feed Continue on a CNC?"
description: "A moving feed with a dead spindle is a code or override mismatch: an M05 that fired early, a missing spindle-at-speed wait, or independent feed and spindle controls."
url: https://gcodepractice.com/journal/why-did-the-spindle-stop-but-feed-continue-cnc/
canonical: https://gcodepractice.com/journal/why-did-the-spindle-stop-but-feed-continue-cnc/
author: "Lawrence Arya"
authorUrl: https://www.linkedin.com/in/vibecoding/
published: 2026-06-07
updated: 2026-06-07
category: "Guides"
tags: ["spindle", "troubleshooting", "m03 m05", "overrides"]
lang: en
---

# Why Did the Spindle Stop but Feed Continue on a CNC?

> **TL;DR** Spindle and feed are controlled independently on a CNC, by design, which is why they can desynchronize: a feed move can run while the spindle is stopped. The usual causes are an M05 (spindle stop) that landed before a feed move it should have followed, a program that never started the spindle (missing M03) before cutting, a spindle that stalled or faulted while the feed kept going, or the spindle override turned to zero while feed override stayed up. It is a genuine hazard, a non-rotating tool dragging through material, so the response is feed hold first, then diagnose: read the spindle and feed commands around the current block and check both override dials.

A feed move running while the spindle sits still is alarming to watch and logical underneath: spindle and feed are controlled independently on a CNC, by design, so nothing forces them to agree, and when they desynchronize you get a non-rotating tool being dragged through metal. It is a genuine hazard with a short suspect list, and the right first move is feed hold, then diagnosis.

## Why they can desync at all

The spindle ([M03 on, M04 reverse, M05 off, with S for speed](https://linuxcnc.org/docs/html/gcode/m-code.html)) and the feed (G01 and its F word) are separate subsystems with separate commands and separate override dials. That independence is useful, you adjust cutting speed and feed rate separately, but it removes any automatic guarantee that the spindle is turning when the feed moves. In [numerically controlled](https://en.wikipedia.org/wiki/Numerical_control) machining the program is responsible for keeping them in sync, and when the program, a fault, or an override breaks that sync, the machine faithfully does what it was told: feed, with no spindle.

## The suspect list

| Cause | What happened | Where to look |
| --- | --- | --- |
| M05 fired early | Spindle stopped before a feed move that should have followed | The spindle commands above the current block |
| Missing M03 | Spindle never started before cutting began | The program's preamble and each tool's start |
| Spindle stalled or faulted | Hardware stopped the spindle, feed continued | Alarms, the drive, the load |
| Spindle override at zero | The dial cut spindle speed while feed override stayed up | Both override dials |

The top two are code-side and read directly: an [M05 misplaced](/journal/i-keep-forgetting-which-m-code-turns-off-the-coolant/) so it stops the spindle during cutting rather than after, or a [missing spindle start](/journal/machine-stopped-waiting-for-spindle-but-it-s-on/) so the feed begins into a never-started spindle, both found by reading the spindle commands around the block that was running. The override row is the one people miss, because the program can be flawless while a dial is wrong: spindle override and feed override are separate, so spindle at zero with feed normal produces exactly this symptom, and checking both dials is part of every diagnosis.

## The opposite problem, and why this one is worse

This is the mirror of the [machine-stopped-waiting-for-spindle](/journal/machine-stopped-waiting-for-spindle-but-it-s-on/) case, where the spindle is fine and the motion is paused, and it is the more dangerous direction: there, nothing cuts; here, a dead tool is dragged through material, rubbing instead of cutting, generating heat, risking tool breakage, grabbing, and on a lathe a violent stall. That is why the response order is feed hold first, always, then diagnosis, because every second of feed-with-no-spindle is doing damage, unlike the paused case where the machine is safely waiting.

## The fix and the prevention

Fix the cause you found: correct the M05 placement, add the missing M03, clear the spindle fault, or restore the override dial, and then re-prove the section, because a [program edited to fix this](/journal/how-to-edit-g-code-manually-at-the-controller/) is unproven at the change. Prevention is a programming habit: the spindle should be running and at speed before any feed move, M03 with its S value in the tool's preamble, and where timing matters a spindle-at-speed wait or dwell so the feed never begins before the spindle is ready, the same sequencing care that [M08 coolant placement](/journal/coolant-won-t-turn-on-during-drill-cycle-g-code/) needs. Reading programs for spindle-state alongside feed moves, is the spindle commanded on, at speed, before this cut?, catches the code-side causes before they reach metal, and that reading runs on the standard vocabulary the free 60-second rounds on the [G-code practice page](/g-code-practice/) keep automatic, so M03, M05, and the feed words register together as a state you track rather than letters you decode.

## Sources

- [LinuxCNC: M-code reference](https://linuxcnc.org/docs/html/gcode/m-code.html)
- [LinuxCNC: G-code reference](https://linuxcnc.org/docs/html/gcode/g-code.html)
- [Wikipedia: Numerical control](https://en.wikipedia.org/wiki/Numerical_control)

## Frequently asked questions

### Why did my spindle stop but the feed kept going?

Because spindle and feed are independent systems that can desynchronize. Usual causes: an M05 that fired before a feed move, a missing M03 so the spindle never started, a spindle that stalled or faulted, or spindle override dialed to zero while feed override stayed up. Feed hold first, then diagnose the commands around the current block and both override dials.

### Is a feed move with the spindle stopped dangerous?

Yes: a non-rotating tool fed into material rubs rather than cuts, generating heat, breaking tools, grabbing the part, and on a lathe stalling violently. Treat it as an immediate feed-hold situation and find the cause before resuming.

### Can the override dials cause this?

Yes, and it is easy to miss: spindle override and feed override are separate, so spindle override at zero with feed override normal produces exactly this. Check both dials, the program can be perfect while a dial is wrong.

### How do I prevent spindle and feed from desynchronizing?

Program the spindle running and at speed before any feed move, M03 with an S value and a spindle-at-speed wait where it matters, and place M05 so the spindle stops after cutting, not during it. Reading for spindle-state alongside feed moves catches the code causes.

---

Source: https://gcodepractice.com/journal/why-did-the-spindle-stop-but-feed-continue-cnc/
Author: Lawrence Arya — https://www.linkedin.com/in/vibecoding/
