I have been looking for a way to simplify the creation of PCBs with a fairly high degree of accuracy - my series of posts about using a laser diode from a DVD/RW drive was an experiment to see if I could use that to expose copper on a PCB by burning away a layer of paint applied to the board. Unfortunately it turns out they are not powerful enough for the task (although they are still useful for other things).
I started looking at other options including purchasing a CNC router to perform the task by cutting the copper layer away directly. Unfortunately the price of a full CNC router ranges from around $AU 600 to $AU 1500 depending on the size of the work area and if you get it as a kit or not - at this price it is a bit hard to justify given the purpose I want to use it for.
It then occurred to me that I could use a hybrid process - use a layer of paint to protect the copper from etchant and use a simple engraving tool to expose the areas I do want to remove. I did some simple tests using a cheap engraver from Jaycar and proved that you could use it to create relatively fine lines through a coat of spray paint.
The next step is to mount this on a device controllable through G-code commands so I can try it with complete boards. Because the amount of force required is far less than that needed to cut through the copper layer completely and you don't need precise control in the Z direction it should be possible to make the bed at a far cheaper price using easily obtainable materials. This is the first in a series of posts describing my attempt to do just that.
I'm writing these posts as I progress so I have no idea if the end result will be a working device or not. If you spot anything that I'm doing wrong or that I could improve please speak up in the comments. The project is hosted on GitHub so feel free to poke around.
The design I'm starting with is fairly simple - a work bed that moves in the X direction and a tool head moving in the Y direction. The tool head only has two states - active and inactive - there is no fine control over movement in the Z direction. There are a few goals I want to achieve with this design:
- Wherever possible all the parts should be easily available at a reasonable price from a number of sources - no speciality components or difficult to acquire pieces. I want the project to replicable if I want to build another one at some point or if someone else wants to build one for themselves.
- Where custom components are required they should be easy to print on a consumer level 3D printer like a MakerBot or Solidoodle.
- Although I'm planning on using the engraver as the tool head I would also like to be able to easily switch it out for a laser and be able to experiment with other tools as well. This means the basic tool head will simply be a mounting frame with a set of control and power lines available that you can attach whatever tool you want to use at the time.
I've settled on using a threaded rod as the drive mechanism for the bed (X axis) rather than a belt driven system - it seems less fiddly and the parts required to put it together are very easy to get as well as being cheap. I will most likely use the same mechanism for the Y axis but I will wait to see how well it works first before finalising that decision.
For the electronics side I'll stick with a standard Arduino or compatible as the main processor and use a motor driver shield to control the stepper motors. The hardware is relatively cheap and definitely readily available - there is also a lot of code available that can be pressed into service to drive the whole thing with minimal modifications. This means I can concentrate on the mechanical side of things without adding additional complexity.
Constructing the Base and Bed
The first step is to build a suitable base and put the mechanical components in place to drive the bed. The threaded rod mechanism requires bearings at either end of the rod and one end to be coupled to a stepper motor. The bed is attached to the rod with nuts and, as the rod is rotated, the nuts slide down the length of it taking the bed with them. We also need some guide rods at the edges so the bed cannot rotate around the drive screw and will remain balanced even if the load placed on it is uneven. The parts I'm using for this are:
- 9mm MDF for the base. It's relatively light for it's strength and an easy material to work with.
- Xmm MDF for the workbed.
- A length of 5/16" threaded rod and matching 5/16" hex nuts.
- Two 608 bearings to mount the threaded rod.
- Two lengths of aluminium tubing for the guide rods.
- A Nyloc nut to help with coupling the threaded rod to the stepper motor.
- A stepper motor.
- Limit switches for detecting the maximum movement.
All of the parts above came from Bunnings except for the bearings which I bought from a skate shop (they are the same type used in skate boards), the limit switches which came from Jaycar and the stepper motor which I bought from Little Bird Electronics.
I'm aiming for at least a 15cm x 15cm usable work area, it's large enough to be useful but small enough that the final assembly will fit neatly on a workbench. This means the bed will need to be at least the width of the work area and twice the length - so 30cm x 15cm at a minimum. The diagram to the left shows my planned layout for the base and shows the mounts and coupling components that will be required.
Because the bed and the base are tightly linked they need to be constructed at the same time. The bed is somewhat simpler - it only requires attachments to the guide rods and the threaded rod. The diagram to the right shows how they are laid out.
I apologise for the quality of the diagrams, at this stage it is all very much a work in progress so I'm simply doing a basic layout using the Inkscape tool. The numbers on the components are the arbitrary part numbers I have assigned to the the printed parts - these are described in more detail below.
Coupling and Mounts
All the mounts and the motor coupling are 3D printed and are designed to use M4 bolts to attach them to the base. You can find the OpenSCAD source for them here. At the time of writing these are very much works in progress - I haven't had the chance to put them together yet.
Note: The components in the current design take a long time to print - with my printer (a Solidoodle 2) it takes about 12 hours of printing to make all the parts (4 print runs at an average of 3 hours per run). The largest part just barely fits into the print area I have available (6" x 6"). If you are trying to duplicate this project be prepared for a lot of print time.
At this stage I'm not entirely sure that the plastic components will be strong enough or if they will provide a tight enough grip on the components they are being attached to. I'm trying to avoid the use of non-removable connections so I'm using grub screws instead of glue to fasten the components.
The grub screw concept was introduced to me by a friend. Essentially you need to provide a way to introduce a nut into your print with a bolt hole that will engage with the nut while keeping a slice of plastic between the two. This allows you use the tip of the bolt to apply pressure to the target surface by using the plastic to absorb the force. My friend goes to the extent of dropping the nut in to the print at the opportune time so the print continues around it, my approach is to provide a slot (with a suitable hexagonal shape at the bottom) that you can drop the nut into and insert the screw to the side of it.
In this section of the post I describe the parts that are needed and provide a basic description of their design and requirements. So far I have tested these for sizing and interaction but haven't fully assembled them yet so changes may be required. In the headings for the various components I've included the part numbers I have assigned to them (see the layout diagrams above) so it is a bit easier to match the part type to the purpose it serves.
Guide Rod Mounts (Parts 1, 2 & 6)
There are three types of these, the first is used to attach the guide rod to the base and simply consists of a hole for the guide rod to fit in, a slot to hold the nut for the grub screw and bolt holes for attaching to the bed (this is part number 2), the rod is fixed in place with the grub screw. The second type is a simple variation of the first which adds a slot to mount the limit switch (this is part number 1). The arm of the limit switch extends upwards so when the bed has reached its limit of travel the controller knows it cannot move in that direction anymore.
The third and final version is used to attach the bed to the guide rods. This version does away with the grub screw and the hole for the rod passes completely through. The fit on this needs to be relatively tight to avoid wobbles but still loose enough to allow it to slide freely across the guide. I'm planning on using a silicon based lubricant to help with this.
Bed Drive Mount (Part 7)
This part (shown to the left) is very simple - it clips on to a hexagonal nut that is screwed on to the threaded rod. My concern with this part is that the orientation of the print means that the force applied to it (and it will be subject to all movement force for the bed) will be in the same orientation of the print layers, although I don't expect a large amount of force to be applied the part may degrade over time.
Bearing Mount (Part 3)
The bearing mount (shown to the right) simply needs to hold the 608 bearing in place while allowing it to freely spin. The threaded rod will be mounted in these bearings which will allow it to rotate freely without allowing it to move laterally. There is only a single bearing only mount required, for the other end I merged it with the motor mount to make a single piece.
Motor Mount (Part 4)
This is the largest individual piece in the collection - it merges a bearing mount (as described above) with a holder for the stepper motor while allowing space for the motor coupling (described below). The piece, while large, is very straight forward. The only issue to take into account is ensuring the fit for the motor is tight enough that it doesn't wobble when it changes direction. My initial print for this is a little loose (see the image to the left) but I think I can correct for that with some suitable filler material.
Motor Coupling (Part 5)
This part is the most risky - it's job is to couple the shaft of the stepper motor with the threaded rod. To do this I am using a Nyloc nut on the threaded rod and a grub screw to attach the stepper motor shaft.
If you are not familiar with Nyloc nuts they are a standard hexagonal nut with a nylon coating on the thread - they require a significant amount of force to screw on to (or screw off) the thread they are put on. This is fairly straight forward and relatively low risk - the hexagonal shape is a lot easier for a 3D printed plastic part to grip on to than a screw thread, by making the part a suitably tight fit you will get a coupling on that end that will transfer the rotational force with very little slippage.
My concern is the coupling to the circular shaft of the stepper motor - some motors provide a shaft with a flat surface on one side, the ones I am using are circular. My coupler design uses a grub screw to attach the motor end so it is purely a pressure based connect - at the moment I'm not sure if the force applied will cause slippage or not (I'm hoping not). This design would certainly not be suitable for applications that would require strong lateral forces (such as cutting through metal, even the thin layer of copper on a PCB). As I'm not planning to do that I'm hoping it will be fine.
I have completed the first design for all the 3D parts and have printed out most of them, the remaining parts are printing now. Over the weekend I will start to put everything together and see how well it all works out. I will be posting updates to my Google+ feed as I go about this and write up the results in a follow up post as soon as I get the chance.
The construction process should be fairly straightforward, how well it works once assembled is something I need to measure fairly carefully. I am hoping for at least an accuracy of 0.3mm - that would allow me to build the type of PCBs I want, if I can get an accuracy of 0.1mm out of the device that would be a great bonus.