CNC Resources

All things CNC (spindle/router based, subtractive fabrication).

If it’s generic (e.g. G-Code related, 2D or 3D design) then please add it to the appropriate wiki post.

General Info

Small CNC Machines

Small CNC machines can be very capable, but need some special consideration compared to larger machines.

In particular, they lack rigidity, moving power, and spindle speed/power.

In a nutshell when the machine is working correctly, the end of the cutting bit is:

  • Where it should be (not displaced due to flex/slop in the frame; not pushing so hard it’s bending)
  • Cutting the right way (climb vs conventional cutting) for your machine setup
  • Cutting, not rubbing - chips need to be sliced off, they’re the key means for transporting heat away! (Overheated bits don’t cut, dull faster, and increase the loads on the machine immensely!)

Make sure the cutting area is always clear of any debris. Recutting chips is bad news!

Ensure you’re using an appropriate spindle and movement speeds. Going too slow can be as bad as going too fast!

Smaller machines sometimes do better with smaller cut depths/widths with faster feedrates compared to what might be recommended for bigger machines. A good feeds & speeds calculator will let you play and see what combinations will create workable chip-removal-rates.

I recommend looking at CNC Cookbooks G-Wizard: it has reduced my failure rates and improved the final surface quality.

Introductory References

Courses and Tutorials

Feeds & Speeds Calculators

  • CNC Cookbook GWizard Feeds Calculator - free trial, paid calculator. Uses a heuristic that takes into account material, end-mill, operation, machine power, machine rigidity, end-mill rigidity, speed vs quality, chip removal rate, etc… . All presented in a straight forward UI that gives simple sliders for the major variables. Clear estimates of how these parameters fit within the expected capabilities (rigidity, power) of your CNC. Julian found that it noticeably improved cut reliability & quality on a small ShapeOko.


CNCCookbook has a good introduction to CNC controllers. They also have a series of articles that introduce how most industrial machines are structured.

Here is a slightly different version- with motion planning and motion control separated into their own steps.

ui Operator UI (shows preview, machine settings, over-rides, etc) gcode GCode Interpreter ui--gcode mp Motion Planning gcode--mp mc Motion Control mp--mc

Many low-end devices- eg Arduino + GRBL shield, TinyG, UC100, Mach3 + parallel port, LinuxCNC + parallel port, etc- use a GCode sender to be the UI, and provide both the GCode interpreter and motion controller.

This limits the maximum step rates, and can introduce jitter (axis moving slightly out of sync.)

For less powerful CPUs (eg Arduino based), there are further limitations:

  • the G-Code interpreter may be limited, have bugs, and can only process a few instructions at a time
  • motion control may be limited to only being able to use velocity and acceleration

Advanced motion controllers look ahead at many GCode instructions to be able to calculate velocity, acceleration, jerk (change in acceleration) and even higher order derivatives of the motion curve to make sure the machine is always within it’s capabilities. Future requirements may even “ripple back” to earlier motions and cause adjustments.

So advanced CNC controllers have the UI and motion planning done on a more powerful PC.

Once the motions are planned (enough in advance) they can be queued to a dedicated motion controller that is responsible for generating all the motor step + direction pulses at high-speed with precise timing (accurate frequency and low jitter.)

Note: klipper is an interesting project: it uses an Arduino as just a motion controller and shifts the GCode interpreter and motion planning

PC as UI, GCode Interpreter, Motion Planner, and Motion Controller

This will focus on LinuxCNC and MachineKit. Mach3/Mach4 are similar, but are for Windows.

Note: all of these tools seem to have a common history tracing from NIST and EMC.

MachineKit is a fork of LinuxCNC. It was created both to support embedded controllers based on e.g. the BeagleBone and Raspberry Pi, as well as exploring more distributed systems.

Some of MachineKit’s documentation is a little more up-to-date, and often applies equally to LinuxCNC- for example setting processor affinity, etc.

In all cases, this setup uses a parallel port for control.

You need a “real” parallel port, not one connected via USB. By it’s shared nature USB can add random delays in the output being updated. As well, it may not allow the pins to be setup as both inputs and outputs.

EPP mode is desirable.

LinuxCNC has a page with recommendations for what to look for.

You may have luck finding something on Amazon by searching for “LinuxCNC”. One such card is this. Some of the reviews mention using it successfully with LinuxCNC.

Even better if you can find an older PC/motherboard with a parallel port.

Also look at the software’s requirements carefully: they usually recommend an older, not hyper-threaded CPU, running an OLD version of Debian/Ubuntu.

This is because Intel CPUs, and Linux, are not really designed for real-time operations! Especially newer desktop CPUs, which are designed for THROUGHPUT of calculations, NOT precise timing.

(Note- this is great if it’s to be the UI + motion planner, with motion control being done on a dedicated device.)

The same goes for the Linux kernel; there are some (closer to) real-time patches which no longer work with newer kernel.

In practice, the older kernel + patches result in lower jitter than the newer variants.

Some references for improving (decreasing) jitter:

Bit Sources

Drag Knives

Some materials (e.g. vinyl) need to be cut with a knife, not a spinning bit.

However the motion for cutting has it’s own complexities- the knife ‘follows’ the tool holder, like a trailer.

Special cutting paths are needed to compensate for this.



  • construction foam is good for learning/prototyping, but avoid excessive RPM (“Golf ball of hard goo”)
  • higher density EPS/XPS would be good to try- eg Formular 1000, which is used in roads, engineering, etc.
  • polyurethane foams are often used for high-quality machining: eg Renshape

Machinable Wax


  • next to no tool wear
  • self lubricating
  • can provide high detail levels
  • can be reclaimed
  • can be used to mold some plastic resins directly