Previous installments of this series, First Day with DesignSpark PCB and Second Day with DesignSpark PCB where done with DesignSparkPCB version 1.03, I have since upgraded to version 2.00. My DesignSparkPCB libraries are now available on BitBucket: https://bitbucket.org/neilg/dspcb2lib. Right now they only apply to this series, but they will be updated over time.
Today I will try and route the board without using the autorouter. I have used a lot of autorouters in the past and I have never gotten satisfactory results with them. I have learned the hard way that autorouters and I just don’t get along and I now route boards manually using interactive routing where possible. I really wish DesignSparkPCB included an interactive autorouter, but it’s still possible to do good layouts without one. It just takes longer and you have to use grids wisely, This is especially apparent with fine pitch surface mount components. I would not attempt to route complex BGA components with a package like DesignSparkPCB.
The trick to routing a board without an interactive autorouter is to route on a coarse enough grid that you can visually see then traces are the right spacing apart. Generally you make this grid the same as the board clearance constraint. For example, if the board design rules are 0.2mm tracks with 0.2mm spacing (10mil x 10mil) you would set the routing grid to 0.2mm. That way when 2 traces touch, the track spacing is 0mm and when there’s a gap between traces the spacing is at least 0.2mm. This works because the routing grid is applied to the center points of the trace, not the outer dimensions.
The first thing I had to do before I started routing the relay board example was to configure the DesignSpark PCB file with the correct settings for my board. I went into Settings -> Design Technology and went to the Track Styles tab to create a style for my desired track width of 0.2mm. I then went into the Spacings tab and set all the spacings I wanted: track to track, track to pad, track to via set to 0.2mm and the rest to 0.25mm. I also created a via in the Pad Styles tab with a 1mm pad and a 0.4mm hole. The next step took me awhile to figure out. You have to tell DesignSpark PCB to use the newly created styles as the default ones. You do this by going into Settings -> Defaults to change the track and via styles to the new ones created previously.
So I started to route the board and discovered that the Default settings constantly reset to the original defaults and not the styles I selected. As soon as you close the default settings window and reopen it the settings are reset. I tried a bunch of things, but it looks like you need to manually set the track style every time you start one and don’t forget to Apply To All Segments. You also have to manually edit the vias once they are placed to change their style. This is unfortunate since it really slows down board routing. Here is a picture of the finished layout:
I added the copper pour just to try it out – it isn’t connected to anything. I found it a little weird that you have to define the border for the pour and then tell it to actually do the pour as a separate command, but it’s workable as is. Something I haven’t tried yet is having multiple pours side by side and controlling the pour order which was a real issue in older versions in Altium Designer until they introduced the pour manager. I will play more with it another time.
The next step was the design rule check (DRC). No surprises there, DesignSpark PCB worked as expected. Then I went to create a bill of materials (BOM) and I hit a major roadblock. I don’t think you can use user defined component properties as fields to generate a BOM. I tried everything I could think of but I haven’t found a solution yet. The issue is that I like to create my components with second and third source part numbers right in the library. Only allowing a single part number is a severe limitation for me since now I need to maintain manufacturer part numbers outside DesignSpark which makes more work for me than necessary. It’s my opinion that’s why part libraries exist in the first place.
This BOM issue is the reason why I took so long with this step in my review/tutorial of DesignSpark. I was hoping to find a solution but I haven’t found one yet. I will look into this further for the next installment.