This week we learned how to do electronics production using a desktop milling machine. This technique uses a material called FR1, a printed circuit board (PCB) substrate that is easy to machine and robust enough for quick prototypes. We used a Roland SRM-20, a 3-axis router with an 1/8" set screw collet that is controlled by a CBA-developed web browser program called mods. The tools are tiny carbide end mills; 1/64" for routing traces, and 1/32" for cutting out the finished board. 1/64" is 0.016", which is more than adequate for the SOICs and 0805 parts we'll be using for the class. We had two assignments: (a) characterize the milling machine as a group; and (b) mill, populate, and program an AVR programmer like this one.
Thank you to Fillipos for taking the time to teach us all how to use the SRM-20!
files
test coupon traces and outline for evaluating mill capabilities from here
Laser Squad (Aubrey, D., myself, Patricia, Jiri, and Alfonso) reunited Friday morning at the E15-023 SRM-20 to run a few tests. After a brief hiccup getting the computer talking to the mill (Jake helped, thanks Jake), we loaded the test coupon traces into mods and mounted the 1/64" end mill along with a generous slab of taped-down FR1. After setting the origin and zeroing the tool Z-axis, we set mods to a single 0.004" depth pass with a double outline and let the machine get to work:
[command: ffmpeg -i VID_20190920_115945.mp4 -filter:v "scale=800:-1" -ss 00:00:00.0 -t 00:00:06.0 -c:a copy out.mp4]
Running a single depth pass was ambitious; the FR1 wasn't flat enough for a good result, so we reset the origin 30mm further back and re-ran the part with two 0.004" depth passes, for a total cut depth of 0.008". This gave us a much better result:
We loaded the outline file into mods, mounted a 1/32" mill, zeroed the tool, and generated a new path based on the default settings (3 passes, 0.024" depth per pass). We watched the tool mill for a moment, realized we had loaded the wrong outline, stopped the mill, and tried again with the right path. This resulted in a stepped profile on one side, but otherwise the coupon came out well:
The mods *.png loading module reported the width measurement as 12.80 mm, and I used Gimp to measure the line weight at 50px. The *.png imported at 2500 DPI so the line width is 0.51 mm; thus, we would expect the finished milled part to measure at 12.80 - (2 * line width), or 11.78 mm. The coupon measured in at 11.84 mm which agrees with this calculation:
We did observe some of the finest traces -- which cut quite well, given their size (0.001" - 0.005") -- looked a bit wobbly. We used the CBA's Vision Engineering Lynx Evo to take a closer look:
Our guess is the FR1 wasn't secured adequately so it vibrated slightly during the milling operation. More testing is needed.
making avr programmers
I built three AVR programmers this week. All three used the same handful of components: an ATtiny45, a few resistors, a bypass capacitor, a couple diodes, and a header:
The first design was carved out of FR1 using a box cutter:
After completing the circuit, I used a multimeter to verify that each copper island was electrically isolated:
Since I used a single-sided bit of FR1, I was also able to hold the board up to a bright light to check for shorts:
The board didn't initially power on or respond to avrdude. I had predictably scrambled the USB lines, which I fixed with a few bits of magnet wire:
Then I used a fancy Atmel-ICE programmer to flash the board. Yay, both LEDs lit up!
Time to make the second programmer. This one is milled using the Roland SRM-20 using Brian's design. Initial results using fairly standard settings (0.004" depth per pass, two passes, four outlines) resulted in alarmingly small traces. Then I measured the "1/64 inch" end mill:
Ugh, someone left a 1/32" end mill in a 1/64" tube! I swapped it for a [verified] correct mill and re-ran the board. Here's the result (top with 1/64", bottom with 1/32"):
Cutting the outline proceeded without issue using a 1/32" end mill and three 0.024" depth passes. I soldered on the parts, squeezed together an insulation displacement-style ribbon cable, and programmed the programmer using the programmer I'd just programmed (which now features a switch to toggle power):
Time to build the third programmer! For this version, I skipped the substrate entirely and used a USB-B socket as the base. I glued the shell to the top of an assembled 2x3 IDC header, and glued the inverted ATtiny45 to the top. I was able to solder many components directly to the grounded shell; for other connections I used magnet wire to avoid strain on the delicate IC pins:
This approach clearly lacks practicality, but it does look neat perched atop the first device for programming: