tscircuit/sparkfun-boards

This code defines a detailed PCB schematic and physical footprint layout for various embedded hardware modules, mapping electrical pins, mechanical mounting holes, and silk-screen annotations for manufacturing and assembly.

Version
0.0.32
License
unset
Stars
3

boards/SparkFun-Fuse-Breakout-Board/SparkFun-Fuse-Breakout-Board.circuit.tsx

import { sel } from "tscircuit"
import { Fuse20mm } from "./imports/Fuse20mm"
import { PowerJackPthLock } from "./imports/PowerJackPthLock"
import { PptcFusePth } from "./imports/PptcFusePth"
import { ScrewTerminal5mm2 } from "./imports/ScrewTerminal5mm2"

// Board: 65mm x 12.7mm with four semi-circle mounting cutouts
// Static pre-computed rounded coordinates to prevent floating point differences across OS platforms (macOS vs Linux)
const outline = [
  { x: -32.4485, y: -5.08 },
  { x: -32.4485, y: 5.08 },
  { x: -31.1785, y: 6.35 },
  { x: -11.8745, y: 6.35 },
  { x: -11.7719, y: 6.4048 },
  { x: -11.6659, y: 6.4529 },
  { x: -11.557, y: 6.4938 },
  { x: -11.4457, y: 6.5276 },
  { x: -11.3324, y: 6.554 },
  { x: -11.2176, y: 6.573 },
  { x: -11.1018, y: 6.5844 },
  { x: -10.9855, y: 6.5882 },
  { x: -10.8692, y: 6.5844 },
  { x: -10.7534, y: 6.573 },
  { x: -10.6386, y: 6.554 },
  { x: -10.5253, y: 6.5276 },
  { x: -10.414, y: 6.4938 },
  { x: -10.3051, y: 6.4529 },
  { x: -10.1991, y: 6.4048 },
  { x: -10.0965, y: 6.35 },
  { x: -9.9939, y: 6.4048 },
  { x: -9.8879, y: 6.4529 },
  { x: -9.779, y: 6.4938 },
  { x: -9.6677, y: 6.5276 },
  { x: -9.5544, y: 6.554 },
  { x: -9.4396, y: 6.573 },
  { x: -9.3238, y: 6.5844 },
  { x: -9.2075, y: 6.5882 },
  { x: -9.0912, y: 6.5844 },
  { x: -8.9754, y: 6.573 },
  { x: -8.8606, y: 6.554 },
  { x: -8.7473, y: 6.5276 },
  { x: -8.636, y: 6.4938 },
  { x: -8.5271, y: 6.4529 },
  { x: -8.4211, y: 6.4048 },
  { x: -8.3185, y: 6.35 },
  { x: 19.7485, y: 6.35 },
  { x: 19.8511, y: 6.4048 },
  { x: 19.9571, y: 6.4529 },
  { x: 20.066, y: 6.4938 },
  { x: 20.1773, y: 6.5276 },
  { x: 20.2906, y: 6.554 },
  { x: 20.4054, y: 6.573 },
  { x: 20.5212, y: 6.5844 },
  { x: 20.6375, y: 6.5882 },
  { x: 20.7538, y: 6.5844 },
  { x: 20.8696, y: 6.573 },
  { x: 20.9844, y: 6.554 },
  { x: 21.0977, y: 6.5276 },
  { x: 21.209, y: 6.4938 },
  { x: 21.3179, y: 6.4529 },
  { x: 21.4239, y: 6.4048 },
  { x: 21.5265, y: 6.35 },
  { x: 21.6291, y: 6.4048 },
  { x: 21.7351, y: 6.4529 },
  { x: 21.844, y: 6.4938 },
  { x: 21.9553, y: 6.5276 },
  { x: 22.0686, y: 6.554 },
  { x: 22.1834, y: 6.573 },
  { x: 22.2992, y: 6.5844 },
  { x: 22.4155, y: 6.5882 },
  { x: 22.5318, y: 6.5844 },
  { x: 22.6476, y: 6.573 },
  { x: 22.7624, y: 6.554 },
  { x: 22.8757, y: 6.5276 },
  { x: 22.987, y: 6.4938 },
  { x: 23.0959, y: 6.4529 },
  { x: 23.2019, y: 6.4048 },
  { x: 23.3045, y: 6.35 },
  { x: 31.1785, y: 6.35 },
  { x: 32.4485, y: 5.08 },
  { x: 32.4485, y: -5.08 },
  { x: 31.1785, y: -6.35 },
  { x: 23.3045, y: -6.35 },
  { x: 23.2019, y: -6.4048 },
  { x: 23.0959, y: -6.4529 },
  { x: 22.987, y: -6.4938 },
  { x: 22.8757, y: -6.5276 },
  { x: 22.7624, y: -6.554 },
  { x: 22.6476, y: -6.573 },
  { x: 22.5318, y: -6.5844 },
  { x: 22.4155, y: -6.5882 },
  { x: 22.2992, y: -6.5844 },
  { x: 22.1834, y: -6.573 },
  { x: 22.0686, y: -6.554 },
  { x: 21.9553, y: -6.5276 },
  { x: 21.844, y: -6.4938 },
  { x: 21.7351, y: -6.4529 },
  { x: 21.6291, y: -6.4048 },
  { x: 21.5265, y: -6.35 },
  { x: 21.4239, y: -6.4048 },
  { x: 21.3179, y: -6.4529 },
  { x: 21.209, y: -6.4938 },
  { x: 21.0977, y: -6.5276 },
  { x: 20.9844, y: -6.554 },
  { x: 20.8696, y: -6.573 },
  { x: 20.7538, y: -6.5844 },
  { x: 20.6375, y: -6.5882 },
  { x: 20.5212, y: -6.5844 },
  { x: 20.4054, y: -6.573 },
  { x: 20.2906, y: -6.554 },
  { x: 20.1773, y: -6.5276 },
  { x: 20.066, y: -6.4938 },
  { x: 19.9571, y: -6.4529 },
  { x: 19.8511, y: -6.4048 },
  { x: 19.7485, y: -6.35 },
  { x: -8.3185, y: -6.35 },
  { x: -8.4211, y: -6.4048 },
  { x: -8.5271, y: -6.4529 },
  { x: -8.636, y: -6.4938 },
  { x: -8.7473, y: -6.5276 },
  { x: -8.8606, y: -6.554 },
  { x: -8.9754, y: -6.573 },
  { x: -9.0912, y: -6.5844 },
  { x: -9.2075, y: -6.5882 },
  { x: -9.3238, y: -6.5844 },
  { x: -9.4396, y: -6.573 },
  { x: -9.5544, y: -6.554 },
  { x: -9.6677, y: -6.5276 },
  { x: -9.779, y: -6.4938 },
  { x: -9.8879, y: -6.4529 },
  { x: -9.9939, y: -6.4048 },
  { x: -10.0965, y: -6.35 },
  { x: -10.1991, y: -6.4048 },
  { x: -10.3051, y: -6.4529 },
  { x: -10.414, y: -6.4938 },
  { x: -10.5253, y: -6.5276 },
  { x: -10.6386, y: -6.554 },
  { x: -10.7534, y: -6.573 },
  { x: -10.8692, y: -6.5844 },
  { x: -10.9855, y: -6.5882 },
  { x: -11.1018, y: -6.5844 },
  { x: -11.2176, y: -6.573 },
  { x: -11.3324, y: -6.554 },
  { x: -11.4457, y: -6.5276 },
  { x: -11.557, y: -6.4938 },
  { x: -11.6659, y: -6.4529 },
  { x: -11.7719, y: -6.4048 },
  { x: -11.8745, y: -6.35 },
  { x: -31.1785, y: -6.35 },
  { x: -32.4485, y: -5.08 },
]

