From 607f05c66a91fd6c8c09b39bb3b5ca3e6148fc10 Mon Sep 17 00:00:00 2001 From: Sam Calisch Date: Wed, 4 Oct 2017 08:29:27 -0400 Subject: [PATCH 1/5] Add new directory --- kokopelli/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 kokopelli/.gitkeep diff --git a/kokopelli/.gitkeep b/kokopelli/.gitkeep new file mode 100644 index 0000000..e69de29 -- GitLab From 6cce0301b2a94803997674dbf1aa9e8dc5661b35 Mon Sep 17 00:00:00 2001 From: Sam Calisch Date: Wed, 4 Oct 2017 08:30:47 -0400 Subject: [PATCH 2/5] Upload New File --- kokopelli/pcb.py | 988 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 988 insertions(+) create mode 100644 kokopelli/pcb.py diff --git a/kokopelli/pcb.py b/kokopelli/pcb.py new file mode 100644 index 0000000..7d4b139 --- /dev/null +++ b/kokopelli/pcb.py @@ -0,0 +1,988 @@ +import operator +from math import cos, sin, atan2, radians, degrees, sqrt + +import koko.lib.shapes2d as s2d +from koko.lib.text import text +from numpy import * + +class PCB(object): + def __init__(self, x0, y0, width, height, chamfer_distance=0): + self.x0 = x0 + self.y0 = y0 + self.width = width + self.height = height + + self.components = [] + self.connections = [] + self._cutout = None + self.custom_cutout = None + self.custom_layers = {} + self.chamfer_distance = chamfer_distance + + @property + def traces(self): + L = [c.pads for c in self.components if c.side == 0] + [c.traces[0] for c in self.connections] + if L: + t = reduce(operator.add, L) + #L = [c.holes for c in self.components if c.holes is not None] + #L.extend([c.holes for c in self.connections if c.holes is not None]) + #if L: + # t = t - reduce(operator.add,L) + return t + else: return None + @property + def traces_other_side(self): + L = [c.pads for c in self.components if c.side == 1] + [c.traces[1] for c in self.connections if c.traces[1] is not None] + if L: + t = reduce(operator.add, L) + #L = [c.holes for c in self.components if c.holes is not None] + #L.extend([c.holes for c in self.connections if c.holes is not None]) + #if L: + # t = t - reduce(operator.add,L) + return t + else: return None + @property + def holes(self): + L = [c.holes for c in self.components if c.holes is not None] + L.extend([c.holes for c in self.connections if c.holes is not None]) + if L: + t = reduce(operator.add,L) + return t + else: + return None + + @property + def part_labels_top(self): + L = [c.label for c in self.components if c.label is not None and c.side==0] + return reduce(operator.add, L) if L else None + @property + def part_labels_bot(self): + L = [c.label for c in self.components if c.label is not None and c.side==1] + return reduce(operator.add, L) if L else None + @property + def part_shadows_top(self): + L = [c.shadow_shape for c in self.components if c.shadow_shape is not None and c.side==0] + return reduce(operator.add, L) if L else None + @property + def part_shadows_bot(self): + L = [c.shadow_shape for c in self.components if c.shadow_shape is not None and c.side==1] + return reduce(operator.add, L) if L else None + @property + def pin_labels_top(self): + L = [c.pin_labels for c in self.components if c.pin_labels is not None and c.side==0] + return reduce(operator.add, L) if L else None + @property + def pin_labels_bot(self): + L = [c.pin_labels for c in self.components if c.pin_labels is not None and c.side==1] + return reduce(operator.add, L) if L else None + + @property + def cutout(self): + if self.custom_cutout is not None: + if self.holes: + return self.custom_cutout - self.holes + else: + return self.custom_cutout + outer = s2d.rectangle(self.x0, self.x0 + self.width, + self.y0, self.y0 + self.height) + if self.chamfer_distance: + c = self.chamfer_distance + c1 = s2d.triangle(self.x0,self.y0,self.x0,self.y0+c,self.x0+c,self.y0) + c2 = s2d.triangle(self.x0+self.width,self.y0+self.height, self.x0+self.width, self.y0+self.height-c, self.x0+self.width-c, self.y0+self.height) + c3 = s2d.triangle(self.x0,self.y0+self.height, self.x0+c, self.y0+self.height, self.x0, self.y0+self.height-c) + c4 = s2d.triangle(self.x0+self.width,self.y0, self.x0+self.width-c, self.y0, self.x0+self.width, self.y0+c) + outer -= c1+c2+c3+c4 + #L = [c.holes for c in self.components if c.holes is not None] + #L.extend([c.holes for c in self.connections if c.holes is not None]) + return outer - self.holes if self.holes else outer + + #@property + def layout(self,sides=[0,1]): + T = [] + if 0 in sides: + if self.part_labels_top: + T.append(s2d.color(self.part_labels_top, (125, 200, 60))) + if self.pin_labels_top: + T.append(s2d.color(self.pin_labels_top, (255, 90, 60))) + if self.traces: + T.append(s2d.color(self.traces-self.holes, (125, 90, 60))) + if self.part_shadows_top: + T.append(s2d.color(self.part_shadows_top-self.holes,(55,55,60))) + if 1 in sides: + if self.part_labels_bot: + T.append(s2d.color(self.part_labels_bot, (90, 60, 255))) + if self.pin_labels_bot: + T.append(s2d.color(self.pin_labels_bot, (175, 30, 175))) + if self.traces_other_side: + T.append(s2d.color(self.traces_other_side-self.holes, (90, 60, 125))) + if self.part_shadows_bot: + T.append(s2d.color(self.part_shadows_bot-self.holes,(45, 30, 62))) + + for v in sorted(self.custom_layers.values(),key=lambda v: -v['position']): + if v['visible']: T.append(s2d.color(v['layer'],v['color'])) + T.append(s2d.color(self.cutout, (35,35,40))) + return T + + + def __iadd__(self, rhs): + if isinstance(rhs, Component): + self.components.append(rhs) + elif isinstance(rhs, Connection): + self.connections.append(rhs) + else: + raise TypeError("Invalid type for PCB addition (%s)" % type(rhs)) + return self + + def add_custom_layer(self,name,layer,color): + self.custom_layers[name] = {'layer':layer,'color':color,'position':len(self.custom_layers),'visible':1} + def hide_layer(self,name): + self.custom_layers[name]['visible'] = 0 + + def connectH(self, *args, **kwargs): + ''' Connects a set of pins or points, traveling first + horizontally then vertically + ''' + width = kwargs['width'] if 'width' in kwargs else 0.016 + mode = kwargs['mode'] if 'mode' in kwargs else 'explicit' + sides = kwargs['sides'] if 'sides' in kwargs else [0 for a in args[:-1]] + new_sides = [] + points = [] + args = list(args) + for i,p in enumerate(args): + if not isinstance(p,BoundPin): + if mode=='diff': + args[i] = Point(args[i-1].x+p[0],args[i-1].y+p[1]) + elif mode=='explicit': + args[i] = Point(*p) + else: + raise NotImplementedError("Unknown mode type %s"%mode) + for A, B, s in zip(args[:-1], args[1:], sides): + points.append(A); new_sides.append(s) + if (A.x != B.x): + points.append(Point(B.x, A.y)); new_sides.append(s) + if A.y != B.y: points.append(B) + c = Connection(width, *points, sides=new_sides) + self.connections.append(c) + return c + + def connectV(self, *args, **kwargs): + ''' Connects a set of pins or points, travelling first + vertically then horizontally. + ''' + width = kwargs['width'] if 'width' in kwargs else 0.016 + mode = kwargs['mode'] if 'mode' in kwargs else 'explicit' + sides = kwargs['sides'] if 'sides' in kwargs else [0 for a in args[:-1]] + new_sides = [] + points = [] + args = list(args) + for i,p in enumerate(args): + if not isinstance(p,BoundPin): + if mode=='diff': + args[i] = Point(args[i-1].x+p[0],args[i-1].y+p[1]) + elif mode=='explicit': + args[i] = Point(*p) + else: + raise NotImplementedError("Unknown mode type %s"%mode) + for A, B, s in zip(args[:-1], args[1:], sides): + points.append(A); new_sides.append(s) + if (A.y != B.y): + points.append(Point(A.x, B.y)); new_sides.append(s) + if A.x != B.x: points.append(B) + c = Connection(width, *points, sides=new_sides) + self.connections.append(c) + return c + + def connectD(self, *args, **kwargs): + ''' Connects a set of pins or points, travelling first + diagonally then horizontally or vertically, depending on geometry. + ''' + width = kwargs['width'] if 'width' in kwargs else 0.016 + sides = kwargs['sides'] if 'sides' in kwargs else [0 for a in args[:-1]] + new_sides = [] + points = [] + def sgn(x): + if x>=0: + return 1 + else: + return -1 + args = list(args) + for i,p in enumerate(args): + if not isinstance(p,BoundPin): + args[i] = Point(*p) + for A, B, s in zip(args[:-1], args[1:], sides): + points.append(A); new_sides.append(s) + if (B.y-A.y != B.x-A.x): + if abs(B.y-A.y) > abs(B.x-A.x): + points.append(Point(B.x, A.y+sgn(B.y-A.y)*abs(B.x-A.x))); new_sides.append(s) + else: + points.append(Point(A.x+sgn(B.x-A.x)*abs(B.y-A.y),B.y)); new_sides.append(s) + if (A.x != B.x) or (A.y != B.y): points.append(B) + c = Connection(width, *points, sides=new_sides) + self.connections.append(c) + return c + + +################################################################################ + +class Component(object): + ''' Generic PCB component. + ''' + def __init__(self, x, y, rot=0, name='',label_size=0.05, side=0): + ''' Constructs a Component object + x X position + y Y position + rotation angle (degrees) + name String + side which side of board 0 for top, 1 for bottom + ''' + self.x = x + self.y = y + self.rot = rot + self.name = name + self.label_size = label_size + self.side = side + if self.side == 1: + self.pins = [p.mirror_x() for p in self.pins] + self.vias = [v.mirror_x() for v in self.vias] + + def __getitem__(self, i): + if isinstance(i, str): + try: + pin = [p for p in self.pins if p.name == i][0] + except IndexError: + raise IndexError("No pin with name %s" % i) + elif isinstance(i, int): + try: + pin = self.pins[i-1] + except IndexError: + raise IndexError("Pin %i is not in array" %i) + return BoundPin(pin, self) + + @property + def pads(self): + pads = reduce(operator.add, [p.pad for p in self.pins]) + return s2d.move(s2d.rotate(pads, self.rot), self.x, self.y) + + @property + def holes(self): + if self.vias: + holes = reduce(operator.add,[v.hole for v in self.vias]) + return s2d.move(s2d.rotate(holes,self.rot), self.x, self.y) + else: return None + + @property + def pin_labels(self): + L = [] + for p in self.pins: + p = BoundPin(p, self) + if p.pin.name: + t = s2d.rotate(text(p.pin.name, 0, 0, p.pin.label_size),self.rot+p.pin.label_rot) + L.append(s2d.move(t, p.x, p.y)) + return reduce(operator.add, L) if L else None + + @property + def label(self): + return text(self.name, self.x, self.y, self.label_size) + @property + def shadow_shape(self): + try: + return s2d.move(s2d.rotate(self.shadow, self.rot),self.x, self.y) + except AttributeError: + return None + +################################################################################ + +class Pin(object): + ''' PCB pin, with name, shape, and position + ''' + def __init__(self, x, y, shape, name='', label_size=.03, label_rot=0): + self.x = x + self.y = y + self.shape = shape + self.name = name + self.label_size = label_size + self.label_rot = label_rot + + @property + def pad(self): + return s2d.move(self.shape, self.x, self.y) + + def mirror_x(self): + return Pin( -self.x, self.y, self.shape, self.name, label_size=self.label_size, label_rot=self.label_rot ) + +################################################################################ + +class Via(object): + ''' PCB via, with shape, and position + ''' + def __init__(self, x, y, shape): + self.x = x + self.y = y + self.shape = shape + + @property + def hole(self): + return s2d.move(self.shape, self.x, self.y) + + def mirror_x(self): + return Via( -self.x, self.y, self.shape ) + +################################################################################ + +class BoundPin(object): + ''' PCB pin localized to a specific component + (so that it has correct x and y positions) + ''' + def __init__(self, pin, component): + self.pin = pin + self.component = component + + @property + def x(self): + return (cos(radians(self.component.rot)) * self.pin.x - + sin(radians(self.component.rot)) * self.pin.y + + self.component.x) + + @property + def y(self): + return (sin(radians(self.component.rot)) * self.pin.x + + cos(radians(self.component.rot)) * self.pin.y + + self.component.y) + @property + def point(self): + return Point(self.x,self.y) +################################################################################ + +class Point(object): + ''' Object with x and y member variables + ''' + def __init__(self, x, y): + self.x = x + self.y = y + def __iter__(self): + return iter([self.x, self.y]) + def __add__(self, p): + return Point(self.x+p.x,self.y+p.y) + def __sub__(self, p): + return Point(self.x-p.x,self.y-p.y) + def __rmul__(self,a): + return Point(a*self.x,a*self.y) + def magnitude(self): + return sqrt(self.x*self.x + self.y+self.y) + def normalized(self): + return Point(self.x/self.magnitude(), self.y/self.magnitude()) + @property + def point(self): + return self + +################################################################################ + +class Connection(object): + ''' Connects two pins via a series of intermediate points + ''' + def __init__(self, width, *args, **kwargs): + self.width = width + self.points = [ + a if isinstance(a, BoundPin) else Point(*a) for a in args + ] + self.sides = kwargs['sides'] if 'sides' in kwargs else [0 for a in args[:-1]] #0 is base side, 1 is other side + self.holes = None + self.jumpers = [] + + def add_jumper(self,p,rot=0,width=.12, height=.07,thick=.05): + self.jumpers.append((p,rot,width,height,thick)) + return self + + def cut_corners(self,idx): + for i in idx: + i,v = i #unpack index and distance + assert(i>0) #start corner numbering at 1 + assert(i dp: + self.points = self.points[:i] + \ + [Point(self.points[i].x-v/dm*(self.points[i].x-self.points[i-1].x ), self.points[i].y-v/dm*(self.points[i].y-self.points[i-1].y )), + Point(self.points[i].x+v/dp*(self.points[i+1].x-self.points[i].x ), self.points[i].y+v/dp*(self.points[i+1].y-self.points[i].y )) + ] + \ + self.points[i+1:] + self.sides.insert(i,self.sides[i]) + #else: + # self.points[i] = self.points[i] - dm/dp*(self.points[i]-self.points[i+1]) + return self + + @property + def traces(self): + #_pad_1206 = s2d.rectangle(-0.025, 0.025, -0.034, 0.034) + _pad_via = s2d.circle(0,0,.025) #s2d.rectangle(-0.025, 0.025, -0.025, 0.025) + _hole_via = s2d.circle(0,0,.016) + jumper_cuts = [] + jumper_pads = [] + for p,r,w,h,t in self.jumpers: + _jumper_pad = s2d.move(s2d.rectangle(-.5*t, .5*t, -.5*h, .5*h),-.5*w,0) + _jumper_pad += s2d.move(s2d.rectangle(-.5*t, .5*t, -.5*h, .5*h), .5*w,0) + _cut = s2d.rectangle(-.5*w,.5*w,-.5*h,.5*h) + jumper_cuts.append(s2d.move(s2d.rotate(_cut,r),p[0],p[1])) + jumper_pads.append(s2d.move(s2d.rotate(_jumper_pad,r),p[0],p[1])) + t = [[],[]] + for p1, p2, side in zip(self.points[:-1], self.points[1:], self.sides): + d = sqrt((p1.x - p2.x)**2 + (p1.y - p2.y)**2) + if p2 != self.points[-1]: + d += self.width/2 + a = atan2(p2.y - p1.y, p2.x - p1.x) + r = s2d.rounded_rectangle(0, d, -self.width/2, self.width/2,1.) + t[side].append(s2d.move(s2d.rotate(r, degrees(a)), p1.x, p1.y)) + try: + result0 = reduce(operator.add, t[0]) + except TypeError: + result0 = None + try: + result1 = reduce(operator.add, t[1]) + except TypeError: + result1 = None + #calculate locations for via holes and pads + for s1,s2,p in zip(self.sides[:-1],self.sides[1:],self.points[1:-1]): + if s1!=s2: + result0 += s2d.move(_pad_via,p.x,p.y) + result1 += s2d.move(_pad_via,p.x,p.y) + self.holes += s2d.move(_hole_via,p.x,p.y) + if len(self.jumpers)!=0: + result0 -= reduce(operator.add,jumper_cuts) + result0 += reduce(operator.add,jumper_pads) + return result0, result1 + +################################################################################ +# Discrete passive components +################################################################################ + +_pad_1206 = s2d.rectangle(-0.032, 0.032, -0.034, 0.034) + +class R_1206(Component): + ''' 1206 Resistor + ''' + pins = [Pin(-0.06, 0, _pad_1206), Pin(0.06, 0, _pad_1206)] + prefix = 'R' + vias = [] + + +class C_1206(Component): + ''' 1206 Capacitor + ''' + pins = [Pin(-0.06, 0, _pad_1206), Pin(0.06, 0, _pad_1206)] + prefix = 'C' + vias = [] + +_pad_0805 = s2d.rectangle(-.023,.023, -.027, .027) + +class R_0805(Component): + ''' 0805 Resistor + ''' + pins = [Pin(-0.04, 0, _pad_0805), Pin(0.04, 0, _pad_0805)] + prefix = 'R' + vias = [] + + +class C_0805(Component): + ''' 0805 Capacitor + ''' + pins = [Pin(-0.04, 0, _pad_0805), Pin(0.04, 0, _pad_0805)] + prefix = 'C' + vias = [] + + +_pad_SJ = s2d.rectangle(-0.02, 0.02, -0.03, 0.03) +class SJ(Component): + ''' Solder jumper + ''' + pins = [Pin(-0.029, 0, _pad_SJ), Pin(0.029, 0, _pad_SJ)] + prefix = 'SJ' + vias = [] + +_pad_SOD_123 = s2d.rectangle(-0.02, 0.02, -0.024, 0.024) +class D_SOD_123(Component): + ''' Diode + ''' + pins = [Pin(-0.07, 0, _pad_SOD_123, 'A'), + Pin(0.07, 0, _pad_SOD_123, 'C')] + prefix = 'D' + vias = [] + + +################################################################################ +# Connectors +################################################################################ + +_pad_USB_trace = s2d.rectangle(-0.0075, 0.0075, -0.04, 0.04) +_pad_USB_foot = s2d.rectangle(-0.049, 0.049, -0.043, 0.043) +class USB_mini_B(Component): + ''' USB mini B connector + Hirose UX60-MB-5ST + ''' + pins = [ + Pin(0.063, 0.24, _pad_USB_trace, 'G'), + Pin(0.0315, 0.24, _pad_USB_trace), + Pin(0, 0.24, _pad_USB_trace, '+'), + Pin(-0.0315, 0.24, _pad_USB_trace, '-'), + Pin(-0.063, 0.24, _pad_USB_trace, 'V'), + + Pin( 0.165, 0.21, _pad_USB_foot), + Pin(-0.165, 0.21, _pad_USB_foot), + Pin( 0.165, 0.0, _pad_USB_foot), + Pin(-0.165, 0.0, _pad_USB_foot) + ] + prefix = 'J' + vias = [] + +_pad_header = s2d.rectangle(-0.06, 0.06, -0.025, 0.025) +_pad_header_skinny = s2d.rectangle(-0.06, 0.06, -0.020, 0.020) +class Header_4(Component): + ''' 4-pin header + fci 95278-101a04lf bergstik 2x2x0.1 + ''' + pins = [ + Pin(-0.107, 0.05, _pad_header), + Pin(-0.107, -0.05, _pad_header), + Pin( 0.107, -0.05, _pad_header), + Pin( 0.107, 0.05, _pad_header) + ] + prefix = 'J' + vias = [] + +class Header_4_skinny(Component): + ''' 4-pin header + fci 95278-101a04lf bergstik 2x2x0.1 + ''' + pins = [ + Pin(-0.107, 0.05, _pad_header_skinny), + Pin(-0.107, -0.05, _pad_header_skinny), + Pin( 0.107, -0.05, _pad_header_skinny), + Pin( 0.107, 0.05, _pad_header_skinny) + ] + prefix = 'J' + vias = [] + +class Header_Power(Component): + ''' 4-pin header + fci 95278-101a04lf bergstik 2x2x0.1 + ''' + pins = [ + Pin(-0.107, 0.05, _pad_header,"V"), + Pin(-0.107, -0.05, _pad_header,"GND"), + Pin( 0.107, -0.05, _pad_header), + Pin( 0.107, 0.05, _pad_header) + ] + prefix = 'J' + vias = [] + +class Header_ISP(Component): + ''' ISP programming header + FCI 95278-101A06LF Bergstik 2x3x0.1 + ''' + pins = [ + Pin(-0.107, 0.1, _pad_header, 'GND'), + Pin(-0.107, 0, _pad_header, 'MOSI'), + Pin(-0.107, -0.1, _pad_header, 'V'), + Pin( 0.107, -0.1, _pad_header, 'MISO'), + Pin( 0.107, 0, _pad_header, 'SCK'), + Pin( 0.107, 0.1, _pad_header, 'RST') + ] + prefix = 'J' + vias = [] + +class Header_ISP_skinny(Component): + ''' ISP programming header + FCI 95278-101A06LF Bergstik 2x3x0.1 + ''' + pins = [ + Pin(-0.107, 0.1, _pad_header_skinny, 'GND'), + Pin(-0.107, 0, _pad_header_skinny, 'MOSI'), + Pin(-0.107, -0.1, _pad_header_skinny, 'V'), + Pin( 0.107, -0.1, _pad_header_skinny, 'MISO'), + Pin( 0.107, 0, _pad_header_skinny, 'SCK'), + Pin( 0.107, 0.1, _pad_header_skinny, 'RST') + ] + prefix = 'J' + vias = [] + #shadow = s2d.rectangle(-.06,8/25.4,-.325,.325) + + +class Header_FTDI(Component): + ''' FTDI cable header + ''' + pins = [ + Pin(0, 0.25, _pad_header, 'GND'), + Pin(0, 0.15, _pad_header, 'CTS'), + Pin(0, 0.05, _pad_header, 'VCC'), + Pin(0, -0.05, _pad_header, 'TX'), + Pin(0, -0.15, _pad_header, 'RX'), + Pin(0, -0.25, _pad_header, 'RTS') + ] + prefix = 'J' + vias = [] + shadow = s2d.rectangle(-.06,8/25.4,-.325,.325) + +class Header_FTDI_skinny(Component): + ''' FTDI cable header + ''' + pins = [ + Pin(0, 0.25, _pad_header_skinny, 'GND'), + Pin(0, 0.15, _pad_header_skinny, 'CTS'), + Pin(0, 0.05, _pad_header_skinny, 'VCC'), + Pin(0, -0.05, _pad_header_skinny, 'TX'), + Pin(0, -0.15, _pad_header_skinny, 'RX'), + Pin(0, -0.25, _pad_header_skinny, 'RTS') + ] + prefix = 'J' + vias = [] + shadow = s2d.rectangle(-.06,8/25.4,-.325,.325) + + +class ScrewTerminal(Component): + pitch = .131 + _pad = s2d.rectangle(-0.04, 0.04, -0.04, 0.04) + _via = s2d.circle(0,0,.025) + pins = [Pin(-.5*pitch,0,_pad),Pin(.5*pitch,0,_pad)] + vias = [Via(-.5*pitch,0,_via),Via(.5*pitch,0,_via)] + shadow = s2d.rectangle(-3.5/25.4,3.5/25.4,-3/25.4,3/25.4) + +class ScrewTerminal3(Component): + pitch = .131 + _pad = s2d.rectangle(-0.04, 0.04, -0.04, 0.04) + _via = s2d.circle(0,0,.025) + pins = [Pin(-pitch,0,_pad),Pin(0,0,_pad),Pin(pitch,0,_pad)] + vias = [Via(-pitch,0,_via),Via(0,0,_via),Via(pitch,0,_via)] + shadow = s2d.rectangle(-5.35/25.4,5.35/25.4,-3/25.4,3/25.4) + +class JST_2(Component): + pitch = 2./25.4 + _pad = s2d.rectangle(-0.5/25.4,0.5/25.4, -1.75/25.4, 1.75/25.4) + _pad2 = s2d.rectangle(-.75/25.4,.75/25.4,-1.7/25.4,1.7/25.4) + y2 = -4.55/25.4 + pins = [Pin(-.5*pitch,0,_pad,'VCC'),Pin(.5*pitch,0,_pad,'GND'),Pin(-.5*pitch-2.35/25.4,y2,_pad2),Pin(.5*pitch+2.35/25.4,y2,_pad2)] + vias = [] + shadow = s2d.rectangle(-3.95/25.4,3.95/25.4,y2-1.7/25.4,1.75/25.4) + +################################################################################ +# SOT-23 components +################################################################################ + +_pad_SOT23 = s2d.rectangle(-.02,.02,-.012,.012) +class NMOS_SOT23(Component): + ''' NMOS transistor in SOT23 package + Fairchild NDS355AN + ''' + pins = [ + Pin(0.045, -0.0375, _pad_SOT23,'G'), + Pin(0.045, 0.0375, _pad_SOT23,'S'), + Pin(-0.045, 0, _pad_SOT23,'D') + ] + prefix = 'Q' + vias = [] + +class PMOS_SOT23(Component): + ''' PMOS transistor in SOT23 package + Fairchild NDS356AP + ''' + pins = [ + Pin(-0.045, -0.0375, _pad_SOT23,'G'), + Pin(-0.045, 0.0375, _pad_SOT23,'S'), + Pin(0.045, 0, _pad_SOT23,'D') + ] + prefix = 'Q' + vias = [] + +class Regulator_SOT23(Component): + ''' SOT23 voltage regulator + ''' + pins = [ + Pin(-0.045, -0.0375, _pad_SOT23,'Out'), + Pin(-0.045, 0.0375, _pad_SOT23,'In'), + Pin(0.045, 0, _pad_SOT23,'GND') + ] + prefix = 'U' + vias = [] + +class Regulator_LM3480(Component): + ''' SOT23 voltage regulator, LM3480 + ''' + 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 = [] + +########### +# H Bridge +############ +_pad_SOIC = s2d.rectangle(-.041,.041,-.015,.015) +class A4953_SOICN(Component): + pins = [ + Pin(-.11, .075,_pad_SOIC+s2d.circle(-.041,0,.015),"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 = [] + + +################################################################################ +# Clock crystals +################################################################################ +_pad_XTAL_NX5032GA = s2d.rectangle(-.039,.039,-.047,.047) + +class XTAL_NX5032GA(Component): + pins = [Pin(-0.079, 0, _pad_XTAL_NX5032GA), + Pin(0.079, 0, _pad_XTAL_NX5032GA)] + prefix = 'X' + vias = [] + +################################################################################ +# Atmel microcontrollers +################################################################################ + +_pad_SOIC = s2d.rectangle(-0.041, 0.041, -0.015, 0.015) +class ATtiny45_SOIC(Component): + pins = [] + y = 0.075 + for t in ['NC', 'PB3', 'PB4', 'GND']: + pins.append(Pin(-0.14, y, _pad_SOIC, t)) + y -= 0.05 + for p in ['PB0', 'PB1', 'PB2', 'VCC']: + y += 0.05 + pins.append(Pin(0.14, y, _pad_SOIC, p)) + del y + prefix = 'U' + vias = [] + +class ATtiny44_SOIC(Component): + pins = [] + y = 0.15 + for t in ['VCC', 'PB0', 'PB1', 'PB3', 'PB2', 'PA7', 'PA6']: + pad = _pad_SOIC + s2d.circle(-0.041, 0, 0.015) if t == 'VCC' else _pad_SOIC + pins.append(Pin(-0.12, y, pad, t)) + y -= 0.05 + for t in ['PA5', 'PA4', 'PA3', 'PA2', 'PA1', 'PA0', 'GND']: + y += 0.05 + pins.append(Pin(0.12, y, _pad_SOIC, t)) + prefix = 'U' + vias = [] + +_pad_TQFP_h = s2d.rectangle(-0.025, 0.025, -0.008, 0.008) +_pad_TQFP_v = s2d.rectangle(-0.008, 0.008, -0.025, 0.025) + +class ATmega88_TQFP(Component): + pins = [] + y = 0.1085 + for t in ['PD3', 'PD4', 'GND', 'VCC', 'GND', 'VCC', 'PB6', 'PB7']: + pins.append(Pin(-0.18, y, _pad_TQFP_h, t)) + y -= 0.031 + x = -0.1085 + for t in ['PD5', 'PD6', 'PD7', 'PB0', 'PB1', 'PB2', 'PB3', 'PB4']: + pins.append(Pin(x, -0.18, _pad_TQFP_v, t)) + x += 0.031 + y = -0.1085 + for t in ['PB5', 'AVCC', 'ADC6', 'AREF', 'GND', 'ADC7', 'PC0', 'PC1']: + pins.append(Pin(0.18, y, _pad_TQFP_h, t)) + y += 0.031 + x = 0.1085 + for t in ['PC2', 'PC3', 'PC4', 'PC5', 'PC6', 'PD0', 'PD1', 'PD2']: + pins.append(Pin(x, 0.18, _pad_TQFP_v, t)) + x -= 0.031 + del x, y + prefix = 'U' + vias = [] + + +################################################################################ +# CBA logo +################################################################################ +_pin_circle_CBA = s2d.circle(0, 0, 0.02) +_pin_square_CBA = s2d.rectangle(-0.02, 0.02, -0.02, 0.02) +class CBA(Component): + pins = [] + for i in range(3): + for j in range(3): + pin = _pin_circle_CBA if i == 2-j and j >= 1 else _pin_square_CBA + pins.append(Pin(0.06*(i-1), 0.06*(j-1), pin)) + vias = [] + + + +class ESP8266_03(Component): + _pad = s2d.rectangle(-0.04, 0.04, -0.03, 0.03) + _via = s2d.circle(0,0,.019) + names = ['VCC','GPIO14','GPIO12','GPIO13','GPIO15','GPIO2','GPIO0', + 'WIFI_ANT','CH-PD','GPIO18','URXD','UTXD','NC','GND'] + w = 12.2/25.4 + l = 17.4/25.4 + wp = 12.2/25.4 + lp = .5 + dp = 2/25.4 + ys = arange(.5*lp-dp ,-.5*lp-.001-dp,-dp) + pts = vstack(( dstack((-.5*wp*ones_like(ys),ys))[0], dstack((.5*wp*ones_like(ys),ys))[0] )) + pins = [Pin(p[0],p[1],_pad,n) for n,p in zip(names,pts)] + vias = []#[Via(p[0],p[1],_via) for n,p in zip(names,pts)] + shadow = s2d.rectangle(-.5*w,.5*w,-.5*l,.5*l) + prefix = 'IC' + +class ZLDO1117(Component): + '''3.3 V 1 A regulator, SOT223''' + _pad1 = s2d.rectangle(-.6/25.4,.6/25.4,-.8/25.4,.8/25.4) + _pad2 = s2d.rectangle(-1.65/25.4,1.65/25.4,-.6/25.4,.6/25.4) + pins = [ + Pin(-2.3/25.4, -3.2/25.4, _pad1,'GND'), + Pin(0, -3.2/25.4, _pad1,'Vout'), + Pin(2.3/25.4, -3.2/25.4, _pad1,'Vin'), + Pin(0, 3.2/25.4, _pad2,'Vout2'), + ] + prefix = 'U' + vias = [] + +class AstarMicro(Component): + ''' Polulo Astar micro + ''' + _pad = s2d.rectangle(-0.04, 0.04, -0.025, 0.025) + _via = s2d.circle(0,0,.019) + #flip names since through hole + names = [ + 'VIN','GND','5V','3v3','RST','12/A11/PWM','11','10/A10/PWM','A1','A0', + '9/A9/PWM','8/A8','7','6/A7/PWM','5/PWM','4/A6','3/PWM','2','1','0'] + w = .6 + l = 1. + wp = .5 + lp = .9 + ys = arange(.5*lp,-.5*lp-.001,-.1) + os = 0*.13*(arange(shape(ys)[0])%2-.5) + pts = vstack(( dstack((-.5*wp*ones_like(ys)+os,ys[::-1]))[0], dstack((.5*wp*ones_like(ys)-os,ys))[0] )) + pins = [Pin(p[0],p[1],_pad,n) for n,p in zip(names,pts)] + vias = [Via(p[0],p[1],_via) for n,p in zip(names,pts)] + shadow = s2d.rectangle(-.5*w,.5*w,-.5*l,.5*l) + prefix = 'IC' + +class Header_bldc_skinny(Component): + ''' brushless motor logic + ''' + _pad_header_skinny = s2d.rectangle(-0.06, 0.06, -0.020, 0.020) + pins = [ + Pin(0, 0.1, _pad_header_skinny, 'GND'), + Pin(0, -0.0, _pad_header_skinny, 'VCC'), + Pin(0, -0.1, _pad_header_skinny, 'RC') + ] + prefix = 'J' + shadow = s2d.rectangle(-.06,8/25.4,-.325,.325) + vias = [] + + +class A4988_Carrier(Component): + ''' Stepper driver carrier black from pololu + ''' + _pad = s2d.rectangle(-0.04, 0.04, -0.028, 0.028) + _via = s2d.circle(0,0,.019) + names = ['VMOT','GMOT','2B','2A','1A','1B','VDD','GND','DIR','STEP','SLP','RST','MS3','MS2','MS1','EN'] + ys = arange(.4,-.4+.001,-.1)-.05 + pts = vstack(( dstack((-.25*ones_like(ys),ys))[0], dstack((.25*ones_like(ys),ys[::-1]))[0] )) + pins = [Pin(p[0],p[1],_pad,n) for n,p in zip(names,pts)] + vias = [Via(p[0],p[1],_via) for n,p in zip(names,pts)] + prefix = 'IC' + shadow = s2d.rectangle(-.3,.3,-.45,.45) + + + + +class CDRH2D18(Component): + '''Power Inductor''' + def chamfered_rectangle(x0,x1,y0,y1,c): + r = s2d.rectangle(x0,x1,y0,y1) + c1 = s2d.triangle(x0,y0,x0,y0+c,x0+c,y0) + c2 = s2d.triangle(x1,y1, x1, y1-c, x1-c, y1) + c3 = s2d.triangle(x0,y1, x0+c, y1, x0, y1-c) + c4 = s2d.triangle(x1,y0, x1-c, y0, x1, y0+c) + return r-c1-c2-c3-c4 + _pad = s2d.rectangle(-.65/25.4,.65/25.4,-.65/25.4,.65/25.4) + pins = [Pin(-1.5/25.5,0,_pad), Pin(1.5/25.5,0,_pad)] + vias = [] + shadow = s2d.rotate(chamfered_rectangle(-1.5/25.4,1.5/25.4,-1.5/25.4, 1.5/25.4,1/25.5),45) + prefix='I' + +class LTC35881(Component): + ''' Energy Scavenger ''' + _pad = s2d.rectangle(-.889/2/25.4, .889/2/25.4,-.25/2/25.4, .25/2/25.4) + p = .5/25.4 + pins = [ + Pin(0, 0, s2d.rectangle(-1.68/2/25.4,1.68/2/25.4,-1.88/2/25.4,1.88/2/25.4), 'GND'), + Pin(-2.1/25.4, 2*p,_pad,'PZ1',label_size=.015,label_rot=0), + Pin(-2.1/25.4, 1*p,_pad,'PZ2',label_size=.015,label_rot=0), + Pin(-2.1/25.4, 0,_pad,'CAP',label_size=.015,label_rot=0), + Pin(-2.1/25.4,-1*p,_pad,'VIN',label_size=.015,label_rot=0), + Pin(-2.1/25.4,-2*p,_pad,'SW',label_size=.015,label_rot=0), + Pin(2.1/25.4, -2*p,_pad,'VOUT',label_size=.015,label_rot=0), + Pin(2.1/25.4, -1*p,_pad,'VIN2',label_size=.015,label_rot=0), + Pin(2.1/25.4, 0,_pad,'D1',label_size=.015,label_rot=0), + Pin(2.1/25.4, 1*p,_pad,'D0',label_size=.015,label_rot=0), + Pin(2.1/25.4, 2*p,_pad,'PGOOD',label_size=.015,label_rot=0) + ] + prefix = 'J' + h = 2.9/25.4; w = 2.8/25.4; + shadow = s2d.rectangle(-.5*w,.5*w,-.5*h,.5*h) + vias = [] + +class DSK414(Component): + '''Dynacap, ELNA, 220mF''' + pins = [ + Pin(0,5.15/25.4, s2d.rectangle(-2.4/25.4,2.4/25.4,-1./25.4,1/25.4),'+'), + Pin(0,-5/25.4, s2d.rectangle(-2/25.4,2/25.4,-.85/25.4,.81/25.4),'-') + ] + vias = [] + shadow = s2d.rectangle(-2.5/25.4,2.5/25.4,-5.85/25.4, 6.15/25.4) + shadow += s2d.circle(0,0,3.4/25.4) + prefix='C' + +class EECRG(Component): + '''Panasonic 1F, 3.6 V''' + _pad = s2d.rectangle(-.02,.02,-.035,.035) + pins = [ + Pin(-10/25.4, 0, _pad), + Pin(10/25.4, 0, _pad) + ] + _via = s2d.rectangle(-.1/25.4,.1/25.4,-.5/25.4,.5/25.4) + vias = [Via(p.x,p.y,_via) for p in pins] + shadow = s2d.rectangle(0,0,0,0) + prefix='C' + +class EEE1EA101XP(Component): + '''Panasonic 100uF, 25V''' + _pad = s2d.rectangle(-.6/25.4,.6/25.4,-1.35/25.4,1.35/25.4) + pins = [ + Pin(0, 2.2/25.4, _pad), + Pin(0, -2.2/25.4, _pad) + ] + #_via = s2d.rectangle(-.1/25.4,.1/25.4,-.5/25.4,.5/25.4) + vias = [] + def half_chamfered_rectangle(x0,x1,y0,y1,c): + r = s2d.rectangle(x0,x1,y0,y1) + c1 = s2d.triangle(x0,y0,x0,y0+c,x0+c,y0) + c2 = s2d.triangle(x1,y1, x1, y1-c, x1-c, y1) + c3 = s2d.triangle(x0,y1, x0+c, y1, x0, y1-c) + c4 = s2d.triangle(x1,y0, x1-c, y0, x1, y0+c) + return r-c1-c4 + shadow = half_chamfered_rectangle(-3.3/25.4,3.3/25.4,-3.3/25.4,3.3/25.4,1/25.4) + prefix='C' + + +def chamfered_rectangle(x0,x1,y0,y1,c): + r = s2d.rectangle(x0,x1,y0,y1) + c1 = s2d.triangle(x0,y0,x0,y0+c,x0+c,y0) + c2 = s2d.triangle(x1,y1, x1, y1-c, x1-c, y1) + c3 = s2d.triangle(x0,y1, x0+c, y1, x0, y1-c) + c4 = s2d.triangle(x1,y0, x1-c, y0, x1, y0+c) + return r-c1-c2-c3-c4 + -- GitLab From 1c29a49359adf01c1e6b0d00e5b89de5485161a2 Mon Sep 17 00:00:00 2001 From: Sam Calisch Date: Wed, 4 Oct 2017 08:36:29 -0400 Subject: [PATCH 3/5] Add new file --- kokopelli/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 kokopelli/README.md diff --git a/kokopelli/README.md b/kokopelli/README.md new file mode 100644 index 0000000..20dda27 --- /dev/null +++ b/kokopelli/README.md @@ -0,0 +1,10 @@ +Kokopelli is an old (but great) project from Matt Keeter. Its a full-blown CAD program, but it can be used for designing PCBs. The programmatic interface makes it easy to set up relationships between components, traces, etc. and you can toolpath for the circuit mill right in kokopelli. + +To use it, clone it from github: https://github.com/mkeeter/kokopelli and install with the makefile. + +I've added a couple small utilities to Matt's original PCB design library. If you'd like to use them, you can replace the existing koko/lib/pcb.py with pcb.py and reinstall. + +A fun example using several of the included features is a stepper driver board I designed: step.ko. + + + -- GitLab From 3684cdead5dd6ca1094fb8ebfd8dd4c80e27ca3d Mon Sep 17 00:00:00 2001 From: Sam Calisch Date: Wed, 4 Oct 2017 08:37:59 -0400 Subject: [PATCH 4/5] Upload New File --- kokopelli/servo-stepper-v1-layout.png | Bin 0 -> 90167 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 kokopelli/servo-stepper-v1-layout.png diff --git a/kokopelli/servo-stepper-v1-layout.png b/kokopelli/servo-stepper-v1-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..3f137754d7cc072de17008228bd37f4aa9c34d89 GIT binary patch literal 90167 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 Date: Wed, 4 Oct 2017 08:39:04 -0400 Subject: [PATCH 5/5] Update README.md --- kokopelli/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kokopelli/README.md b/kokopelli/README.md index 20dda27..2e9e9dd 100644 --- a/kokopelli/README.md +++ b/kokopelli/README.md @@ -4,7 +4,7 @@ To use it, clone it from github: https://github.com/mkeeter/kokopelli and instal I've added a couple small utilities to Matt's original PCB design library. If you'd like to use them, you can replace the existing koko/lib/pcb.py with pcb.py and reinstall. -A fun example using several of the included features is a stepper driver board I designed: step.ko. - +A fun example using several of the included features is a stepper driver board I designed: + -- GitLab