Commit 6d23a271 authored by Sam Calisch's avatar Sam Calisch

added nrf52 plug test

parent f02b211a
from koko.lib.pcb import *
from koko.lib.sam import *
class R_0805_small(Component):
''' 0805 Resistor
'''
_pad_0805 = s2d.rectangle(-.017,.017, -.026, .026)
pins = [Pin(-0.04, 0, _pad_0805), Pin(0.04, 0, _pad_0805)]
prefix = 'R'
vias = []
class Button(Component):
''' SW262CT-ND
'''
rect = rectangle(-.75/25.4,.75/25.4,-.5/25.4,.5/25.4)
pins = [
Pin(-2/25.4,.8/25.4,rect),
Pin( 2/25.4,.8/25.4,rect),
Pin(-2/25.4,-.8/25.4,rect),
Pin( 2/25.4,-.8/25.4,rect)
]
prefix = 'button'
vias = []
shadow = rectangle(-2.1/25.4,2.1/25.4,-1.4/25.4,1.4/25.4)
class TagConnectSWD(Component):
'''
'''
_pad = s2d.circle(0,0,.5*.031)
_via = s2d.circle(0,0,.5*.039)
pins = [
Pin(-.05,-.025,_pad,'GND2',label_size=.012),
Pin( .00,-.025,_pad,'TX',label_size=.012),
Pin( .05,-.025,_pad,'RX',label_size=.012),
Pin(-.05,.025,_pad,'GND',label_size=.012),
Pin( .00,.025,_pad,'SWDIO',label_size=.012),
Pin( .05,.025,_pad,'SWDCLK',label_size=.012)
]
vias = [
Via(-.1,0,_via),
Via(.1,0.04,_via),
Via(.1,-.04,_via),
]
class Regulator_SOT23(Component):
''' SOT23 voltage regulator
'''
_pad_SOT23 = s2d.rectangle(-.02,.02,-.012,.012)
pins = [
Pin(-0.045, -0.0375, _pad_SOT23,'IN'),
Pin(-0.045, 0.0375, _pad_SOT23,'OUT'),
Pin(0.045, 0, _pad_SOT23,'GND')
]
prefix = 'U'
vias = []
class Crystal_FC135(Component):
''' CRYSTAL 32.7680KHZ 12.5PF SMT
'''
_pad = s2d.rectangle(-.5/25.4,.5/25.4,-.9/25.4,.9/25.4)
pins = [
Pin(-1.25/25.4, 0, _pad),
Pin( 1.25/25.4, 0, _pad),
]
prefix = 'U'
vias = []
class Header_FTDI(Component):
''' FTDI cable header
'''
_pad_header = chamfered_rectangle(-0.06, 0.08,-0.025, 0.025,.007)
pins = [
#Pin(0, -0.25, _pad_header, 'RTS'),
Pin(0, -0.15, _pad_header, 'RX'),
Pin(0, -0.05, _pad_header, 'TX'),
Pin(0, 0.05, _pad_header, 'VCC'),
Pin(0, 0.15, _pad_header, 'CTS'),
Pin(0, 0.25, _pad_header, 'GND')
]
prefix = 'J'
vias = []
shadow = s2d.rectangle(-.06,8/25.4,-.3,.3)
#shadow = s2d.rectangle(-.06,8/25.4,-.3,.2)
class Header_Power(Component):
''' FTDI cable header
'''
_pad_header = chamfered_rectangle(-0.06, 0.08,-0.025, 0.025,.007)
pins = [
#Pin(0, -0.25, _pad_header, 'RTS'),
Pin(0, -0.1, _pad_header, 'VCC'),
Pin(0, 0.0, _pad_header, 'GND'),
Pin(0, 0.1, _pad_header, '3V3'),
]
prefix = 'J'
vias = []
shadow = s2d.rectangle(-.06,4/25.4,-.13,.13)
#shadow = s2d.rectangle(-.06,8/25.4,-.3,.2)
def bot_chamfered_rectangle(x0,x1,y0,y1,c):
r = rectangle(x0,x1,y0,y1)
c1 = triangle(x0,y0,x0,y0+c,x0+c,y0)
c2 = triangle(x1,y1, x1, y1-c, x1-c, y1)
c3 = triangle(x0,y1, x0+c, y1, x0, y1-c)
c4 = triangle(x1,y0, x1-c, y0, x1, y0+c)
return r-c2-c3
class CR20XX(Component):
#coin cell battery, e.g. 2032
pins = [
Pin(0,0,circle(0,0,5./25.4),'-')
]
shadow = circle(0,0,10./25.4)
vias = []
class AAA(Component):
#AAA battery smd holder
pad = chamfered_rectangle(-.125,.125,-.12,.12,.05)
pins = [
Pin(1.21-.125,0,pad,'+',label_size=.08),
Pin(-1.21+.125,0,pad,'-',label_size=.08),
]
shadow = rectangle(-1.07,1.07,-.25,.25)
vias = [
Via(-1.21+.25,.209,circle(0,0,.039))
]
class Plug(Component):
#capacitive coupling to american power plug
slot = rectangle(-.03,.03,-.125,.125)
#pad = rectangle(-.05,.05,-.15,.15) - rectangle(-.03,.03,-.125,.125)
pad = circle(0,0,.06)
hw = .25
pin_os = -.15#.22
pins = [
Pin(-hw-pin_os,-.03,pad,'N'),
Pin( hw+pin_os,-.03,pad,'L')]
vias = [
Via(-hw,.25,rectangle(-.032,.032,-.157,.157)),
Via(hw,.25,rectangle(-.032,.032,-.127,.127)),
Via(0,-.25,circle(0,0,.1))
]
class DRV5053(Component):
#nonstandard mounting of TO-92 hall effect sensor
pad = rectangle(0,.1,-.016,.016)
pins = [
Pin(.03,-.165,pad,'VCC'),
Pin(.03,-.215,pad,'GND'),
Pin(.03,-.265,pad,'SIG')
]
vias = [Via(0,0,rectangle(-.03,.03,-.28,0))]
class BC832(Component):
#Fanstel BC832 micro nrf52 module
p = 1.1/25.4
pad_hw = .7/25.4
pad_hh = .34/25.4
_pad_lga = circle(0,0,.32/25.4)
_pad = rectangle(-pad_hw,pad_hw,-pad_hh,pad_hh)
c= 3.9/25.4
start_y = .618/25.4
y_os = .18
names = [
'GND','DFU','SWDIO','SWDCLK','P18','P13','P11','P12',
'A1','RESET','XL1','XL2','A0','P27','P26','VDD',
]
pins = [Pin(-c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[:8][::-1])]
pins += [Pin(c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[8:16])]
pins += [
Pin(-c+2.15/25.4,-y_os+.519/25.4,_pad_lga,'P8',label_size=.01),
Pin(-c+2.15/25.4,-y_os+(1.2+.519)/25.4,_pad_lga,'P6',label_size=.01),
Pin(-c+2.15/25.4,-y_os+(4*1.2+.519)/25.4,_pad_lga,'A4',label_size=.01),
#Pin(-c+2.15/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01),
#Pin(-c+2.15/25.4+1.2/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01),
#Pin(-c+2.15/25.4+1.2/25.4,-y_os+(4*1.2+.519)/25.4,_pad_lga,'',label_size=.01),
#Pin(-c+2.15/25.4+2*1.2/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01),
#Pin(-c+2.15/25.4+3*1.2/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01)
]
vias = []
shadow = rectangle(-c,c,-y_os,8.8/25.4-y_os)
class Hole(Component):
pins = [Pin(0,0,circle(0,0,0.01))]
vias = [Via(0,0,circle(0,0,.5*2.1/25.4))]
tap = circle(0,0,.5*1.9/25.5)
width = 1.
height = 1.6
pcb = PCB(0,0,width,height,chamfer_distance=.07)
def connectG(pin,dx,dy,width=.012):
'''
Convenience function for connecting to ground plane
'''
pcb.connectD(pin,[pin.x+dx,pin.y+dy],[pin.x+dx-.0001,pin.y+dy],width=width,sides=[0,1,1])
def connectS(pin,dx,dy,width=.012):
pcb.connectD(pin,[pin.x+dx+.0001,pin.y+dy],width=width)
def connectM(pin1,pin2,dx,width=.012):
pcb.connectD(pin1,[pin1.x+dx,pin1.y],pin2,width=width)
pow = Header_Power(.2,height-.36,180,'pow')
pcb += pow
reg = Regulator_SOT23(pow.x+.135,pow['GND'].y-.01,-180,'3.3v')
pcb += reg
pcb.connectV(pow['GND'],reg['GND'],width=.02)
pcb.connectD(reg['IN'],[reg['IN'].x,pow['VCC'].y-.03],pow['VCC'],width=.02)
C_in = C_0805(reg.x+.17,reg.y+.01,90,'Cin\n.1uF',label_size=.02)
pcb += C_in
C_out = C_0805(reg.x+.01,reg.y-.09,0,'Cout\n.1uF',label_size=.02)
pcb += C_out
pcb.connectD(C_in[1],[C_in[1].x,C_in[1].y-.02],reg['GND'])
pcb.connectV(reg['IN'],C_in[0],width=.02)
pcb.connectH(reg['OUT'],C_out[0],width=.02)
pcb.connectH(reg['GND'],C_out[1],width=.02)
bc = BC832(pow.x+.6,pow.y+.08,-90,'Fanstel\nBC832\nNRF52')
pcb += bc
swd = TagConnectSWD(bc.x-.33,bc.y+.12,0,'swd')
pcb += swd
pcb.connectD(swd['SWDCLK'],[swd['SWDCLK'].x,swd['SWDCLK'].y+.02],[bc['SWDCLK'].x-.02,bc['SWDCLK'].y+.05],bc['SWDCLK'],width=.012)
pcb.connectD(swd['SWDIO'],[swd['SWDIO'].x,swd['SWDIO'].y+.02],[bc['SWDIO'].x-.03,bc['SWDIO'].y+.079],bc['SWDIO'],width=.012)
pcb.connectD(swd['GND'],[swd['GND'].x,swd['GND'].y+.02],[bc['GND'].x-.06,bc['GND'].y+.11],bc['GND'],width=.012)
#pcb.connectD(ftdi['RTS'],[ftdi['RTS'].x,ftdi['RTS'].y+.03],[mdb['DFU'].x-.05,mdb['DFU'].y+.12],mdb['DFU'],width=.014)
pcb.connectD(bc['P6'],[bc['P6'].x,bc['P6'].y+.02],[bc['P6'].x-.07,bc['P6'].y+.035],[swd['RX'].x+.03,swd['RX'].y+.02],swd['RX'],width=.012)
pcb.connectD(bc['P8'],[swd['TX'].x+.03,swd['TX'].y-.05],swd['TX'],width=.014)
button = Button(pow.x-.01,pow.y+.23,0)
pcb += button
pcb.connectH(pow['GND'],[button[1].x-.06,button[1].y],button[1])
pcb.connectV(button[3],button[0])
pcb.connectV(button[1],button[2])
C2 = C_0805(C_out.x+.13,C_out.y,-180,'C2\n10uF',label_size=.02)
pcb += C2
pcb.connectV(C2[1],C_in[1],width=.02)
pcb.connectH(C2[0],C_out[0],width=.02)
pcb.connectH(swd[4],swd[1])
pcb.connectD(swd['GND'],button[2])
R1 = R_0805(C_in.x+.08,bc['RESET'].y+.03,90,'10k',label_size=.03)
pcb += R1
pcb.connectH(bc['RESET'],[bc['RESET'].x,bc['RESET'].y+.05],R1[0],width=.012)
pcb.connectH(C2[0],[C2[0].x,C2[0].y-.06],R1[1])
pcb.connectD(R1[0],[R1[0].x,R1[0].y+.06],[R1[0].x-.16,R1[0].y+.095],[button[0].x+.04,button[0].y-.05],button[0])
pcb.connectV(pow['3V3'],[C2[0].x,C2[0].y-.06],C2[0])
pcb.connectH(R1[1],[R1[1].x,R1[1].y-.08],[bc['VDD'].x,R1[1].y-.08],bc['VDD'],sides=[0,1,0])
plug = Plug(.6,.5,90)
pcb += plug
tol = .003
core_w = .13+2*tol
core_gap = .03-tol
drv = DRV5053(plug.x-.125+core_gap,plug.y+.25,90,'drv3035')
pcb += drv
pcb.connectD(drv['SIG'],[drv['SIG'].x,drv['SIG'].y+.2],bc['A1'])
pcb.connectD(drv['VCC'],[drv['VCC'].x,drv['VCC'].y+.1],R1[1])
pcb.connectD(drv['GND'],[drv['GND'].x,drv['GND'].y+.18],[pow['GND'].x-.1,drv['GND'].y+.24],[pow['GND'].x-.15,pow['GND'].y],pow['GND']).add_jumper([drv['GND'].x-.13,drv.y+.25],0)
pcb.connectD(plug[0],[plug[0].x+.06,plug[0].y+.04],[plug[0].x+.13,plug[0].y+.04],[bc['XL2'].x+.07,bc['XL2'].y-.17],bc['XL2'])
pcb.connectD(plug[1],[width-.1,plug[1].y-.05],[width-.02,bc.y-.35],bc['A0'])
pcb.connectD(bc['A4'],[bc['A4'].x-.6/25.4,bc['XL2'].y+.06],bc['XL2'],width=.012)
core_r = filleted_rectangle(-.125-core_gap-core_w,.125+core_gap+core_w,-.03-core_gap-core_w,.03+core_gap+core_w,core_w)
core_r -= rectangle(-.125-core_gap,.125+core_gap,-.03-core_gap,.03+core_gap,)
core_l = filleted_rectangle(-.155-core_gap-core_w,.155+core_gap+core_w,-.03-core_gap-core_w,.03+core_gap+core_w,core_w)
core_l -= rectangle(-.155-core_gap,.155+core_gap,-.03-core_gap,.03+core_gap)
#mag = rectangle(-.03,.03,-.065,.065)
#core_r += move(mag,0,-.125-core_gap-core_w)
pocket = move(core_r,plug.x-.25,plug.y+.25)
pocket += move(core_l,plug.x-.25,plug.y-.25)
topside=0
if topside:
pocket += circle(plug[1].x,plug[1].y,.06)
pocket += circle(plug[0].x,plug[0].y,.06)
pocket += rectangle(drv[2].x-.12, drv[2].x+.1, drv.y-.03, drv.y+.15)
pcb.height=.97
pcb.add_custom_layer("pocket",pocket,(250,0,100))
cad.shapes = pcb.layout()
#cad.shape = pcb.traces+(pcb.cutout-pcb.cutout)
#cad.shape = pcb.cutout+(pcb.traces-pcb.traces)
#cad.shape = pcb.custom_layers['pocket']['layer']+(pcb.traces-pcb.traces)+(pcb.cutout-pcb.cutout)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment