I'm feeling progressively better about the mechanical design, and spent some time on a day off piecing it all together in Rhino from the *.stl exports. Here is the machine minus nuts and bolts and belts and controllers, assembled and exploded into the four rigid assemblies:
Okay, not technically _rigid_ assemblies; what is rigid, after all? There are flexures everywhere, designed in and otherwise! And bearings, and rotating parts, etc. But these four main groups make it easier to discuss machine subsystems.
In any case, I just bought Rhino for myself and it is fabulous! The program is a different way of thinking about CAD, but after spending a few hours pushing parts around I'm quite happy with its flexibility for creating exploded assembly drawings. And there is so much more! NURBS, and Grasshopper, and all the rest. For now, it's a nice way to compose illustrations; the built-in pen view mode is lovely for complex mechanical things. I've had access to Rhino through various institutions in the past, but only used it sporadically for specific tasks; some recent encouragement pushed me to finally take the plunge and I'm excited to keep playing.
A few more view captures: It might be time to figure out an easy way to add little dashed assembly lines to these exploded views.
Huzzah! I updated two files: circuit_graver_motion.py and run_circuit_graver.py, so that the motion system runs as a simple X/Y Cartesian machine. Relevant parameters:
More, probably much more, on controls in the future, I promise. For now, know that I can name and instantiate motors, adjust their maximum rates, and feed them *.svg files. Like this one, the ubiquitous test rhino:
I used the dial indicator mount and arm to secure a ballpoint gel pen above the stage, and mounted a bit of paper using some tape:
Rhinos, by and large, turned out quite well at 30 mm horn-to-tail, noting that a pen-up servo would help the render a lot by avoiding the annoying line:
At quite high accelerations, various rhino parts started to round off, but that isn't an issue; the circuit graver will run far slower than this during carving operations!
Up next, waking up the Z-axis servo and R-axis stepper! I just ran out of power ribbon cable and IDC connectors, so once I have those I'm hoping for a full 4-axis test, maybe with the Z-axis actually carving a bit of FR4.
The late-arriving shorter 152 mm belt is proving to be annoying. The 156 mm belt is too long, but I want it to work so I can wrap up ("wrap up" hahaha riiight) mechanical design and assembly this weekend:
That spacer is 6 mm thick, so the 152 mm belts wouldn't be short enough anyway. And having less space between the bracket and the plate makes it tougher to tighten the stepper mounting bolts. And I need to mount the modularthings boards anyway, so a bracket redesign is in order. The first go went well enough but required a bit too much clearancing to work:
Ahh CAD assemblies. Some of this was misjudging the stepper overhang, some of it was related to the grub screws on the pulleys, all of it ended up looking like hot garb. A fresh print with minor tweaks looks nice; note updated pressure knob color too, to match the spindle (and avoid matching the X-axis grey knob):
Both modularthings boards mount nicely to the bracket backpack, to which I also added some diagonal support braces that at least look intentional if still a bit janky. And! Note the LED color on the stepper board, which is usually much brighter green: I reflashed the boards to update their names and didn't have any issues, a testament to good firmware design and the loveliness of platformio:
The stepper board lacks a shell, and also runs slightly different firmware, and has a big integrated switchmode power brick hanging off the top, so it will probably stay not-matching. Which is fine. The bigger issue, I suppose, is that Jake uses a slightly different shade of grey PLA for his spacers, but... that is also fine.
More to come shortly; if I can summon the energy I might try to spin motors tonight, or it might wait for some night this week (again, pending energy, of course). I think I have everything I need in place, perhaps short a single ribbon cable connector, but otherwise should be able to do a full test soon soon soooooon!
I designed, fabricated, and installed the motion system components!
Plenty of new parts today: stepper pulleys (3), lead screw pulleys (2), and lead screw knobs. I also revisedboth stepper brackets: the R-axis motor bracket, which needed hole updates, and the X-axis motor bracket, to which I added a modularthings board mount since it won't fit on the back of the motor. Lots of minor adjustments, a few re-prints, and a few assembly cycles. Most of the bolts are pretty accessible, but I do think it might be time to make a lead screw axial tensioning tool to help with collar tightening:
Oh, and I cut one 400 mm lead screw in half! They stick out a little far but the knobs help take that up, and only doing one cut felt great. I ground flats onto the lead screw shortly after cutting and deburring, but ended up hand-filing additional flats later for the pulleys. I guess the lead screws aren't hardened, which is a good thing here:
I think that's it for tonight; tomorrow, I need to perhaps adjust the X-axis pulleys a bit, or maybe just lose a few millimeters of gantry travel:
Hahahaha ooops
I want to revise the R-axis bracket again, this time to hold the moularthings boards for both the R-axis stepper (it's a NEMA 14, so the PCB won't mount to the back) and the Z-axis servo. More bracketry! With any luck, motors spin tomorrow!!!
It's October! Slides are due soon. I spec'd but didn't order a travel case, since I'd like to bring the circuit graver to Supercon; I think it's going to be a Pelican 1507 air case. That will hold the machine, along with the cables, USB hub, spare parts, tools, and PCB blanks.
I measured center-to-center distances in CAD for nominal motor mount positions (i.e. not rotated in the generous tensioning mechanisms)
and figured I'd just start with all the pulleys being the same size, identical to the one on the spindle. That gave me calculated belt lengths of 149 mm (R), 212 mm (X), and 177 mm (Y). I planned to buy them from Misumi but shipping was at least a week out, so I found the appropriate sizes on Amazon (center-to-center plus pulley circumference; the two pulleys are the same, so I need a full 360 on one) and paid a few bucks for delivery this week (other than the last one, which is weird, since it's from the same listing). I'm worried about messing up belt sizing, so I ordered a size up, and then another size up from there: Perhaps not the cheapest option, but I'll find use for extras, and I really want motors spinning lead screws (and spindles) next weekend! Much yet to explore once the machine is powered, and only a few weeks left to do it. At some point before then, I'll bring the lead screws in to work and cut them down before starting my day; hacksawing a few long M3 screws is one thing, but I really can't be Dremeling hardened steel lead screws in my tiny Cambridge apartment. And the general backup plan in case the belts are the wrong size: print different size pulleys, I suppose.
Oh! And! The pulleys should have integrated handwheels, so it's a bit easier to move the machine manually. The R-axis has a limit switch but I got impatient this past weekend and didn't build in mounts for X- and Y-axis limit switches, and probably wouldn't find time to install, wire, and program their operation anyway. So being able to quickly manually move axes around before powering up the steppers will be nice. Although I haven found that the 4-flight lead screws backdrive pretty well, so maybe it's a non-issue.
Oof, should I have geared the steppers down at all, and bought bigger belts? I think I did this calculation earlier; I think the lead screws travel 8 mm per rotation, so at 190 steps that means ~40 microns of travel per step. Microstepping gets me a bit further, but even without it that should be good enough for a demo, right?
I built the machine! Or at least, the purely mechanical parts of the machine; electronics and electromechanics still to come:
It works! Well, a lot of things need dialing in, but this is a great start; those are probably ~0.2 mm trenches, give or take:
Most of the 3D printed parts came together well. The cracks of my CAD architecture are showing; big assemblies are complicated because you have to keep track of mating parts! That bit me when I checked alignment of the gantry to the gantry legs:
It's a bit tough to see in the image above, but the two holes closest to the top edge of the leg (left) and the gantry (right) are slightly offset. So I reprinted the gantry with fixed holes. Another crack appears: the X and Y axis gantries are identical, save the location of two holes that shift by a few millimeters. Bah.
Print orientation is often a compromise; in many cases, I want flexures to avoid crossing layers, which dictates the direction of individual prints and also pushed me to split the design into a few bolted-together parts. The frame comes together from seven parts: the gantry, the two gantry legs, the back plate, the base (or "y-axis gantry"), the front plate, and the X-axis motor mount:
I tried to be a bit clever with overlaps: the gantry sits on shelves on the two legs, which fit into blind sockets in the back plate. The base fits in a socket on the back plate too, and fits into the front plate: The gantry legs, front plate, and back plate all host 608-size bearings for the lead screws, and include one axis of constraint relief via opposed parallel-beam flexures (the orthogonal axis is relieved on the lead screw nut carrier). So they get printed flat! And the two gantries are printed on their backs, so the linear guide rail mounts are the top layer of the print, which seemed to work well enough on the test jig.
A better 3D print designer, or maybe even me if I had more time, might make a few adjustments to reduce the need for support material during printing! Actually, I could probably turn it off for a lot of the smaller things, since I'm typically only bridging a few millimeters for e.g. nut retainer pockets. Alas, I'm in a hurry, so I spent a bit of time removing support material:
This was generally fine. A bit time-consuming, but simple enough with the right tools: a pair of sharp flat serrated needle-nose pliers, and a little screwdriver I wasn't afraid to bend up a bit. And sometimes the slugs of material popped out in a quite satisfying way.
I bought my MGN5 stuff on eBay; the listing I found included four rails with four carriages each. For the first tests of the gantry, I just moved two carriages from two rails onto the others, leaving me with two storage rails that I now needed. So I 3D printed little carriage holders, which seem good enough but are perhaps a bit looser than the black plastic factory storage rails that came with my MGN7 test jig hardware:
As before, I used the MGN5 carriage test indicator mount I 3D printed to align rail pairs to within ~+/- 10 um along ~80 mm of travel, give or take:
I tightened the bolts from below (my rail set is tapped) gradually, testing for parallel as I went until they felt pretty tight. I ran out of M2x20 mm bolts, so the Y-axis rails are a bit sparse. Oh well.
Once I was satisfied with rail alignment, I bolted the frame together. There do be some dragons here, probably related to print orientation and bed warping; after attaching the legs to the back plate and tightening the bolts, the gantry fit with a ~1.2 mm gap:
I frowned at the gap and decided it was probably fine, and tightened the remaining bolts until it disappeared. Then I assembled the four 3D printed parts of the Y axis: the PCB mounting plate, the locking arm, the locking arm backer plate, and the lead screw nut carrier/preloader:
I unbolted and removed the Z-axis assembly and installed another dial indicator holder, this one sized to bolt onto the Z-axis servo mounts. I installed a PCB blank (which fit nicely, the clamp works well!) and positioned the dial indicator so the arm sits on FR4:
I swept across the working plane and wrote down deviations:
Not terrible, but maybe not great. Pressure control, etc, but I'm shooting for tracks in that order of magnitude so flatter seems better. Shimming the PCB mount plate at the carriages is an option, but before trying this I rotated the PCB 180 degrees and ran the same sweep test:
So at least some of the error -- actually, right around half -- seems to be from the PCB blank. I could still shim one side by ~50 um or so, but I decided to press on and do some tests! I did a few cuts without lead screws installed, driving the X and Y axes by hand:
The curved ones were a bit chaotic and fun. The diagonal lines are interesting; I set the spindle to be reasonably straight, but any deviation would pull the X-axis along in that direction while I pulled the Y-axis along manually. I wasn't super thrilled with the cut quality, so I pulled the Z-axis off, removed the tool, and polished it up a bit on a diamond hone:
I made a grid of cuts after that which turned out a bit better:
Without any finishing work, I pulled the PCB out and beeped the regions:
Not terrible! 11 distinct nets; five short circuits all on the left-ish side. A shaky loupe photo shows that the orthogonal lines seem to be smearing copper across the gaps:
Fascinating. I scrubbed off the chips by gently sanding the board on some 320 grit paper; this reduced the shorts to 4. I suspect I'll need to add a back-and-forth operation when toolpathing or something, or maybe improve the cut edge further. I didn't dust off ImageJ this time, but my guess is the trenches are 0.15-0.20 mm, or 6-8 mils (the pads on the QFN are 0.2 mm wide):
I've been careful about fiberglass dust; this process doesn't kick it up in the air like milling, but I still wipe everything down with a damp paper towel and try to keep a clean work space. The fibers seen on the cut above are from a paper towel!
Still not etch-a-sketching, so I installed the bearings using the old blanking block and a C-clamp:
I installed the split collars, and preloaded the lead screws in compression against the support bearings by (gasp) driving the stage to one side and tightening one collar while the assembly was pushing against the preload flexure. I noticed a bit of a clunking, which came from the split collar set screws rubbing against the gantry! Ah yes, I remember this from the previous test. It doesn't happen when the end plates aren't installed, meaning the assembly has a tiny offset somewhere that I need to track down. For now (and maybe forever), I clearanced the gantries (see the mark!) with a knife and let the preload flexure take up the difference, which worked well enough:
The preload mechanism is great; it was easy to add a bit of preload to the lead screw nuts after assembly until everything ran smooth:
I used the lead screw preload test as one handle, and an extra flexure and some locking pliers as the other, and did some proper etch-a-sketch tests. These worked well, and showed off one of the next challenges: tearing up adjacent tracks:
Not surprising, and something I think I can fix with good toolpathing (maybe avoiding crossing lines? sounds annoying..). In any case, time to measure and order belts and start spinning some motors!
Titles like "Machine Design Part x" sitting next to other machine design log updates probably aren't useful. I may go back and edit them at some point! For now, progress:
Motor mounts! Mirroring! A front plate! Lots to consider here, mostly that I'm in a hurry and want to do a full loop test this weekend. Given time and materials other than FFF 3D printed parts (as in, another aluminum plate, etc), I might have made the whole base square; but most of the stuff is in the back, and the motors should be fine hanging on brackets for now. Famous last words! I like the tripod base, as it reminds me of the similarly-sized microtome from ~100 years ago that sits on my desk. The two NEMA 17 steppers that drive the lead screws are a bit outside the triangle, but they should balance each other reasonably well, etc. This design pushes what is reasonable to consider without any FEA or pen-and-paper analysis, I suppose, but I'm hoping everything is just way stiffer than it needs to be at this point. Things like using the Y-axis rail mount as the main structural member that spans the feet, which itself is just a copy of the gantry, probably isn't great design practice. Ah well, that's why we'll test soon!
The back plate and two gantry legs are printing now:
... and should be done early enough to test fit and start printing the base, front plate, and motor mount overnight. Then tomorrow I can print the Y-axis bits (which are a different color!) and start assembling! I think removing the Z-axis assembly and testing the rest for alignment will be the right move.
While I wait, I turned off all of the structural parts (3D printed bits plus the laser-cut aluminum plate) other than the spindle and took a screenshot of the CAD model; this is a good guide to the whereabouts of the various axis constraint and drive mechanisms:
The frame for the machine is a parent component that hosts a few 3D printed parts: the gantry, the two gantry legs, the base, and the backplate, which connects the base to the gantry legs. This still needs a bit of work, but the general gist is here, with only half of the legs and backplate shown, since they mirror. Also, updated colors to reflect the stash of PLA I'm actually using to print the parts out, with each color representing a rigid collection of stuff:
This links the kinematic loop of the machine together, from cutting tip to PCB blank!
Drawing it out like this helps set my mind at ease; so far, I've tested everything but the bottom third or so, where the force lines go through the Y-axis. Or put another way, I've stacked three of four axes and run a hand-actuated cut (granted, in only one direction) and haven't had any issues with stiffness from what I could see.
As part of this design, I added flexural overconstraint relief to the lead screw mounts. These parallel beam flexures will allow the bearing to translate left and right a bit as needed, while still keeping up some degree of axial stiffness. This is orthogonal to the overconstraint relief flexures built in to the lead screw nut mounts, so hopefully this prevents lead screw binding (noting that it wasn't an issue on the test gantry leg, which had a rigid mount, so maybe this is yak-shaving...):
Seems uh pretty good. The parts bolt together so I can print flexures and linear guide supports in preferred orientations, and to generally make assembly and printing and the rest a bit easier. Still to do, double-checking clearances, scootching the assembly around and fixing offsets (turns out designing complex assemblies is hard), adding feet, adding a front base support, adding motor mounts, adding limit switch mounts, etc. My hope is to print and test a full etch-a-sketch setup this weekend: carving a PCB by hand-rotating lead screws! If this works, I'll design pulleys, order belts, and generally push towards a powered test. I bet tramming will be a bit of a thing; maybe I'll try sweeping the substrate with a dial indicator.
The machine is starting to take form; or at least, I can start estimating its total size, or at least, I can estimate its total height. Currently ~200 mm, although I still think I'll add a carrying handle. I'm reusing as much as I can from the X-axis, including the U-shaped bit that holds the two rails and the lead screw preload assembly. I also tested and revised the PCB holding bit a few times; it's heavily based on the test jig, but uses a simpler eccentric clamp and three screws to retain the handle:
The conical mating surface and backer plate arrangement works really well, ensuring precise alignment of the handle and minimizing play in the assembly:
It feels like I'll be able to queue up the final prints this week which will complete the basic kinematic loop of the machine, which is super exciting; I can't wait to try manually carving a PCB in two axes and put the stiffness question to bed once and for all (or perhaps queue up a frantic rush to re-design the machine using extrusion and plate, bah). I still need to link the yellow bits together and add in the Y and X axis stepper motors, along with little bits like feet and limit switch mounts. And order belts! Misumi has a huge range of GT2 lengths in stock so I'm not too worried about this, but I still want to get that checked off the list. It would be great to start October with 4-axis cutting tests, even if they aren't powered.
I'm worried that the machine isn't stiff enough! I don't know enough about the cutting forces to really judge this. The test jig seemed to work under hand actuation, but it did make screetchy noises sometimes when dragged quickly. I think the gantry was flexing and vibrating under load. But I was able to get great results across a range of cuts, so perhaps it's not a big deal. Either way, the Circuit Graver has a longer kinematic chain as compared to the single-axis test jig, so there are more chances for the machine to flop about.
I decided to design a test gantry that probably isn't too far off the finished piece, but is intended mainly to sprint towards a clamped-on-the-table test. That means it needs to hold the X-axis rails and lead screw bearings, and lift the spindle to the correct height so it can grave a bit of FR4 taped to the table. Thus:Desired print orientation drove the decision to make it in three pieces. I had reasonable luck getting the MGN7 rails aligned on the test jig with its support printed up, so I wanted to use the same strategy here on the smaller MGN5 rails. It's nice to have the long M2 mounting holes print upright as well to reduce the need for annoying support material removal. But I also wanted the lead screw bearing mounts to be printed axially for a better press-fit, so I designed the part to have some overlap and included four M4 bolts on either side to secure it all together.
The MGN5 rails I sourced (via eBay) each had four carriages, so I transferred a bunch onto two storage rails. I'll need to fabricate storage blocks at some point, but this is fine for now:
I designed and fabricated a dial indicator mount which spans a pair of MGN5 carriages, and used this to tram the top rail in against the bottom one. The mounting parallelism tolerance in the datasheet is an unlikely 2 μm, but I was still able to get within a tick (10 μm) of the indicator, so perhaps I'm only off by a factor of 2 or 3:
After tightening the rails and re-checking alignment, I mounted the plate, installed the bearings, and slid the leadscrew into place. I added a bit of lithium grease to the lead screw, and some thin synthetic PTFE-based oil to the linear guides. The lead screw is low as compared to the far bearing, suggesting I mis-measured an offset somewhere (which isn't surprising):
But this isn't a huge problem; there is enough compliance in the other bearing mount that the lead screw still works smoothly after applying a bit of preload. I replaced the far bearing with a blanking plate and then tightened the nearer locking collar with some manually applied axial preload on the screw itself:
The servo got in the way so I removed it, and then installed the Z-axis flexure assembly (actually attached in the image above; I'd just forgotten to photograph the blanking plug before reassembly):
I kept the test lead screw preload flexure assembly on the far side of the lead screw, and just cranked its preload screws up so it turned into a convenient handle. I opened my recently-arrived box of PCB blanks:
... singulated one, and secured it to the table with double-sided tape. I installed a cutter on the spindle, taped the gantry down above the PCB, and adjusted the cutting force to what seemed like a reasonable value. I advanced the lead screw to pull the cutter across the board and saw a good result on the first try:
A few subsequent cuts were pretty good, and then I started futzing with preload and got some less good cuts. I think the fixturing moved a bit, or maybe the tape started bunching up and changed the height of the cutter enough to start getting worse results; in any case, later cuts weren't as great. But I think that might be related to the test setup; it's certainly not caused by the machine not being stiff enough. So the test was good! I think a reasonable next step is to design the rest of the machine: updated gantry towers (with a corrected bearing location), a static base which connects the towers, and the Y-axis assembly. One slight concern is that the machine may be quite sensitive to height, despite using pressure control for cuts; since the gantry towers will bolt in place, I may want to include some kind of precise tramming adjustment to level the table if needed.