-
1Step 1
Printing the parts:
Please use a slicer that supports calibrating holes properly. I use KisSlicer for slicing, there is a free version available that supports printing one type of part at a time. You may print multiple of them at once but only the same part. I love it because it allows me to print 15 mm holes at exactly 15mm so that I can press my linear bearings into the holes and don't need any additional thing but a vice to fix them in place for the lifetime of the part. It's also just $42 or so and its generally really good and requires more attention by 3D printer owners!
Since you can do what you want and PLA and especially ABS will always warp at least a little bit, I designed the parts with warping in mind. I added tension releasing cuts where possible and all functional surfaces are facing away from the print bed. Therefore, you have to press the brass nuts in on the TOP side of your prints and never on the one that was flat on print bed. I changed the design of the X-axis (going from left to right when you look from the front) so that the next person to print these parts puts the brass nut on the onside of the X-axis because that side is more likely to be flat and 90 degrees than the print bed side.
Since the parts are pretty large, the print of each takes many hours. Between 8 and 11 hours in my case at 0.2 mm layer height and 33% infill.
-
2Step 2
Laser cutting the wooden enclosure:
This proved to be a challenge on my K40 laser cutter. I bought this super cheap $5 a sheet plywood from home depot and hoped that I could cut it well because I did it before. But I was wrong. Cutting multiple parts in one go seems to heat up a component within the laser so that the cutting power goes down. At first randomly, later permanently so that the system needs a cool down phase. Even changing the final focus lens to a 38.4 mm lens to get more power in one spot did only improve the situation but not completely eliminate the issue that some parts just wont cut after cutting a few before. It works, but it doesn't work well. I suggest to honer your local maker space and ask to use their laser cutter for a tip. They will cut all the parts in no time, you get the precision you want and you get to know some very nice people!
I glued the parts together using wood glue. It is very easy so do since you can just lay them side by side and apply a bead of glue. Fold the parts and add M3 x 12mm screws and M3 nuts. Tighten the screws but please don't over-tighten them. The wood will crack and it's not necessary. The screws are more an accessory to get the mill into shape and to support the glue while drying.
-
3Step 3
Building it up:
I highly suggest to order the hardened steel linear rods cut to the proper length! They are... VERY hard. Using a hacksaw to cut them will cost you more time and money than just ordering them at the proper length. I used an angle grinder with a thin 1 mm cutter to cut them and even that took some time at a proper workshop. Most ebayers except these requests because they have to cut them anyways.
Putting the rest together should be pretty straight forward.
-
4Step 4
grbl on an Arduino Mega256 and a RAMPS 1.4:
grbl is the standard for arduino based CNC machines. I highly recommend it. I use a modified version on my laser and now on my PCB mill. To get it to work on the RAMPS 1.4 board for simplicity and because it was part of this cheap kit I bought, I suggest using grbl for Cyclone and configure it using my config:
$0=10 (step pulse, usec) $1=127 (step idle delay, msec) $2=0 (step port invert mask:00000000) $3=7 (dir port invert mask:00000110) $4=0 (step enable invert, bool) $5=0 (limit pins invert, bool) $6=1 (probe pin invert, bool) $10=31 (status report mask:00011111) $11=31.000 (junction deviation, mm) $12=0.002 (arc tolerance, mm) $13=0 (report inches, bool) $14=1 (auto start, bool) $20=0 (soft limits, bool) $21=1 (hard limits, bool) $22=1 (homing cycle, bool) $23=1 (homing dir invert mask:00000000) $24=50.000 (homing feed, mm/min) $25=500.000 (homing seek, mm/min) $26=250 (homing debounce, msec) $27=0.000 (homing pull-off, mm) $100=800.000 (x, step/mm) $101=800.000 (y, step/mm) $102=3200.000 (z, step/mm) $110=600.000 (x max rate, mm/min) $111=600.000 (y max rate, mm/min) $112=300.000 (z max rate, mm/min) $120=100.000 (x accel, mm/sec^2) $121=100.000 (y accel, mm/sec^2) $122=50.000 (z accel, mm/sec^2) $130=162.000 (x max travel, mm) $131=107.000 (y max travel, mm) $132=30.000 (z max travel, mm) $N0=G92X160Y107 (Sets coordinate system after homing - In current version, endstops are at MAX) $N1=G0X0Y0 (Moves to new home after fresh homing)
Wire up your endstops to MIN even though grbl searches in the positive space for MAX endstops. This is an issue with the Cyclone port for RAMPS 1.4. If your stepper motors are running in the wrong direction using this config, please turn your stepper motor connectors on your RAMS board around. If you change the config you might end up in a weird state and you will need multiple values, not just direction invert.
-
5Step 5
Wiring up the relay for the spindle:
The relay needs 5V because it wants I/O TTL level for switching. You can use D9 which controls the RAMS 1.4 extruder fan usually BUT you need to wire the relay directly to the D9 pin. It is located on the top row on the left if you look at the board with the power and USB connector on the left side as can be seen here.
The cool thing is that M3 and M4 for spindle ON and spindle OFF works out of the box without any additional changes. So solder that wire directly to Arduino digital pin D9 and you have full ON/OFF spindle control!
-
6Step 6
Wiring up 110V:
Don't be stupid, please don't hurt or kill yourself! If you never worked with land line power, ASK SOMEONE WITH EXPERIENCE to do it or to help you! I'm not responsible for anything that happened to you or your stuff while wiring up the power to the switch, the power supply, the spindle relay and the switched power outlet on the side! Specifically, whenever you open the power backpack, pull the plug!
Therefore, I won't go into details on how to wire this up. I want you to understand what's going on so you should research what is necessary.
Just this:
- Power to switch
- Power to power supply
- Power to relay
- Power to power plug
- 12V from power supply to both RAMPS inputs (not actually required to use both because the second input is for a heated bed and the extruder on a 3D printer)
That is essentially it. I highly suggest covering every open screw terminal that's usually hidden in a wall (remember, we use the cheapest possible wall mounted switches and wall plugs here) with electronics isolation tape, heat shrink or similar.
-
7Step 7
Milling the Mill Bed Top Fence:
EDIT: For your sake, I added a wizard to the grblController software to make this step very easy. Fire up grblController, connect, go to the Mill Alignment Fence tab and follow the instructions:
Milling the top fence that you just glued to the bed is important to have an absolutely parallel reference to the X-axis of the machine. You COULD go without it if you plan on only mill single sided PCBs, so you may consider this your first upgrade to the machine. Even though you just put it together. And the upgrade came with the package for free. And you already know that double sided is much cooler anyhow. I know, it isn't. But then the yoke wouldn't work.
Put in an outline mill bit like one of these.
Manually move the X-axis from one side to the other side and check where the mill bit is closest to the fence. You will already see, it's not 100% parallel that way. The reason we need to know where the bit is closest is so that we a) don't run into a wall or remove too much material and break the mill bit all of a sudden, and b) because on that side we need to mill more material off.
In my case it was fairy good but not perfect. So I created a simple gCode file that runs 5 mm deep in multiple straight lines, going lower in Z every time.
(Metric Mode) G21 (Absolute Coordinates) G90 S30000 G0 Z12.7000 G1 X0 Y0 Z0 F360 M3 G1 Z-0.5 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-1 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-1.5 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-2 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-2.5 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-3 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-3.5 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-4 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-4.5 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-5 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G1 Z-5.5 F144 G1 Y162 F360 G1 Z1 F360 G1 Y0 F1000 G0 X0 Y0 Z12.7000 F360 M4 M2
As you can see, it's pretty straight forward.I moved my mill bit as close as I dared against the fence, put it on top of the fence in Z, so that it can actually mill 5 mm down in Z and hit start. The reason why it goes 5.5 mm down is that I didn't care about a little straight line at the bottom of the fence but I DO care of there are some leftovers that the mill bit didn't mill properly. It is of utmost importance that you can align your PCB perfectly flat to the fence. Particles, dirt uneveness is unacceptable for double sided PCB milling!
If you see that your mill bit is not actually milling the fence everywhere along the way, please repeat the process after manually adjusting the Y-axis a bit to get closer to the fence / into the fence a little more.
If you followed the steps, you should now have a parallel mill bed fence that is perfectly parallel to your X-axis. Congratulations!
-
8Step 8
Calibrating the X-Axis:
To be documented. Sorry guys. I wrote the text already but the Logitech software for my keyboard assigned the reload function to a button right next to the left CTRL key and guess what. Hackaday.io reloaded and my text was gone. I will get back to this tomorrow, I guess.
Ok, let's try this again.
The reason why this step is super important for everyone who wants to work with double sided PCBs on this mill is misaligned holes can cause short circuits on one of the sides. For example when a via or any through hole part has a rather small restring the misalignment can cause the restring to rip open and bend against the surrounding ground plane. It also looks cleaner if this is properly calibrated. But hey, it's not hard.
I added a wizard to the my version of the grblController to go through the calibration process. Please fire up grblController, connect, home the machine and follow the instructions in the calibration tab:
-
9Step 9
Milling a PCB:
You have come this far, that is both admirable and awesome and I thank you for following along!
But that also means you need to get the settings and instructions now to be able to mill your first PCB successfully. In other words, this log entry might become a little wordy but I will try to keep it as short as possible since I'm not a fan of reading 20 pages to get the bottom of a simple step myself.
- Fire up eagle and load your board design
- Move your entire board slightly away from 0,0 which should be at the bottom left. This is important because otherwise the mill will eventually end up running into negative space on the TOP layer and that is definitely NOT what you want. We want to keep things simple. Move it away by 5 mm in X and Y.
- Use the info tool and move your outlines from the layer 48 Document to the layer 46 Milling. This will enable the pcb-gcode script to find your outline and generate your milling path for the outer contour of the PCB. Please keep in mind that the end mill will run exactly in the center of the mill line. There is no outer offset based on the diameter of the endmill being calculated by pcb-gcode! You have to design that into your board layout yourself!
- At the top of eagle you find your command text field. Type "run pcb-gcode-setup" and hit enter.
- Change all fields to the following settings if the settings I have provided in the pcb-gcode patch archive didn't do that for you already:
The new item that I added so that your outlines can be milled without destrying your endmill is on the right. Num Slices is the number of layers for cutting the outline. So at -1.8 mm cutting depth this results in {-0.3 mm, -0.6 mm, -0.9 mm, -1.2 mm, -1.5 mm, -1.8 mm} different cut depths.
Since the board in my example didn't need a bottom side, I deactivated the bottom layer features. However, I think the following should be selected for a dual layer board:
- Generate top outlines (there is a bug in this menu: If the top outlines are not selected, the top.etch file will not be generated. I might hunt that bug down later...). We will ignore the top.mill file!
- Generate top drills (we want to drill first)
- Generate bottom outlines (this is your mill file for cutting the outline of the board. We need to do that LAST!).
- The bottom.etch file will be generated automatically.
Please note: I have deactivated Show Preview because it annoyed me after a while. When you know what the result should be, you can deactivate it. It speeds up the process significantly - not that it's very slow in the first place...
The machine uses the speeds that OtherMill suggests for milling FR1 copper clad board. That is by no means super fast but it looks impressive enough. My endmill holds up to that speed and I'm fairly confident that my 10 mill bits will last quite a long time for their huge $9 investment (for all ten).
Select the grbl-cyclone.pp file and go to the next tab.
- That's it! Hit Accept and make my board.
Now, you should have a range of files in your project folder.
- filename.top.etch.gcode
- filename.top.drill.gcode
- filename.top.mill.gcode (ignore forever)
- filename.bot.etch.gcode
- filename.bot.drill.gcode (ignore forever)
- filename.bot.mill.gcode
We do not want to drill twice. If there is a tiny misalignment in your PCB machine, you will not drill into a hole but slightly off the center of that hole. It is very likely, that your drill bit will snap and we don't want that! Specifically, if it ends up in your eye!
Preparation of the PCB:
Make sure the PCB is flat. If not, use some gentle force to flatten it. When it is flat enough, use double sided tape and apply it with even distance throughout the area you expect the machine to mill. More doesn't hurt but it would be good to be able to remove the PCB from the mill bed after milling without destroying neither the PCB nor the bed.
Apply the PCB to the top left corner of the mill bed for the top side and make sure you have it aligned properly and totally parallel and flat to the top mill bed alignment fence. This step is important!
Fire up grblController with my modifications and connect to the mill. Go to the PCB Milling tab and home the machine. Otherwise it won't do anything but lock you out.
================================================================
After homing, make a dry run in thin air without Z-probing and without any endmill attached. Make sure the system works properly before you even attempt to mill a board! Make sure your Proxxon actually spins up when milling should start.
================================================================
Then, attach your V-shaped endmill and connect the probing wires to the PCB and the endmill. I press the one wire with a crocodile clamp onto the copper clad board and I attach the other wire with a crocodile clamp to the end mill. MAKE SURE YOU HAVE PROPER CONNECTIONS or you will break your endmill. I suggest testing it first by just touching your endmill with the second wire from the PCB to check if the machine stops instantly during the probing run. Check your wiring if it doesn't do that! Remember, the pin must be pulled to ground because it uses the internal pullup of the micro controller and it looks for a low signal on the I/O.
Confirm that the wires are connected using the check box and hit the Probe Z0 button. Z-axis moves, gently touches the surfaces and stops. Be prepared to emergency shutdown the mill during the first couple of Z-probes... It's probably a good idea to use even slower feedrates.
All done, let's get to business:
- Load up your top.etch.gcode file.
- Remove all your probing wires.
- Hit Start!
Milling begins now, the spindle turns on and you should see the system running through the PCB. Wait until done.
Move the spindle to safety and remove the v-shaped endmill and replace it with the drillbit of your choice!
Load top.drill.gcode and repeat the Z-Probing step. Be careful to actually have a proper connection. The drill bit will just break instantly of you don't.
It is wise to run the Home X and Y command first by pressing the button because you attached a new tool and it is likely that something moved in the process.
After successful Z-probing, hit Start again and wait until finish!
Move the spindle to safety and remove the drill bit and replace it with the v-shaped endmill!
Remove the PCB, clean the print bed and free it from any remaining double sided tape. Since it is wood in my case, I scrape it off instead of using chemicals. If the bed is not properly flat, you will run into problems with etching now. Apply the double sided tape on the TOP side of the board you just etched successfully and glue the board to the TOP RIGHT edge of the mill bed such that the old top left corner of the copper clad board is now in the top right alignment corner of the bed facing down.
================================================================
At this point, I'm going to assume you have calibrated your X-Offset already!
If not, a drilled hole on the top side must line up perfectly with a drilled hole on the bottom side. In my case the offset was 160.3 mm in X and it should not be vastly different on your system. Maybe by 0.5mm but not more. That should give you at least an acceptable test PCB for starters. If you're planning on using DIP and though hole parts. Test it and calibrate it using one or two holes only! Drill a hole manually at X=60, Y=5 and then move to the bottom coordinate system and drill X=-60 Y=5 and it should line up perfectly!
===============================================================
Load the bot.etch.gcode file from your PCB project directory.
- HOME THE MACHINE!
- Hit the Set Bottom Side Coordinate System After Fresh Homing button (WARNING: This will move the end mill to the new X0 position in the other corner. Make sure the path between X0 on the left and the new X0 on the right is free of obstacles or your endmill will break! I will add a checkbox for this later to make it safer and more idiot proof)
- Attach probe wires
- Probe for Z0
- Hit Start!
- Wait until finished.
Repeat with bot.mill.gcode but please attach you mill bit to the Proxxon spindle.
- Attach probe wires
- Probe for Z0
- Hit Start!
- Wait until finished.
Please keep in mind that the end mill will run exactly in the center of the mill line. There is no outer offset being calculated by pcb-gcode! You have to design that into your board layout yourself!
After all this you should have a board done. So much text! If you do it twice, you won't need any of this anymore because it's actually just pressing three buttons and changing some end mills and it's done. Takes no time to do but the learning curve is rather steep.
Congratulations! You have successfully milled your first double sided board with drilling holes and milling the outlines!
Thanks for reading all of this and I hope it helps you to get started!
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
It seems like it would be easier to start with a cheap 3D printer kit and mod that. 90% of the parts are cut or molded to fit and tested to go together right. It's a pain trying to source and order a bunch of hardware. Then things like you need one screw but have to buy a pack of 10.
Are you sure? yes | no
Thank you for sharing this! I'm in the middle of making something similar to a Mantis CNC machine (search YouTube, "Cheap DIY CNC Mill" by SpltSpaceDurham). This will be really useful in setting up the software side as I'm using the same controller as you though - I went with a second hand, high-current, 19.5V laptop power supply for the steppers though and an old desktop supply for the 12V spindle motor.
Are you sure? yes | no