diff --git a/nrf52-stepper/nrf52-stepper-interior.png b/nrf52-stepper/nrf52-stepper-interior.png new file mode 100644 index 0000000000000000000000000000000000000000..76b8085c67292347dd57dd63d4b6e740b21c2546 Binary files /dev/null and b/nrf52-stepper/nrf52-stepper-interior.png differ diff --git a/nrf52-stepper/nrf52-stepper-traces.png b/nrf52-stepper/nrf52-stepper-traces.png new file mode 100644 index 0000000000000000000000000000000000000000..2de966e5dadec1734f8ca142b5c2a41b604c1cd1 Binary files /dev/null and b/nrf52-stepper/nrf52-stepper-traces.png differ diff --git a/nrf52-stepper/nrf52-stepper.ko b/nrf52-stepper/nrf52-stepper.ko new file mode 100644 index 0000000000000000000000000000000000000000..de4716e471ea20d5d55aa0afe7e5ebcc4916375b --- /dev/null +++ b/nrf52-stepper/nrf52-stepper.ko @@ -0,0 +1,464 @@ +from koko.lib.sam import * +from koko.lib.pcb import * +from koko.lib.shapes2d import * + + +class R_0805(Component): + ''' 0805 Resistor + ''' + pins = [ + Pin(-0.04, 0, s2d.rectangle(-.023,.017, -.027, .027)), + Pin(0.04, 0, s2d.rectangle(-.017,.023, -.027, .027)) + ] + prefix = 'R' + vias = [] + +class R_1206(Component): + ''' 1206 Resistor + ''' + pins = [ + Pin(-0.06, 0, s2d.rectangle(-0.032, 0.03, -0.034, 0.034)), + Pin(0.06, 0, s2d.rectangle(-0.03, 0.032, -0.034, 0.034))] + prefix = 'R' + vias = [] + +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 cap_UWT(Component): + '''UWT series aluminum smd cap + http://nichicon-us.com/english/products/pdfs/e-uwt.pdf + ''' + _d = 8 #mm, diameter + _h = 10.5 #mm, height + _a = 2.9/25.4 + _e = 3.1/25.4 + _h = 1./25.4 + 2/25.4 + _pad = rectangle(-_h/2,_h/2,-_a/2-.03,_a/2+.03) + pins = [Pin(0,-(_e+_a)/2-.01,_pad,'-'),Pin(0,(_e+_a)/2+.01,_pad,'+')] + vias = [] + shadow = bot_chamfered_rectangle(-4/25.4,4/25.4,-4/25.4,4/25.4,1/25.4) + + +class Pheonix_WTB(Component): + _pad = rectangle(-.4*1.2/25.4,.4*1.2/25.4, -.5*3.4/25.4,.5*3.4/25.4) + _pad_big = chamfered_rectangle(-1.15/25.4,1.15/25.4,-2.8/25.4,2.8/25.4,.01) + pins = [ + Pin(-1.5*2.5/25.4, -6.6/25.4,_pad,'1'), + Pin(- .5*2.5/25.4, -6.6/25.4,_pad,'2'), + Pin( .5*2.5/25.4, -6.6/25.4,_pad,'3'), + Pin( 1.5*2.5/25.4, -6.6/25.4,_pad,'4'), + Pin( -12.7/25.4/2, 0, _pad_big), + Pin( 12.7/25.4/2, 0, _pad_big), + ] + vias = [] + shadow = rectangle(-6/25.4,6/25.4,-8.3/25.4,2.8/25.4) + +class DRV8825(Component): + '''Stepper driver''' + _pad = rectangle(-.8/25.4,.8/25.4,-.17/25.4,.17/25.4) + p = .65/25.4 + w = 5.6/25.4 + labels = ["CP1","CP2",'VCP','VMA','AOUT1','ISENA','AOUT2','BOUT2','ISENB','BOUT1','VMB','AVREF','BVREF','GND', + "V3OUT",'nRST','nSLP','nFLT','DECAY','DIR','nEBL','STEP','NC','MODE0','MODE1','MODE2','nHOME','GND2'] + pins = [Pin(-.5*w,(6.5-i)*p,_pad,l,label_size=.02) for i,l in enumerate(labels[:14])] + pins += [Pin(.5*w,(-6.5+i)*p,_pad,l,label_size=.02) for i,l in enumerate(labels[14:])] + pins += [Pin(0,0,rectangle(-1.5/25.4,1.5/25.4,-4/25.4,4/25.4),'GND3',label_size=.02)] + vias = [] + +class Regulator_SOT23(Component): + ''' LM3480 100-mA, 3.3V + ''' + _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 AS5047D(Component): + _pad_TSSOP = rectangle(-.7/25.4,.7/25.4, -.2/25.4,.2/25.4) + hw = 5.55/25.4/2 + pitch = .65/25.4 + pins = [ + Pin(-hw, 3*pitch,_pad_TSSOP,'CSn',label_size=.02), + Pin(-hw, 2*pitch,_pad_TSSOP,'CLK',label_size=.02), + Pin(-hw, 1*pitch,_pad_TSSOP,'MISO',label_size=.02), + Pin(-hw, 0*pitch,_pad_TSSOP,'MOSI',label_size=.02), + Pin(-hw,-1*pitch,_pad_TSSOP,'TEST',label_size=.02), + Pin(-hw,-2*pitch,_pad_TSSOP,'B',label_size=.02), + Pin(-hw,-3*pitch,_pad_TSSOP,'A',label_size=.02), + Pin( hw,-3*pitch,_pad_TSSOP,'W/PWM',label_size=.02), + Pin( hw,-2*pitch,_pad_TSSOP,'V',label_size=.02), + Pin( hw,-1*pitch,_pad_TSSOP,'U',label_size=.02), + Pin( hw, 0*pitch,_pad_TSSOP,'VDD',label_size=.02), + Pin( hw, 1*pitch,_pad_TSSOP,'VDD3V',label_size=.02), + Pin( hw, 2*pitch,_pad_TSSOP,'GND',label_size=.02), + Pin( hw, 3*pitch,_pad_TSSOP,'I/PWM',label_size=.02), + ] + vias = [] + prefix='IC' + shadow = s2d.rectangle(-2.25/25.4,2.25/25.4, -2.95/25.4,2.95/25.4) +class AS5047D_FLIP(Component): + _pad_TSSOP = rectangle(-.9/25.4,.9/25.4, -.2/25.4,.2/25.4) + hw = 5.55/25.4/2 + pitch = .65/25.4 + pins = [ + Pin( hw, 3*pitch,_pad_TSSOP,'CSn',label_size=.02), + Pin( hw, 2*pitch,_pad_TSSOP,'CLK',label_size=.02), + Pin( hw, 1*pitch,_pad_TSSOP,'MISO',label_size=.02), + Pin( hw, 0*pitch,_pad_TSSOP,'MOSI',label_size=.02), + Pin( hw,-1*pitch,_pad_TSSOP,'TEST',label_size=.02), + Pin( hw,-2*pitch,_pad_TSSOP,'B',label_size=.02), + Pin( hw,-3*pitch,_pad_TSSOP,'A',label_size=.02), + Pin(-hw,-3*pitch,_pad_TSSOP,'W/PWM',label_size=.02), + Pin(-hw,-2*pitch,_pad_TSSOP,'V',label_size=.02), + Pin(-hw,-1*pitch,_pad_TSSOP,'U',label_size=.02), + Pin(-hw, 0*pitch,_pad_TSSOP,'VDD',label_size=.02), + Pin(-hw, 1*pitch,_pad_TSSOP,'VDD3V',label_size=.02), + Pin(-hw, 2*pitch,_pad_TSSOP,'GND',label_size=.02), + Pin(-hw, 3*pitch,_pad_TSSOP,'I/PWM',label_size=.02), + ] + vias = [ Via(0,0, dogboned_rectangle( -2.75/25.4,2.75/25.4, -2.95/25.4,2.95/25.4, .017 ) ) ] + prefix='IC' + shadow = s2d.rectangle(-2.25/25.4,2.25/25.4, -2.95/25.4,2.95/25.4) + +class Header_Stepper(Component): + ''' For bipolar stepper + ''' + _pad_header = chamfered_rectangle(-0.06, 0.06, -0.022, 0.022,.007) + pins = [ + Pin(0, -0.15, _pad_header, 'A1'), + Pin(0, -0.05, _pad_header, 'A2'), + Pin(0, 0.05, _pad_header, 'B1'), + Pin(0, 0.15, _pad_header, 'B2'), + ] + prefix = 'J' + vias = [] + shadow = s2d.rectangle(-.06,8/25.4,-.18,.18) + + +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 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) + +_pad_SOIC = s2d.rectangle(-.041,.041,-.015,.015) +class A4950(Component): + _pad_SOIC = chamfered_rectangle(-.041,.041,-.015,.015,.008) + pins = [ + Pin(-.11, .075,_pad_SOIC,"GND"), + Pin(-.11, .025,_pad_SOIC,"IN2"), + Pin(-.11,-.025,_pad_SOIC,"IN1"), + Pin(-.11,-.075,_pad_SOIC,"VREF"), + Pin( .11,-.075,_pad_SOIC,"VBB"), + Pin( .11,-.025,_pad_SOIC,"OUT1"), + Pin( .11, .025,_pad_SOIC,"LSS"), + Pin( .11, .075,_pad_SOIC,"OUT2"), + Pin( 0,0,s2d.rectangle(-.04,.04,-.075,.075),"") + ] + prefix = 'U' + vias = [] + +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 BarrelJackSMD(Component): + pw = 2.8/25.4 + ph = 2.4/25.4 + _pad = chamfered_rectangle(-.5*pw,.5*pw,-.5*ph,.5*ph,.01) + _via = s2d.circle(0,0,.065) + pins = [ + Pin(.192,.177+.5*ph,_pad,'V'), + Pin(.437,.177+.5*ph,_pad,'V2'), + Pin(.192,-.177-.5*ph,_pad,'GND'), + Pin(.437,-.177-.5*ph,_pad,'GND2'), + ] + vias = [Via(.197,0,s2d.circle(0,0,.5*.065)), + Via(.374,0,s2d.circle(0,0,.5*.073))] + shadow = s2d.rectangle(0,.58,-.18,.18) + +class Header_Female_R_SMD(Component): + _pad = s2d.rectangle(-.045,.045,-.03,.03) + pins = [Pin(-.178,0,_pad),Pin(.178,0,_pad)] + shadow = s2d.rectangle(-.178,.178,-.05,.05) + vias = [] + +class R_2010(Component): + _pad_2010 = s2d.rectangle(-0.032, 0.032, -0.045, 0.045) + ''' 2010 Resistor + ''' + pins = [Pin(-0.096, 0, _pad_2010), Pin(0.096, 0, _pad_2010)] + prefix = 'R' + vias = [] +class R_2512(Component): + _pad_2010 = chamfered_rectangle(-0.032, 0.032, -0.0625, 0.0625, .01) + ''' 2010 Resistor + ''' + pins = [Pin(-0.125, 0, _pad_2010), Pin(0.125, 0, _pad_2010)] + prefix = 'R' + vias = [] + +class M3_Hole(Component): + pins = [Pin(0,0,circle(0,0,.001))] + prefix='V' + vias = [Via(0,0,circle(0,0,1.55/25.4))] + shadow = circle(0,0,5.5/25.4/2) + +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 = 42.3/25.4 +height = 42.3/25.4 +mid = width/2. +pcb = PCB(0,0,width,height,chamfer_distance=.12) + +hole = M3_Hole(mid-15.5/25.4, mid-15.5/25.4) +pcb += hole +hole = M3_Hole(mid+15.5/25.4, mid-15.5/25.4) +pcb += hole +hole = M3_Hole(mid-15.5/25.4, mid+15.5/25.4) +pcb += hole +hole = M3_Hole(mid+15.5/25.4, mid+15.5/25.4) +pcb += hole + +def connectG(pin,dx,dy,width=.014,pts=[]): + ''' + Convenience function for connecting to ground plane + ''' + sides = [0 for p in pts]+[0,1,1] + pts = [pin] + pts + [[pin.x+dx,pin.y+dy],[pin.x+dx-.0001,pin.y+dy]] + pcb.connectD(*pts,width=width,sides=sides) +def connectGf(pin,dx,dy,width=.014,pts=[]): + sides = [1,0] + [0 for p in pts]+ [1] + pts = [[pin.x+dx,pin.y+dy],[pin.x+dx-.0001,pin.y+dy]] + pts + [pin] + pcb.connectD(*pts,width=width,sides=sides) +def connectS(pin,dx,dy,width=.014): + pcb.connectD(pin,[pin.x+dx+.0001,pin.y+dy],width=width) +def connectM(pin1,pin2,dx,width=.014): + pcb.connectD(pin1,[pin1.x+dx,pin1.y],pin2,width=width) + + +step = Pheonix_WTB(.11,.66,90,'step') +pcb += step + + +pow = BarrelJackSMD(.63,height+.1,-90,'12V') +pcb += pow +#connectG(pow['GND'],-.1,0.01,width=.06) +pcb.connectV(pow['GND'],pow['GND2'],width=.09) + + + +C_bulk = cap_UWT(pow.x-.4, pow.y-.63,-90,'100uF') +pcb += C_bulk +connectG(C_bulk['-'],-.02,.18,width=.05) +pcb.connectV(pow['V2'],pow['V'],width=.05) +pcb.connectD(pow['V2'],C_bulk['+'],width=.05) +pcb.connectV(C_bulk['-'],[pow['GND2'].x,pow['GND2'].y-.04],pow['GND2'],width=.06) + + + +bc = BC832(width-.2,height-.62,-90,'Fanstel\nBC832\nNRF52') +pcb += bc + +#reg = Regulator_SOT23(bc.x-.465,bc.y-.09,-180,'3.3v') +reg = Regulator_SOT23(pow.x+.39,pow.y-.28,-90,'3.3v') +pcb += reg + +pcb.connectV(pow['V'],reg['IN'],width=.05) +connectG(reg['GND'],-.07,-.02,width=.03) +#pcb.connectD(reg['IN'],[reg['IN'].x-.09,reg['IN'].y+.02],pow['VCC'],width=.02) + +C_in = C_1206(reg.x-.01,reg.y+.13,180,'Cin\n.1uF',label_size=.02) +pcb += C_in +C_out = C_1206(reg.x+.0,reg.y-.12,0,'Cout\n.1uF',label_size=.02) +pcb += C_out +pcb.connectD(C_in[1],[C_in[1].x,C_in[1].y+.01],reg['GND']) +pcb.connectV(reg['IN'],C_in[0],width=.02) +pcb.connectH(reg['OUT'],C_out[0],width=.02) +pcb.connectD(reg['GND'],C_out[1],width=.02) + + + + +swd = TagConnectSWD(bc.x-.27,bc.y+.25,-90,'swd') +pcb += swd +pcb.connectD(swd['SWDCLK'],[swd['SWDCLK'].x+.02,swd['SWDCLK'].y],[bc['SWDCLK'].x-.02,bc['SWDCLK'].y+.05],bc['SWDCLK'],width=.012) +pcb.connectD(swd['SWDIO'],[swd['SWDIO'].x+.02,swd['SWDIO'].y],[bc['SWDIO'].x-.03,bc['SWDIO'].y+.079],bc['SWDIO'],width=.012) +pcb.connectD(swd['GND'],[bc['GND'].x-.06,bc['GND'].y+.11],bc['GND'],width=.012) + +pcb.connectD(bc['P6'],[bc['P6'].x,bc['P6'].y+.02],[swd['RX'].x+.05,swd['RX'].y-.1],[swd['RX'].x+.02,swd['RX'].y-.03],swd['RX'],width=.012) +pcb.connectD(bc['P8'],[swd['TX'].x+.02,bc['P8'].y-.0],[swd['TX'].x-.05,swd['TX'].y-.02],swd['TX'],width=.012) + +connectG(swd['GND'],.05,.03) + + +button = Button(bc.x-.33,bc.y-.02,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_1206(reg.x+.12,reg.y+.07,-90,'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.connectD(C2[0],[C2[0].x+.05,C2[0].y],[width-.1,height-.08],[bc['VDD'].x+.04,bc['VDD'].y+.03],bc['VDD']) + + +R1 = R_1206(button.x-.08,button[1].y+.18,90,'10k',label_size=.03) +pcb += R1 +pcb.connectH(bc['RESET'],[bc['RESET'].x,bc['RESET'].y+.05],[button[2].x+.06,button[2].y],button[2],width=.012) +pcb.connectD(swd['VCC'],[swd['VCC'].x-.03,swd['VCC'].y],R1[0]) +pcb.connectD(swd['VCC'],[swd['VCC'].x-.03,swd['VCC'].y],C_out[0]) +pcb.connectD(R1[1],button[1]) +pcb.connectD(button[3],[button[3].x-.04,button[3].y],C_out[1],width=.03) + +#stepper +drv = DRV8825(step.x+.88,step.y-.02,0) +pcb += drv + +pcb.connectD(drv['AOUT1'],[drv['AOUT1'].x-.15,drv['AOUT1'].y],step[4],width=.014) +pcb.connectD(drv['AOUT2'],[step.x+.33,drv['AOUT2'].y],step[3],width=.014) +pcb.connectD(drv['BOUT2'],[step.x+.33,drv['BOUT2'].y],step[2],width=.014) +pcb.connectD(drv['BOUT1'],[drv['BOUT1'].x-.06,drv['BOUT1'].y],step[1],width=.014) + +RA = R_2512(drv['ISENA'].x-.34,drv['ISENA'].y-.1,90,'RA\n200mOhm',label_size=.03) +pcb += RA +RB = R_2512(drv['ISENB'].x-.20,drv['ISENB'].y-.15,90,'RB\n200mOhm',label_size=.03) +pcb += RB +pcb.connectD(drv['ISENA'],[drv['ISENA'].x-.2,drv['ISENA'].y],RA[0],width=.014) +pcb.connectD(drv['ISENB'],[drv['ISENB'].x-.2,drv['ISENB'].y],RB[0],width=.014) +pcb.connectV(RA[1],RB[1],width=.06) +connectG(RA[1],-.05,-.06) + +pcb.connectH(drv['GND'],drv['GND3'],width=.014) +pcb.connectH(drv['GND2'],drv['GND3'],width=.014) +pcb.connectH(drv['MODE2'],drv['GND3'],width=.014) + +CP = C_1206(drv['CP1'].x-.015,drv['CP1'].y+.12,0,'.01uF') +pcb += CP +pcb.connectD(drv['CP2'],[drv['CP2'].x-.05,drv['CP2'].y],CP[1],width=.014) +pcb.connectD(drv['CP1'],CP[0],width=.014) + +pcb.connectD(drv['VMA'],[drv['VMA'].x-.12,drv['VMA'].y],[C_bulk['+'].x+.2,C_bulk['+'].y],C_bulk['+'],width=.014) + +RCP = R_1206(C_bulk['+'].x+.25,C_bulk['+'].y-.1,0,'1MOhm') +pcb += RCP +CCP = R_1206(RCP.x,RCP.y-.1,0,'.1uF') +pcb += CCP + +pcb.connectV(RCP[0],CCP[0],width=.05) +pcb.connectV(CCP[1],C_bulk['+'],width=.05) +pcb.connectD(drv['VCP'],[drv['VCP'].x-.08,drv['VCP'].y],CCP[0],width=.014) + +pcb.connectD(drv['MODE1'],[drv['MODE1'].x+.05,drv['MODE1'].y],[bc['A1'].x-.02,bc['A1'].y-.05],bc['A1'],width=.014) +pcb.connectD(drv['MODE0'],[drv['MODE0'].x+.08,drv['MODE0'].y],[bc['XL1'].x-.03,bc['XL1'].y-.09],bc['XL1'],width=.014) +pcb.connectD(drv['STEP'],[drv['STEP'].x+.11,drv['STEP'].y],[bc['XL2'].x-.05,bc['XL2'].y-.13],bc['XL2'],width=.014) +pcb.connectD(drv['DIR'],[drv['DIR'].x+.11,drv['DIR'].y],[bc['A0'].x-.07,bc['A0'].y-.17],bc['A0'],width=.014) +pcb.connectD(drv['nSLP'],[drv['nSLP'].x+.11,drv['nSLP'].y],[bc['P27'].x-.09,bc['P27'].y-.21],bc['P27'],width=.014) + +pcb.connectV(drv['nSLP'],drv['nRST'],width=.014) +pcb.connectV(drv['AVREF'],drv['BVREF'],width=.014) + +pcb.connectD(drv['VMB'],[drv['VMB'].x-.04,drv['VMB'].y],[RB.x+.1,RB.y-.2],[step.x+.3,RB.y-.2],[step.x+.15,step.y+.25],C_bulk['+'],width=.014) +pcb.connectD([RB.x+.1,RB.y-.18],[step.x+.3,RB.y-.2],[step.x+.15,step.y+.25],C_bulk['+'],width=.04) + +R_lp = R_1206(bc['P26'].x+.02,bc['P26'].y-.2,90,'Rlp') +pcb += R_lp +C_lp = R_1206(R_lp.x-.06,R_lp.y-.15,0,'Clp') +pcb += C_lp +pcb.connectV(R_lp[1],C_lp[0]) +pcb.connectV(bc['P26'],R_lp[0]) +pcb.connectD(drv['BVREF'],[drv['BVREF'].x-.05,drv['BVREF'].y],[drv['BVREF'].x-.07,drv.y-.2],[C_lp.x-.02,drv.y-.25],C_lp[0],width=.014) +pcb.connectD(drv['GND3'],[drv.x,drv.y-.15],[drv.x+.2,drv.y-.21],C_lp[1]) +connectG(drv['GND3'],0,.2,width=.05) +pcb.connectD(button[3],[button[3].x,button[3].y-.1],drv['GND3'],width=.04) + +cad.shapes = pcb.layout() +cad.shape = pcb.traces+(pcb.cutout-pcb.cutout) +#cad.shape = pcb.cutout+(pcb.traces-pcb.traces)