export default () => (
  <board outline={outline} routingDisabled>
    {/* Input Section Components */}
    <PowerJackPthLock
      name="J2"
      pcbX={-28.5115}
      pcbY={-0.127}
      pcbRotation={270}
      schX={-5.5}
      schY={-1.5}
      connections={{ PWR: "net.VIN", GND: "net.GND", GNDBREAK: "net.GND" }}
    />
    <ScrewTerminal5mm2
      name="J1"
      pcbX={-28.6385}
      pcbY={2.54}
      pcbRotation={270}
      schX={-5.5}
      schY={1.5}
      schRotation={90}
      connections={{ pin1: "net.VIN", pin2: "net.GND" }}
    />

    {/* Output Section Components */}
    <ScrewTerminal5mm2
      name="J3"
      pcbX={28.5115}
      pcbY={-2.54}
      pcbRotation={90}
      schX={5.5}
      schY={1.5}
      schRotation={270}
      connections={{ pin1: "net.VOUT", pin2: "net.GND" }}
    />

    {/* Fuse Section Components */}
    <Fuse20mm
      name="F1"
      displayName="FUSEX20MM"
      pcbX={5.6515}
      pcbY={0}
      pcbRotation={270}
      schX={0}
      schY={2.5}
      connections={{
        pin1: "net.VIN",
        pin2: "net.VIN",
        pin3: "net.VOUT",
        pin4: "net.VOUT",
      }}
    />
    <PptcFusePth
      name="F2"
      displayName="72V/0.25A"
      pcbX={5.6515}
      pcbY={0}
      schX={0}
      schY={0}
      connections={{ pin1: "net.VIN", pin2: "net.VOUT" }}
    />

    {/* PCB Layout details */}
    <pcbtrace
      layer="top"
      thickness="0.508mm"
      route={[
        { x: -2.2225, y: -2.54 },
        { x: 1.5875, y: 0 },
        { x: 5.6515, y: 0 },
      ]}
    />
    <pcbtrace
      layer="top"
      thickness="0.508mm"
      route={[
        { x: 18.8595, y: 0 },
        { x: 14.6685, y: 0 },
        { x: 16.8275, y: -2.54 },
        { x: 16.8275, y: 2.54 },
      ]}
    />

    {/* PCB Silkscreen texts */}
    <silkscreentext
      text="VIN"
      pcbX={-9.97}
      pcbY={2.794}
      pcbRotation={270}
      fontSize={1.2}
      anchorAlignment="center"
    />
    <silkscreentext
      text="VOUT"
      pcbX={20.13}
      pcbY={3.937}
      pcbRotation={270}
      fontSize={1.2}
      anchorAlignment="center"
    />
    <silkscreentext
      text="F1"
      pcbX={-5.78}
      pcbY={4.064}
      fontSize={1}
      anchorAlignment="center"
    />
    <silkscreentext
      text="F2"
      pcbX={4.38}
      pcbY={0}
      fontSize={1}
      anchorAlignment="center"
    />
    <silkscreentext
      text="+"
      pcbX={-23.94}
      pcbY={1.905}
      fontSize={1.2}
      anchorAlignment="center"
    />
    <silkscreentext
      text="-"
      pcbX={-23.94}
      pcbY={-3.429}
      fontSize={1.2}
      anchorAlignment="center"
    />
    <silkscreentext
      text="+"
      pcbX={22.2885}
      pcbY={-3.175}
      fontSize={1.2}
      anchorAlignment="center"
    />
    <silkscreentext
      text="-"
      pcbX={22.2885}
      pcbY={1.778}
      fontSize={1.2}
      anchorAlignment="center"
    />
    <silkscreentext
      text="v10"
      pcbX={18.3515}
      pcbY={3.81}
      layer="bottom"
      fontSize={1}
      anchorAlignment="center"
    />

    {/* Schematic Dividers */}
    <schematicline
      x1={-3.5}
      y1={5.5}
      x2={-3.5}
      y2={-5.5}
      isDashed
      color="gray"
    />
    <schematicline x1={3.5} y1={5.5} x2={3.5} y2={-5.5} isDashed color="gray" />

    {/* Column Headers */}
    <schematictext
      text="Input"
      fontSize={0.25}
      schX={-5.5}
      schY={5}
      anchor="center"
      color="brown"
    />
    <schematictext
      text="Fuse"
      fontSize={0.25}
      schX={0}
      schY={5}
      anchor="center"
      color="brown"
    />
    <schematictext
      text="Output"
      fontSize={0.25}
      schX={5.5}
      schY={5}
      anchor="center"
      color="brown"
    />

    {/* Net Labels - Input Section */}
    <netlabel net="VIN" connectsTo={sel.J1.pin1} anchorSide="bottom" />
    <netlabel net="GND" connectsTo={sel.J1.pin2} anchorSide="top" />

    {/* Net Labels - Fuse Section */}
    <netlabel net="VIN" connectsTo={sel.F2.pin1} anchorSide="right" />
    <netlabel net="VOUT" connectsTo={sel.F2.pin2} anchorSide="left" />

    {/* Net Labels - Output Section */}
    <netlabel net="VOUT" connectsTo={sel.J3.pin1} anchorSide="bottom" />
    <netlabel net="GND" connectsTo={sel.J3.pin2} anchorSide="top" />

    {/* Footnotes in Fuse Column */}
    <schematictext
      text="Note: Depending on your personal preference,"
      fontSize={0.14}
      schX={0}
      schY={-2.2}
      anchor="center"
      color="gray"
    />
    <schematictext
      text="chose between a glass ferrule type fuse or a"
      fontSize={0.14}
      schX={0}
      schY={-2.5}
      anchor="center"
      color="gray"
    />
    <schematictext
      text="resettable fuse here"
      fontSize={0.14}
      schX={0}
      schY={-2.8}
      anchor="center"
      color="gray"
    />
  </board>
)