This project began several years ago when I got a multi purpose machine kit. The kit allowed you to build various machines including a lathe and milling machine. Obviously I wanted to automate the kit but I knew nothing about CNC or CAM software.

Most hobbyist CNC machines seem to use Mach3 software and a parallel port interface to control them but I wanted my machine to run without a computer attached. There are RAMPS PCBs that allow an Arduino to run a machine but I wanted to create something simpler for a complete novice who knows nothing about electronics.

Im pretty good with electronics and had been learning to use Arduino so I decided to make my own stand alone controller. I started with a Spider controller, a T6963 240 x 128 LCD and an SD card socket. This setup allowed me to learn how to use the SD card and T6963 libraries. The LCD display includes a 6x8 character set which gives you a 40 x 16 text display. I did not bother with a fancier colour display since your not going to be spending much time looking at it except when you first set up the job.

Once I had the basics worked out (or at least I thought I had) I had a PCB made. This first prototype used Allegro A4988 stepper motor drivers which are supposed to be able to deliver up to 2A on each output.

The A4988 is a surface mount IC and really needs either heatsinks or a 4 layer PCB that uses the rear layer as a heatsink as shown in the datasheet to deliver the full 2A. I found I could not get more than about 1.5A before the chips started shutting down from thermal overload. I also discovered a problem with the way my hardware was scanning the buttons and limit switches.

When I designed the new controller I designed it so that the MCU I/O pins were grouped in a way that allowed the software to use port manipulation. This allowed the software to run much faster when controlling the motors and scanning the buttons / limit switches. It also gave me access to additional I/O pins that the Arduino software does not normally let you access.

At this point I should mention that I am one of those people who do not like unused I/O pins and in finding uses for the extra pins (such as monitoring motor fuses, thermal overload pins etc) I got a bit carried away and actually ran out! I had used 86 I/O pins and wanted more.

In the end I added an ATmega8A processor linked via the I²C bus. This processor is dedicated to spindle speed control and attempts to maintain a constant cutting tool speed as the load changes.It also gave me extra analog I/O pins to monitor air temperature, heatsink temperature and spindle motor current draw which can be used to detect a stalled motor.

The new MkII PCB ended up a bit bigger as a result of using much larger Toshiba TB6560 stepper drivers which are rated for 3.5A each and are available in a zip package which is much better suited to being mounted on a heatsink.


I used a tunnel heatsink which has cooling fins on the inside and two 40mm cooling fans, one at each end. Even if one fan dies, the other fan can prevent overheating until the fauly fan is replaced.

You may have noticed in the photos that I have added sockets for bluetooth and Xbee / WiFly modules. My intention was to allow wireless monitoring and g-code uploads. So far the g-code uploads have been a problem as the g-code needs to be written to the SD card. Unless the data is transfered at a painfully slow rate then chunks go missing. Until I find a solution to the problem the wireless features are only good for wireless control and sending information such as job status.

The controller hardware is finished and now I'm working on the software. I have one version for 3-axis machines and an experimental version for 4 axis. When I have time I will combine them. There is support for the 5th axis but currently I have no cam software that will generate 5 axis g-code for me to test with. Below is a Buddha statue I made while testing the 4th axis software using MeshCam to generate the g-code....

Read more »