Ergogen: Add PCB and net definitions

This commit is contained in:
Lexi / Zoe 2024-08-02 18:54:27 +02:00
parent ed1b4b7632
commit eec05917c1
Signed by: binaryDiv
GPG key ID: F8D4956E224DA232
8 changed files with 821 additions and 17 deletions

View file

@ -0,0 +1,48 @@
// Tactile button 6x6mm
// Source: https://kicad.github.io/footprints/Button_Switch_SMD
module.exports = {
params: {
designator: 'B',
side: 'F',
from: undefined,
to: undefined
},
body: p => `
(module SW_Push_1P1T_NO_6x6mm_H9.5mm (layer F.Cu) (tedit 5CA1CA7F)
(descr "tactile push button, 6x6mm e.g. PTS645xx series, height=9.5mm")
(tags "tact sw push 6mm smd")
(attr smd)
${p.at /* parametric position */}
${'' /* footprint reference */}
(fp_text reference "${p.ref}" (at 0 -4.05) (layer F.SilkS) ${p.ref_hide} (effects (font (size 1 1) (thickness 0.15))))
(fp_text value "" (at 0 4.15) (layer F.SilkS) hide (effects (font (size 1 1) (thickness 0.15))))
${'' /* outline */}
(fp_line (start -3 -3 ) (end -3 3 ) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start -3 3 ) (end 3 3 ) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start 3 3 ) (end 3 -3 ) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start 3 -3 ) (end -3 -3 ) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start 5 3.25) (end 5 -3.25) (layer ${p.side}.CrtYd) (width 0.05))
(fp_line (start -5 -3.25) (end -5 3.25) (layer ${p.side}.CrtYd) (width 0.05))
(fp_line (start -5 3.25) (end 5 3.25) (layer ${p.side}.CrtYd) (width 0.05))
(fp_line (start -5 -3.25) (end 5 -3.25) (layer ${p.side}.CrtYd) (width 0.05))
(fp_line (start 3.23 -3.23) (end 3.23 -3.2 ) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start 3.23 3.23) (end 3.23 3.2 ) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start -3.23 3.23) (end -3.23 3.2 ) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start -3.23 -3.2 ) (end -3.23 -3.23) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start 3.23 -1.3 ) (end 3.23 1.3 ) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start -3.23 -3.23) (end 3.23 -3.23) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start -3.23 -1.3 ) (end -3.23 1.3 ) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start -3.23 3.23) (end 3.23 3.23) (layer ${p.side}.SilkS) (width 0.12))
(fp_circle (center 0 0) (end 1.75 -0.05) (layer ${p.side}.Fab) (width 0.1))
${'' /* pins */}
(pad 1 smd rect (at -3.975 -2.25 ${p.r}) (size 1.55 1.3) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from})
(pad 1 smd rect (at 3.975 -2.25 ${p.r}) (size 1.55 1.3) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from})
(pad 2 smd rect (at -3.975 2.25 ${p.r}) (size 1.55 1.3) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to})
(pad 2 smd rect (at 3.975 2.25 ${p.r}) (size 1.55 1.3) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to})
)
`
}

View file

@ -0,0 +1,37 @@
module.exports = {
params: {
designator: 'C',
side: 'F',
from: undefined,
to: undefined
},
body: p => `
(module C_0805_2012Metric (layer ${p.side}.Cu) (tedit 5F68FEEE)
${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))))
${''/* capacitor symbols */}
(fp_line (start -1 0.625) (end -1 -0.625) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start -1 -0.625) (end 1 -0.625) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start 1 -0.625) (end 1 0.625) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start 1 0.625) (end -1 0.625) (layer ${p.side}.Fab) (width 0.1))
(fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer ${p.side}.SilkS) (width 0.12))
(fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer ${p.side}.CrtYd) (width 0.05))
(fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer ${p.side}.CrtYd) (width 0.05))
(fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer ${p.side}.CrtYd) (width 0.05))
(fp_line (start 1.7 0.98) (end -1.7 0.98) (layer ${p.side}.CrtYd) (width 0.05))
${''/* SMD pads */}
(pad 1 smd roundrect (at -0.95 0 ${p.r}) (size 1 1.45) (layers ${p.side}.Cu ${p.side}.Mask ${p.side}.Paste)
(roundrect_rratio 0.25) ${p.to}
)
(pad 2 smd roundrect (at 0.95 0 ${p.r}) (size 1 1.45) (layers ${p.side}.Cu ${p.side}.Mask ${p.side}.Paste)
(roundrect_rratio 0.25) ${p.from}
)
)
`
}

