gokul/usb3-sd-hub

Engineering draft: four-layer, computer-powered USB 3 hub with one USB-C host socket, two USB-C and two USB-A accessory sockets, and a full-size SD slot. Board and three schematic previews are available. Routing and production checks are incomplete; not fabrication ready.

Version
0.1.5
License
MIT
Stars
0

components/Passives.tsx

import { passiveModelForPart } from "../design/passive-models";
import { selectPassivePart } from "../design/part-selection";
import { placementFor } from "../design/placement";
import type { FootprintProp } from "@tscircuit/props";
export type PassiveSpec = {
	name: string;
	kind: "resistor" | "capacitor" | "inductor";
	rating: string;
	pcbX: number;
	pcbY: number;
	pcbRotation?: number;
	from: string;
	to: string;
	footprint?: FootprintProp;
	manufacturerPartNumber?: string;
};

export const Passives = ({ parts }: { parts: PassiveSpec[] }) => (
	<group
		pcbAnchorAlignment="center"
		pcbX="0mm"
		pcbY="0mm"
		pcbLayout={{ layoutMode: "none" }}
		schGrid
		gridCols={6}
		gridGap={2}
	>
		{parts.map((part) => {
			const manufacturerPartNumber =
				part.manufacturerPartNumber ?? selectPassivePart(part);
			const props = {
				name: part.name,
				pcbX: `${part.pcbX}mm`,
				pcbY: `${part.pcbY}mm`,
				pcbRotation: part.pcbRotation ?? 0,
				footprint: part.footprint ?? "0402",
				connections: { pin1: `net.${part.from}`, pin2: `net.${part.to}` },
				manufacturerPartNumber,
				cadModel: passiveModelForPart(manufacturerPartNumber),
				pcbStyle: { silkscreenFontSize: 0.5 },
				...placementFor(part.name),
			};
			if (part.kind === "resistor")
				return <resistor key={part.name} {...props} resistance={part.rating} />;
			if (part.kind === "inductor")
				return <inductor key={part.name} {...props} inductance={part.rating} />;
			return <capacitor key={part.name} {...props} capacitance={part.rating} />;
		})}
	</group>
);

export const Indicator = ({
	name,
	net,
	pcbX,
	pcbY,
	color = "green",
}: {
	name: string;
	net: string;
	pcbX: number;
	pcbY: number;
	color?: "green" | "blue";
}) => (
	<group
		pcbAnchorAlignment="center"
		pcbX="0mm"
		pcbY="0mm"
		pcbLayout={{ layoutMode: "none" }}
		name={`${name}_indicator`}
		schLayout={{ flex: "row", gap: 2 }}
	>
		<resistor
			name={`R_${name}`}
			resistance="2.2k"
			footprint="0402"
			pcbX={`${pcbX - 3.3}mm`}
			pcbY={`${pcbY}mm`}
			{...placementFor(`R_${name}`)}
			manufacturerPartNumber="RC0402FR-072K2L"
			connections={{ pin1: `net.${net}`, pin2: `net.${name}_A` }}
		/>
		<led
			name={name}
			color={color}
			footprint="0603"
			pcbX={pcbX}
			pcbY={pcbY}
			{...placementFor(name)}
			manufacturerPartNumber={
				color === "green" ? "LTST-C190KGKT" : "LTST-C190TBKT"
			}
			connections={{ anode: `net.${name}_A`, cathode: "net.GND" }}
		/>
	</group>
);