Skip to content
Snippets Groups Projects
Commit a75f4766 authored by Sam Calisch's avatar Sam Calisch
Browse files

added nrf52 as5013 test board

parent a370406e
No related branches found
No related tags found
No related merge requests found
Pipeline #
as5013-test/nrf52-as5013-interior.png

13 KiB

as5013-test/nrf52-as5013-layout.png

154 KiB

as5013-test/nrf52-as5013-traces.png

16.6 KiB

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,'VCC',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 AS5013(Component):
#Austrian Microsystems AS5013 2d linear magnetic encoder
p = .65/25.4 #pitch
pw = .2/25.4 #half pad width
ph = .35/25.4 #half pad height
pe = .4/25.4 #pad extension outwards
pad_1 = s2d.rectangle(-ph-pe,ph,-pw,pw)
pad_2 = s2d.rectangle(-pw,pw,-ph-pe,ph)
pad_3 = s2d.rectangle(-ph,ph+pe,-pw,pw)
pad_4 = s2d.rectangle(-pw,pw,-ph,ph+pe)
w = 3.7/25.4 #side width
labels = [ 'SDA','SCL','RST','INT',
'TB0','TB1','TB2','TB3',
'COIL','ADR','VDDp','VDD',
'VSS','MODE','PCLK','PDIO']
pins = [Pin(-.5*w, (1.5-i)*p, pad_1, l, label_size=.015) for i,l in enumerate(labels[:4])]
pins += [Pin((-1.5+i)*p, -.5*w,pad_2, l, label_size=.015,label_rot=-90) for i,l in enumerate(labels[4:8])]
pins += [Pin(.5*w, (-1.5+i)*p,pad_3, l, label_size=.015) for i,l in enumerate(labels[8:12])]
pins += [Pin((1.5-i)*p, .5*w,pad_4, l, label_size=.015,label_rot=-90) for i,l in enumerate(labels[12:])]
pins += [Pin(0,0,rectangle(-1.2/25.4,1.2/25.4,-1.2/25.4,1.2/25.4))]
prefix = 'U'
vias = []
shadow = rectangle(-.5*w,.5*w,-.5*w,.5*w)
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.05, _pad_header, 'VCC'),
Pin(0, -0.05, _pad_header, 'GND'),
]
prefix = 'J'
vias = []
shadow = s2d.rectangle(-.06,.06,-.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 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+(2*1.2+.519)/25.4,_pad_lga,'A2',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+(2*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.2/25.4))]
tap = circle(0,0,.5*1.9/25.5)
width = .9
height = .89
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)
bc = BC832(width-.25,height-.29,-90,'Fanstel\nBC832\nNRF52')
pcb += bc
#pow = Header_Power(.2,height-.36,180,'pow')
#pcb += pow
reg = Regulator_SOT23(bc.x-.5,bc.y-.09,-180,'3.3v')
pcb += reg
#pcb.connectV(pow['GND'],reg['GND'],width=.02)
#pcb.connectD(reg['IN'],[reg['IN'].x-.09,reg['IN'].y+.02],pow['VCC'],width=.02)
C_in = C_0805(reg.x+.18,reg.y-.05,90,'Cin\n.1uF',label_size=.02)
pcb += C_in
C_out = C_0805(reg.x-.05,reg.y-.09,0,'Cout\n.1uF',label_size=.02)
pcb += C_out
pcb.connectD(C_in[0],reg['IN'],width=.02)
pcb.connectV(reg['OUT'],C_out[0],width=.02)
pcb.connectH(reg['GND'],C_out[1],width=.02)
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(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+.07,swd['TX'].y-.05],[swd['TX'].x+.03,swd['TX'].y-.035],swd['TX'],width=.014)
button = Button(swd.x-.2,swd.y-.03,90)
pcb += button
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.connectH(C2[1],C_in[1],width=.02)
pcb.connectH(C2[0],C_out[0],width=.02)
pcb.connectD(C2[1],[C2[1].x,reg['GND'].y-.03],reg['GND'])
pcb.connectD(swd['GND'],[swd['GND'].x,swd['GND'].y+.05],[button[2].x+.03,button[2].y+.06],button[2])
R1 = R_0805(C_in.x+.08,bc['RESET'].y+.01,90,'10k',label_size=.03)
pcb += R1
pcb.connectH(bc['RESET'],[bc['RESET'].x,bc['RESET'].y+.05],R1[0],width=.012)
pcb.connectD(C2[0],[C2[0].x,C2[0].y-.06],[R1[1].x-.05,C2[0].y-.06],R1[1])
pcb.connectV(swd['VCC'],reg['IN'])
pcb.connectD(R1[0],[R1[0].x,R1[0].y+.04],[button.x+.1,R1[0].y+.1],button[3]).add_jumper([reg['IN'].x+.075,reg['IN'].y+.06],0,width=.12,thick=.06,height=.055)
pcb.connectD(reg['GND'],button[2])
#pcb.connectV(reg['OUT'],[reg['OUT'].x-.19,reg['OUT'].y-.11], [width-.02,height-.02], [bc['VDD'].x,bc['VDD'].y-.04], bc['VDD']).cut_corners([(3,.1),(5,.08)])
#mounting holes
w = 25/25.4
h = .16
hall = AS5013(.5*width,h,-180)
pcb += hall
#TODO: check bolt holes
pcb.connectD(hall['SDA'],[hall['SDA'].x+.07,hall['SDA'].y],bc['XL2'],width=.014)
pcb.connectD(hall['SCL'],[hall['SCL'].x+.05,hall['SCL'].y],bc['XL1'],width=.014)
#pcb.connectH(hall['SCL'],[hall['SCL'].x,hall['SCL'].y+.06],bc['XL1'])
#pcb.connectV(hall['RST'],[C2[0].x,C2[0].y-.06],C2[0])
RSDA = R_1206(bc['XL2'].x+.09,bc['XL2'].y-.08,0,'RSDA')
pcb += RSDA
RSCL = R_1206(bc['XL1'].x+.045,RSDA.y-.1,0,'RSCL')
pcb += RSCL
pcb.connectH(RSCL[0],RSDA[0])
pcb.connectH(RSDA[0],bc['VDD'])
C_hall = C_1206(hall.x-.21,hall.y-.02,0,'100nF')
pcb += C_hall
pcb.connectH(hall['VDD'],C_hall[0],width=.014)
pcb.connectH(hall['VDDp'],C_hall[0],width=.014)
pcb.connectH(hall['ADR'],C_hall[0],width=.014)
pcb.connectD(C_hall[1],[C_hall[1].x,C_hall[1].y-.05],[hall['VSS'].x,hall['VSS'].y-.04],hall['VSS'])
pcb.connectD(C_hall[0],[C_hall[0].x,C_hall[0].y+.1],C2[0])
pcb.connectD(C_hall[1],[C_hall[1].x,C_hall[1].y+.15],C_out[1])
pcb.connectV(C_hall[0],[C_hall.x-.15,C_hall.y+.1],[bc['VDD'].x,C_hall.y-.12],bc['VDD']).add_jumper([C_hall[1].x,C_hall.y+.1])
#pow = Header_Power(reg.x-.2,reg.y,0,'pow')
#pcb += pow
h1 = Hole(.5*width-.5*w,h,0)
h2 = Hole(.5*width+.5*w,h,0)
pcb.custom_cutout = chamfered_rectangle(0,width,0,height,.1)
pcb.custom_cutout += capsule(h1.x-h,h2.x+h,h,h)
pcb += h1
pcb += h2
#TODO: add power for remote operation... doh
cad.shapes = pcb.layout()
#cad.shape = pcb.traces+(pcb.cutout-pcb.cutout)
#cad.shape = pcb.cutout+(pcb.traces-pcb.traces)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment