Circuit Board Test
I’ve decided to make a simpler prototype board before advancing to the final Tiny CPU system boards. This will give me a chance to get more familiar with using Eagle, create a circuit board, get it manufactured, and verify that it works. I’m sure I’ll make plenty of mistakes, and the prototype board may not even work at all, but by starting with a non-critical prototype the cost of failure is minimized.
To that end, I spent some quality time with Eagle over the weekend, creating a nine square inch board with a single Altera Max 7128S (in PLCC socket), JTAG header, keyboard connector, LCD header, and some switches and LCDs. It’s much of what I expect to be in the final Tiny CPU system boards, but it lacks the second 7128S needed for device interfacing, as well as RAM and ROM.
Click the images below to see full sized versions, or get the Eagle schematic and board files.
Board Design
To save space and a bit of complexity, there’s no voltage regulator on the board. I plan to use the same 5V regulated power supply that I did with BMOW. VCC and GND are isolated from the DC jack by jumpers, so I can easily measure the board’s current draw, or bypass the DC jack to connect a separate regulated power source.
There are 13 capacitors on the board. Yikes! I followed Altera’s recommendation, and put a 0.01uF capacitor between every power/ground pin pair on the CPLD, eight in all. Then for good measure I also added two higher-valued capacitors, 1uF and 47uF, as well as a 470uF power filter capacitor. The keyboard and JTAG ports both have 0.1uF capacitors across their power/ground pins too. I’m not sure if this many capacitors are really necessary. It was a bit of a pain to deal with them all, and they eat up some board space.
Routing the board was kind of fun, at least for a while. I’d never done anything like this before. I began by placing the components on the board so that related components were near each other, minimizing the length of air wires as displayed by Eagle. I then hand-routed the power and ground busses, using wide 50 mil traces. The power bus is on the top layer, and ground on the bottom. I routed the clock line using a 24 mil trace. The rest of the signal traces are 10 mil. I routed many of them by hand, but eventually I got bored and hit the auto-route button.
I had to guess how densely to space the components when I placed them, and I think I guessed about right. It might be possible to pack everything in slightly tighter, but not much.
Ground Plane
After I was finished, I added a ground plane to the bottom layer. Any empty area that was adjacent to a ground trace got completely filled with copper. As you can see, there are many spots around the edges that the ground plane didn’t reach. I’m unsure if it’s worth adding a few vias to bring ground out to these areas too, or if it’s not a big deal. I could added a ground plane to the empty regions on the top layer too, but again I don’t know if that would help anything.
A Pain in the TQFP
The original design for the board was substantially more complicated, and included a second Max 7128S in a TQFP package with 0.5 mm pin spacing. If I could use that package successfully instead of the PLCC package, it would save a ton of board space. I keep hearing that it’s possible to hand-solder those fine-pitch SMD packages, so I designed the board so that the second 7128S could be added or removed from the JTAG chain with a few jumpers. If I totally botched it and destroyed the chip or shorted some traces, I expected I could set the jumpers to disable it, and still use the first 7128S.
It did not go well. Using the Altera 7128S TQFP100 footprint included with Eagle, the footprint failed the design rule check. The pads only have about 6 mil spacing between them, but BatchPCB’s minimal is 8 mils. I spent quite a long time getting familiar with the footprint editor, and designed a new TQFP footprint with smaller pads and wider spacing that passed the DRC. Unfortunately it proved to be quite a challenge to route. With such finely-spaced pins, it’s not possible to pass a signal trace between pins. And because it’s an SMD part and not-through hole, all signal traces must meet the pin in the top layer, instead of having a choice of top of bottom. It was starting to look as though I’d need board space equivalent to the PLCC package, just to fit the maze of snaking traces and vias needed for the TQFP package. Eventually I tried the auto-router on it, but it fared no better than my manual efforts: we both failed. Ultimately, I gave up and deleted the second 7128S from the design.
Feedback?
Since I’ve never done this before, I’d happily accept suggestions and advice on how this design and board layout could be improved. Leave a comment, or send me an email. See any flaws, potential problems, or just not-so-good techniques? I’m listening.
I’ve uploaded this board to BatchPCB, and it passed their design rule check. The cost to manufacture is $21, plus a $10 processing fee per order, and maybe $5 for shipping, or about $36 all tolled. If nobody points out any major flaws with the board in the next couple of days, I’ll probably get it manufactured with BatchPCB, and should have the finished board in a few weeks.
Read 13 comments and join the conversation13 Comments so far
Leave a reply. For customer support issues, please use the Customer Support link instead of writing comments.
Surface mount parts aren’t as hard to hand solder as people think. I’ve hand soldered TQFN parts on home-etched boards with a radio-shack quality soldering iron successfully. (it did take some time, and the pitch wasn’t as narrow as that 7128S part – but it can be done). There’s also plenty of hobbyists out there that have tutorials on how to do SMD.
BGA is another story – although there are people who claim they can do it at home, I’ve never had the courage to try it out.
Yup, I was planning to give it a try with hand-soldering the surface mounted TQFP package, but the routing pain makes it doubly-challenging. It seems that the board space needed relates more closely to the number of pins rather than the size of the IC, and so using a TQFP package rather than PLCC may not save me much space. I suspect it’ll make more sense in the future, if I’m looking at a part that only comes in a surface-mount package.
Board sent for manufacturing! I’m using SparkFun’s BatchPCB service. Now I just have to wait about a month.
I did make several minor changes to the board before sending it for manufacturing. Based on SparkFun’s guidelines on designing a better pcb: http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=115
– added a ground pour on the top layer (was already on bottom)
– increased the size of the annular ring for pads and vias, to lessen the chances of an off-center drill causing failure
– repositioned about 15 vias that were too close to other traces
– tented the vias (covered them with soldermask)
– added labels for LEDs
So far this has been a great experience! I love that the whole field of PCB design is totally new to me, so every day is like a discovery expedition. What will I learn next?
… how to discover some minor-and-yet-fatal flaw in the board that’s going to make you wait another month for v2? 😉
Yes, probably! I belatedly printed out a 1:1 copy of the board, and checked all the footprints by placing components on the paper. Wow, this board is small! I didn’t really have a sense of just how small until I’d printed it.
I think everything will fit, but I may not have left myself enough space between components, so things will be bumping into each other when I populate the board. A lot of components are butting right up against one another in the board layout, so if the footprint isn’t quite the same size as the real component, I may be in trouble.
Besides looking at the length of the air wires when placing the components, you should also consider their density (some tools have an option to generate this view, others you just have to judge yourself). If you have lots of air wires crossing each other in a region, then it’s going to be hard to route them around each other making the final trace length considerably longer. There are a number of traces on your board that seem to have had to go far out of their way to reach a pin not that far from where they started.
The little capacitors at the power/ground pins may seem overkill, but they aren’t very expensive and they can help you avoid needless hair pulling. If you are concerned about space, consider using surface mount parts. I find the 0805 size small and inexpensive, but still large enough to easily hand solder. The can fit on the back side of the board, or even underneath many sockets (but be sure to check the datasheet for the socket first to make sure you have enough clearance).
Using a preferred orientation for traces on each layer can help with the layout (for example, horizontal traces on top, vertical traces on back). Of course, when you’re dealing with parts that have pins on all four sides you will have to violate this somewhat, but this strategy will overall cut down on the number of snarls. If you are doing a combination of hand routed and auto routed, make sure that both you and the autorouter agree on this preference.
Although it tends towards more complex parts and circuits, the blog at Screaming Circuits has lots of interesting advice on circuit board design (and amusing pictures of things gone wrong): http://blog.screamingcircuits.com/
Thanks for the ideas. Yes, I got lazy after a while, and used the autorouter to finish the job, which created those long snaking traces. Perhaps I would have done better manually, or the component placement was just too dense for effective routing.
I hadn’t considered using surface-mount parts for passive components, since that don’t really take up so much space compared to the ICs. It’s a good idea though. If I get to the point where I’m close, but not quite able to fit a particular board area, I’ll definitely give that a try.
Still waiting on the PCB to arrive, but I received the parts yesterday. I think I’ve already made a mistake. The up/down/push navigation switch that I purchased from SparkFun is a SMD part, which I knew, but the contacts only just *barely* wrap around from the bottom to the sides. There is so little metal exposed on the sides, that once the part is placed on the board, I don’t think I’ll be able to solder it. It’s almost like a BGA package, with completely hidden contacts on the underside. Doh!
I think it’s still doable. Just melt a bit of solder onto the circuit board on the 5 pads, trying to equalize the height of the solder blob (you may need some solder wick if you get too much). Then you can place the switch on top and mounting posts should keep everything aligned in place. You can then verify that all the solder blobs are basically in contact with the pads on the chip (i.e., the heights matched). At that point, you should be able to use that height as enough of a gap to get the tip of the soldering iron in to melt the solder to the pad on the switch that it should already be touching (or get in a little more solder if there was a small gap). I’ve used this technique successfully on some simple QFN package chips before.
I hope you’re right! If it doesn’t work, I’m sure I can jury-rig something so it won’t be a total fail.
Another thing I just noticed: the holes for the two DIP-8 packages look pretty tiny. I don’t think a standard IC pin will fit. What the heck kind of footprint is this?? OK, my fault for not checking more carefully. I think if I use machine-pin DIP-8 sockets, and put the ICs in those, everything will fit (I hope).
Wow, a month is a long time to wait for your board to be manufactured. 8 days and counting…
Well, if you go back in your archives you can see how to make such a board yourself 😉
If you end up using more SMDs and get frustrated hand-soldering them, maybe consider buying a hot-air-rework station. A cheap one can be had for under $100. They’re especially useful when you need to desolder anything with more than 3 leads.
Pretty impressive! Thanks for the link to http://blog.screamingcircuits.com/, Erik.