Back when Next Make built the Next House Party Lighting System, we designed the LED controllers to connect on a shared RS-485 network over CAT5 cable. This was a great solution for that system since the controllers were far apart (RS-485 uses differential signaling so it's pretty robust over longer distances), and we had 24 separate controllers to connect so we wanted to be able to chain them together on a single network.
But if you wanted to set up a smaller scale LED system with just 1 or 2 sets of LEDs, those controllers were a bit overkill - you needed a separate USB->RS-485 converter and then had to string them together with CAT5. So I set out to design a simpler high power LED controller that had a USB port directly on it (I'm calling it SULC - the Simple USB LED Controller).
Instead of using an FTDI (USB->serial converter IC) along with a microcontroller, I wanted to try out the ATMega8/16/32U2 family of AVRs which has USB support built-in. Unfortunately there's no through-hole version of those chips, so I had to design a PCB to try them out - my first experience laying out a PCB from scratch. I used the open source KiCad EDA for the schematic design and pcb layout. After a weekend of work, I had a PCB ready to send off to production:
I ordered the PCBs from SeeedStudio which offers an amazing deal: Fusion PCB Service - $10 for 10 boards that are 5cm x 5cm, with 2 layers of copper, soldermask and silkscreen on both sides. The boards arrived about 2 weeks after I placed the order (mostly shipping time from China), and looked great:
When reflowing solder, there's a specific heat curve that you're supposed to follow to get it to melt and make good connections. A number of people have modified toaster ovens with PID control loops to get the temperature to follow a specific curve precisely. I just used a thermocouple with my multimeter to measure the temperature and used the stove's knob to make adjustments - pretty simple and it worked fine.
But if you wanted to set up a smaller scale LED system with just 1 or 2 sets of LEDs, those controllers were a bit overkill - you needed a separate USB->RS-485 converter and then had to string them together with CAT5. So I set out to design a simpler high power LED controller that had a USB port directly on it (I'm calling it SULC - the Simple USB LED Controller).
Instead of using an FTDI (USB->serial converter IC) along with a microcontroller, I wanted to try out the ATMega8/16/32U2 family of AVRs which has USB support built-in. Unfortunately there's no through-hole version of those chips, so I had to design a PCB to try them out - my first experience laying out a PCB from scratch. I used the open source KiCad EDA for the schematic design and pcb layout. After a weekend of work, I had a PCB ready to send off to production:
The next step was soldering the components to the board. Since most of the components were surface mount, I decided to try out "frying pan reflow" - you first spread solder paste on each pad on the PCB, then line up all of the components on top of that, and finally stick it in a frying pan to melt and reflow the solder. SparkFun has a great article about low-cost reflow soldering.
But how do you get the solder paste cleanly onto the pads when they're only ~0.01" wide? You can buy solder paste syringes to squirt the paste onto each pad individually, but that seemed like a lot of work with ~150 pads, and tricky to get the right amount onto each pad. Instead, I used a solder-paste stencil to apply the paste - SparkFun also has a great tutorial on solder paste stencils. You can order solder paste stencils online from places like Pololu, but to go the full DIY approach, I made my own. I bought 3 mil mylar on McMaster and had my friend laser cut holes in it for the pads. Here's what the stencil looks like:
A few of the smaller holes didn't get completely cut, so I had to use a pin to clean them up:
(notice the little bits of mylar stuck on the upper side of those holes)
After cleaning up the stencil, it was time to apply the solder paste. I used the technique described by SparkFun - use other PCBs to hold the one you're working with in place, and spread the paste with a putty knife:
Spreading the paste across the stencil
Unfortunately the solder paste didn't apply very cleanly - probably because I didn't hold the stencil tight enough and because it was warm when I applied it, so the paste was more liquid than I would have liked. I went ahead and placed each component on top of the solder paste:
Solder paste and components placed
In order to reflow the solder paste, I stuck the PCB inside a rectangular aluminum extrusion and placed that on a small electric stove/hot plate:
PCB placed inside aluminum extrusion to help spread the heat
Fresh out of the oven!
The reflow process was mostly successful - all of the small discrete components like resistors, capacitors, and LEDs aligned themselves and were soldered in place perfectly. There were a couple solder bridges though between pins on the TLC5940s and on the ATMega32u2:
A nasty solder bridge on a TLC5940 (top) and a minor one on the ATMega32u2 (bottom)
After a bit of cleanup with solder wick and flux, everything looked good to go. I soldered up the through-hole components and then came the moment of truth - plugging the board in. To my surprise, it actually lit up the first time!
And even better than seeing that beautiful blue light was the output of lsusb:
Bus 004 Device 126: ID 03eb:2ff0 Atmel Corp.
Yes! The board shows up as a USB device (running Atmel's DFU bootloader)!
I wrote a quick test program and loaded onto the device over USB using dfu-programmer. It works! It flashes each of the 4 debug LEDs on the board:
That's as far as I've gotten so far, but I think it's pretty awesome progress for my first ever custom PCB and first time working with surface mount components. Next I need to reprogram the fuses on the microcontroller to get the full 16MHz clock speed, and then I can try using LUFA to make the board show up as a USB virtual serial device, and finally I can see if the TLC5940 LED drivers are connected correctly to drive high power LEDs.
The board designs are on github - https://github.com/scottbez1/sulc - although beware that I haven't finished testing the board, so there may be errors still.
Comments
Post a Comment