IoTProjects - Pro CNC 3020 Software
May 2015


After experimentation with my own CNC milling hardware, I decided to instead purchase a 3020-aluminum based CNC engraver. This relatively-inexpensive device was sufficiently sturdy to repurpose as a low-end mill, for soft materials.

Image in card

I found the hardware overall to be fairly sturdy, with stepper motors driving lead screws to move the x, y, and z axis. Each stepper motor micro-step moves each axis 0.00254 mm (2.54 ┬Ám) -- which probably means this device was designed around Imperial standards, because that nicely translates to 0.1 mils (1000 mils = 1 inch) per micro-step. By default, each stepper motor runs at 16x micro stepping, with 1600 steps per axis revolution.

In practice, this device isn't nearly that accurate, but it's nice to see the limitation is not in the control hardware.


The software that came with the device required both Windows XP and a Parallel port. Having neither, I decided to write my own using the microcontrollers I had on hand.

Image in card

With those microcontrollers, I wrote the following:
Image in card
Version 1: This initial software verified that I could drive the mill, at a pitifully slow speed.

Image in card
Version 2: This software worked excellently -- until the Raspberry PI had software interrupts which caused stuttering.

Version 3: I tried writing code for the Parallax Propeller, which was even slower than the Netduino -- too slow to be usable.

Image in card
Version 4: I stopped trying to reinvent the wheel and bought an Arduino Nano and installed GRBL on it.

Unfortunately, the Arduino Nano is significantly more sensitive to voltage transients when running the mill spindle. I have to run the mill at a slow feedrate and spindle rate to avoid resetting the device.
However, I'm able to run at a reasonable rate, unlike the Netduinio, Parallax Propeller, or Raspberry PI.