Skip to content

Add Molex 502250 FFC series

KiCad Bot requested to merge github/fork/jhol/molex-502250 into master

Created by: jhol

This merge request is carried over from an earlier merge request to the now-archived Connectors_Molex.pretty repository.

The footprints were generated with the following python script...

#!/usr/bin/env python3

import sys

def get_name(pin_count):
    return 'Molex-502250-{0}91_2Rows_{0}_P0.3mm_Horizontal'.format(pin_count)

def make_module(f, pin_count):
    y_offset = 0.0375
    pitch = 0.3
    odd_pad_size = (0.26, 0.80)
    even_pad_size = (0.3, 0.65)
    anchor_pad_size = (0.4, 0.85)
    row_spacing = 2.875
    pins_width = pitch * (pin_count - 1)
    anchor_pad_spacing = pins_width + 1.4
    width = pins_width + 2.1
    bar_width = pins_width + 0.48
    bar_height = 0.91
    bar_bottom = 1.5325 + y_offset
    name = get_name(pin_count)

    f.write("(module {name} (layer F.Cu) (tedit 5980D929)\n".format(name=name))
    url='http://www.molex.com/pdm_docs/sd/502250{0}91_sd.pdf'.format(pin_count)
    f.write('  (descr "Molex 0.30mm Pitch Easy-On BackFlip Type FFC/FPC '
                'Connector, 0.9mm Height, Right Angle, Surface Mount, '
                '{pin_count} Circuits ({url})")\n'.format(
                    pin_count=pin_count, url=url))
    f.write('  (tags "molex FFC/FPC connector Pitch 0.3mm right angle")\n')
    f.write('  (attr smd)\n')

    f.write('  (fp_text reference REF** (at 0 -3.00) (layer F.SilkS)\n'
            '    (effects (font (size 1 1) (thickness 0.15)))\n'
            '  )\n')
    f.write('  (fp_text value {name} (at 0 3.75) (layer F.Fab)\n'
            '    (effects (font (size 1 1) (thickness 0.15)))\n'
            '  )\n'.format(name=name))
    f.write('  (fp_text user %R (at 0 0) (layer F.Fab)\n'
            '    (effects (font (size 1 1) (thickness 0.1)))\n'
            '  )\n')

    def fp_line(**kw):
        f.write('  (fp_line (start {start[0]:1.5g} {start[1]:1.5g}) '
            '(end {end[0]:1.5g} {end[1]:1.5g}) (layer {layer}) '
            '(width {width}))\n'.format(**kw))
    def fp_polyline(points, **kw):
        for i in range(len(points) - 1):
            fp_line(start=points[i], end=points[i+1], **kw)

    outline_side = [(0, 0), (0, 0.45), (0.28, 0.45), (0.28, 0.815), (0, 0.815),
        (0, 3.53), (0.30, 3.53), (0.30, 3.28)]
    origin = (-width/2, 1.7475 - y_offset)
    outline = ([(p[0] + origin[0], p[1] - origin[1]) for p in outline_side] +
      [(-p[0] - origin[0], p[1] - origin[1]) for p in outline_side[::-1]] +
      [(outline_side[0][0] + origin[0], outline_side[0][1] - origin[1])])
    fp_polyline(outline, layer='F.Fab', width=0.1)

    silk_side = [(-0.05, 1.25), (-0.05, 3.58), (0.30, 3.58)]
    fp_polyline([(p[0] + origin[0], p[1] - origin[1]) for p in silk_side],
        layer='F.SilkS', width=0.1)
    fp_polyline([(-p[0] - origin[0], p[1] - origin[1]) for p in silk_side],
        layer='F.SilkS', width=0.1)
    fp_line(start=(origin[0]-0.05, -origin[1]-0.05),
        end=(origin[0]+0.75, -origin[1]-0.05), layer='F.SilkS', width=0.1)
    fp_line(start=(origin[0]+width+0.05, -origin[1]-0.05),
        end=(origin[0]+width-0.75, -origin[1]-0.05), layer='F.SilkS', width=0.1)

    def fp_rect(l, t, r, b, **kw):
        fp_line(start=(l, t), end=(r, t), **kw)
        fp_line(start=(r, t), end=(r, b), **kw)
        fp_line(start=(r, b), end=(l, b), **kw)
        fp_line(start=(l, b), end=(l, t), **kw)

    ctyd_width = anchor_pad_spacing + anchor_pad_size[0] + 1.0
    fp_rect(
        round(ctyd_width/2, 2),
        round(bar_bottom + bar_height + 0.5, 2),
        round(-ctyd_width/2, 2),
        round(-row_spacing/2 - odd_pad_size[1]/2 - 0.5, 2),
        width=0.05, layer='F.CrtYd')

    for pin in range(1, pin_count+1):
        pad_size = odd_pad_size if (pin % 2) == 1 else even_pad_size
        x = (pin - 1) * pitch - pins_width / 2
        y = (-1 if (pin % 2) == 1 else 1) * row_spacing / 2 + y_offset
        f.write("  (pad {pin} smd rect (at {x:1.5g} {y:1.5g}) "
            "(size {pad_size[0]} {pad_size[1]}) "
            "(layers F.Cu F.Paste F.Mask))\n".format(**locals()))

    def anchor_pad(direction):
        f.write("  (pad \"\" smd rect (at {x:1.5g} {y:1.5g}) "
            "(size {pad_size[0]} {pad_size[1]}) "
            "(layers F.Cu F.Paste F.Mask))\n".format(
                    x=anchor_pad_spacing / 2 * direction,
                    y=0.325 - row_spacing/2 + y_offset,
                    pad_size=anchor_pad_size))
    anchor_pad(-1)
    anchor_pad(1)

    f.write('  (model ${{KISYS3DMOD}}/Conn_Molex.3dshapes/{0}.wrl\n'
            '    (at (xyz 0 0 0))\n'
            '    (scale (xyz 1 1 1))\n'
            '    (rotate (xyz 0 0 0))\n'
            '  )\n'.format(name))

    f.write(")\n")

for pin_count in [17, 21, 23, 27, 33, 35, 39, 41, 51]:
    with open(get_name(pin_count) + '.kicad_mod', 'w') as f:
        make_module(f, pin_count)

Merge request reports