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