astra/pd-power-supply
USB-PD Power Supply with RP2040 controller
- Version
- 1.1.6
- License
- unset
- Stars
- 0
layout.ts
// Physical and schematic placement are intentionally independent.
// Small SMD controller parts sit under the OLED, which is mounted 6 mm above the PCB.
const pcb: Record<string, [number, number]> = {
"J_PWR": [
-34.8,
6
],
"U_PD": [-24,10],
"C_PD": [-18.8,12],
"F1": [
-14,
19
],
"C_PD_IN": [-24,15.5],
"J_DATA": [
-34.8,
-6
],
"R_CC1": [
-32.5,
12.8
],
"R_CC2": [
-29.3,
12.8
],
"R_DP": [
-26,
-3
],
"R_DM": [
-26,
-1
],
"C_USB": [
-27,
-5
],
"D_AUX": [
21,
19
],
"D_USB": [
-21.7,
18.2
],
"U_LOGIC": [
11,
9.5
],
"C_LOGIC_IN": [
21,
14.5
],
"C_LOGIC_HF": [
15,
16.5
],
"L_LOGIC": [
9,
19
],
"C_LOGIC_OUT1": [
19,
1
],
"C_LOGIC_OUT2": [
24,
-2
],
"U_MCU": [
-16,
5
],
"C_IO1": [
-13,
10
],
"C_IO2": [
-10,
6
],
"C_IO3": [
-10,
-1
],
"C_IO4": [
-22,
2
],
"C_IO5": [-22,4.5],
"C_IO6": [-18.5,10],
"C_UV": [
-10,
9
],
"C_AV": [
-10,
3
],
"C_DV1": [
-16,
11
],
"C_DV2": [
-20,
-1
],
"C_VREGI": [
-8,
6
],
"C_VREGO": [
-8,
9
],
"U_FLASH": [
-2,
5
],
"C_FLASH": [
-1,
12
],
"R_CS": [
-6,
-2
],
"R_BOOT": [
-9,
-6
],
"SW_BOOT": [
34,
7
],
"SW_RESET": [
-9,
-12
],
"R_RUN": [
-7,
0
],
"Y1": [
-16,
-3
],
"R_XTAL": [
-13,
0
],
"C_X1": [
-19,
-4.5
],
"C_X2": [
-13,
-4.5
],
"R_KNOB": [
-26,
1
],
"C_KNOB": [
-26,
4
],
"R_KNOB_PD": [-28.5,7],
"R_BLEED": [
31,
-16
],
"R_SHUNT": [
33,
-11
],
"J_LEVER": [
22,
-13.3
],
"U_SENSE": [
32,
-3
],
"C_SENSE": [
27,
2
],
"R_SDA": [
8,
-1
],
"R_SCL": [
13,
-2
],
"R_PD_CFG": [-27.8,10],
"R_PG": [-20,15],
"C_BST1": [
8,
14.5
],
"C_BST2": [12,14.5],
"C_VCC": [
17,
11.5
],
"R_FB_TOP": [
12,
3.5
],
"R_FB_BOT": [
12,
0.5
],
"R_RT": [
5,
3.5
],
"R_COMP": [
19,
8.5
],
"C_COMP": [
22,
8.5
],
"R_FF": [
23,
3.5
],
"C_FF": [
16,
3.5
],
"RV_COARSE": [
-21,
-14.5
],
"RV_FINE": [
3,
-14.5
],
"R_FINE": [
6,
-3
],
"C_FINE": [
6,
-6
],
"R_FINE_PD": [
9,
-6
],
"J_I2C": [
-3,
17.8
],
"R_PD_SDA": [
-17,
14
],
"R_PD_SCL": [
-14,
16
],
"J_SWITCH": [
-37.55,
16.5
],
"U_LOAD": [
26,
14
],
"R_LOAD_EN": [
30,
13
],
"R_LOAD_ILM": [
30,
17
],
"C_LOAD_DVDT": [25,9],
"C_LOAD_IN": [
28,
20
],
"C_LOAD_OUT": [36,2.5]
}
const schematic: Record<string, [string, string, number, number, number]> = {
"J_PWR": [
"pd",
"pd_input",
-6.5,
2.5,
0
],
"U_PD": [
"pd",
"pd_input",
0.0,
2.0,
0
],
"R_PD1": [
"pd",
"pd_input",
-3.5,
5.0,
0
],
"R_PD2": [
"pd",
"pd_input",
-3.5,
3.5,
0
],
"C_PD": [
"pd",
"pd_input",
-1.5,
5.0,
270
],
"F1": [
"pd",
"pd_input",
4.0,
5.0,
0
],
"C_PD_IN": [
"pd",
"pd_input",
-4.5,
5.0,
270
],
"Q_CFG1": [
"pd",
"cfg",
-6.0,
-3.0,
0
],
"R_CFG1": [
"pd",
"cfg",
-6.0,
-1.0,
90
],
"R_GATE1": [
"pd",
"cfg",
-8.0,
-3.5,
270
],
"Q_CFG2": [
"pd",
"cfg",
0.0,
-3.0,
0
],
"R_CFG2": [
"pd",
"cfg",
0.0,
-1.0,
90
],
"R_GATE2": [
"pd",
"cfg",
-2.0,
-3.5,
270
],
"Q_CFG3": [
"pd",
"cfg",
6.0,
-3.0,
0
],
"R_CFG3": [
"pd",
"cfg",
6.0,
-1.0,
90
],
"R_GATE3": [
"pd",
"cfg",
4.0,
-3.5,
270
],
"D_AUX": [
"logic",
"logic",
-6.5,
2.5,
0
],
"D_USB": [
"logic",
"logic",
-6.5,
0.0,
0
],
"C_LOGIC_IN": [
"logic",
"logic",
-4.2,
0.5,
270
],
"C_LOGIC_HF": [
"logic",
"logic",
-1.6,
0.5,
270
],
"U_LOGIC": [
"logic",
"logic",
1.0,
2.0,
0
],
"C_BST": [
"logic",
"logic",
3.5,
4.5,
0
],
"L_LOGIC": [
"logic",
"logic",
5.0,
2.0,
0
],
"C_LOGIC_OUT1": [
"logic",
"logic",
7.0,
0.5,
270
],
"C_LOGIC_OUT2": [
"logic",
"logic",
9.6,
0.5,
270
],
"J_DATA": [
"usb",
"data",
-6.0,
1.5,
0
],
"R_CC1": [
"usb",
"data",
-2.5,
3.5,
270
],
"R_CC2": [
"usb",
"data",
-0.5,
3.5,
270
],
"R_DP": [
"usb",
"data",
-2.0,
0.5,
0
],
"R_DM": [
"usb",
"data",
-2.0,
-1.0,
0
],
"C_USB": [
"usb",
"data",
-6.0,
5.0,
270
],
"SW_BOOT": [
"usb",
"boot",
3.5,
2.5,
0
],
"R_BOOT": [
"usb",
"boot",
6.5,
2.5,
0
],
"R_CS": [
"usb",
"boot",
8.5,
4.0,
270
],
"SW_RESET": [
"usb",
"boot",
3.5,
-2.0,
0
],
"R_RUN": [
"usb",
"boot",
6.5,
-0.5,
270
],
"U_MCU": [
"mcu",
"mcu",
-4.5,
0.0,
0
],
"C_IO1": [
"mcu",
"decoupling",
2.5,
4.5,
270
],
"C_IO2": [
"mcu",
"decoupling",
4.5,
4.5,
270
],
"C_IO3": [
"mcu",
"decoupling",
6.5,
4.5,
270
],
"C_IO4": [
"mcu",
"decoupling",
8.5,
4.5,
270
],
"C_IO5": [
"mcu",
"decoupling",
2.5,
1.5,
270
],
"C_IO6": [
"mcu",
"decoupling",
4.5,
1.5,
270
],
"C_UV": [
"mcu",
"decoupling",
6.5,
1.5,
270
],
"C_AV": [
"mcu",
"decoupling",
8.5,
1.5,
270
],
"C_DV1": [
"mcu",
"decoupling",
2.5,
-1.5,
270
],
"C_DV2": [
"mcu",
"decoupling",
4.5,
-1.5,
270
],
"C_VREGI": [
"mcu",
"decoupling",
6.5,
-1.5,
270
],
"C_VREGO": [
"mcu",
"decoupling",
8.5,
-1.5,
270
],
"U_FLASH": [
"support",
"flash",
-4.0,
1.5,
0
],
"C_FLASH": [
"support",
"flash",
-4.0,
4.5,
270
],
"Y1": [
"support",
"clock",
5.0,
1.5,
0
],
"R_XTAL": [
"support",
"clock",
8.0,
2.0,
0
],
"C_X1": [
"support",
"clock",
3.0,
-1.0,
270
],
"C_X2": [
"support",
"clock",
7.0,
-1.0,
270
],
"RV1": [
"io",
"knob",
-6.0,
4.0,
270
],
"R_KNOB": [
"io",
"knob",
-3.0,
4.0,
0
],
"C_KNOB": [
"io",
"knob",
-1.0,
2.5,
270
],
"R_KNOB_PD": [
"io",
"knob",
1.0,
2.5,
270
],
"U_SENSE": [
"io",
"monitor",
-4.5,
-2.5,
0
],
"C_SENSE": [
"io",
"monitor",
-7.5,
-2.5,
270
],
"R_SHUNT": [
"io",
"monitor",
0,
0.0,
0
],
"R_BLEED": [
"io",
"monitor",
-1.0,
-3.5,
270
],
"DS1": [
"io",
"display",
7.0,
4.0,
0
],
"R_SDA": [
"io",
"display",
4.0,
5.0,
270
],
"R_SCL": [
"io",
"display",
5.0,
3.0,
270
],
"J_SCREW": [
"io",
"outputs",
4.5,
-1.5,
0
],
"J_HEADER": [
"io",
"outputs",
7.5,
-1.5,
0
],
"J_LEVER": [
"io",
"outputs",
6.0,
-4.5,
0
]
}
const revised: Record<string, [string,string,number,number,number]> = {
J_SWITCH:['load','load_control',-6,3,0], U_LOAD:['load','load_control',0,2,0],
R_LOAD_EN:['load','load_control',-3,-1,270],R_LOAD_ILM:['load','load_control',3,-1,270],
C_LOAD_DVDT:['load','load_control',5,-1,270],C_LOAD_IN:['load','load_control',-3,5,270],C_LOAD_OUT:['load','load_control',4,5,270],
U_PD:['pd','pd_input',0,2,0], C_PD:['pd','pd_input',-3,4.5,270], R_PD_CFG:['pd','pd_input',2,4.5,270], R_PG:['pd','pd_input',6,4.5,270],
R_PD_SDA:['pd','cfg',-3,-2,270],R_PD_SCL:['pd','cfg',1,-2,270],
C_BST1:['logic','logic',-1,5,0], C_BST2:['logic','logic',3,5,0], C_VCC:['logic','logic',-2,-2,270],
R_FB_TOP:['logic','logic',8,3.5,270], R_FB_BOT:['logic','logic',6,-1,270],
R_RT:['logic','logic',0,-3,270], R_COMP:['logic','logic',3,-2,0], C_COMP:['logic','logic',4,-4,0],R_FF:['logic','logic',3,1,0], C_FF:['logic','logic',5,1,0],
RV_COARSE:['io','knob',-7,4,270],RV_FINE:['io','knob',-7,0.5,270],
R_FINE:['io','knob',-4,0.5,0],C_FINE:['io','knob',-2,-1,270], R_FINE_PD:['io','knob',0,-1,270],
J_I2C:['io','display',7,4,0],
}
export function placement(name: string) {
const sch=revised[name] ?? schematic[name]
if (!pcb[name] || !sch) throw new Error(`Missing placement for ${name}`)
const [pcbX, pcbY] = pcb[name]
const [schSheetName, schSectionName, schX, schY, schRotation] = sch
return {pcbX, pcbY, schSheetName, schSectionName, schX, schY, schRotation}
}
export const sheets = [
['pd','01 - USB-PD PPS / I2C control'],['logic','02 - Buck-boost logic supply'],
['usb','03 - USB data and boot'],['mcu','04 - RP2040 and decoupling'],
['support','05 - Flash and crystal'],['io','06 - Coarse / fine, JST display and outputs'],['load','07 - SMD toggle and output eFuse'],
] as const
export const sections = [
['pd_input','USB-C / CH224A programmable sink'],['cfg','Dedicated I2C1 / power-good'],
['logic','3.3 V buck-boost / diode OR'],['data','USB 2.0 data'],['boot','ROM boot and reset'],
['mcu','RP2040'],['decoupling','Decoupling'],['flash','2 MB QSPI flash'],['clock','12 MHz crystal'],
['load_control','Maintained toggle / 1.5 A overload protection'],['knob','Coarse / fine voltage request'],['monitor','Output sensing'],['display','JST-PH I2C display'],['outputs','WAGO output connector'],
] as const
export const sectionSheet: Record<string,string> = {load_control:'load',pd_input:'pd',cfg:'pd',logic:'logic',data:'usb',boot:'usb',mcu:'mcu',decoupling:'mcu',flash:'support',clock:'support',knob:'io',monitor:'io',display:'io',outputs:'io'}
export const sectionTitles: Record<string,[number,number]> = {load_control:[-8.5,6.1],pd_input:[-8.5,6.1],cfg:[-8.5,-0.5],logic:[-8.5,6.1],data:[-8.5,6.1],boot:[2.5,6.1],mcu:[-8.5,6.1],decoupling:[1.5,6.1],flash:[-8.5,6.1],clock:[1.5,6.1],knob:[-8.5,6.1],monitor:[-8.5,-2],display:[3,6.1],outputs:[3,0]}