rushabhcodes/ESP32-E-Reader

A compact ESP32-C3 e-reader PCB integrating LiPo charging/protection, USB-C, 3.3 V regulation, e-paper display bias generation, microSD storage, and tactile controls.

Version
1.0.85
License
unset
Stars
3

schematic-layout.ts

import type { SchematicPinArrangement } from "@tscircuit/props";

// Coordinates are local to each sheet. Keep related components beside their
// circuit rather than assigning positions in reference-number order.
export type SchematicPlacement = {
	schX: number;
	schY: number;
	schRotation?: number;
	schWidth?: number;
	schPinArrangement?: SchematicPinArrangement;
};

export const schematicGroups = [
	{
		name: "usb",
		sheet: "battery_usb",
		title: "USB-C input & ESD",
		x: 3,
		y: 15,
		refs: ["J1", "U2", "R7", "R8", "C2", "C3", "C4", "C5", "TP3"],
	},
	{
		name: "charger",
		sheet: "battery_usb",
		title: "Charging & system output",
		x: 14,
		y: 15,
		refs: ["U1", "R5", "R9", "R31", "R32", "D1", "C34", "C35", "TP1"],
	},
	{
		name: "protection",
		sheet: "battery_usb",
		title: "Battery protection",
		x: 8,
		y: 4,
		refs: ["BT1", "U3", "Q1", "C6", "R14", "R15"],
	},
	{
		name: "regulator",
		sheet: "mcu_power",
		title: "3.3 V buck-boost supply",
		x: 6,
		y: 17,
		refs: [
			"U5",
			"L2",
			"SW7",
			"R29",
			"C7",
			"C8",
			"C9",
			"C10",
			"C11",
			"C12",
			"C13",
			"TP2",
		],
	},
	{
		name: "mcu",
		sheet: "mcu_power",
		title: "ESP32-C3 & SPI interface",
		x: 8,
		y: 7.4,
		refs: ["U4", "C14", "C36", "C37", "C38", "R27", "R28", "R30", "JP1"],
	},
	{
		name: "reset",
		sheet: "mcu_power",
		title: "Reset / enable",
		x: 0,
		y: 7,
		refs: ["C1", "R4"],
	},
	{
		name: "battery_adc",
		sheet: "mcu_power",
		title: "Battery voltage sense",
		x: 18,
		y: 7,
		refs: ["R12", "R13", "TP6"],
	},
	{
		name: "display_interface",
		sheet: "display_power",
		title: "E-paper FPC & logic",
		x: 5,
		y: 16,
		refs: ["J2", "R18", "R19", "R21", "C15", "C19", "C20", "C21"],
	},
	{
		name: "display_pump",
		sheet: "display_power",
		title: "Display charge pump",
		x: 18,
		y: 16,
		refs: [
			"L1",
			"Q2",
			"R16",
			"R17",
			"C16",
			"D2",
			"D3",
			"D4",
			"C17",
			"C23",
			"C32",
			"TP4",
			"TP5",
		],
	},
	{
		name: "display_bias",
		sheet: "display_power",
		title: "Panel bias decoupling",
		x: 11,
		y: -3,
		refs: ["C22", "C25", "C27", "C28", "C29"],
	},
	{
		name: "sd",
		sheet: "storage",
		title: "Micro SD / shared SPI bus",
		x: 4,
		y: 9,
		refs: ["J4", "C24", "C30", "R20", "R23", "R24", "R25"],
	},
	{
		name: "system_buttons",
		sheet: "controls",
		title: "Reset & wake buttons",
		x: 2.5,
		y: 7.5,
		refs: ["S1", "S2", "R10"],
	},
	{
		name: "navigation",
		sheet: "controls",
		title: "ADC navigation keys",
		x: 12.5,
		y: 7.5,
		refs: ["SW2", "SW3", "SW4", "SW6", "R1", "R3", "R6", "R11"],
	},
] as const;

