PLEASE, help support my efforts by checking out some of my own extra-special links:

Gootee Curve Tracer's Homepage (also: DIY Kits)

How to Make Easy & Cheap Printed Circuit Boards (PCB), with Laser Printer Toner Transfer

My zillions of SERVICE MANUALS and hard-to-find test-equipment (and other) manuals that are For Sale, on CD (OR BY EMAIL!) - Order Online!

Link to Gootee Homepages: The Complete Index. i.e. Links to ALL of my webpages.

Building Inexpensive CNC Machines

for Computer-Controlled Drilling and Milling

(This page is under "ongoing construction"...)

(C) Copyright 2002 by Thomas P. Gootee


When I started thinking about CNC machines, I just wanted a computer-controlled machine that would be able to automatically drill all of the holes in the printed circuit boards that I made, for my Curve Tracer kits (see the link, above). But, the "good" commercially-available machines were priced higher than the amount that I could justify spending. So, I started thinking about what it would take to build one, myself. And, I didn't want to build one that would cost almost as much as a commercial machine: Otherwise it might have been smarter to just BUY one, to begin with! So, I decided to add "low cost" as one of the design goals. I also expected to end up with one or more additional products to sell, as a result of this project, to (help) justify the time that I spent on it.

This page was started on 6/6/02. It should be updated, occasionally, as I make progress on the machines I'm building.

Update (T. P. Gootee, 01JUN2006): After receiving many emails, over the last several years, and still continuing to receive more, regularly, requesting information about the 3-Axis driver circuit schematic that I used with my PC's parallel port, and about the software that I used, etc, here are some links that should lead you to everything you need:



I think that someone told me that the main driver IC used on the controller board is now obsolete and unavailable. But there might be a replacement (and there are almost certainly other controller schematics in some of the Application Notes) at Allegro Microsystem's site (the company that made the original IC):

Allegro Microsystems, the driver IC manufacturer

Originally, I registered, as a commercial-product electronic design engineer (which I am, and which was also applicable in this scenario), at, and then ordered three FREE SAMPLES of the IC. (If you're an electronics-industry "newbie", you may be surprised to learn that almost *ALL* IC manufacturer's websites offer the same "free samples" service, for many or most of their ICs. e.g.,,, and many, many others. Some of them are amazingly good about it too. Analog Devices seems to keep insisting on sending most of the samples that I order via FedEx Overnight, FROM THE PHILLIPINES to the USA!! Hobbyists should note, however, that the "free samples" services are almost always meant to be used only in cases where they might then be designed into a product that might result in the IC manufacturer selling a lot of the ICs. So, let your conscience be your guide.)

P.S. Make sure that you also click on the "Parent Directory" link, at the 3-Axis controller board's Plans website. They have links for other driver ICs, and other sources besides Allegro Microsystems. The IC used was apparently a very common type of (Darlington Transistor Array) IC.

P.P.S. To all who might, out of curiosity, want to ask: I ALMOST finished the CNC PCB-drilling machine that is described below, and actually ran its motors, using a square-wave generator as the input to the controller board (which all worked well), but then ran out of interest (mainly due to the "not quite good-enough" theoretical accuracy and precision of the mechanics of the printers' drive mechanisms), and ran out of time to work on it. So I never tried connecting the controller to a PC's parallel port. I also decided that if I were to spend more time on designing and building a CNC machine, that it would probably be a design that uses leadscrew-type (threaded rod) drives, rather than the belt-type drives of the old printers (You can read WHY, farther below.), although I MIGHT still have tried to use the printers' slider rails and printhead carriages, and definitely would have tried to use the larger types of stepper motors from some of the printers, in any case.

Click Here For A Much Better CNC PCB Drilling Machine - DIY Project, plus good CNC links.

End of Update

Machine Number 1:

Starting a project like this one, while having so little knowledge of what is needed to complete it, makes progress very slow, at first. I did a lot of searching and reading of the Usenet newsgroups, and many websites, through (I do have an electrical engineering degree, but had never worked with or studied stepper motors, before this, and knew almost nothing at all about milling/drilling machines, nor CNC machines.)

I learned about stepper motors, and their driver circuits, and the software used to run and control them. And I saw some of the ways that others had designed and built their own CNC machines. I also began to understand some of the limitations imposed by different types of machine designs. I started to get my design goals better-defined, and also saw where the machine I wanted to build would fit into the continuum of sizes and types of CNC drill/mill machines, which, by the way, hehe, would be very near "the bottom" of that continuum: All I needed was a small machine, able to drill boards of up to 6"x4" in size, with a worst-case hole-placement accuracy of about 0.01-inch or so, which would be about 1/3 to 1/4 of a hole's diameter (using 0.035" or 0.04" holes [I later realized that .04" was actually too large, though.]). And I didn't need to do a very high volume of drilling. I figured I'd be happy if it could drill at least 2,000 holes per day, mostly "unattended" by any machine-operator, i.e. me (although, hopefully, not taking all day to do that!).

I started to feel like I could probably design and build a machine. But, having both my "low cost" design-constraint, and the fear of badly "messing up" on something I'd never done before (which could waste valuable time, and resources; besides, that's supposed to be why we even HAVE "engineers"...), I wanted to START with a design that would be VERY quick and easy to build, and EXTREMELY inexpensive, that could serve as a "testbed" for learning more about stepper motors, their driver circuits, and the software used to control the machines driven by them. After that, I hoped I would be much-better "positioned", to design and build something that was closer to being a "real" CNC mill/drill machine.

I had considered several possible designs, while doing the initial research:

