ShiboSoftwareDev/t113-s3-linux-computer-p9

The code defines a PCB subcircuit for a buck converter module featuring a TMI3112H IC, FTC252010S power switch, and associated passive components like capacitors and resistors for voltage regulation and feedback control.

Version
0.1.4
License
unset
Stars
0

components/buck-rail.tsx

import { FTC252010S1R0MBCA } from "../imports/FTC252010S1R0MBCA"
import { TMI3112H } from "../imports/TMI3112H"
import { C, R, cleanImportedSilk, part } from "./standard-passives"

type BuckRailProps = {
  id: string
  x: number
  y: number
  outputNet: string
  outputLabel: string
  feedbackTop: typeof part.r49k9 | typeof part.r453k
  enableFrom: string
  delayed?: boolean
  sectionName: string
}

export const BuckRail = ({
  id,
  x,
  y,
  outputNet,
  outputLabel,
  feedbackTop,
  enableFrom,
  delayed = false,
  sectionName,
}: BuckRailProps) => {
  const u = `U_${id}`
  const l = `L_${id}`

  return (
    <subcircuit
      name={`G_${id}`}
      pcbX={x}
      pcbY={y}
      width="14mm"
      height="9mm"
      autorouter="default"
      autorouterVersion="beta_pipeline9"
      autorouterEffortLevel="10x"
      defaultTraceWidth="0.15mm"
      exposeNets
    >
      <TMI3112H {...cleanImportedSilk} name={u} pcbX={0} pcbY={0} schSectionName={sectionName} />
      <FTC252010S1R0MBCA {...cleanImportedSilk} name={l} pcbX={4} pcbY={0.8} schSectionName={sectionName} />
      <C name={`C_${id}_IN`} capacitance={part.c10u.value} mpn={part.c10u.mpn} lcsc={part.c10u.lcsc} size="0603" x={-4.3} y={2.2} rotation={90} sectionName={sectionName} />
      <C name={`C_${id}_IN_HF`} capacitance={part.c100n.value} mpn={part.c100n.mpn} lcsc={part.c100n.lcsc}
        x={0} y={2.5} sectionName={sectionName} maxDecouplingTraceLength="4.5mm" />
      <C name={`C_${id}_OUT_A`} capacitance={part.c22u.value} mpn={part.c22u.mpn} lcsc={part.c22u.lcsc} size="0603" x={7.2} y={2.0} rotation={90} sectionName={sectionName} />
      <C name={`C_${id}_OUT_B`} capacitance={part.c10u.value} mpn={part.c10u.mpn} lcsc={part.c10u.lcsc} size="0603" x={7.2} y={-1.2} rotation={90} sectionName={sectionName} />
      <C name={`C_${id}_FF`} capacitance={part.c20p.value} mpn={part.c20p.mpn} lcsc={part.c20p.lcsc} x={-0.2} y={-2.3} sectionName={sectionName} />
      <R name={`R_${id}_FB_HI`} resistance={feedbackTop.value} mpn={feedbackTop.mpn} lcsc={feedbackTop.lcsc} x={-2.0} y={-2.3} sectionName={sectionName} />
      <R name={`R_${id}_FB_LO`} resistance={part.r100k.value} mpn={part.r100k.mpn} lcsc={part.r100k.lcsc} x={-2.0} y={-3.4} sectionName={sectionName} />
      <R name={`R_${id}_EN`} resistance={delayed ? part.r100k.value : part.r10k.value} mpn={delayed ? part.r100k.mpn : part.r10k.mpn} lcsc={delayed ? part.r100k.lcsc : part.r10k.lcsc} x={1.2} y={-2.8} rotation={90} sectionName={sectionName} />
      {delayed && <C name={`C_${id}_EN`} capacitance={part.c100n.value} mpn={part.c100n.mpn} lcsc={part.c100n.lcsc} x={2.6} y={-2.8} rotation={90} sectionName={sectionName} />}
      <silkscreentext text={outputLabel} pcbX={6} pcbY={4.2} fontSize="0.8mm" />

      <bus name={`${id}_SWITCH_NODE_TOP`} connections={[`${id}_SWITCH_NODE`]}
        pcbAllowedLayers={["top"]} routingPhaseIndex={-50} />

      <trace name={`${id}_INPUT_LOCAL`} from={`.${u} > .IN`} to={`.C_${id}_IN_HF > .pin1`}
        width="0.5mm" maxLength="5mm" maxViaCount={0} routingPhaseIndex={-47} />
      <trace name={`${id}_INPUT_FEED`} from={`.C_${id}_IN_HF > .pin1`} to="net.VBUS_5V" width="0.5mm" />
      <trace name={`${id}_GROUND`} from={`.${u} > .GND`} to={`.C_${id}_IN_HF > .pin2`} width="0.3mm" />
      <trace name={`${id}_SWITCH_NODE`} from={`.${u} > .LX`} to={`.${l} > .pin1`}
        width="0.6mm" maxLength="5mm" maxViaCount={0} routingPhaseIndex={-50} />
      <trace name={`${id}_INDUCTOR_OUTPUT`} from={`.${l} > .pin2`} to={`.C_${id}_OUT_A > .pin1`} width="0.8mm" />
      <trace name={`${id}_INPUT_BULK`} from={`.C_${id}_IN > .pin1`} to="net.VBUS_5V" width="0.6mm" />
      <trace name={`${id}_INPUT_BULK_GROUND`} from={`.C_${id}_IN > .pin2`} to="net.GND" width="0.4mm" />
      <trace name={`${id}_INPUT_HF_GROUND`} from={`.C_${id}_IN_HF > .pin2`} to="net.GND" width="0.3mm" />
      <trace name={`${id}_OUTPUT_A`} from={`.C_${id}_OUT_A > .pin1`} to={`.C_${id}_OUT_B > .pin1`} width="0.7mm" />
      <trace name={`${id}_OUTPUT_A_GROUND`} from={`.C_${id}_OUT_A > .pin2`} to={`.C_${id}_OUT_B > .pin2`} width="0.4mm" />
      <trace name={`${id}_OUTPUT_B`} from={`.C_${id}_OUT_B > .pin1`} to={`net.${outputNet}`} width="0.7mm" />
      <trace name={`${id}_OUTPUT_B_GROUND`} from={`.C_${id}_OUT_B > .pin2`} to={`.R_${id}_FB_LO > .pin2`} width="0.3mm" />
      <trace name={`${id}_FB_TOP`} from={`.C_${id}_OUT_B > .pin1`} to={`.R_${id}_FB_HI > .pin1`} maxLength="12mm" routingPhaseIndex={-49} />
      <trace name={`${id}_FB_FEEDBACK`} from={`.R_${id}_FB_HI > .pin2`} to={`.${u} > .FB`}
        maxLength="6mm" maxViaCount={0} routingPhaseIndex={-49} />
      <trace name={`${id}_FB_BOTTOM`} from={`.R_${id}_FB_LO > .pin1`} to={`.${u} > .FB`} routingPhaseIndex={-49} />
      <trace name={`${id}_FB_GROUND`} from={`.R_${id}_FB_LO > .pin2`} to="net.GND" />
      <trace name={`${id}_FF_OUTPUT`} from={`.C_${id}_FF > .pin1`} to={`.R_${id}_FB_HI > .pin1`} routingPhaseIndex={-49} />
      <trace name={`${id}_FF_FEEDBACK`} from={`.C_${id}_FF > .pin2`} to={`.${u} > .FB`} routingPhaseIndex={-49} />
      <trace name={`${id}_ENABLE_SOURCE`} from={`.R_${id}_EN > .pin1`} to={`net.${enableFrom}`} routingPhaseIndex={-48} />
      <trace name={`${id}_ENABLE_LOCAL`} from={`.R_${id}_EN > .pin2`} to={`.${u} > .EN`} maxLength="6mm" maxViaCount={0} routingPhaseIndex={-48} />
      {delayed && <trace name={`${id}_ENABLE_DELAY`} from={`.C_${id}_EN > .pin1`} to={`.${u} > .EN`} maxLength="6mm" maxViaCount={0} routingPhaseIndex={-48} />}
      {delayed && <trace name={`${id}_ENABLE_DELAY_GROUND`} from={`.C_${id}_EN > .pin2`} to={`.R_${id}_FB_LO > .pin2`} />}
    </subcircuit>
  )
}