Posts with «printed circuit boards» label

H-bridge not available

I’ll be getting a decorative but useless PC board next week.  It is a good thing it only cost me $50.

It turns out that the H-bridge that was recommended to me, Infineon’s TLE-5205, is made of unobtanium.  I thought I had checked Digi-Key’s stock before starting my design, but I must have mistyped the part number, as Digi-Key customer service just called me to say that they haven’t had any since Sept 2010 and don’t expect any in the next 18 weeks.  They do have a few  TLE-5206-2 still in stock, probably because it is a less useful part, not having the Hi-Z output state. I must have checked that part instead of the TLE-5205-2.  Probably no other distributor has any TLE-5205-2′s either, if Infineon has been unable to make any since last September.

I didn’t know that Digi-Key had customer service reps working at 8p.m. on a Saturday night—it is good to know that a supplier cares enough to keep engineer hours.

In any event, I’m going to have to completely redesign the board. The TLE-5205 is unavailable even in the surface mount packages, so I can’t just change packages.  I’ll have to find and use a different H-bridge, which will be a major pain, as the TLE-5205 came close to being ideal for this application. I suspect that since the 5206 is still available, that the problem might be with the freewheeling diodes.  Since the 5206 always has either the high-side or low-side on, it doesn’t need Schottky freewheeling diodes.  Unfortunately, most of the other H-bridges I’ve looked at expect external diodes—the TLE-5205 was attractive because it had built-in diodes, saving a lot of board space.

Filed under: Hexmotor H-bridge board, Printed Circuit Boards Tagged: Arduino, design errors, motor controller, Printed circuit board, robotics

Board panelized and ordered

I used Gerbmerge today to make a larger board out of four of my little boards, since 4 of the maximum-size Eagle freeware boards (8cm × 10cm) will fit in the 60 sq-in area limit of the $33 board from’s student program.

Here is a preview of what my panel of 4 boards should look like.

It turned out to be much more difficult than I expect to install Gerbmerge.

First I had to install the SimpleParse package for Python.  That was straightforward, once I realized that the big “Looking for the latest version? Download (301.5 KB) ” button on actually downloaded an old version, and you had to click through the directories to find version 2.1.1.a2, which was needed to get the sublibraries.  Running from the downloaded directory installed SimpleParse correctly.

Then I downloaded the gerbmerge-1.8 directory and tried installing it.  That was not so much fun, as the file was badly written.

  • First, I had to edit it to remove the MS-DOS extraneous carriage returns, which Python 2.7 does not seem to like on a Mac—that is no big deal.
  • Second, it failed because it was looking for distutils.sysconfig.get_config_var('LIBPYTHON'), which is a configuration variable that does not exist on my system.  I eventually figured out that what it should have been doing there is distutils.sysconfig.get_python_lib() and got to run.
  • Third, I still could not get gerbmerge to run, because put it in the wrong place.  I had to edit 
    python %s/site-packages/gerbmerge/ $*
    """ % DestLib)

    python %s/ $*
    """ % DestDir)

    and remove os.path.walk(os.path.join(DestLib, 'site-packages/gerbmerge'), fixperms, 1)

After all that fussing, I finally got Gerbmerge to run without crashing.  I then had to put together a configuration file to explain how I wanted the panelization job done.  The configuration file is not intuitive, but it is well-documented with an excellent sample to modify.

The statistics reported by Gerbmerge did alert me to one minor problem: the vias used by the auto-router used a different size hole from the ones I had placed by hand.  I figured out how to change the auto-router via size (it grabs the smallest legal size from the design-rule checker), ripped up the auto-routed stuff, and rerouted it.  That introduced some design rule violations, where newly placed vias were overlapped by some of the silkscreen, but I fixed that my manually moving the offending vias and rerouting to them.

I checked the combined board both with FreeDFM from and BatchPCB, and both accepted it with no complaints.  BatchPCB charges by the square inch, so it would cost $138.57 for the 4-up board from them, more than the $124 for the boards already properly cut apart.

I ordered one of the 4-up boards from for $33 plus shipping, for a total of about $50.  I only found out afterwards that they have a $50 surcharge if you have multiple copies of the same design on the board.  I hope that they don’t charge me that surcharge!  If they ask, I’ll cancel the order and redo with 4 slightly different designs (maybe customizing the silkscreen for the robotics club).

In fact, I just realized that I could probably define a few new “customization” layers in Eagle, and automatically generate 4 slightly different designs from a single .brd file.  If I have to go that route, I will, and I’ll certainly not make the mistake of sending 4 identical designs to  If they want to put in arbitrary rules for their student designs, I’ll play rule lawyer with them.

Filed under: Hexmotor H-bridge board, Printed Circuit Boards, Robotics Tagged: Arduino, Gerbmerge, motor controller, panelization, Printed circuit board, robotics

More design feedback

My friend, Steve, who has done a lot of PC board design, looked at my design and provided some detailed feedback and some questions for me.

First, he noticed that one of my ICs did not have a bypass capacitor, and that one of the other bypass capacitors was badly routed.  I’d been worried about that myself, so having it be his first comment told me I really had to fix it.

He also suggested that all the logic GND signals have only a single point of contact with the motor GND signal, to avoid ground loops.  I’d not thought about ground loops, and realized that I had a redundant contact make a ground loop that ran through the Arduino board!  I removed the extra ground routing and re-routed the logic ground wires to run to connect to the end of the motor ground so that they were as separated as possible from the noise injected by the motors.

He asked me several questions about heat dissipation, also, but I was ready for those.  The TLE-5205 chips I’m using have only 400 milli-ohms of on-resistance (for high and low legs added), so at 2.5A (where I expect to use them) they should be dissipating 1W.  With a junction-to-ambient thermal resistance of 65ºK/W, I should see a temperature rise of no more than 65º, up to 90ºC.  That is pretty hot, but well below the 150ºC limit.  If I add a chunk of aluminum as a heat sink, the temperature rise should be much less.

Steve also noticed a problem with the 74*32 and 74*594 parts on the board.  One was given as 74HCT32 and the other as 74LS594.  He recommended that both be 74HC series, which is really what I intended, but the 74xx-us Eagle library had not included that technology for those parts.  I went into the library and added the HC and HCT technologies (just a button click!), so that the parts are now properly labeled.

My other friend, Gabriel, suggested that if I went with the $33 board, I could perhaps put multiple boards on the panel and cut them apart with board shears at work.  I’ve never seen board shears, but I understand that the Jack Baskin School of Engineer has some that I could use.  I picture them as looking like a heavy-duty paper guillotine, making one cut across the board at right angles to the edge.  (Gabriel says that is indeed what it looks like.)

Of course, since I’m at the maximum design size (8cm×10cm) for the freeware version of Eagle, I’ll have to find a tool to panelize the design. Gabriel suggested Gerbtool to do the panelizing (the same tool that Steve was using to look at the designs, and the one that they teach students to use in computer engineering and electrical engineering courses), but that is a Windows-only, license-fee tool. I wanted to do this task with free tools as much as possible (not only because I’m cheap, but so that other hobbyists could try the same things), and I have a strong aversion to Windows.

I looked around for a free tool (now that I knew that the keywords were “Gerber panelization”) and found GerbMerge, which is free, open-source software written in pure Python 2.4, which should be installable on any Mac OS X, Linux, or Windows machine.  I’ll try downloading it tomorrow and see whether will accept the output. Since my design is only 8cm×10cm, I could put 4 boards down in 17cm×21cm, which at 55.34 sq-in is still under their 60 sq-in limit.

If I can get 4 boards for $33+shipping from a high-quality fab like, I’ll be happy.  At some later date, I’ll probably release the design through BatchPCB, which would allow others to make copies for about $31 each, but probably not until I’ve tested the board myself and gotten the robotics club to solder one up successfully.  I need to make up a bill of materials for populating the board and put in an order with Digi-Key.  The expensive parts are the switching regulator and the H-bridges, which will come to about $70, I think.  I’ll probably buy a set of parts for myself, but ask Infineon and TI if they will donate samples for the high-school robotics club.  I’ll be happy if we come out of this project with two fully populated working boards for under $200 in parts (counting my time as freely donated volunteer time).

