ShiboSoftwareDev/magsafe-spin-counter

A 48 mm round, battery-powered MagSafe spin counter PCB featuring an nRF52840 BLE module, TMAG5273 magnetic sensor, 32.768 kHz crystal, 3 V coin cell, pushbutton, pull-ups, decoupling capacitors, and SWD test points.

Version
1.0.2
License
unset
Stars
0

index.circuit.tsx

PCBPCB preview for index.circuit.tsx
SchematicSchematic preview for index.circuit.tsx
import { E73_2G4M08S1C } from "./imports/E73_2G4M08S1C"
import { TMAG5273A2QDBVR } from "./imports/TMAG5273A2QDBVR"
import { TS_1185_W_4P_H1_8_160 } from "./imports/TS_1185_W_4P_H1_8_160"
import { X1A0000610002 } from "./imports/X1A0000610002"
import { XDCR_1220_006 } from "./imports/XDCR_1220_006"
import { CL05B104KO5NNNC } from "./imports/CL05B104KO5NNNC"
import { A_0402CG120J500NT } from "./imports/A_0402CG120J500NT"
import { A_0402WGF4701TCE } from "./imports/A_0402WGF4701TCE"
import { A_0402WGF1002TCE } from "./imports/A_0402WGF1002TCE"

const jlc = (partNumber: string) => ({ jlcpcb: [partNumber] })

const pogoTestPointFootprint = () => (
  <footprint>
    <smtpad
      shape="circle"
      radius="0.75mm"
      pcbX={0}
      pcbY={0}
      portHints={["pin1"]}
    />
    <courtyardcircle pcbX={0} pcbY={0} radius="0.9mm" />
  </footprint>
)

export default () => (
  <board
    title="MagSafe Spin Counter"
    width="48mm"
    height="48mm"
    borderRadius="24mm"
    thickness="1.2mm"
    layers={2}
    material="fr4"
    fabricatorPreset="jlcpcb_economy_20260912"
    doubleSidedAssembly
    solderMaskColor="black"
    silkscreenColor="white"
    minTraceWidth="0.15mm"
    defaultTraceWidth="0.18mm"
    nominalTraceWidth="0.18mm"
    minTraceToPadEdgeClearance="0.15mm"
    minTraceToHoleEdgeClearance="0.2mm"
    minPadEdgeToPadEdgeClearance="0.15mm"
    minBoardEdgeClearance="0.25mm"
    minViaEdgeToPadEdgeClearance="0.13mm"
    minViaHoleEdgeToViaHoleEdgeClearance="0.2mm"
    minPlatedHoleDrillEdgeToDrillEdgeClearance="0.2mm"
    minViaHoleDiameter="0.3mm"
    minViaPadDiameter="0.45mm"
    defaultViaTenting="top_and_bottom_tented"
    autorouter="auto_local"
    autorouterEffortLevel="10x"
    schTraceAutoLabelEnabled
    schMaxTraceDistance={5}
  >
    <hole name="H1" diameter="5.5mm" pcbX={0} pcbY={0} />

    <keepout
      shape="rect"
      width="15.5mm"
      height="7mm"
      pcbX={0}
      pcbY={-20.4}
      layers={["top", "bottom"]}
      excludeRefs={[".U1"]}
    />

    <schematicsheet
      name="Main"
      displayName="MagSafe Spin Counter"
      sheetIndex={0}
      sheetSize="A4"
    />

      <XDCR_1220_006
        name="BT1"
        schSheetName="Main"
        layer="bottom"
        pcbX={0}
        pcbY={11}
        schX={-14}
        schY={5}
        schRotation={-90}
      />

      <capacitor
        name="C1"
        schSheetName="Main"
        capacitance="47uF"
        footprint="1206"
        supplierPartNumbers={jlc("C68361")}
        pcbX={-11}
        pcbY={-1}
        schX={-11}
        schY={5}
        schRotation={-90}
      />
      <capacitor
        name="C2"
        schSheetName="Main"
        capacitance="4.7uF"
        footprint="0603"
        supplierPartNumbers={jlc("C8032")}
        pcbX={-11}
        pcbY={1.2}
        schX={-9.5}
        schY={5}
        schRotation={-90}
      />
      <CL05B104KO5NNNC
        name="C3"
        schSheetName="Main"
        pcbX={-8.1}
        pcbY={1.2}
        schX={-8}
        schY={5}
        schRotation={-90}
      />

      <E73_2G4M08S1C
        name="U1"
        schSheetName="Main"
        pcbX={0}
        pcbY={-13.3}
        schX={0}
        schY={0}
      />

      <X1A0000610002
        name="Y1"
        schSheetName="Main"
        pcbX={5.1}
        pcbY={-2}
        pcbRotation={180}
        schX={3.9}
        schY={-5.9}
        schOrientation="horizontal"
      />
      <A_0402CG120J500NT
        name="C4"
        schSheetName="Main"
        pcbX={6.4}
        pcbY={0.2}
        schX={2.08}
        schY={-6.2}
        schRotation={-90}
      />
      <A_0402CG120J500NT
        name="C5"
        schSheetName="Main"
        pcbX={4}
        pcbY={0.2}
        pcbRotation={180}
        schX={5.72}
        schY={-6.2}
        schRotation={-90}
      />

      <TMAG5273A2QDBVR
        name="U2"
        schSheetName="Main"
        pcbX={15}
        pcbY={0}
        pcbRotation={90}
        schX={10}
        schY={0}
      />
      <CL05B104KO5NNNC
        name="C6"
        schSheetName="Main"
        pcbX={11.9}
        pcbY={-2.5}
        schX={-6.5}
        schY={5}
        schRotation={-90}
      />
      <A_0402WGF4701TCE
        name="R1"
        schSheetName="Main"
        pcbX={10.5}
        pcbY={4.5}
        schX={7}
        schY={-2.5}
        schRotation={-90}
      />
      <A_0402WGF4701TCE
        name="R2"
        schSheetName="Main"
        pcbX={13.5}
        pcbY={4.5}
        schX={9}
        schY={-2.5}
        schRotation={-90}
      />
      <A_0402WGF1002TCE
        name="R3"
        schSheetName="Main"
        pcbX={17}
        pcbY={4.5}
        schX={11}
        schY={-2.5}
        schRotation={-90}
      />

      <TS_1185_W_4P_H1_8_160
        name="SW1"
        schSheetName="Main"
        pcbX={-13.5}
        pcbY={12}
        schX={-11}
        schY={-4}
      />

      <testpoint
        name="TP1"
        schSheetName="Main"
        footprint={pogoTestPointFootprint()}
        pcbX={-18}
        pcbY={-6}
        schX={-6}
        schY={-4}
        connections={{ pin1: "net.GND" }}
      />
      <testpoint
        name="TP2"
        schSheetName="Main"
        footprint={pogoTestPointFootprint()}
        pcbX={-18}
        pcbY={-3}
        schX={-4.5}
        schY={-4}
        connections={{ pin1: "net.VBAT" }}
      />
      <testpoint
        name="TP3"
        schSheetName="Main"
        footprint={pogoTestPointFootprint()}
        pcbX={-18}
        pcbY={0}
        schX={-3}
        schY={-4}
        connections={{ pin1: "net.SWDIO" }}
      />
      <testpoint
        name="TP4"
        schSheetName="Main"
        footprint={pogoTestPointFootprint()}
        pcbX={-18}
        pcbY={3}
        schX={-1.5}
        schY={-4}
        connections={{ pin1: "net.SWDCLK" }}
      />
      <testpoint
        name="TP5"
        schSheetName="Main"
        footprint={pogoTestPointFootprint()}
        pcbX={-18}
        pcbY={6}
        schX={0}
        schY={-4}
        connections={{ pin1: "net.RESET" }}
      />

      <trace from="BT1.pin1" to="net.VBAT" width="0.4mm" />
      <trace from="BT1.pin2" to="net.GND" width="0.4mm" />

      <trace from="U1.VDD" to="net.VBAT" width="0.3mm" />
      <trace from="U1.VDDH" to="net.VBAT" width="0.3mm" />
      <trace from="U1.GND1" to="net.GND" width="0.3mm" />
      <trace from="U1.GND2" to="net.GND" width="0.3mm" />
      <trace from="U1.GND3" to="net.GND" width="0.3mm" />

      <trace from="C1.pin1" to="net.VBAT" width="0.3mm" />
      <trace from="C1.pin2" to="net.GND" width="0.3mm" />
      <trace from="C2.pin1" to="net.VBAT" width="0.3mm" />
      <trace from="C2.pin2" to="net.GND" width="0.3mm" />
      <trace from="C3.pin1" to="net.VBAT" width="0.25mm" />
      <trace from="C3.pin2" to="net.GND" width="0.25mm" />

      <trace from="U1.SCL" to="net.SCL" />
      <trace
        from="U1.SDA"
        to="net.SDA"
        pcbRouteHints={[{ x: 3.25, y: -8.55, via: true, to_layer: "bottom" }]}
      />
      <trace
        from="U1.HALL_INT"
        to="net.HALL_INT"
        pcbRouteHints={[{ x: 0.55, y: -8.55, via: true, to_layer: "bottom" }]}
      />
      <trace from="U2.SCL" to="net.SCL" />
      <trace from="U2.SDA" to="net.SDA" />
      <trace from="U2.N_INT" to="net.HALL_INT" />
      <trace from="U2.VCC" to="net.VBAT" width="0.25mm" />
      <trace from="U2.GND" to="net.GND" width="0.25mm" />
      <trace from="U2.TEST" to="net.GND" width="0.25mm" />
      <trace from="C6.pin1" to="net.VBAT" width="0.25mm" />
      <trace from="C6.pin2" to="net.GND" width="0.25mm" />

      <trace from="R1.pin1" to="net.VBAT" />
      <trace from="R1.pin2" to="net.SCL" />
      <trace from="R2.pin1" to="net.VBAT" />
      <trace from="R2.pin2" to="net.SDA" />
      <trace from="R3.pin1" to="net.VBAT" />
      <trace from="R3.pin2" to="net.HALL_INT" />

      <trace name="XL1_CORE" from="U1.XL1" to="Y1.pin1" pcbStraightLine width="0.15mm" />
      <trace name="XL2_CORE" from="U1.XL2" to="Y1.pin2" pcbStraightLine width="0.15mm" />
      <trace name="XL1_LOAD" from="Y1.pin1" to="C4.pin1" pcbStraightLine width="0.15mm" />
      <trace name="XL2_LOAD" from="Y1.pin2" to="C5.pin1" pcbStraightLine width="0.15mm" />
      <trace from="C4.pin2" to="net.GND" />
      <trace from="C5.pin2" to="net.GND" />

      <trace from="U1.SWDIO" to="net.SWDIO" />
      <trace from="U1.SWDCLK" to="net.SWDCLK" />
      <trace from="U1.RESET" to="net.RESET" />
      <trace from="SW1.pin1" to="net.RESET" />
      <trace from="SW1.pin2" to="net.GND" />
    <copperpour
      name="GND_TOP"
      connectsTo="net.GND"
      layer="top"
      clearance="0.2mm"
      boardEdgeMargin="0.3mm"
      cutoutMargin="0.25mm"
    />
    <copperpour
      name="GND_BOTTOM"
      connectsTo="net.GND"
      layer="bottom"
      clearance="0.2mm"
      boardEdgeMargin="0.3mm"
      cutoutMargin="0.25mm"
    />

    <silkscreentext
      text="MAGSAFE SPIN COUNTER"
      pcbX={0}
      pcbY={20.5}
      fontSize="1mm"
      anchorAlignment="center"
    />
    <silkscreentext
      text="TMAG5273 r=15mm"
      pcbX={14}
      pcbY={6}
      fontSize="0.7mm"
      anchorAlignment="center"
    />
    <silkscreentext
      text="G V D C R"
      pcbX={-20}
      pcbY={0}
      pcbRotation={90}
      fontSize="0.7mm"
      anchorAlignment="center"
    />
  </board>
)