View file

@ -0,0 +1,149 @@
// 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))))
${'' /* 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 switch_marks(reversed) {
let def_side = reversed ? 'F' : 'B';
return `
${'' /* switch marks */}
(fp_line (start -7 -7) (end 7 -7) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start 7 -7) (end 7 7) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start 7 7) (end -7 7) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start -7 7) (end -7 -7) (layer ${def_side}.SilkS) (width 0.15))
`;
}
function pins(reversed) {
let def_neg = reversed ? '' : '-';
let def_pos = reversed ? '-' : '';
let def_side = reversed ? 'F' : 'B';
let def_pin1 = reversed ? p.to : p.from;
let def_pin2 = reversed ? p.from : p.to;
if (p.hotswap) {
return `
${'' /* hotswap socket marks */}
(fp_line (start ${def_pos}7 -5.6) (end ${def_pos}7 -6.2) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_neg}1.5 -3.7) (end ${def_pos}1 -3.7) (layer ${def_side}.SilkS) (width 0.15))
(fp_arc (start ${def_pos}1 -2.2) (end ${def_pos}2.5 -2.2) (angle ${def_neg}90) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_pos}1.5 -8.2) (end ${def_pos}2 -7.7) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_pos}2 -6.7) (end ${def_pos}2 -7.7) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_pos}7 -6.2) (end ${def_pos}2.5 -6.2) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_neg}2 -4.2) (end ${def_neg}1.5 -3.7) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_neg}2 -7.7) (end ${def_neg}1.5 -8.2) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_neg}1.5 -8.2) (end ${def_pos}1.5 -8.2) (layer ${def_side}.SilkS) (width 0.15))
(fp_arc (start ${def_pos}2.5 -6.7) (end ${def_pos}2 -6.7) (angle ${def_neg}90) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_pos}2.5 -2.2) (end ${def_pos}2.5 -1.5) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_pos}2.5 -1.5) (end ${def_pos}7 -1.5) (layer ${def_side}.SilkS) (width 0.15))
(fp_line (start ${def_pos}7 -1.5) (end ${def_pos}7 -2 ) (layer ${def_side}.SilkS) (width 0.15))
(fp_arc (start ${def_pos}2.5 -6.7 ) (end ${def_pos}2 -6.7 ) (angle ${def_neg}90) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_neg}1.5 -8.2 ) (end ${def_pos}1.5 -8.2 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_neg}2 -7.7 ) (end ${def_neg}1.5 -8.2 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_neg}1.5 -3.7 ) (end ${def_pos}1 -3.7 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_neg}2 -4.2 ) (end ${def_neg}1.5 -3.7 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_pos}7 -6.2 ) (end ${def_pos}2.5 -6.2 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_pos}2 -6.7 ) (end ${def_pos}2 -7.7 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_pos}1.5 -8.2 ) (end ${def_pos}2 -7.7 ) (layer ${def_side}.Fab) (width 0.15))
(fp_arc (start ${def_pos}1 -2.2 ) (end ${def_pos}2.5 -2.2 ) (angle ${def_neg}90) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_pos}2.5 -1.5 ) (end ${def_pos}7 -1.5 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_pos}2.5 -2.2 ) (end ${def_pos}2.5 -1.5 ) (layer ${def_side}.Fab) (width 0.15))
(fp_line (start ${def_neg}2 -4.25) (end ${def_neg}2 -7.7 ) (layer ${def_side}.Fab) (width 0.12))
(fp_line (start ${def_pos}7 -1.5 ) (end ${def_pos}7 -6.2 ) (layer ${def_side}.Fab) (width 0.12))
(fp_line (start ${def_pos}7 -5 ) (end ${def_pos}9.5 -5 ) (layer ${def_side}.Fab) (width 0.12))
(fp_line (start ${def_pos}9.5 -5 ) (end ${def_pos}9.5 -2.5 ) (layer ${def_side}.Fab) (width 0.12))
(fp_line (start ${def_pos}9.5 -2.5 ) (end ${def_pos}7 -2.5 ) (layer ${def_side}.Fab) (width 0.12))
(fp_line (start ${def_neg}2 -4.75) (end ${def_neg}4.5 -4.75) (layer ${def_side}.Fab) (width 0.12))
(fp_line (start ${def_neg}4.5 -4.75) (end ${def_neg}4.5 -7.25) (layer ${def_side}.Fab) (width 0.12))
(fp_line (start ${def_neg}4.5 -7.25) (end ${def_neg}2 -7.25) (layer ${def_side}.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) ${def_pin1})
(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) ${def_pin2})
`;
} 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) ${def_pin1})
(pad 2 thru_hole circle (at ${def_pos}0 -5.9) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${def_pin2})
`;
}
}
if (p.reverse) {
return `
${standard}
${p.keycaps ? keycap : ''}
${switch_marks(false)}
${switch_marks(true)}
${pins(false)}
${pins(true)}
)`;
} else {
return `
${standard}
${p.keycaps ? keycap : ''}
${switch_marks(false)}
${pins(false)}
)`;
}
}
}

View file

@ -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})
)
`
}

View file

@ -0,0 +1,68 @@
// Modified version of rotary.js, without the mounting legs
// --------------------------------------------------------
// EC12 rotary encoder
// Nets
// from: corresponds to switch pin 1 (for button presses)
// to: corresponds to switch pin 2 (for button presses)
// A: corresponds to pin 1 (for rotary)
// B: corresponds to pin 3 (for rotary)
// C: corresponds to pin 2 (for rotary, should be GND)
module.exports = {
params: {
designator: 'ROT',
from: undefined,
to: undefined,
A: undefined,
B: undefined,
C: undefined,
radius: 10,
},
body: p => `
(module rotary_encoder (layer F.Cu) (tedit 603326DE)
${p.at /* parametric position */}
${'' /* footprint reference */}
(fp_text reference "${p.ref}" (at 0 0.5) (layer F.SilkS)
${p.ref_hide} (effects (font (size 1 1) (thickness 0.15))))
(fp_text value "" (at 0 8.89) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15))))
${''/* component outline */}
(fp_line (start -0.62 -0.04) (end 0.38 -0.04) (layer F.SilkS) (width 0.12))
(fp_line (start -0.12 -0.54) (end -0.12 0.46) (layer F.SilkS) (width 0.12))
(fp_line (start 5.98 3.26) (end 5.98 5.86) (layer F.SilkS) (width 0.12))
(fp_line (start 5.98 -1.34) (end 5.98 1.26) (layer F.SilkS) (width 0.12))
(fp_line (start 5.98 -5.94) (end 5.98 -3.34) (layer F.SilkS) (width 0.12))
(fp_line (start -3.12 -0.04) (end 2.88 -0.04) (layer F.Fab) (width 0.12))
(fp_line (start -0.12 -3.04) (end -0.12 2.96) (layer F.Fab) (width 0.12))
(fp_line (start -7.32 -4.14) (end -7.62 -3.84) (layer F.SilkS) (width 0.12))
(fp_line (start -7.92 -4.14) (end -7.32 -4.14) (layer F.SilkS) (width 0.12))
(fp_line (start -7.62 -3.84) (end -7.92 -4.14) (layer F.SilkS) (width 0.12))
(fp_line (start -6.22 -5.84) (end -6.22 5.86) (layer F.SilkS) (width 0.12))
(fp_line (start -2.12 -5.84) (end -6.22 -5.84) (layer F.SilkS) (width 0.12))
(fp_line (start -2.12 5.86) (end -6.22 5.86) (layer F.SilkS) (width 0.12))
(fp_line (start 5.98 5.86) (end 1.88 5.86) (layer F.SilkS) (width 0.12))
(fp_line (start 1.88 -5.94) (end 5.98 -5.94) (layer F.SilkS) (width 0.12))
(fp_line (start -6.12 -4.74) (end -5.12 -5.84) (layer F.Fab) (width 0.12))
(fp_line (start -6.12 5.76) (end -6.12 -4.74) (layer F.Fab) (width 0.12))
(fp_line (start 5.88 5.76) (end -6.12 5.76) (layer F.Fab) (width 0.12))
(fp_line (start 5.88 -5.84) (end 5.88 5.76) (layer F.Fab) (width 0.12))
(fp_line (start -5.12 -5.84) (end 5.88 -5.84) (layer F.Fab) (width 0.12))
(fp_line (start -8.87 -6.89) (end 7.88 -6.89) (layer F.CrtYd) (width 0.05))
(fp_line (start -8.87 -6.89) (end -8.87 6.81) (layer F.CrtYd) (width 0.05))
(fp_line (start 7.88 6.81) (end 7.88 -6.89) (layer F.CrtYd) (width 0.05))
(fp_line (start 7.88 6.81) (end -8.87 6.81) (layer F.CrtYd) (width 0.05))
(fp_circle (center -0.12 -0.04) (end 2.88 -0.04) (layer F.SilkS) (width 0.12))
(fp_circle (center -0.12 -0.04) (end 2.88 -0.04) (layer F.Fab) (width 0.12))
${''/* pin names */}
(pad A thru_hole rect (at -7.62 -2.54 ${p.r}) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.A})
(pad C thru_hole circle (at -7.62 -0.04) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.C})
(pad B thru_hole circle (at -7.62 2.46) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.B})
(pad 1 thru_hole circle (at 6.88 -2.54) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${p.from})
(pad 2 thru_hole circle (at 6.88 2.46) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${p.to})
)
`
}

View file

@ -0,0 +1,140 @@
// Pin header footprint for a RP2040-based controller board from AliExpress.
// Doesn't really have a name, it's just "the purple one with USB-C".
// The pinout differs from the Raspberry Pi Pico!
// -------------------------------
// Params
// orientation: if up (default), the controller will be on the front side of the PCB, otherwise on the back side
module.exports = {
params: {
designator: 'MCU',
orientation: 'up',
// Right side of pins (with USB port at the top), top to bottom
VBUS: {type: 'net', value: 'VBUS'},
VIN: {type: 'net', value: 'VIN'},
GND: {type: 'net', value: 'GND'},
'3V3_EN': {type: 'net', value: '3V3_EN'},
'3V3': {type: 'net', value: '3V3'},
// (GND pin)
RUN: {type: 'net', value: 'RUN'}, // Reset pin: Pull down to reset
GP29: {type: 'net', value: 'GP29'}, // also: ADC3
GP28: {type: 'net', value: 'GP28'}, // also: ADC2
GP27: {type: 'net', value: 'GP27'}, // also: ADC1
GP26: {type: 'net', value: 'GP26'}, // also: ADC0
AGND: {type: 'net', value: 'AGND'},
GP25: {type: 'net', value: 'GP25'},
GP24: {type: 'net', value: 'GP24'},
GP23: {type: 'net', value: 'GP23'},
GP22: {type: 'net', value: 'GP22'},
GP21: {type: 'net', value: 'GP21'},
GP20: {type: 'net', value: 'GP20'},
GP19: {type: 'net', value: 'GP19'},
GP18: {type: 'net', value: 'GP18'},
// Left side of pins (with USB port at the top), top to bottom
GP0: {type: 'net', value: 'GP0'},
GP1: {type: 'net', value: 'GP1'},
GP2: {type: 'net', value: 'GP2'},
GP3: {type: 'net', value: 'GP3'},
GP4: {type: 'net', value: 'GP4'},
// (GND pin)
GP5: {type: 'net', value: 'GP5'},
GP6: {type: 'net', value: 'GP6'},
GP7: {type: 'net', value: 'GP7'},
GP8: {type: 'net', value: 'GP8'},
GP9: {type: 'net', value: 'GP9'},
GP10: {type: 'net', value: 'GP10'},
GP11: {type: 'net', value: 'GP11'},
GP12: {type: 'net', value: 'GP12'},
// (GND pin)
GP13: {type: 'net', value: 'GP13'},
GP14: {type: 'net', value: 'GP14'},
GP15: {type: 'net', value: 'GP15'},
GP16: {type: 'net', value: 'GP16'},
GP17: {type: 'net', value: 'GP17'},
},
body: p => {
let def_neg, def_pos, side, mirror;
if (p.orientation === 'down') {
def_neg = '';
def_pos = '-';
side = 'B';
mirror = 'mirror';
} else {
def_neg = '-';
def_pos = '';
side = 'F';
mirror = '';
}
const PINS_PER_SIDE = 20;
const PINS_PER_SIDE_HALF = 10;
const pins_left = [
'GP0', 'GP1', 'GP2', 'GP3', 'GP4', 'GND', 'GP5', 'GP6', 'GP7', 'GP8',
'GP9', 'GP10', 'GP11', 'GP12', 'GND', 'GP13', 'GP14', 'GP15', 'GP16', 'GP17',
];
const pins_right = [
'VBUS', 'VIN', 'GND', '3V3_EN', '3V3', 'GND', 'RUN', 'GP29', 'GP28', 'GP27',
'GP26', 'AGND', 'GP25', 'GP24', 'GP23', 'GP22', 'GP21', 'GP20', 'GP19', 'GP18',
];
function pin_pos_y(pin_number) {
// Fucking floating points...
return (254 * (pin_number - PINS_PER_SIDE_HALF) + 127) / 100;
}
function pin_labels(pin_names, right_side) {
const sign = right_side ? def_pos : def_neg;
const justify = right_side ? 'right' : 'left';
let pin_label_body = '';
for (let i = 0; i < PINS_PER_SIDE; i++) {
pin_label_body += `
(fp_text user ${pin_names[i]} (at ${sign}7.62 ${pin_pos_y(i)} ${p.r}) (unlocked yes) (layer ${side}.SilkS)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify ${justify} ${mirror}))
)`;
}
return pin_label_body;
}
function pin_pads(pin_names, right_side) {
const sign = right_side ? def_pos : def_neg;
const offset = right_side ? 21 : 1;
let pin_pad_body = '';
for (let i = 0; i < PINS_PER_SIDE; i++) {
pin_pad_body += `
(pad ${i + offset} thru_hole circle (at ${sign}8.89 ${pin_pos_y(i)} 0)
(size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p[pin_names[i]]}
)`;
}
return pin_pad_body;
}
return `
(module RP2040_USB_C_Purple (layer F.Cu) (tedit 66A6C4CD)
${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))))
${'' /* component outline */}
(fp_line (start -10.16 -28.6) (end 10.16 -28.6) (layer ${side}.SilkS) (width 0.15))
(fp_line (start 10.16 -28.6) (end 10.16 25.4) (layer ${side}.SilkS) (width 0.15))
(fp_line (start 10.16 25.4) (end -10.16 25.4) (layer ${side}.SilkS) (width 0.15))
(fp_line (start -10.16 25.4) (end -10.16 -28.6) (layer ${side}.SilkS) (width 0.15))
${'' /* pin labels */}
${pin_labels(pins_left, false)}
${pin_labels(pins_right, true)}
${'' /* pin pads */}
${pin_pads(pins_left, false)}
${pin_pads(pins_right, true)}
)
`;
}
}

View file

@ -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}
)
)
`
}