Create copper pour keepout on backside of component used a lot in a project

Okay so I am working with a component that requires no copper pour directly behind the SMD pads, but I need a GND plane everywhere else for noise/isolation. I know you can just create a keepout in PCBnew fairly easily, but my issue is this component is used at minimum 60 times for the projects I am using it in, so instead of drawing keepouts for every single component, I would like to be able to do it for all of them uniformly, is there a way to do this?

Component footprint:

The two larger D shaped pads are the ones I need to have no copper pour behind, the center pad is for Gnd so it is fine as it is there for isolation already. The backside of the PCB needs to have keepouts of the exact shape of these two pads, and this is where I am stuck. I don’t want to have to draw a neat cutout for both pads, and then do it for 60+ components because this alone will take hours, so any ideas/suggestions are appreciated as I really need to figure this out.

EDIT: Also the traces for this component must be ran on the backside, they are the only copper allowed behind the pads and they can’t be routed on top for other reasons.

Add a thin copper outline of the pads on the other side. That will prevent copper zone pour to get inside the area.

Sorry, I should have added, that I will need to route the traces on the back side as well so doing an outline would make that impossible. I wish that would work, and if I didn’t need to do this, your solution would be perfect.

In that case you will probably have to do some scripting. It should be possible to programmatically create keepout zones wherever your footprints are placed.

Just curious. Would it be possible to duplicate the pads on the bottom in the footprint and then rename them in the saved footprint. In other words hack the footprint instead of running a script on the whole board?

How would I make the reverse pads keepout zones for a copper pour though?

this is a gross hack, but you could add pads with a tiny diameter, but a large clearance value. position these to carve out your desired keepout:

I don’t have the occasion to look at the actual files that much so I was just thinking out loud. Just did a simple setup and see that probably wouldn’t work because the keep out areas are zones and it doesn’t appear they can be placed ‘relative’.

Just occurred to me you could put pads in and mark them Not Connected on the schematic. You’d have copper but not grounded. If they were symmetrical you could shrink them to near nothing with huge pad clearance. Still, just thinking out loud of course.

Other than that, scripting or just do a duplicate and paste on each one.

If the SMD pads are symmetrically arranged, this is not so bad to do by hand. Create one, and duplicate it on the neighbor. Then duplicate two of them, then duplicate four of them, …

If you don’t have the symmetry then scripting might be an option.

The script would look something like this (assuming you select the footprint under which you have the keepout already drawn)
Note that the code was not tested.

import pcbnew
board = pcbnew.GetBoard()
footprints = board.Modules()
zones = board.Zones()

# find selected footprint
for fp in footprints:
    if fp.IsSelected():
        source_fp = fp
        source_fp_bounding_box = source_fp.GetBoundingBox()

# find zones under selected footprint
for zone in zones:
    if source_fp_bounding_box.Contains(zone.GetBoundingBox()):
        keepout_zone = zone

# here I assume that there is only one keepout zone under footprint.
# If there are more, or there other zones, then code complicates a bit,
# but it should not be rocket science

# get the list of other footprints somehow
# either these footprints have unique reference designator, so you can filter by the reference designator, 
# or you construct it manually through hard-coded references using board.FindModuleByReference
# the code shows the first option
list_of_footprint_references = ["ref101", "ref102", "ref103"]
list_of_footprints=[]
for item in list_of_footprint_references:
    footprint = board.FindModuleByReference(item)
    # only add if the footprint is not selected
    if not footprint.IsSelected():
        list_of_footprints.append(footprint)

# clone the keepout zones
for destination_fp in list_of_footprints:
    # get destination position
    mod2_angle = destination_fp .GetOrientation()
    mod2_pos = destination_fp .GetPosition()
    # get source postion
    mod1_angle = source_fp .GetOrientation()
    mod1_pos = source_fp .GetPosition()

    move_vector = mod2_pos - mod1_pos
    delta_orientation = mod2_angle - mod1_angle

    # duplicate the keepout zone, and position it properly
    new_zone = keepout_zone.Duplicate()
    new_zone.Rotate(mod1_pos, delta_orientation)
    new_zone.Move(move_vector)
    board.Add(new_zone)

I am surprised with that info.
What is the reason you don’t wont to have a copper at backside?
I have only meet such situation with choke in DCDC converter. No copper to limit capacitance to GND (its reloading each cycle losses energy).
But I would never assume to go through that region with any track.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.