export const schematicLayout: Record<string, SchematicPlacement> = {
	// USB enters from the left; the charger and battery sit to its right.
	J1: { schX: 0, schY: 10, schWidth: 1.385 },
	U2: { schX: 5, schY: 9 },
	R7: { schX: 2.5, schY: 6, schRotation: -90 },
	R8: { schX: 5, schY: 6, schRotation: -90 },
	C2: { schX: 0, schY: 13 },
	C3: { schX: 2.5, schY: 13 },
	C4: { schX: 5, schY: 13 },
	C5: { schX: 7.5, schY: 13 },
	TP3: { schX: 9, schY: 13.8 },
	U1: {
		schX: 14,
		schY: 10,
		schPinArrangement: {
			leftSide: ["pin13", "pin6", "pin9", "pin7"],
			rightSide: ["pin10", "pin11", "pin2", "pin3", "pin14"],
			bottomSide: ["pin4", "pin5", "pin8", "pin15", "pin17", "pin1", "pin16", "pin12"],
		},
	},
	D1: { schX: 10.5, schY: 13, schRotation: -90 },
	R5: { schX: 10.5, schY: 11, schRotation: -90 },
	R31: { schX: 12.5, schY: 5.5, schRotation: -90 },
	R9: { schX: 15, schY: 5.5, schRotation: -90 },
	R32: { schX: 17.5, schY: 5.5, schRotation: -90 },
	C34: { schX: 20, schY: 9 },
	C35: { schX: 20, schY: 12 },
	TP1: { schX: 22, schY: 9.8 },
	BT1: { schX: 0, schY: 0.5 },
	R14: { schX: 4, schY: 1.5, schRotation: 90 },
	C6: { schX: 4, schY: -1 },
	U3: { schX: 7.2, schY: 0 },
	Q1: { schX: 14, schY: 0 },
	R15: { schX: 8, schY: -3, schRotation: 90 },
	// The inductor bridges the switching pins, with input/output banks nearby.
	U5: {
		schX: 8,
		schY: 12,
		schPinArrangement: {
			leftSide: ["pin1", "pin10", "pin11", "pin12"],
			rightSide: ["pin4", "pin5", "pin3", "pin14"],
			topSide: ["pin8", "pin9", "pin7", "pin6"],
			bottomSide: ["pin2", "pin13", "pin15"],
		},
	},
	L2: { schX: 8, schY: 15.3 },
	C9: { schX: 0, schY: 12 },
	C10: { schX: 2.5, schY: 12 },
	C11: { schX: 5, schY: 12 },
	C7: { schX: 12, schY: 12 },
	C8: { schX: 14, schY: 12 },
	C12: { schX: 16, schY: 12 },
	C13: { schX: 17.5, schY: 12 },
	TP2: { schX: 17.5, schY: 14.5 },
	SW7: { schX: 2, schY: 8.5 },
	R29: { schX: 5, schY: 8, schRotation: -90 },
	U4: {
		schX: 8,
		schY: 2,
		schPinArrangement: {
			topSide: ["pin1"],
			leftSide: [
				"pin2",
				"pin13",
				"pin14",
				"pin8",
				"pin15",
				"pin17",
				"pin18",
				"pin11",
			],
			rightSide: [
				"pin3",
				"pin4",
				"pin5",
				"pin12",
				"pin7",
				"pin10",
				"pin6",
				"pin16",
			],
			bottomSide: [
				"pin9",
				"pin19",
				"pin20",
				"pin21",
				"pin22",
				"pin23",
				"pin24",
				"pin25",
				"pin26",
				"pin27",
			],
		},
	},
	C14: { schX: 4, schY: 6.5 },
	C36: { schX: 6.5, schY: 6.5 },
	C37: { schX: 11, schY: 6.5 },
	C38: { schX: 13.5, schY: 6.5 },
	R4: { schX: 0, schY: 4.5, schRotation: 90 },
	C1: { schX: 0, schY: 2 },
	JP1: { schX: 3, schY: -1 },
	R27: { schX: 13, schY: 1, schRotation: 180 },
	R28: { schX: 13, schY: -1 },
	R30: { schX: 16, schY: 2.5, schRotation: -90 },
	R12: { schX: 20, schY: 3.5, schRotation: -90 },
	R13: { schX: 20, schY: 0.5, schRotation: -90 },
	TP6: { schX: 22, schY: 2 },
	// Logic on the connector's left; analog bias outputs on its right.
	J2: {
		schX: 7,
		schY: 8,
		schPinArrangement: {
			leftSide: [
				"pin1",
				"pin4",
				"pin9",
				"pin10",
				"pin11",
				"pin12",
				"pin13",
				"pin14",
				"pin25",
				"pin26",
			],
			rightSide: [
				"pin2",
				"pin3",
				"pin5",
				"pin18",
				"pin19",
				"pin20",
				"pin21",
				"pin22",
				"pin23",
				"pin24",
			],
			topSide: ["pin15", "pin16"],
			bottomSide: ["pin6", "pin7", "pin8", "pin17"],
		},
	},
	C15: { schX: 0, schY: 13 },
	C19: { schX: 2.5, schY: 13 },
	C20: { schX: 5, schY: 13 },
	C21: { schX: 7.5, schY: 13, schRotation: 90 },
	R19: { schX: 0, schY: 8, schRotation: 90 },
	R21: { schX: 2.5, schY: 8, schRotation: 90 },
	R18: { schX: 0, schY: 4.5, schRotation: 90 },
	L1: { schX: 16, schY: 13 },
	Q2: { schX: 16.1, schY: 8.1 },
	R16: { schX: 12.5, schY: 7, schRotation: -90 },
	R17: { schX: 16, schY: 5.5, schRotation: -90 },
	D4: { schX: 20, schY: 11, schRotation: 180 },
	C17: { schX: 23, schY: 11 },
	TP5: { schX: 25, schY: 11.8 },
	C16: { schX: 19.5, schY: 8, schRotation: -90 },
	D3: { schX: 22, schY: 7, schRotation: 90 },
	D2: { schX: 22, schY: 4 },
	C23: { schX: 25, schY: 4, schRotation: 90 },
	C32: { schX: 27.5, schY: 4 },
	TP4: { schX: 29.5, schY: 4.8 },
	C29: { schX: 5, schY: 0, schRotation: 90 },
	C25: { schX: 8, schY: 0, schRotation: 90 },
	C22: { schX: 11, schY: 0, schRotation: 90 },
	C28: { schX: 14, schY: 0, schRotation: 90 },
	C27: { schX: 17, schY: 0, schRotation: 90 },
	J4: {
		schX: 7,
		schY: 2,
		schPinArrangement: {
			leftSide: ["pin2", "pin3", "pin5", "pin7"],
			rightSide: [
				"pin1",
				"pin8",
				"pin9",
				"pin10",
				"pin11",
				"pin12",
				"pin13",
				"pin14",
			],
			topSide: ["pin4"],
			bottomSide: ["pin6"],
		},
	},
	C24: { schX: 0, schY: 6 },
	C30: { schX: 2.5, schY: 6 },
	R23: { schX: 0, schY: 2.5, schRotation: -90 },
	R20: { schX: 3, schY: 2.5, schRotation: -90 },
	R25: { schX: 11, schY: 4, schRotation: -90 },
	R24: { schX: 14, schY: 4, schRotation: -90 },
	S1: { schX: 0.5, schY: 3.2, schRotation: 90 },
	S2: { schX: 3.5, schY: 3.2, schRotation: 90 },
	R10: { schX: 3.5, schY: 5.6, schRotation: -90 },
	R11: { schX: 12.5, schY: 5.6, schRotation: -90 },
	SW2: { schX: 8, schY: 3.2, schRotation: 0 },
	R1: { schX: 8, schY: 1, schRotation: -90 },
	SW3: { schX: 11, schY: 3.2, schRotation: 0 },
	R3: { schX: 11, schY: 1, schRotation: -90 },
	SW4: { schX: 14, schY: 3.2, schRotation: 0 },
	R6: { schX: 14, schY: 1, schRotation: -90 },
	SW6: { schX: 17, schY: 3.2, schRotation: 0 },
};

export const controlButtonCaptions = [
	{ reference: "S1", text: "Reset" },
	{ reference: "S2", text: "Wake" },
	{ reference: "SW2", text: "Back" },
	{ reference: "SW3", text: "Confirm" },
	{ reference: "SW4", text: "Left" },
	{ reference: "SW6", text: "Right" },
] as const;