Filed under: Hexmotor H-bridge board, Printed Circuit Boards, Robotics Tagged: Arduino, motor controller, Printed circuit board, robotics

Almost ready to order

I got a reply from Custom PCB:

Yes, Eagle generates lines below 6 mils all the time. It is always up to the PCB manufacturer to fix it up to their minimum line width. So we don’t check against that because it is not something that designers can easily fix with their PCB software. But we do warn customer about silkscreen problems if their text is too small to be legible after increasing the line width to 6 mils minimum.

I just finished re-laying out the constricted ground wire. The narrowest constriction is 0.25″ now, but only for about 0.1″. The thermal calculator  can’t handle constrictions well—it wants to analyze under the assumption of an infinitely long wire 0.25″ long:

The trace width calculator uses empirical formulas based on long traces with no special heat sinking. … The trace width calculator is more geared towards long traces. Short traces with heat-sinking to planes do not get as hot.

It predicts a 30ºC temperature rise, but since I have a lot of heat sink nearby, I think that the temperature rise will be well under the usual 10ºC design guideline.

I also checked my vias with, which says that  27 mil holes with 1mil plating 62mils long should have a resistance of about half a milliohm and be able to carry about 3.4 Amps, so 5 such vias should be enough.  I have 11 or 12, which should be plenty.

Figuring out minimum trace width for a given voltage drop or power dissipation with might be useful in some other applications, but I’m less concerned about IR voltage drop than I am about temperature rise.

So, after I’ve gotten some sleep and had a chance to see if Gabriel or Steve can check my design, I think I’ll be ordering from CustomPCB.

Filed under: Hexmotor H-bridge board, Printed Circuit Boards, Robotics Tagged: Arduino, motor controller, Printed circuit board, trace width

More on PC boards

I got back the results of the free check of the design rules from that I mentioned in my earlier post, and there are a lot of problems.

First, the script from SparkFun included the Dimension layer in the top copper, but this generates traces that are far too thin (0.1 mil) to be made.  The outline of the board does not belong on this layer.

Second, the Adafruit component for the Arduino, that labels the Arduino pins used 3 mil strokes, but the minimum stroke width for’s silk screens is 5 mils, so there were 4103 violations.

I fixed the script that generated the top copper file so that it didn’t include the Dimension layer, and went through some of the libraries fixing the fonts so that the 0.04″ high letters has a stroke/height ratio of 13% and the 0.05″ high letters had a stroke/height ratio 10%, meeting the minimum silkscreen requirements. I resubmitted the design to FreeDFM and got

No DFM problems were found on your board!

Show Stoppers
We Found None!
Problems Automatically Fixed by FreeDFM
We Found None!

They also provide some nice pictures of the layers as pdf files, so maybe I don’t need a Gerber file viewer after all (though the separate PDF files don’t give me any clues about possible misalignment).

I’ve not decided for certain whether I’ll go with for my fabrication, but the fact that I was able pass their design rule checks (and the positive recommendation for them that I got from someone who supervises a lot of student PC board designs) is encouraging. The minimum order of $132 (which would give me 5 copies of the board) is a little daunting for a first attempt, as I’m sure I messed up something.

Yep, I sure did. In a comment on my earlier post Mylène gave me a pointer to a trace width calculator, which I used to figure out whether I had made my ground line fat enough.  The answer is “No!” If I use the cheapest fab lines, I get 1oz/ft2 of copper, which the calculator estimates would heat up 40ºC in the most constricted spot on my board.  So I guess I have to push things around until there is enough room for another ¼” of wire there.  Good to catch that now, rather than after fab!

Advanced Circuits does have a cheaper “bare bones” option, but it does not include a solder mask.  I don’t think I want to try soldering even 0.1″ spaced pads without a solder mask, as I’m clumsy enough to have trouble with solder bridges even when there is a mask.

I also looked at Olimex, which claims very low prices (30€ a board for 1–4 boards), but I was turned off somewhat by the low-quality of their web site and the big announcement:

Note: we are in summer vacation 1-31 of August.
ALL PCB files sent after July 26th will be proceed in September.

I didn’t do it justice here: the announcement fills the screen on their site.  Since I want to work on this primarily in August, I’m not willing to take a chance on their being shut down for the month when I need the boards.

Olimex does take Eagle board files directly, doing their own conversion to Gerber and drill files.  This could be a nice advantage for someone who doesn’t want to bother with the Gerber files.  Now that I have a script that does the right thing, though, it should not take me much effort to do the conversions myself, so this advantage is small.

Perhaps more important is that they release their design rules as Eagle dru files, so you can do your checking as you do your layout.  I downloaded both their rule sets (the 8-mil and the 10-mil) and found that my design fails both.  Again, the problem is with silkscreen stuff, but not the line thickness—the silkscreen outlines of some of the parts I use comes too close to the solder masks for them.  I had a few problems with that even using the default design rules, but I fixed those by editing the package outlines.  The Olimex rules require an even larger clearance, and there are too many different drawings involved, so I’m not willing to take the time to tweak everything to fit Olimex’s fussy rules, despite the low price.

Custom PCB offers low prices and takes Eagle files (or Gerber files, of course).  I think I could get 4 boards for $90 from them, including shipping from Malaysia, but I’m still waiting for the official quote. I think I may fail their design-rule check, though, as they specify a minimum of 6mils for silkscreen lines on their design-rule page.  I’d have to redo a lot of lines to meet that spec!  And I’d have to write (or find somewhere) a set of Eagle design rules that match their requirements, since they have slow turnaround on checking for manufacturability (a day).  They sent e-mail saying

“We have reviewed your design and it looks good for production.  Total cost for 4pcs with Soldermaks & Silkscreen is USD 72.00 + USD 15.50 shipping to USA.”

If they are willing to accept 5 mil silkscreen instead of 6mil, this may be the way to go!  I’ve sent them an e-mail query about their design review—whether they neglected to check the silkscreen or if their minimum acceptable line width has changed.

PCBExpress has a minimum price of $390 (for 2 boards this size).

PCB unlimited has a minimum of $230 (which would get 2 boards) for the “quickturn” pricing and $260–280 for their overseas fab (which would get 1–10 boards).

PCB Universe has $127 (including shipping) for a 4-board lot up to $229 for 10 boards (beyond that number, their standard pricing is supposedly cheaper).  They have 5mil minimum space and lines, which my design easily meets.  Their pricing is similar to, but without the service of the free design-rule check.

Prototype PCB quoted me $229 for 3 boards.


Bottomline:  If CustomPCB can handle the 5mil lines on the silkscreen, then I think I’ll give them a try.  Otherwise I’ll probably go with

Filed under: Hexmotor H-bridge board, Printed Circuit Boards, Robotics Tagged: Arduino, motor controller, Printed circuit board, robotics

Designing a printed-circuit board

One of my projects for this summer is to learn to do printed-circuit board design.

Some of my constraints:

  • The software must run under Mac OS X.  I’m not getting a Windows machine.
  • The software must be cheap (or free).  This is a hobby, not a profession, and I’m not willing to pay the sort of prices that tools like Cadence cost.
  • The printed-circuit boards have to be cheap.  There is not much point in designing something if I don’t get it made, and I don’t want to spend huge amounts on designs that may turn out to be awful.

After looking around for a while, it seems like there is really only one choice for Mac users: the Eagle software from CadSoft.  (There may be some other choices in a few years—but none of the other Mac products I found seemed to be widely accepted.) There is a slightly crippled freeware version of Eagle (only 2 layers and 8cm × 10cm max size) which should meet my needs fine.

For the past several days, I’ve been learning to use Eagle and laying out a board to have 6 motor channels, each with up to 2.5A at 12v.  Some of the design is overkill (I could go to 36v by replacing the capacitors with higher voltage ones, and I could deliver up to 5A per motor, as long as I don’t exceed 15A total).

Eagle has been a struggle to learn to use—the user interface feels like it was frozen in the 1980s, with really awkward multi-click actions for everything.  The software reminds me a lot of  Magic, the free VLSI layout software written around 1982, except that Magic had a much nicer user interface.

All the functionality seems to be there in Eagle, but is hard to find—you really need to consult the 327-page manual a lot. Normal actions are not done in normal ways.  For example, to operate on a group of objects, you have to click on the tool you want to use, then on the group tool, then click-and-drag to select the group, then right-click to perform the action on the group—about twice as many operations as on a modern interface, and in a non-intuitive order.

When I say “all the functionality seems to be there”, I’m using a rather generous definition.  For example, if you make a mistake when defining a new packaging variant for a part in the library, there is no way to undo it.  You can start over from a backup file or create a new part with a different name and do all the work over.  There is no universal “delete” option (say by right-clicking to pop up a menu) that works for variants, and the command-line commands don’t allow removing packages from devices.

Copying subcircuits is possible (something I needed to do to make 6 identical H-bridge circuits), but you have to be careful—if you name any of the nets, it will short the nets together, since it has no way to generate unique names other than the automatic ones it generates.

It would probably cost a lot to redo the user interface into something like a modern program, and the number of engineers and hobbyists using PCB-layout programs is probably not a big enough market to justify the cost.  I am glad that it was a free version, though, as I would have felt really annoyed if I’d paid money for such an incredibly awful interface.

Despite the struggles to learn Eagle, I think I have finally gotten a design done.  It uses the whole 8cm × 10cm area.  At first, I had an incredibly difficult time packing everything in (and the freeware version of  Eagle doesn’t let you unplace things once they’ve been placed). After making some circuit design changes (removing the superfluous freewheeling diodes, for example, since they are included in the H-bridge chips I chose) and some packaging changes (using 3.5mm pitch screw terminal blocks, instead of 5mm pitch ones), managed to end up with room to spare.

At first I did tried doing all the routing by hand, then discovered the follow-me single-net router, then the autorouter.  It turns out that autorouter had no trouble completing, but I ended up hand-routing all the high-current wires anyway.  I didn’t see any way to tell Eagle which parts of the GND net needed to be fat wires and which could be skinny wires, for example.  A net has only one width, and the design-rule checker checks that width throughout.

Some little gotchas included that the default drill size for vias is smaller than the default minimum drill size for the design rule check.  Luckily I did a design-rule check very early, before I’d done much routing, so I could increase the drill size for the vias without having to rip everything up and start over.

Actually, I ended up doing the whole design almost from beginning to end three times, because of design modifications (getting rid of the freewheeling diodes, for example, or deciding to add headers for servo outputs).

My design now meets the default design rule checks provided by CadSoft, so it is time to see about getting it fabricated.  I looked into a few different PC board houses.  The one that the “PCB Quote” button in the software connects you to is ridiculously expensive (so I’m not even going to provide a link to them).  One that I’ve had recommended to me is Advanced Circuits at, which has very low pricing, but does not accept Eagle files.  You have generate Gerber RS247X files for each layer and Excellon drilling files.

Eagle is capable of doing this, but once again the interface is incredibly clunky—luckily there are some scripts that automate the process, if you can figure out how to make them work.  I started working with one from SparkFun, described in the SparkFun Eagle tutorial, but it turned out not to work with the latest version of Eagle.  I had to compare it with the “cam” scripts provided with Eagle to see that the output now needs to include “%N” to generate the file names.

Once I got that sorted out, I could change the layers that were specified for the top silkscreen (I had designed the board to use tPlace, tNames, and tValues, while SparkFun just used tPlace) and generate the Gerber and Excellon files.

I’ve not yet figured out what Mac OS X tools there are for viewing Gerber files, to check to see if the conversion worked, but Advanced Circuits has a Free File Check option.  I submitted the files there and expect to get a feedback email either in half an hour or tomorrow.


Filed under: Hexmotor H-bridge board, Printed Circuit Boards, Robotics Tagged: Arduino, motor controller, Printed circuit board, robotics