From 698f771e1a68dde6db580d6debdc4ae1b491c63c Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Sat, 16 Nov 2024 17:02:33 -0700 Subject: [PATCH] add footprint for Pi Zero under QuantiMotor board --- packages/.gitignore | 2 + packages/Makefile | 3 +- packages/pizero.py | 165 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 169 insertions(+), 1 deletion(-) create mode 100755 packages/pizero.py diff --git a/packages/.gitignore b/packages/.gitignore index 45962cb..4e2d25e 100644 --- a/packages/.gitignore +++ b/packages/.gitignore @@ -157,7 +157,9 @@ PDFN33.fp rpsma-th.fp NINA-W131.fp Omega2S.fp +cu01sah.fp cu01sav.fp TSOT26.fp NRS50.fp ARJM11D7009ABEW2.fp +pizero.fp diff --git a/packages/Makefile b/packages/Makefile index 547d290..f200c5b 100644 --- a/packages/Makefile +++ b/packages/Makefile @@ -177,7 +177,8 @@ FOOTPRINTS= \ cu01sav.fp \ TSOT26.fp \ NRS50.fp \ - ARJM11D7009ABEW2.fp + ARJM11D7009ABEW2.fp \ + pizero.fp .5c.fp: nickle $*.5c -o $@ diff --git a/packages/pizero.py b/packages/pizero.py new file mode 100755 index 0000000..a2daf34 --- /dev/null +++ b/packages/pizero.py @@ -0,0 +1,165 @@ +#!/usr/bin/python3 +# Copyright 2024 by Bdale Garbee . GPLv3 +# +# Program to emit PCB footprint for Raspberry Pi Zero 2 W. Note that this +# footprint is intended to be used to mount a female header on the bottom +# of a project board, to allow mounting the Pi right-side up underneath. +# +# 40 pin header, 4 mounting holes, outline in silk + +# dimensions in mm +PinSpacing = 2.54 +PinHole = 0.038 * 25.4 +PinCopper = 0.07 * 25.4 + +rows = 20 +cols = 2 + +row_off = (rows + 1)/2 * PinSpacing / 2.0 +col_off = (cols - 1) * PinSpacing / 2.0 + +BoardLength = 65.0 +BoardWidth = 30.0 +CornerRadius = 2.25 + +MntOffset = 3.5 +MntDiam = 2.5 + +# we're going to use the 1/100 of a mil fundamental unit form +def mm2mils100( mm ): + return int( mm / 25.4 * 1000.0 * 100.0 + 0.5 ) + +print ('# author: Bdale Garbee') +print ('# email: bdale@gag.com') +print ('# dist-license: GPL 3') +print ('# use-license: unlimited') + +print ('Element[0x0 "PiZero" "" "" 0 0 0 0 0 100 0x0]') +print ("(") + +for row in range (0,rows): + for col in range (0,cols): + pin = row * cols + col + pinnum = pin + 1 + if pinnum == 1: + Flags = '0x0101' + else: + Flags = '0x0001' + print (' Pin[', \ + mm2mils100(((rows-1)/2 - row)*PinSpacing), \ + mm2mils100(col_off-col*PinSpacing), \ + mm2mils100(PinCopper), + 500, + mm2mils100(PinCopper) + 500, + mm2mils100(PinHole), \ + '"pin%i"' % pinnum, '"%i"' % pinnum, Flags, ']') + +print( ' Pin[',\ + mm2mils100(BoardLength/2-MntOffset), \ + 0, \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"G"', '"G"', '0x0001', ']') + +print( ' Pin[',\ + mm2mils100(-BoardLength/2+MntOffset), \ + 0, \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"G"', '"G"', '0x0001', ']') + +print( ' Pin[',\ + mm2mils100(BoardLength/2-MntOffset), \ + mm2mils100(BoardWidth-2*MntOffset), \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"G"', '"G"', '0x0001', ']') + +print( ' Pin[',\ + mm2mils100(-BoardLength/2+MntOffset), \ + mm2mils100(BoardWidth-2*MntOffset), \ + mm2mils100(MntDiam * 1.75), \ + 1200, \ + mm2mils100(MntDiam * 1.75) + 600, \ + mm2mils100(MntDiam), \ + '"G"', '"G"', '0x0001', ']') + +print( ' ElementLine[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(-MntOffset), \ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(-MntOffset), \ + 500, \ + ']') + +print( ' ElementLine[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(BoardWidth-MntOffset), \ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(BoardWidth-MntOffset), \ + 500, \ + ']') + +print( ' ElementLine[',\ + mm2mils100(-BoardLength/2), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(-BoardLength/2), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + 500, \ + ']') + +print( ' ElementLine[',\ + mm2mils100(BoardLength/2), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(BoardLength/2), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 270, \ + 90, \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(-MntOffset+CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 180, \ + 90, \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(-BoardLength/2+CornerRadius), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 0, \ + 90, \ + 500, \ + ']') + +print( ' ElementArc[',\ + mm2mils100(BoardLength/2-CornerRadius), \ + mm2mils100(BoardWidth-MntOffset-CornerRadius), \ + mm2mils100(CornerRadius), \ + mm2mils100(CornerRadius), \ + 90, \ + 90, \ + 500, \ + ']') + +print (")") -- 2.47.2