I considered trying to use an old flatbed X-Y plotter, either to move a small drill-head that was at the end of a Dremel-Tool-type flex-shaft drive cable, or to carry the circuit board while the drill was mounted above, on a separate third axis. Old plotters are quite inexpensive (under $50, on And I actually already owned some (Some of the "pen plotters" I owned used ANALOG VOLTAGE inputs, for the X and Y channels, and some used inputs from a computer's serial port.). People have, reportedly, gotten that type of machine to work OK. But I kept seeing too many problems that would have had to be solved.

I also thought about just building the x, y, and z axes from scratch, using threaded rods (leadscrews) connected to stepper motors to move platforms that had the rods' nuts attached to them. And I am considering using a purchased "compound slide"-type "milling table" as the x-y positioner portion of a machine, which would be modified by replacing the table's leadscrews' manual hand-cranks/handles with stepper motors.

One possibly-BIG advantage of the leadscrew-type approach, which would also be gained if building the x-y table "from scratch", using leadscrews, is that the leadscrews provide a MUCH larger gear ratio, which in turn gives MUCH better linear resolution, per step (theoretically, at least!). Even the small, cheap milling tables usually move each slide-table by only 0.1-inch per full 360-degree turn of the leadscrew crank, which would give a movement of 0.0005 inch for each full-step of a 200 steps/rev motor, as opposed to something like 0.008 inch per step for the typical dot-matrix printer's printhead-carriage assembly.

Update: I am now planning to use one of these commercially-available x-y milling tables when I build my second machine. I have purchased one, the cheapest ($99) model at But, I bought the exact-same make and model, brand new, on, for only $69 plus shipping (the seller happened to be fairly near my area, though, so shipping was only about $15, for the 36-pound table).

I also thought about using two old dot-matrix printers' mechanisms to make the x-y positioning system. I didn't THINK that one printer's mechanism could be mounted directly onto another one's printhead-carriage assembly, because I assumed that the "bottom" printer wouldn't have enough "power" to still be able to move correctly, with the weight of the other one on it. So, originally, I considered having one printer carry the printed circuit board (PCB), with the other printer suspended above and perpendicular to it, to move the drill's cable-shaft drive head, giving the second axis of positioning. However, I still would have needed to find a way to move the drill up and down (I was hoping I could figure out how to make the printer's paper-feed assembly, and/or motor, help perform that task.).

Recently, I happened to find a used-computer store where they had hundreds of old printers that they'd taken as parts of computer-system trade-ins, for newer systems that they sold. So, I bought some (about 12) of the printers, for only $5 each! I sort-of hoped that, if nothing else, they might be worth more than that, just for their stepper motors (and power supplies, et al).

I found out that the old IBM "Proprinter" models have FAIRLY HEFTY print-head-carriage stepper motors in them, at least compared to the Epson FX-850 and FX-1050 models. The IBMs' motors are 2.25" diameter, and about 2" long. (They are Sanyo Denki "Step-Syn" models, 4.1V, 1.1A, 200 full-steps per revolution, unipolar (i.e. 6 wires).) The IBM Proprinters also utilize a screw-type drive system for the printhead, as opposed to the cog-belt drive system that most of the other older printers use. (However, the "screwthreads" are extremely large (see photo, farther below), and are not comparable, at all, to a "normal" leadscrew-type drive at least, such as (for example) a cheap "allthread" leadscrew (threaded metal rod) that could be purchased at any hardware store.

I had also bought a couple of the biggest, heaviest, oldest "daisy-wheel" type printers that I could find, there. One of them, a CPT Corporation model A071, also had the big motors, with sizes just like those in the IBM Proprinters: 2.25" diameter x 2" long (But it had TWO of them, instead of just one: Minebea Co. Ltd. "Astrosyn" "Mini-Angle Stepper" models, 6V, 0.85A, 200 full-steps per revolution, unipolar. (The IBMs each had only ONE of the bigger-size motors in them, with a second one that was much smaller, and coarser-stepped, for the paper-feed roller's drive.)). The CPT A071 daisy-wheel printer also had very heavy, solid construction, with printhead-carriage slides that were a full 5" apart (at least twice as far apart as those in any of the dot-matrix printers that I bought), and a very nice, heavy solid-METAL printhead-frame/holder, between the slides, which even had roller bearings above and below the slide bar on the "little" side (the side that was farthest from the paper path) (See photos:). It looked *MUCH* nicer than the plastic printhead platforms and friction sliders that were in the dot matrix printers.

Printhead Frame/Holder, CPT A071 Daisywheel Printer:

Printhead Frame/Holder, CPT A071 Daisywheel Printer

Roller Bearings on Slide, CPT A071 Daisywheel Printer:

Roller Bearings on Slide, CPT A071 Daisywheel Printer

I stripped a couple of the Epson FX printers, and a couple of the IBM Proprinters, one small (8.5" wide) one and one large (15") one of each type, down to where I had only the carriage-slide assembly, with the printhead-holder/frame, the stepper motor and drive assembly, and part of the frame that held it all together. I also did the same with the CPT daisywheel printer (see photo:). (Note: I had to use a metal-cutting hacksaw, to remove parts of the internal frames.)

Printhead-Carriage Assembly of CPT A071 Daisywheel Printer:

Carriage Assembly of CPT A071 Daisywheel Printer

After taking apart the printers and actually SEEING what their carriage mechanisms looked like, I began to think that the big CPT A071 daisywheel printer "should" be able to have one of the small Epson or IBM model's carriage assemblies mounted right onto its' printhead frame. So I thought I would go ahead and try it, since (I thought) it would be *extremely* quick and easy (and inexpensive), at that point. And, IF that worked well-enough, only THEN I would try to make a z-axis (vertical axis) to work with it, to move a drill up and down (and possibly, I thought, other tools, or maybe even artwork "applicators" (pens?) to make front panel controls' scales and markings etc, for example, or possibly eventually to even attempt to apply etchant-resist to blank copper PCBs).

To find out if that would work, though, I'd need to be able to actually RUN the motor, and move the printhead assembly, to see if it had enough power to move the extra weight reliably. So, I got three of Allegro Microsystems' UCN5804B stepper-driver ICs (integrated circuits; "chips") (I got three free samples mailed to me within a week, from .) and breadboarded a 3-axis stepper motor driver circuit, which took as inputs "step" and "direction" signals, so it would be able to be compatible with some of the free CNC software, such as Dancad3D, that sends those signals to a PC's parallel port. The Allegro 5804B IC, in addition to the "standard" full stepping mode that powers two of the four motor inputs at a time, also supports half-stepping mode, and single-phase-at-a-time full-step mode. (By creating circuitry that could provide different amplitudes to each motor input, then, by using certain patterns of the inputs' timing and amplitudes, the stepper motors could be made to do "microstepping", allowing the use of much smaller step sizes than the motor "normally" supports, such as 1/4-steps, 1/8, 1/16, 1/32 steps, etc.; almost any fractional step-size, I think; not just powers of 1/2.)

To quickly test the motors (and my driver circuit prototype), I used an old Hewlett Packard DC lab/bench power supply that I had lying around (old PC computers' power supplies would work well, too), and an old Systron Donner "Datapulse 101" pulse generator (like a square-wave generator, but with variable width and spacing for the generated pulse/square waves, among other things). A simple 555 IC circuit from the web would work fine for this, too, and cost almost nothing, with parts available at, for example, Radio Shack stores. I used these instruments just because they were handy, because I happen to make a living selling surplus electronic test equipment, such as oscilloscopes, signal generators, spectrum analyzers, power supplies, and many other interesting kinds of equipment (Click the link at the top or bottom of this page, to see all of the cool equipment that I have around here!).

I soon had the motors going, and played around with the printers' mechanisms. It was quite interesting to vary the frequency and the width of the "step"-input pulses. At times, the motors seemed more like musical instruments, with resonances only at certain frequencies. I was also able to note large differences in a motor's torque, speed, "smoothness", and sound/noise level, depending on the pulses' frequency and widths.

I built a small "mount" assembly, on the CPT daisywheel printer's printhead assembly, to make a level base on which to try mounting the Epson FX-850 printer's entire carriage assembly, using small aluminum channel and angle stock and 4-40-size brass machine screws and nuts that I purchased at a local hardware store (see photos:).

Mounting Bases Constructed on Printhead Frame/Holder:

Mounting Bases Constructed on Printhead Frame/Holder

Mounting Bases Constructed on Printhead Frame/Holder:

Mounting Bases Constructed on Printhead Frame/Holder

I put the smaller printer's assembly onto the mount, on the larger printer's printhead-holder/frame (see photo), and powered up the larger printer's stepper motor. As I had hoped, the motor had NO TROUBLE at all, moving the WHOLE THING, reliably (see photo:).

Epson FX-850 Carriage Assembly, Mounted on CPT A071 Printhead Frame and Carriage:

Epson FX-850 Carriage Assembly, Mounted on CPT A071 Printhead Frame and Carriage

Epson FX-850 Carriage Assembly, Mounted on CPT A071 Printhead Frame and Carriage:

Epson FX-850 Carriage Assembly, Mounted on CPT A071 Printhead Frame and Carriage

Epson FX-850 Carriage Assembly, Mounted on CPT A071 Printhead Frame and Carriage:

Epson FX-850 Carriage Assembly, Mounted on CPT A071 Printhead Frame and Carriage

So, right now (6/6/02), I am in the process of making a vertical axis, to work with the x-y axes I've already made. It will be similarly simple, easy, and inexpensive. I had a piece of countertop lying around, 36"x30", on which I will mount the completed x-y machine. Then, a third (8.5" dot-matrix) printer's carriage assembly will be mounted, on a type of gantry, oriented vertically over the center of the x-y system. I was going to make the stationary gantry out of a similar piece of countertop. But, for me, it seems quicker and easier to just use threaded metal pipe to make an "L"-shaped support, over the x-y machine. (And, as can be seen in the photos, I still need to construct a platform on the smaller printer's printhead assembly, to hold the actual workpieces. It will be made of small aluminum channel and bar stock, similar to that used on the larger printer's printhead frame.)

IBM Proprinter (8.5-inch) Carriage Assembly, mounted on threaded pipe support:

IBM Proprinter (8.5-inch) Carriage Assembly, mounted on threaded pipe support

Three-Axis Stepper Driver Circuit Breadboarded:

Three-Axis Stepper Driver Circuit Breadboarded