8
\$\begingroup\$

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?

\$\endgroup\$
  • 1
    \$\begingroup\$ There's just not a path for the ground to 1, get over the other traces on that side, or two squeeze between the pads. You can move some traces around (switch top to bottom) with an eye to making a clear path into the empty regions. \$\endgroup\$ – George Herold Oct 7 '14 at 19:46
  • 1
    \$\begingroup\$ related: Proper GND pours for two-layer PCBs? \$\endgroup\$ – Nick Alexeev Oct 7 '14 at 19:49
9
\$\begingroup\$

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
\$\endgroup\$
  • \$\begingroup\$ +1 for sharing the control file as well as explaining your workflow with the auto router as a tool. \$\endgroup\$ – JYelton Oct 7 '14 at 22:03
  • \$\begingroup\$ +1 I love it, though I've never used the auto router. Simple circuits, mostly. So the most important part is to use your brain and lay things out to follow the signal flow as much as possible. I try and layout the signal first, keep it all on top if possible. (That helps with debugging too.) Then if you need to put some vias and traces into the ground plane do it with the power lines. Keep traces into ground short if possible. \$\endgroup\$ – George Herold Oct 7 '14 at 23:18
4
\$\begingroup\$

The "holes" or "islands" that you are seeing are due to the fact that there is no connection that can be made with your current clearance tolerances given the position of traces and pads.

If you move traces to allow the pour to exist between them, within the constraints of your clearance settings, the pour will fill the voids.

Sometimes you may not be able to create a connection in a given area, in which case you may need to stitch them together with vias. On many of my small 2-layer boards, I use a ground pour on both the top and bottom. Where an "island" would be created on the bottom, I use vias to connect it to the same ground potential on the top layer.

You can move traces, vias and components around to prevent most of these islands, but inevitably you will probably have to use additional GND vias to keep them from becoming isolated.

\$\endgroup\$
1
\$\begingroup\$

If you have traces in the same layer (which interrupt the copper pour, because they need to be isolated), it's no longer a ground plane, strictly speaking. Perhaps, it's more correct to call it ground copper pour.
If you have a lot of traces interrupting the copper pour, it's definitely not a ground plane any more.

What am I [the O.P.] doing wrong?

Perhaps, the first thing that you are doing wrong is that you are using an auto-router. The auto-router doesn't know that you want to keep the bottom layer clear from traces, because you want to make a copper pour there, and you want to make it as continuous as possible. It may be possible to configure the auto-router that way (I'm not an expert on the Eagle's auto-router, so don't take my word for it). But in case of a moderately complex board, it's usually quicker to route the board by hand, compared to setting all the weights in the auto-router.

Autorouter has it's uses. But, beginners usually over-use autorouter.

A valid comment was made by Connor Wolf (original thread):

Stay WAY away from auto-routing until you are familiar enough with PCBs to understand it's problems. Start out with manual routing - you learn a LOT more.

related threads:
Proper GND pours for two-layer PCBs?
PCB design review An PCB layout was posted to EE.SE fpr design review. Unfortunately, it was auto-routed. The thread contains a discussion about pros and cons of auto-routing.

\$\endgroup\$
  • 1
    \$\begingroup\$ Disparaging the auto-router is unproductive. It is a very useful tool if used properly. Like any complex tool, you have to take the time to learn it well. Most people don't. That's fine, but don't blame the auto-router for poor results. "Don't use the autorouter" is a religious myth. \$\endgroup\$ – Olin Lathrop Oct 7 '14 at 21:44
1
\$\begingroup\$

You are missing a setting in your ground plane called 'Orphans'. Selecting this option will fill all the 'holes' with the ground plane.

To do this right click on the very outside of the polygon (so you select the dot-line) then go to properties. You will see a option with 'Orphans', click on the checkbox and click on apply. Now do another rastnet and all your 'holes' will be filled by the ground plane.

Be aware that the orphans are ground in eagle but when you are making the PCB it is not connected.

\$\endgroup\$
  • 3
    \$\begingroup\$ Just to re-iterate - this will not extend the ground plane, it will just fill the empty areas with unconnected copper. \$\endgroup\$ – kolosy Oct 7 '14 at 20:39
  • \$\begingroup\$ I think I didn't understand his question then.. What are the 'holes' and 'islands' in the image above? anyone that can clarify that for me? \$\endgroup\$ – T J Oct 8 '14 at 6:03
  • 3
    \$\begingroup\$ You're right in that turning on the "orphans" will fill those areas with copper. The problem is that these pieces of copper ("islands") are just sitting there unconnected. Remember, if a connection was possible they would have been filled already! An unconnected piece of copper can cause a bunch of noise issues. A good practice is to keep the bottom-side traces as short segments, so that the ground plane stays (mostly) contiguous. Barring that, you can put vias in the island and connect them to ground on the other side of the board. Then the islands aren't "orphans" and will fill by default. \$\endgroup\$ – bitsmack Oct 8 '14 at 7:22
0
\$\begingroup\$

When I have bare ground plane areas in Eagle, I simply stick a via there so it picks up the ground plane on the obverse side.

Then RATSNEST will fill the area.

Often people select SOLID in the Option POLYGON POUR for undersides of PCBS and a HATCH for the topside.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.