Sunday, April 10, 2022

Conductive pad footprint example

A few years ago I wrote a post on the Conductive Pad Keypad footprint I'd created. More recently, someone asked if I would post the KiCad footprint file for this.

KiCad v5 added a feature that made creating custom footprint pad shapes really easy. You can incorporate primitive shapes like arcs and lines into a pad very easily.

To create this footprint I first created a new custom pad consisting of a tiny rectangular pad anchor, and added to that an arc and five horizontal lines. I added one of these pads on the left side of the footprint. Then placed a second on the right side of the footprint and rotated it 180 degrees. The result is this interlocking fingers pattern.

The only thing I had to fiddle with is the solder mask opening. You don't want any solder mask in the area where the conductive pad contacts the copper, and I didn't see how to force such an opening in the footprint. I ended up just widening the solder mask margin on the pads to the point where the apertures overlapped, but there is probably a better way to do this.

Bear in mind that exposed copper will oxidize fairly quickly if left exposed to air for very long. This would likely cause problems in the operation of such a switch. The original PCB used what appears to be conductive carbon rather than copper on that side of the board. Another option would be hard gold plating over nickel. Either would produce a long-lasting switch contact.

Since this is just a hobby project, I opted for standard ENIG (Electroless Nickel Immersion Gold) as a PCB finish and didn't attempt any other sort of protection for the switch contacts. This is not as durable as a hard gold plating, and would probably not be appropriate for a commercial product. But it's better than untreated copper, and provides a far more uniform surface than HASL (Hot Air Solder Leveling).

There really is no reason for the circular shape except that it matched the shape of the footprint on the original PCB I was replacing. Others have pointed out that a rectangular shape would have worked just as well and been a bit easier to create. But I liked the round shape so that's what I created.


Here's the contents of the Button_Round_6m3.keycad_mod file produced by KiCad 5.1:

(module Button_Round_6mm3 locked (layer F.Cu) (tedit 5AE33A01)
  (solder_mask_margin 0.3)
  (attr virtual)
  (fp_text reference REF** (at 0 5.6) (layer F.SilkS)
    (effects (font (size 1 1) (thickness 0.15)))
  )
  (fp_text value Button_Round_6mm3 (at 0 -4.6) (layer F.Fab)
    (effects (font (size 1 1) (thickness 0.15)))
  )
  (fp_circle (center 0 0) (end 3.5 0) (layer F.Fab) (width 0.15))
  (fp_circle (center 0 0) (end 3.5 0) (layer F.CrtYd) (width 0.15))
  (fp_circle (center 0 0) (end 3.5 0) (layer F.SilkS) (width 0.15))
  (fp_circle (center 0 0) (end 3.5 0) (layer B.SilkS) (width 0.15))
  (fp_circle (center 0 0) (end 3.5 0) (layer B.Fab) (width 0.15))
  (pad 1 connect custom (at -3 0) (size 0.3 0.3) (layers F.Cu F.Mask)
    (zone_connect 0)
    (options (clearance outline) (anchor rect))
    (primitives
      (gr_arc (start 3 0) (end 0 0) (angle 115.8) (width 0.3))
      (gr_line (start 0.015 -0.3) (end 5.381 -0.3) (width 0.3))
      (gr_line (start 0.402 -1.5) (end 4.873 -1.5) (width 0.3))
      (gr_line (start 1.692 -2.7) (end 4.308 -2.7) (width 0.3))
      (gr_arc (start 3 0) (end 0 0) (angle -44.4) (width 0.3))
      (gr_line (start 0.138 0.9) (end 5.225 0.9) (width 0.3))
      (gr_line (start 0.858 2.1) (end 4.162 2.1) (width 0.3))
    ))
  (pad 2 connect custom (at 3 0 180) (size 0.3 0.3) (layers F.Cu F.Mask)
    (zone_connect 0)
    (options (clearance outline) (anchor rect))
    (primitives
      (gr_arc (start 3 0) (end 0 0) (angle 115.8) (width 0.3))
      (gr_line (start 0.015 -0.3) (end 5.381 -0.3) (width 0.3))
      (gr_line (start 0.402 -1.5) (end 4.873 -1.5) (width 0.3))
      (gr_line (start 1.692 -2.7) (end 4.308 -2.7) (width 0.3))
      (gr_arc (start 3 0) (end 0 0) (angle -44.4) (width 0.3))
      (gr_line (start 0.138 0.9) (end 5.225 0.9) (width 0.3))
      (gr_line (start 0.858 2.1) (end 4.162 2.1) (width 0.3))
    ))
)

No comments:

Post a Comment