Add PCB definition to Ergogen config; add custom footprints
This commit is contained in:
parent
9cba8a85d1
commit
97c06871bf
|
|
@ -24,6 +24,9 @@ units:
|
|||
|
||||
# Define the points (i.e. keys)
|
||||
points:
|
||||
key:
|
||||
tags: [ is_key ]
|
||||
|
||||
zones:
|
||||
pad:
|
||||
# Set anchor to fix placement on KiCad sheet
|
||||
|
|
@ -33,28 +36,79 @@ points:
|
|||
# Key rows (from bottom to top)
|
||||
rows:
|
||||
one:
|
||||
row_net: P9
|
||||
two:
|
||||
row_net: P8
|
||||
tags: [ is_key, flip_led ]
|
||||
three:
|
||||
row_net: P7
|
||||
four:
|
||||
row_net: P6
|
||||
tags: [ is_key, flip_led ]
|
||||
five:
|
||||
row_net: P5
|
||||
|
||||
# Key columns (from left to right)
|
||||
columns:
|
||||
one:
|
||||
key.column_net: P18
|
||||
rows.one.led_din_net: led_dout_two_one
|
||||
rows.two.led_din_net: led_dout_one_three
|
||||
rows.three.led_din_net: led_dout_two_three
|
||||
rows.four.led_din_net: led_dout_one_five
|
||||
rows.five.led_din_net: led_dout_two_five
|
||||
two:
|
||||
key.column_net: P15
|
||||
rows.one.led_din_net: led_dout_three_one
|
||||
rows.two.led_din_net: led_dout_one_two
|
||||
rows.three.led_din_net: led_dout_three_three
|
||||
rows.four.led_din_net: led_dout_one_four
|
||||
rows.five.led_din_net: led_dout_three_five
|
||||
three:
|
||||
key.column_net: P14
|
||||
rows.one.led_din_net: led_dout_four_one
|
||||
rows.two.led_din_net: led_dout_two_two
|
||||
rows.three.led_din_net: led_dout_four_three
|
||||
rows.four.led_din_net: led_dout_two_four
|
||||
rows.five.led_din_net: led_dout_four_five
|
||||
four:
|
||||
key.column_net: P16
|
||||
rows.one.led_din_net: led_dout_five_one
|
||||
rows.two.led_din_net: led_dout_three_two
|
||||
rows.three.led_din_net: led_dout_five_three
|
||||
rows.four.led_din_net: led_dout_three_four
|
||||
rows.five.led_din_net: P19
|
||||
five:
|
||||
rows.five.skip: true
|
||||
key.column_net: P10
|
||||
rows.one.led_din_net: led_dout_five_two
|
||||
rows.two.led_din_net: led_dout_four_two
|
||||
rows.three.led_din_net: led_dout_four_five
|
||||
rows.four.led_din_net: led_dout_four_four
|
||||
# Upper right corner: Rotary encoder instead of key
|
||||
rows.five:
|
||||
width: 20.5
|
||||
height: 20.5
|
||||
shift: [ 1.5, 2 ]
|
||||
tags: [ is_rotary_encoder ]
|
||||
|
||||
# Generate outlines that can be used in the PCB and for 3D models
|
||||
outlines:
|
||||
# Outline of the key caps (like the demo preview; used for debugging)
|
||||
_keys:
|
||||
# Outline of the key caps
|
||||
keys:
|
||||
- what: rectangle
|
||||
where: true
|
||||
where: is_key
|
||||
size: [ cx-1, cy-1 ]
|
||||
|
||||
# Rotary encoder with knob (2cm)
|
||||
# TODO: Not sure about the size and position yet
|
||||
rotary_encoder:
|
||||
- what: rectangle
|
||||
operation: stack
|
||||
size: [ 14, 14 ]
|
||||
- what: circle
|
||||
operation: stack
|
||||
radius: 10
|
||||
|
||||
# Maximum size of PCB (100x100mm to keep it cheap) for visualization
|
||||
_max_outline:
|
||||
- what: rectangle
|
||||
|
|
@ -70,22 +124,22 @@ outlines:
|
|||
adjust.shift: [ 0, 50 - 0.5cx ]
|
||||
fillet: 4
|
||||
|
||||
# Debug version of board with key caps for visualization
|
||||
board_debug:
|
||||
# Preview version of board with key caps and components for visualization
|
||||
board_preview:
|
||||
- board
|
||||
- ^keys
|
||||
- ^_max_outline
|
||||
- ^_keys
|
||||
# Pro Micro board
|
||||
- what: rectangle
|
||||
operation: stack
|
||||
where: pad_five_four
|
||||
size: [ 18, 32 ]
|
||||
adjust.shift: [ 0, cy + 5 ]
|
||||
# Rotary encoder
|
||||
- what: rectangle
|
||||
operation: stack
|
||||
where: pad_five_five
|
||||
size: [ 14, 14 ]
|
||||
size: [ 18, 32 ]
|
||||
adjust.shift: [ 0, 5 ]
|
||||
# Rotary encoder (component)
|
||||
- what: outline
|
||||
name: rotary_encoder
|
||||
operation: stack
|
||||
where: is_rotary_encoder
|
||||
|
||||
# Cutouts for the switches
|
||||
switch_cutouts:
|
||||
|
|
@ -97,3 +151,93 @@ outlines:
|
|||
switch_plate:
|
||||
- board
|
||||
- -switch_cutouts
|
||||
|
||||
# Generate the PCB
|
||||
pcbs:
|
||||
eepypad:
|
||||
outlines:
|
||||
main:
|
||||
outline: board
|
||||
|
||||
footprints:
|
||||
choc_hotswap:
|
||||
what: choc_pretty
|
||||
where: is_key
|
||||
# Rotate footprint so that the hotswap socket is at the bottom and the LED can be at the top
|
||||
adjust.rotate: 180
|
||||
params:
|
||||
keycaps: true
|
||||
hotswap: true
|
||||
from: "{{column_net}}"
|
||||
to: "{{colrow}}"
|
||||
|
||||
# TODO: Check if the position of the rotary encoder fits with the controller board
|
||||
rotary_encoder:
|
||||
what: rotary
|
||||
where: is_rotary_encoder
|
||||
adjust.rotate: 90
|
||||
params:
|
||||
from: "{{column_net}}"
|
||||
to: "{{colrow}}"
|
||||
# TODO: Set these to GPIO pins
|
||||
A: "rotary_encoder_a"
|
||||
B: "rotary_encoder_b"
|
||||
C: "rotary_encoder_c"
|
||||
|
||||
diode:
|
||||
what: diode_smd
|
||||
where: is_key
|
||||
# TODO: Is this a good position? Might be a bit too close to the hotswap sockets...
|
||||
adjust:
|
||||
shift: [ -8.28, -8.5 ]
|
||||
rotate: 90
|
||||
params:
|
||||
side: B
|
||||
from: "{{colrow}}"
|
||||
to: "{{row_net}}"
|
||||
|
||||
diode_rotary_encoder:
|
||||
$extends: pcbs.eepypad.footprints.diode
|
||||
where: is_rotary_encoder
|
||||
adjust.shift: [ 0, 0 ]
|
||||
|
||||
led_pixel:
|
||||
what: sk6812_mini_e
|
||||
# Place unrotated LEDs in all rows without the flip_led tag
|
||||
where: [ [ is_key, -flip_led ] ]
|
||||
# Position LEDs on the LED hole in the Choc switches
|
||||
adjust.shift: [ 0, 4.7 ]
|
||||
params:
|
||||
side: B
|
||||
din: "{{led_din_net}}"
|
||||
dout: "led_dout_{{colrow}}"
|
||||
|
||||
led_pixel_flipped:
|
||||
$extends: pcbs.eepypad.footprints.led_pixel
|
||||
# Place flipped (rotated by 180°) LEDs in all rows *with* the flip_led tag
|
||||
where: [ [ is_key, flip_led ] ]
|
||||
adjust.rotate: 180
|
||||
|
||||
# TODO: Decoupling capacitors for the LEDs?
|
||||
|
||||
controller:
|
||||
what: promicro_modified
|
||||
where:
|
||||
ref: pad_five_five
|
||||
rotate: -90
|
||||
shift: [ 0, 2 ]
|
||||
params:
|
||||
orientation: down
|
||||
|
||||
reset_button:
|
||||
# TODO: Check if the footprint fits to the buttons we ordered
|
||||
what: button
|
||||
where:
|
||||
ref: pad_four_five
|
||||
shift: [ 0, 15 ]
|
||||
params:
|
||||
side: B
|
||||
from: GND
|
||||
to: RST
|
||||
|
||||
# TODO: Mounting holes?
|
||||
|
|
|
|||
|
|
@ -0,0 +1,137 @@
|
|||
// Modified version of choc.js
|
||||
// Source for modifications: https://github.com/daprice/keyswitches.pretty/blob/master/Kailh_socket_PG1350.kicad_mod
|
||||
// ---------------------------
|
||||
// Kailh Choc PG1350
|
||||
// Nets
|
||||
// from: corresponds to pin 1
|
||||
// to: corresponds to pin 2
|
||||
// Params
|
||||
// hotswap: default is false
|
||||
// if true, will include holes and pads for Kailh choc hotswap sockets
|
||||
// reverse: default is false
|
||||
// if true, will flip the footprint such that the pcb can be reversible
|
||||
// keycaps: default is false
|
||||
// if true, will add choc sized keycap box around the footprint
|
||||
//
|
||||
// note: hotswap and reverse can be used simultaneously
|
||||
|
||||
module.exports = {
|
||||
params: {
|
||||
designator: 'S',
|
||||
hotswap: false,
|
||||
reverse: false,
|
||||
keycaps: false,
|
||||
from: undefined,
|
||||
to: undefined,
|
||||
},
|
||||
body: p => {
|
||||
const standard = `
|
||||
(module PG1350 (layer F.Cu) (tedit 5DD50112)
|
||||
${p.at /* parametric position */}
|
||||
|
||||
${'' /* footprint reference */}
|
||||
(fp_text reference "${p.ref}" (at 0 0) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15))))
|
||||
(fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
|
||||
|
||||
${'' /* corner marks */}
|
||||
(fp_line (start -7 -6) (end -7 -7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -7 7) (end -6 7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -6 -7) (end -7 -7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -7 7) (end -7 6) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 7 6) (end 7 7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 7 -7) (end 6 -7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 6 7) (end 7 7) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 7 -7) (end 7 -6) (layer F.SilkS) (width 0.15))
|
||||
|
||||
${'' /* LED hole marks */}
|
||||
(fp_line (start -2.6 3.1) (end 2.6 3.1) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start 2.6 3.1) (end 2.6 6.3) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start 2.6 6.3) (end -2.6 6.3) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start -2.6 3.1) (end -2.6 6.3) (layer Dwgs.User) (width 0.15))
|
||||
|
||||
${'' /* middle shaft */}
|
||||
(pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
|
||||
|
||||
${'' /* stabilizers */}
|
||||
(pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
|
||||
(pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
|
||||
`
|
||||
const keycap = `
|
||||
${'' /* keycap marks */}
|
||||
(fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
|
||||
`
|
||||
|
||||
function pins(def_neg, def_pos, def_side) {
|
||||
if (p.hotswap) {
|
||||
return `
|
||||
${'' /* hotswap socket marks */}
|
||||
(fp_line (start 7 -5.6) (end 7 -6.2) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start -1.5 -3.7) (end 1 -3.7) (layer B.SilkS) (width 0.15))
|
||||
(fp_arc (start 1 -2.2) (end 2.5 -2.2) (angle -90) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 1.5 -8.2) (end 2 -7.7) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 2 -6.7) (end 2 -7.7) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 7 -6.2) (end 2.5 -6.2) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start -2 -4.2) (end -1.5 -3.7) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start -2 -7.7) (end -1.5 -8.2) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start -1.5 -8.2) (end 1.5 -8.2) (layer B.SilkS) (width 0.15))
|
||||
(fp_arc (start 2.5 -6.7) (end 2 -6.7) (angle -90) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 2.5 -2.2) (end 2.5 -1.5) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 2.5 -1.5) (end 7 -1.5) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 7 -1.5) (end 7 -2 ) (layer B.SilkS) (width 0.15))
|
||||
|
||||
(fp_arc (start 2.5 -6.7 ) (end 2 -6.7 ) (angle -90) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start -1.5 -8.2 ) (end 1.5 -8.2 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start -2 -7.7 ) (end -1.5 -8.2 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start -1.5 -3.7 ) (end 1 -3.7 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start -2 -4.2 ) (end -1.5 -3.7 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start 7 -6.2 ) (end 2.5 -6.2 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start 2 -6.7 ) (end 2 -7.7 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start 1.5 -8.2 ) (end 2 -7.7 ) (layer B.Fab) (width 0.15))
|
||||
(fp_arc (start 1 -2.2 ) (end 2.5 -2.2 ) (angle -90) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start 2.5 -1.5 ) (end 7 -1.5 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start 2.5 -2.2 ) (end 2.5 -1.5 ) (layer B.Fab) (width 0.15))
|
||||
(fp_line (start -2 -4.25) (end -2 -7.7 ) (layer B.Fab) (width 0.12))
|
||||
(fp_line (start 7 -1.5 ) (end 7 -6.2 ) (layer B.Fab) (width 0.12))
|
||||
(fp_line (start 7 -5 ) (end 9.5 -5 ) (layer B.Fab) (width 0.12))
|
||||
(fp_line (start 9.5 -5 ) (end 9.5 -2.5 ) (layer B.Fab) (width 0.12))
|
||||
(fp_line (start 9.5 -2.5 ) (end 7 -2.5 ) (layer B.Fab) (width 0.12))
|
||||
(fp_line (start -2 -4.75) (end -4.5 -4.75) (layer B.Fab) (width 0.12))
|
||||
(fp_line (start -4.5 -4.75) (end -4.5 -7.25) (layer B.Fab) (width 0.12))
|
||||
(fp_line (start -4.5 -7.25) (end -2 -7.25) (layer B.Fab) (width 0.12))
|
||||
|
||||
${'' /* holes */}
|
||||
(pad "" np_thru_hole circle (at ${def_pos}5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
|
||||
(pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
|
||||
|
||||
${'' /* net pads */}
|
||||
(pad 1 smd rect (at ${def_neg}3.275 -5.95 ${p.r}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.from})
|
||||
(pad 2 smd rect (at ${def_pos}8.275 -3.75 ${p.r}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.to})
|
||||
`
|
||||
} else {
|
||||
return `
|
||||
${'' /* pins */}
|
||||
(pad 1 thru_hole circle (at ${def_pos}5 -3.8) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.from})
|
||||
(pad 2 thru_hole circle (at ${def_pos}0 -5.9) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.to})
|
||||
`
|
||||
}
|
||||
}
|
||||
|
||||
if (p.reverse) {
|
||||
return `
|
||||
${standard}
|
||||
${p.keycaps ? keycap : ''}
|
||||
${pins('-', '', 'B')}
|
||||
${pins('', '-', 'F')})
|
||||
`
|
||||
} else {
|
||||
return `
|
||||
${standard}
|
||||
${p.keycaps ? keycap : ''}
|
||||
${pins('-', '', 'B')})
|
||||
`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
module.exports = {
|
||||
params: {
|
||||
designator: 'D',
|
||||
side: 'F',
|
||||
from: undefined,
|
||||
to: undefined
|
||||
},
|
||||
body: p => `
|
||||
(module SmdDiode (layer ${p.side}.Cu) (tedit 65D012FE)
|
||||
${p.at /* parametric position */}
|
||||
|
||||
${'' /* footprint reference */}
|
||||
(fp_text reference "${p.ref}" (at 0 0) (layer ${p.side}.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15))))
|
||||
(fp_text value "" (at 0 0) (layer ${p.side}.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
|
||||
|
||||
${''/* diode symbols */}
|
||||
(fp_line (start 0.25 0) (end 0.75 0) (layer ${p.side}.SilkS) (width 0.1))
|
||||
(fp_line (start 0.25 0.4) (end -0.35 0) (layer ${p.side}.SilkS) (width 0.1))
|
||||
(fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer ${p.side}.SilkS) (width 0.1))
|
||||
(fp_line (start -0.35 0) (end 0.25 -0.4) (layer ${p.side}.SilkS) (width 0.1))
|
||||
(fp_line (start -0.35 0) (end -0.35 0.55) (layer ${p.side}.SilkS) (width 0.1))
|
||||
(fp_line (start -0.35 0) (end -0.35 -0.55) (layer ${p.side}.SilkS) (width 0.1))
|
||||
(fp_line (start -0.75 0) (end -0.35 0) (layer ${p.side}.SilkS) (width 0.1))
|
||||
|
||||
${''/* SMD pads */}
|
||||
(pad 1 smd rect (at -1.65 0 ${p.r}) (size 0.9 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to})
|
||||
(pad 2 smd rect (at 1.65 0 ${p.r}) (size 0.9 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from})
|
||||
)
|
||||
`
|
||||
}
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
// Modified version of promicro.js
|
||||
// -------------------------------
|
||||
// Arduino ProMicro atmega32u4au
|
||||
// Params
|
||||
// orientation: default is down
|
||||
// if down, power led will face the pcb
|
||||
// if up, power led will face away from pcb
|
||||
|
||||
module.exports = {
|
||||
params: {
|
||||
designator: 'MCU',
|
||||
orientation: 'down',
|
||||
RAW: {type: 'net', value: 'RAW'},
|
||||
GND: {type: 'net', value: 'GND'},
|
||||
RST: {type: 'net', value: 'RST'},
|
||||
VCC: {type: 'net', value: 'VCC'},
|
||||
P21: {type: 'net', value: 'P21'},
|
||||
P20: {type: 'net', value: 'P20'},
|
||||
P19: {type: 'net', value: 'P19'},
|
||||
P18: {type: 'net', value: 'P18'},
|
||||
P15: {type: 'net', value: 'P15'},
|
||||
P14: {type: 'net', value: 'P14'},
|
||||
P16: {type: 'net', value: 'P16'},
|
||||
P10: {type: 'net', value: 'P10'},
|
||||
P1: {type: 'net', value: 'P1'},
|
||||
P0: {type: 'net', value: 'P0'},
|
||||
P2: {type: 'net', value: 'P2'},
|
||||
P3: {type: 'net', value: 'P3'},
|
||||
P4: {type: 'net', value: 'P4'},
|
||||
P5: {type: 'net', value: 'P5'},
|
||||
P6: {type: 'net', value: 'P6'},
|
||||
P7: {type: 'net', value: 'P7'},
|
||||
P8: {type: 'net', value: 'P8'},
|
||||
P9: {type: 'net', value: 'P9'},
|
||||
},
|
||||
body: p => {
|
||||
let def_neg, def_pos, side, mirror;
|
||||
if (p.orientation === 'down') {
|
||||
def_neg = '-';
|
||||
def_pos = '';
|
||||
side = 'B';
|
||||
mirror = '(justify mirror)';
|
||||
} else {
|
||||
def_neg = '';
|
||||
def_pos = '-';
|
||||
side = 'F';
|
||||
mirror = '';
|
||||
}
|
||||
|
||||
return `
|
||||
(module ProMicro (layer F.Cu) (tedit 5B307E4C)
|
||||
${p.at /* parametric position */}
|
||||
|
||||
${'' /* footprint reference */}
|
||||
(fp_text reference "${p.ref}" (at 0 0) (layer ${side}.SilkS) ${p.ref_hide} (effects (font (size 1.27 1.27) (thickness 0.15))))
|
||||
(fp_text value "" (at 0 0) (layer ${side}.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
|
||||
|
||||
${'' /* illustration of the (possible) USB port overhang */}
|
||||
(fp_line (start -19.304 -3.81) (end -14.224 -3.81) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start -19.304 3.81) (end -19.304 -3.81) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start -14.224 3.81) (end -19.304 3.81) (layer Dwgs.User) (width 0.15))
|
||||
(fp_line (start -14.224 -3.81) (end -14.224 3.81) (layer Dwgs.User) (width 0.15))
|
||||
|
||||
${'' /* component outline */}
|
||||
(fp_line (start -17.78 8.89) (end 15.24 8.89) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 15.24 8.89) (end 15.24 -8.89) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 15.24 -8.89) (end -17.78 -8.89) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -17.78 -8.89) (end -17.78 8.89) (layer F.SilkS) (width 0.15))
|
||||
|
||||
(fp_line (start -17.78 8.89) (end 15.24 8.89) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 15.24 8.89) (end 15.24 -8.89) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start 15.24 -8.89) (end -17.78 -8.89) (layer B.SilkS) (width 0.15))
|
||||
(fp_line (start -17.78 -8.89) (end -17.78 8.89) (layer B.SilkS) (width 0.15))
|
||||
|
||||
${'' /* extra border around "RAW", in case the rectangular shape is not distinctive enough */}
|
||||
(fp_line (start -15.24 ${def_pos}6.35) (end -12.7 ${def_pos}6.35) (layer ${side}.SilkS) (width 0.15))
|
||||
(fp_line (start -15.24 ${def_pos}6.35) (end -15.24 ${def_pos}8.89) (layer ${side}.SilkS) (width 0.15))
|
||||
(fp_line (start -12.7 ${def_pos}6.35) (end -12.7 ${def_pos}8.89) (layer ${side}.SilkS) (width 0.15))
|
||||
|
||||
${'' /* pin names */}
|
||||
(fp_text user RAW (at -13.97 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user GND (at -11.43 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user RST (at -8.89 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user VCC (at -6.35 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P21 (at -3.81 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P20 (at -1.27 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P19 (at 1.27 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P18 (at 3.81 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P15 (at 6.35 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P14 (at 8.89 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P16 (at 11.43 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P10 (at 13.97 ${def_pos}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
|
||||
(fp_text user P01 (at -13.97 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P00 (at -11.43 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user GND (at -8.89 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user GND (at -6.35 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P02 (at -3.81 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P03 (at -1.27 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P04 (at 1.27 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P05 (at 3.81 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P06 (at 6.35 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P07 (at 8.89 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P08 (at 11.43 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
(fp_text user P09 (at 13.97 ${def_neg}4.8 ${p.r + 90}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))
|
||||
|
||||
${'' /* and now the actual pins */}
|
||||
(pad 1 thru_hole rect (at -13.97 ${def_pos}7.62 ${p.r}) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.RAW})
|
||||
(pad 2 thru_hole circle (at -11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND})
|
||||
(pad 3 thru_hole circle (at -8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.RST})
|
||||
(pad 4 thru_hole circle (at -6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.VCC})
|
||||
(pad 5 thru_hole circle (at -3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P21})
|
||||
(pad 6 thru_hole circle (at -1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P20})
|
||||
(pad 7 thru_hole circle (at 1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P19})
|
||||
(pad 8 thru_hole circle (at 3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P18})
|
||||
(pad 9 thru_hole circle (at 6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P15})
|
||||
(pad 10 thru_hole circle (at 8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P14})
|
||||
(pad 11 thru_hole circle (at 11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P16})
|
||||
(pad 12 thru_hole circle (at 13.97 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P10})
|
||||
|
||||
(pad 13 thru_hole circle (at -13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P1})
|
||||
(pad 14 thru_hole circle (at -11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P0})
|
||||
(pad 15 thru_hole circle (at -8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND})
|
||||
(pad 16 thru_hole circle (at -6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND})
|
||||
(pad 17 thru_hole circle (at -3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P2})
|
||||
(pad 18 thru_hole circle (at -1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P3})
|
||||
(pad 19 thru_hole circle (at 1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P4})
|
||||
(pad 20 thru_hole circle (at 3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P5})
|
||||
(pad 21 thru_hole circle (at 6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P6})
|
||||
(pad 22 thru_hole circle (at 8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P7})
|
||||
(pad 23 thru_hole circle (at 11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P8})
|
||||
(pad 24 thru_hole circle (at 13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P9})
|
||||
)
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
// Modified version of rgb.js
|
||||
// Source for KiCad footprint: https://github.com/keebio/Keebio-Parts.pretty/blob/master/SK6812-MINI-E.kicad_mod
|
||||
|
||||
module.exports = {
|
||||
params: {
|
||||
designator: 'LED',
|
||||
side: 'F',
|
||||
din: undefined,
|
||||
dout: undefined,
|
||||
VCC: {type: 'net', value: 'VCC'},
|
||||
GND: {type: 'net', value: 'GND'}
|
||||
},
|
||||
body: p => `
|
||||
(module SK6812-MINI-E (layer F.Cu) (tedit 53BEE615)
|
||||
${p.at /* parametric position */}
|
||||
|
||||
${'' /* footprint reference */}
|
||||
(fp_text reference "${p.ref}" (at 0 0) (layer ${p.side}.SilkS) ${p.ref_hide}
|
||||
(effects (font (size 1.27 1.27) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value "" (at 0 0) (layer ${p.side}.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
|
||||
|
||||
(fp_poly (pts (xy 2.8 1.4) (xy 2.2 1.4) (xy 2.2 2)) (layer ${p.side}.SilkS) (width 0.1))
|
||||
(fp_line (start 1.6 -1.4) (end 1.6 1.4) (layer Cmts.User) (width 0.12))
|
||||
(fp_line (start 1.6 1.4) (end -1.6 1.4) (layer Cmts.User) (width 0.12))
|
||||
(fp_line (start -1.6 1.4) (end -1.6 -1.4) (layer Cmts.User) (width 0.12))
|
||||
(fp_line (start -1.6 -1.4) (end 1.6 -1.4) (layer Cmts.User) (width 0.12))
|
||||
(fp_line (start 1.7 -1.5) (end 1.7 1.5) (layer Edge.Cuts) (width 0.12))
|
||||
(fp_line (start 1.7 1.5) (end -1.7 1.5) (layer Edge.Cuts) (width 0.12))
|
||||
(fp_line (start -1.7 1.5) (end -1.7 -1.5) (layer Edge.Cuts) (width 0.12))
|
||||
(fp_line (start -1.7 -1.5) (end 1.7 -1.5) (layer Edge.Cuts) (width 0.12))
|
||||
|
||||
(pad "1" smd rect (at -2.55 -0.75 ${p.r}) (size 1.7 0.82)
|
||||
(layers "${p.side}.Cu" "${p.side}.Paste" "${p.side}.Mask")
|
||||
${p.VCC}
|
||||
)
|
||||
(pad "2" smd rect (at -2.55 0.75 ${p.r}) (size 1.7 0.82)
|
||||
(layers "${p.side}.Cu" "${p.side}.Paste" "${p.side}.Mask")
|
||||
${p.dout}
|
||||
)
|
||||
(pad "4" smd rect (at 2.55 -0.75 ${p.r}) (size 1.7 0.82)
|
||||
(layers "${p.side}.Cu" "${p.side}.Paste" "${p.side}.Mask")
|
||||
${p.din}
|
||||
)
|
||||
(pad "3" smd roundrect (at 2.55 0.75 ${p.r}) (size 1.7 0.82)
|
||||
(layers "${p.side}.Cu" "${p.side}.Paste" "${p.side}.Mask")
|
||||
(roundrect_rratio 0.25)
|
||||
${p.GND}
|
||||
)
|
||||
)
|
||||
`
|
||||
}
|
||||
Loading…
Reference in New Issue