Friday 11 January 2019

pcb - How can I make a decent ground plane in Eagle?


I've made a couple of simple PCBs as a hobbyist, and for the first time now I want to add a ground plane pour but I'm having some issues.


As I have currently understood I need to:



  • Create a polygon along the outline of my board with the polygon tool

  • Rename it to GND

  • Set a clearance

  • Turn on thermals for easier soldering


  • Click on ratsnest after manual/auto routing


The problem is that I'm getting empty spaces after doing an auto-route test and clicking ratsnest and the inner ground planes don't seem to be connected to the outer ones


Image:


enter image description here


What am I doing wrong?



Answer



For a simple two-sided board, start by creating a ground polygon on the whole bottom layer. The trick then is to get Eagle to route most of the connections on the top layer. To do this, make the cost of routing within a polygon high and the via cost low. Actually you want to start with parameters more likely to find a solution, then tighten up the requirements over multiple optimization passes.


Before auto-routing, route the critical traces manually, and connect any grounds you can right at the pad to the ground layer. That will cause it not to waste routing space connecting the grounds.


Of course this all has to start with good layout that tries to put connected things near each other and oriented to have as few crossovers as possible.



After the auto-routing, you have to do some manual cleanup. The measure of a ground plane is how small the maximum dimension is of any island. Lots of small islands are better than a few big ones. This means you want the ground plane to flow around every via if possible. Unfortunately Eagle tends to clump vias, even with the hugging parameter set to 0. You can't set it negative, I tried. This means you have to see what the auto-router did and move things around a little to try to break up clumps of vias.


It's mostly about using the auto-router properly and realizing it's a tool, not a substitute for your own brain. If you are expecting fire and forget, you aren't going to get good boards.


Anyway, here is a auto-router control file from one of my 2 layer boards with the bottom layer a ground plane:



[Default]

RoutingGrid = 4mil

; Trace Parameters:


tpViaShape = Round

; Preferred Directions:

PrefDir.1 = *
PrefDir.2 = 0
PrefDir.3 = 0
PrefDir.4 = 0
PrefDir.5 = 0
PrefDir.6 = 0

PrefDir.7 = 0
PrefDir.8 = 0
PrefDir.9 = 0
PrefDir.10 = 0
PrefDir.11 = 0
PrefDir.12 = 0
PrefDir.13 = 0
PrefDir.14 = 0
PrefDir.15 = 0
PrefDir.16 = *


Active = 1
; Cost Factors:

cfVia = 50
cfNonPref = 5
cfChangeDir = 2
cfOrthStep = 2
cfDiagStep = 3
cfExtdStep = 0

cfBonusStep = 1
cfMalusStep = 1
cfPadImpact = 4
cfSmdImpact = 4
cfBusImpact = 0
cfHugging = 3
cfAvoid = 4
cfPolygon = 10

cfBase.1 = 0

cfBase.2 = 1
cfBase.3 = 1
cfBase.4 = 1
cfBase.5 = 1
cfBase.6 = 1
cfBase.7 = 1
cfBase.8 = 1
cfBase.9 = 1
cfBase.10 = 1
cfBase.11 = 1

cfBase.12 = 1
cfBase.13 = 1
cfBase.14 = 1
cfBase.15 = 1
cfBase.16 = 5

; Maximum Number of...:

mnVias = 20
mnSegments = 9999

mnExtdSteps = 9999
mnRipupLevel = 50
mnRipupSteps = 300
mnRipupTotal = 500

[Follow-me]

@Route

Active = 1

cfVia = 8
cfBase.16 = 0
mnRipupLevel = 10
mnRipupSteps = 100
mnRipupTotal = 100

[Busses]

@Route


Active = 1
cfVia = 10
cfChangeDir = 5
cfBusImpact = 4
cfPolygon = 25
cfBase.16 = 10
mnVias = 0
mnRipupLevel = 10
mnRipupSteps = 100
mnRipupTotal = 100


[Route]

@Default

Active = 1

[Optimize1]

@Route


Active = 1
cfVia = 99
cfNonPref = 4
cfChangeDir = 4
cfExtdStep = 1
cfHugging = 1
cfPolygon = 30
cfBase.16 = 10
mnExtdSteps = 20

mnRipupLevel = 0
mnRipupSteps = 100
mnRipupTotal = 100

[Optimize2]

@Optimize1

Active = 1
cfNonPref = 3

cfChangeDir = 3
cfBonusStep = 2
cfMalusStep = 2
cfPadImpact = 2
cfSmdImpact = 2
cfHugging = 0
cfPolygon = 40
mnExtdSteps = 15

[Optimize3]


@Optimize2

Active = 1
cfVia = 80
cfNonPref = 2
cfChangeDir = 2
cfPadImpact = 0
cfSmdImpact = 0
cfPolygon = 50

mnExtdSteps = 10

[Optimize4]

@Optimize3

Active = 1
cfVia = 60
cfNonPref = 1
cfPolygon = 60

cfBase.16 = 12

[Optimize5]

@Optimize4

Active = 1
cfVia = 40
cfNonPref = 0
cfPolygon = 70

cfBase.16 = 14
mnExtdSteps = 5

[Optimize6]

@Optimize5

Active = 1
cfVia = 20
cfBase.16 = 16


[Optimize7]

@Optimize6

Active = 1
cfBase.16 = 18

[Optimize8]


@Optimize7

Active = 1
cfBase.16 = 20

No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...