Skip to content

Commit

Permalink
implement sod523 (#132)
Browse files Browse the repository at this point in the history
* add sod523

* format code

* remove msop

* pinout pin1

* add silkscreen

* add snapshot

* improve snapshot

* improve silkscreen

* improve footprint
  • Loading branch information
techmannih authored Feb 5, 2025
1 parent dcea7e4 commit a41cdf0
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/fn/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,5 @@ export { breakoutheaders } from "./breakoutheaders"
export { hc49 } from "./hc49"
export { pad } from "./pad"
export { to92 } from "./to92"
export { sod523 } from "./sod523"
export { sop8 } from "./sop8"
100 changes: 100 additions & 0 deletions src/fn/sod523.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import type { AnySoupElement, PcbSilkscreenPath } from "circuit-json"
import { z } from "zod"
import { rectpad } from "../helpers/rectpad"
import { silkscreenRef, type SilkscreenRef } from "src/helpers/silkscreenRef"
import { length } from "circuit-json"

export const sod_def = z.object({
fn: z.string(),
num_pins: z.literal(2).default(2),
w: z.string().default("2.15mm"),
h: z.string().default("1.20mm"),
pl: z.string().default("0.5mm"),
pw: z.string().default("0.6mm"),
pad_spacing: z.string().default("1.4mm"),
})

export const sod523 = (
raw_params: z.input<typeof sod_def>,
): { circuitJson: AnySoupElement[]; parameters: any } => {
const parameters = sod_def.parse(raw_params)

// Define silkscreen reference text
const silkscreenRefText: SilkscreenRef = silkscreenRef(
0,
length.parse(parameters.h),
0.3,
)

// Define silkscreen path that goes till half of the second pad
const silkscreenLine: PcbSilkscreenPath = {
type: "pcb_silkscreen_path",
layer: "top",
pcb_component_id: "",
route: [
{
x: length.parse(parameters.pad_spacing) / 2,
y: length.parse(parameters.h) / 2,
},
{
x: -length.parse(parameters.w) / 2 - 0.2,
y: length.parse(parameters.h) / 2,
},
{
x: -length.parse(parameters.w) / 2 - 0.2,
y: -length.parse(parameters.h) / 2,
},
{
x: length.parse(parameters.pad_spacing) / 2,
y: -length.parse(parameters.h) / 2,
},
],
stroke_width: 0.1,
pcb_silkscreen_path_id: "",
}

return {
circuitJson: sodWithoutParsing(parameters).concat(
silkscreenLine as AnySoupElement,
silkscreenRefText as AnySoupElement,
),
parameters,
}
}

// Get coordinates for SOD pads
export const getSodCoords = (parameters: {
pn: number
pad_spacing: number
}) => {
const { pn, pad_spacing } = parameters

if (pn === 1) {
return { x: -pad_spacing / 2, y: 0 }
// biome-ignore lint/style/noUselessElse: <explanation>
} else {
return { x: pad_spacing / 2, y: 0 }
}
}

// Function to generate SOD pads
export const sodWithoutParsing = (parameters: z.infer<typeof sod_def>) => {
const pads: AnySoupElement[] = []

for (let i = 1; i <= parameters.num_pins; i++) {
const { x, y } = getSodCoords({
pn: i,
pad_spacing: Number.parseFloat(parameters.pad_spacing),
})
pads.push(
rectpad(
i,
x,
y,
Number.parseFloat(parameters.pl),
Number.parseFloat(parameters.pw),
),
)
}
return pads
}
13 changes: 13 additions & 0 deletions tests/__snapshots__/sod523.snap.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions tests/sod523.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { test, expect } from "bun:test"
import { convertCircuitJsonToPcbSvg } from "circuit-to-svg"
import { fp } from "../src/footprinter"

test("sod523", () => {
const soup = fp.string("sod523").circuitJson()
const svgContent = convertCircuitJsonToPcbSvg(soup)
expect(svgContent).toMatchSvgSnapshot(import.meta.path, "sod523")
})

0 comments on commit a41cdf0

Please sign in to comment.