astra/pd-power-supply
USB-PD Power Supply with RP2040 controller
- Version
- 1.1.6
- License
- unset
- Stars
- 0
board.circuit.tsx
PCB
Schematic
import { jlcPart } from "./parts"
import { enclosure } from "tscircuit"
import { routeProtectedPads } from './routing'
import { Mounts } from "./enclosure"
import { placement, sheets, sections, sectionSheet, sectionTitles } from './layout'
import { LTC3115EFE_2_TRPBF as LogicSupply } from './imports/LTC3115EFE_2_TRPBF/LTC3115EFE_2_TRPBF'
import { A_2604_1102 as Wago2604 } from './imports/A_2604_1102/A_2604_1102'
import { RP2040 } from './imports/RP2040'
import { CH224A } from './imports/CH224A/CH224A'
import { FXL0630_100_M } from './imports/FXL0630_100_M/FXL0630_100_M'
import { TS665CJ } from './imports/TS665CJ/TS665CJ'
import { INA219AIDR } from './imports/INA219AIDR'
import { TYPE_C_16PIN_2MD_073_ as UsbC } from './imports/TYPE_C_16PIN_2MD_073_'
import { W25Q16JVSSIQ } from './imports/W25Q16JVSSIQ'
import { X322512MSB4SI } from './imports/X322512MSB4SI'
import { RK09K1110AAR as Dial } from './imports/RK09K1110AAR/RK09K1110AAR'
import { B4B_PH_K_S_LF__SN_ as JstPH4 } from './imports/B4B_PH_K_S_LF__SN_/B4B_PH_K_S_LF__SN_'
import { SS34 } from './imports/SS34'
const n = (s:string) => `net.${s}`
const R = ({name,value,x,y,a,b,fp='0603',rot=0}:any) => <resistor name={name} resistance={value} footprint={fp} pcbRotation={rot} {...placement(name)} {...jlcPart(name)} connections={{pin1:n(a),pin2:n(b)}} />
const C = ({name,value,x,y,a,b='GND',fp='0603',rot=0,maxDecouplingTraceLength}:any) => <capacitor name={name} maxDecouplingTraceLength={maxDecouplingTraceLength} capacitance={value} footprint={fp} pcbRotation={rot} {...placement(name)} {...jlcPart(name)} connections={{pin1:n(a),pin2:n(b)}} />
const usb = (power:boolean) => ({GND1:n('GND'),GND2:n('GND'),EH1:n('GND'),EH2:n('GND'),SHELL3:n('GND'),SHELL4:n('GND'),VBUS1:n(power?'PD_RAW':'USB5'),VBUS2:n(power?'PD_RAW':'USB5'),CC1:n(power?'PD_CC1':'DATA_CC1'),CC2:n(power?'PD_CC2':'DATA_CC2'),Dp1:n(power?'PD_DP':'USB_DP'),Dp2:n(power?'PD_DP':'USB_DP'),Dn1:n(power?'PD_DM':'USB_DM'),Dn2:n(power?'PD_DM':'USB_DM')})
import { JS102011SAQN as SmdToggle } from './imports/JS102011SAQN'
import { TPS259470ARPWR as LoadSwitch } from './imports/TPS259470ARPWR'
export default function PowerSupplyBoard() { return <board name="B1" width={80} height={45} schLayout={{layoutMode:"none"}} schMaxTraceDistance={2} schTraceAutoLabelEnabled layers={4} thickness={1.6} minViaHoleDiameter={0.3} minViaPadDiameter={0.6} pcbStyle={{viaPadDiameter:0.6,viaHoleDiameter:0.3}} minViaEdgeToPadEdgeClearance={0.15} autorouter={{local:true,traceClearance:0.15,algorithmFn:routeProtectedPads}}>
{sheets.map(([name,displayName],i)=><schematicsheet name={name} displayName={displayName} sheetIndex={i} sheetWidth={230} sheetHeight={165}>
{sections.filter(([section])=>sectionSheet[section]===name).map(([section,title])=><>
<schematicsection name={section} displayName="" />
<schematictext text={title} schX={sectionTitles[section][0]} schY={sectionTitles[section][1]} anchor="left" fontSize={0.28}/>
</>)}
<schematictext text={displayName} schX={0} schY={7.8} fontSize={0.5}/>
{name==='io' && <schematictext text="J_SWITCH: maintained SMD slide switch controls output eFuse enable" schX={0} schY={6.7} fontSize={0.2}/>}
</schematicsheet>)}
{[-6,6].flatMap(y=>[-2.89,2.89].map(dy=><keepout shape="circle" pcbX={-33.745} pcbY={y+dy} radius={0.5} layers={['top','bottom','inner1','inner2']} allowPlacements />))}
<net name="GND" isGroundNet nominalTraceWidth={1}/>
<copperpour name="GND_INNER1" layer="inner1" connectsTo="net.GND" unbroken clearance={0.4} useThermalReliefs={false}/>
<copperpour name="GND_INNER2" layer="inner2" connectsTo="net.GND" unbroken clearance={0.4} useThermalReliefs={false}/>
<net name="OUTPUT_BUS" isPowerNet nominalTraceWidth={1.5}/>
<net name="PD_RAW" isPowerNet nominalTraceWidth={1.5}/>
{['PD_BUS','VOUT'].map(name=><net name={name} isPowerNet nominalTraceWidth={1.5}/ >)}
{['V3V3','CORE','LOGIC_IN','USB5','LOGIC_VCC','LOGIC_SW1','LOGIC_SW2'].map(name=><net name={name} isPowerNet nominalTraceWidth={0.25}/ >)}
{/* Dedicated load paths prevent MST routing through the controller/sense pads.
TP_PD_RAW is a solderable power junction. USB escapes are 0.5 mm; all
remaining positive load trunks are 1.5 mm, with 0.3 mm drilled vias. */}
<group name="POWER_PATHS" pcbStyle={{viaPadDiameter:0.8,viaHoleDiameter:0.3}}>
<chip name="TP_PD_RAW" doNotPlace pcbX={-30.5} pcbY={8.399919} pinLabels={{pin1:'BUS'}}
footprint={<footprint><platedhole portHints={['pin1']} shape="circle" holeDiameter={0.5} outerDiameter={1.2}/></footprint>}
connections={{pin1:n('PD_RAW')}}/>
<trace name="USB_PWR_ESCAPE_A" from=".J_PWR > .VBUS1" to=".TP_PD_RAW > .pin1" width={0.5}
pcbPathRelativeTo=".TP_PD_RAW > .pin1" pcbPath={[{x:0,y:0}]}/>
<trace name="USB_PWR_ESCAPE_B" from=".TP_PD_RAW > .pin1" to=".J_PWR > .VBUS2" width={0.5}
pcbPath={[{x:0,y:1.1},{x:0,y:1.1,via:true,toLayer:'bottom'},{x:0,y:1.1},{x:-0.25,y:-1.850046},{x:-0.5,y:-4.800092},{x:-0.5,y:-4.800092,via:true,toLayer:'top'},{x:-0.5,y:-4.800092}]}/>
<trace name="PD_RAW_TRUNK" from=".TP_PD_RAW > .pin1" to=".F1 > .pin1" width={1.5}
pcbPath={[{x:1,y:2.400081},{x:1,y:2.400081,via:true,toLayer:'bottom'},{x:1,y:2.400081},{x:2.5,y:2.400081},{x:2.5,y:4.600081},{x:6.5,y:4.600081},{x:6.5,y:13.100081},{x:13.5,y:13.100081},{x:13.5,y:13.100081,via:true,toLayer:'top'},{x:13.5,y:13.100081}]}/>
<trace name="PD_BUS_TRUNK" from=".F1 > .pin2" to=".TP_LOAD_IN > .pin1" width={1.5}
pcbPath={[{x:1.4625,y:1.5},{x:1.4625,y:1.5,via:true,toLayer:'bottom'},{x:1.4625,y:1.5},{x:19,y:1.5},{x:31,y:-1},{x:31,y:-8.5},{x:40,y:-8.5},{x:40,y:-1}]}/>
<trace name="OUTPUT_BUS_TRUNK" from=".TP_LOAD_OUT > .pin1" to=".R_SHUNT > .pin1" width={1.5}
pcbPath={[{x:0,y:0},{x:0,y:0,via:true,toLayer:'bottom'},{x:0,y:0},{x:0,y:-15},{x:1.0375,y:-16},{x:1.0375,y:-19},{x:1.0375,y:-19,via:true,toLayer:'top'},{x:1.0375,y:-19}]}/>
<trace name="VOUT_WAGO_TRUNK" pcbPathRelativeTo=".R_SHUNT > .pin2" from=".R_SHUNT > .pin2" to=".J_LEVER > .pin1" width={1.5}
pcbPath={[{x:2.9625,y:-1.5},{x:2.9625,y:-1.5,via:true,toLayer:'bottom'},{x:2.9625,y:-1.5},{x:-3,y:-2.5},{x:-7,y:-2.5},{x:-13.499995,y:-0.5}]}/>
{[[26,18,'PD_BUS','TP_LOAD_IN'],[29,10,'OUTPUT_BUS','TP_LOAD_OUT']].map(([x,y,bus,name])=><chip name={name as string} doNotPlace pcbX={x as number} pcbY={y as number} pinLabels={{pin1:'BUS'}} footprint={<footprint><platedhole portHints={['pin1']} shape="circle" holeDiameter={0.5} outerDiameter={1.2}/></footprint>} connections={{pin1:n(bus as string)}}/>)}
{/* QFN power lands are 0.3 mm wide. Fan out at their opposite ends,
then immediately join 1.5 mm copper; the slide switch only drives EN. */}
{[[25.7650627,16.15,'PD_BUS','TP_LOAD_IN_FANOUT'],[26.2649347,11.85,'OUTPUT_BUS','TP_LOAD_OUT_FANOUT']].map(([x,y,bus,name])=><chip name={name as string} doNotPlace pcbX={x as number} pcbY={y as number} pinLabels={{pin1:'BUS'}} footprint={<footprint><smtpad portHints={['pin1']} shape="rect" width={0.3} height={0.3}/></footprint>} connections={{pin1:n(bus as string)}}/>)}
<trace name="LOAD_IN_ESCAPE" from=".U_LOAD > .IN" to=".TP_LOAD_IN_FANOUT > .pin1" width={0.3} pcbPath={[{x:-0.2349373,y:2.15}]}/>
<trace name="LOAD_OUT_ESCAPE" from=".U_LOAD > .OUT" to=".TP_LOAD_OUT_FANOUT > .pin1" width={0.3} pcbPath={[{x:0.2649347,y:-2.15}]}/>
<trace name="LOAD_IN_FANOUT" from=".TP_LOAD_IN_FANOUT > .pin1" to=".TP_LOAD_IN > .pin1" width={1.5} pcbPath={[{x:0,y:0},{x:0,y:0.9},{x:0.2349373,y:1.1349373}]}/>
<trace name="LOAD_OUT_FANOUT" from=".TP_LOAD_OUT_FANOUT > .pin1" to=".TP_LOAD_OUT > .pin1" width={1.5} pcbPath={[{x:0,y:0},{x:0.5,y:-0.5},{x:2.7350653,y:-1.85}]}/>
</group>
<trace name="CORE_INTERCONNECT" from=".U_MCU > .DVDD1" to=".U_MCU > .DVDD2" width={0.15}
pcbPath={[{x:-0.2,y:4.25},{x:-0.2,y:4.25,via:true,toLayer:'bottom'},{x:-0.2,y:4.25},{x:-4.42,y:4.25},{x:-4.42,y:-4.25},{x:-0.2,y:-4.25},{x:0.6,y:-4.25},{x:0.6,y:-4.25,via:true,toLayer:'top'},{x:0.6,y:-4.25}]}/>
<trace name="LOGIC_BST1_ESCAPE" from=".U_LOGIC > .BST1" to=".C_BST1 > .pin1" width={0.15}
pcbPath={[{x:-0.324866,y:3.45},{x:-0.324866,y:3.45,via:true,toLayer:'bottom'},{x:-0.324866,y:3.45},{x:-3.825,y:3.45},{x:-3.825,y:3.45,via:true,toLayer:'top'},{x:-3.825,y:3.45}]}/>
<trace name="LOGIC_INPUT_BRIDGE" from=".U_LOGIC > .VIN" to=".U_LOGIC > .PVIN" width={0.25}
pcbPath={[{x:1.625092,y:4.2},{x:-0.975106,y:4.2}]}/>
<trace name="LOGIC_RUN_FEED" pcbPathRelativeTo=".U_LOGIC > .RUN" from=".U_LOGIC > .RUN" to=".U_LOGIC > .VIN" width={0.15}
pcbPath={[{x:-2.275078,y:-3.75},{x:-2.275078,y:-3.75,via:true,toLayer:'bottom'},{x:-2.275078,y:-3.75},{x:-4.7,y:-3.75},{x:-4.7,y:4.1},{x:1.625092,y:4.1},{x:1.625092,y:4.1,via:true,toLayer:'top'},{x:1.625092,y:4.1}]}/>
<trace name="LOGIC_VIN_ESCAPE" from=".U_LOGIC > .VIN" to=".C_LOGIC_HF > .pin1" width={0.15}
pcbPath={[{x:1.625092,y:3.7},{x:3.175,y:4.3}]}/>
<>
<>
<UsbC name="J_PWR" {...jlcPart("J_PWR")} {...placement('J_PWR')} pcbRotation={270} connections={usb(true)}><enclosure.cutoutaperture shape="pill" width={9.5} height={3.8} heightDimensionOffset={1.6} margin={0.3}/></UsbC>
<CH224A pcbRotation={0} name="U_PD" {...jlcPart("U_PD")} {...placement('U_PD')} schWidth={2}
connections={{VHV:n('PD_RAW'),VBUS:n('PD_RAW'),CFG1:n('PD_CFG'),SCL:n('PD_SCL'),SDA:n('PD_SDA'),CC1:n('PD_CC1'),CC2:n('PD_CC2'),DP:n('PD_DP'),DM:n('PD_DM'),PG:n('PD_PG'),GND:n('GND')}}/>
<C name="C_PD" {...jlcPart("C_PD")} value="1uF" a="PD_RAW" fp="0805" />
{/* 6.8k CFG1 strap enables documented resistor/I2C mode; boot profile is 9V. */}
<R rot={90} name="R_PD_CFG" {...jlcPart("R_PD_CFG")} value="6.8k" a="PD_CFG" b="GND" />
<R name="R_PG" {...jlcPart("R_PG")} value="10k" a="PD_PG" b="V3V3" />
<R name="R_PD_SDA" {...jlcPart("R_PD_SDA")} value="4.7k" a="PD_SDA" b="V3V3" />
<R name="R_PD_SCL" {...jlcPart("R_PD_SCL")} value="4.7k" a="PD_SCL" b="V3V3" />
<fuse name="F1" {...jlcPart("F1")} currentRating="1.5A" voltageRating="63V" footprint="1206" {...placement('F1')} connections={{pin1:n('PD_RAW'),pin2:n('PD_BUS')}} />
<C name="C_PD_IN" {...jlcPart("C_PD_IN")} value="1uF" x={40} y={20} a="PD_RAW" fp="0805" />
</>
<>
<UsbC name="J_DATA" {...jlcPart("J_DATA")} {...placement('J_DATA')} pcbRotation={270} connections={usb(false)}><enclosure.cutoutaperture shape="pill" width={9.5} height={3.8} heightDimensionOffset={1.6} margin={0.3}/></UsbC>
<R name="R_CC1" {...jlcPart("R_CC1")} value="5.1k" x={-39} y={27} a="DATA_CC1" b="GND" />
<R name="R_CC2" {...jlcPart("R_CC2")} value="5.1k" x={-21} y={27} a="DATA_CC2" b="GND" />
<R name="R_DP" {...jlcPart("R_DP")} value="27" x={-30} y={27} a="USB_DP" b="MCU_DP" />
<R name="R_DM" {...jlcPart("R_DM")} value="27" x={-30} y={25} a="USB_DM" b="MCU_DM" />
<C name="C_USB" {...jlcPart("C_USB")} value="1uF" x={-41} y={22} a="USB5" />
</>
<>
<SS34 name="D_AUX" {...jlcPart("D_AUX")} {...placement('D_AUX')} connections={{pin1:n('LOGIC_IN'),pin2:n('PD_BUS')}} />
<SS34 name="D_USB" {...jlcPart("D_USB")} {...placement('D_USB')} connections={{pin1:n('LOGIC_IN'),pin2:n('USB5')}} />
<LogicSupply name="U_LOGIC" {...jlcPart("U_LOGIC")} {...placement('U_LOGIC')} schWidth={2.5} connections={{VIN:n('LOGIC_IN'),PVIN:n('LOGIC_IN'),RUN:n('LOGIC_IN'),PGND1:n('GND'),PGND2:n('GND'),PGND3:n('GND'),PGND4:n('GND'),GND1:n('GND'),GND2:n('GND'),EPAD:n('GND'),PVOUT:n('V3V3'),FB:n('LOGIC_FB'),VC:n('LOGIC_VC'),RT:n('LOGIC_RT'),VCC:n('LOGIC_VCC'),PVCC:n('LOGIC_VCC'),BST1:n('LOGIC_BST1'),BST2:n('LOGIC_BST2'),SW1:n('LOGIC_SW1'),SW2:n('LOGIC_SW2'),PWM_SYNC:n('GND')}}/>
<C name="C_LOGIC_IN" {...jlcPart("C_LOGIC_IN")} value="4.7uF" a="LOGIC_IN" fp="1210" />
<C name="C_LOGIC_HF" {...jlcPart("C_LOGIC_HF")} value="100nF" a="LOGIC_IN" maxDecouplingTraceLength={6} />
<C name="C_BST1" {...jlcPart("C_BST1")} value="100nF" a="LOGIC_BST1" b="LOGIC_SW1" />
<C name="C_BST2" {...jlcPart("C_BST2")} value="100nF" a="LOGIC_BST2" b="LOGIC_SW2" />
<C name="C_VCC" {...jlcPart("C_VCC")} value="4.7uF" a="LOGIC_VCC" fp="0805" />
<FXL0630_100_M name="L_LOGIC" {...placement("L_LOGIC")} {...jlcPart("L_LOGIC")} connections={{pin1:n("LOGIC_SW1"),pin2:n("LOGIC_SW2")}}/>
<C name="C_LOGIC_OUT1" {...jlcPart("C_LOGIC_OUT1")} value="47uF" a="V3V3" fp="1210" />
<C name="C_LOGIC_OUT2" {...jlcPart("C_LOGIC_OUT2")} value="47uF" a="V3V3" fp="1210" />
<R name="R_FB_TOP" {...jlcPart("R_FB_TOP")} value="232k" a="V3V3" b="LOGIC_FB" />
<R name="R_FB_BOT" {...jlcPart("R_FB_BOT")} value="100k" a="LOGIC_FB" b="GND" />
<R name="R_RT" {...jlcPart("R_RT")} value="47.5k" a="LOGIC_RT" b="GND" />
<R name="R_COMP" {...jlcPart("R_COMP")} value="15k" a="LOGIC_VC" b="COMP_C" />
<C name="C_COMP" {...jlcPart("C_COMP")} value="3.3nF" a="COMP_C" b="LOGIC_FB" />
<R name="R_FF" {...jlcPart("R_FF")} value="137k" a="V3V3" b="FF_C" />
<C name="C_FF" {...jlcPart("C_FF")} value="33pF" a="FF_C" b="LOGIC_FB" />
</>
</>
<>
<>
<RP2040 schWidth={3.5} schPinArrangement={{
topSide:{direction:'left-to-right',pins:['IOVDD1','IOVDD2','IOVDD3','IOVDD4','IOVDD5','IOVDD6','USB_VDD','ADC_AVDD','VREG_IN']},
bottomSide:{direction:'left-to-right',pins:['GND','TESTEN','DVDD1','DVDD2','VREG_VOUT']},
leftSide:{direction:'top-to-bottom',pins:[...Array.from({length:21},(_,i)=>`GPIO${i+5}`),'GPIO27_ADC1','GPIO28_ADC2','GPIO29_ADC3','SWCLK','SWD']},
rightSide:{direction:'top-to-bottom',pins:['USB_DP','USB_DM','QSPI_SS','QSPI_SCLK','QSPI_SD0','QSPI_SD1','QSPI_SD2','QSPI_SD3','XIN','XOUT','RUN','GPIO0','GPIO1','GPIO2','GPIO3','GPIO4','GPIO26_ADC0']}
}} name="U_MCU" {...jlcPart("U_MCU")} {...placement('U_MCU')} connections={{IOVDD1:n('V3V3'),IOVDD2:n('V3V3'),IOVDD3:n('V3V3'),IOVDD4:n('V3V3'),IOVDD5:n('V3V3'),IOVDD6:n('V3V3'),USB_VDD:n('V3V3'),ADC_AVDD:n('V3V3'),VREG_IN:n('V3V3'),VREG_VOUT:n('CORE'),DVDD1:n('CORE'),DVDD2:n('CORE'),GND:n('GND'),TESTEN:n('GND'),GPIO0:n('SDA'),GPIO1:n('SCL'),GPIO2:n('PD_SDA'),GPIO3:n('PD_SCL'),GPIO4:n('PD_PG'),GPIO26_ADC0:n('KNOB_ADC'),GPIO27_ADC1:n('FINE_ADC'),USB_DP:n('MCU_DP'),USB_DM:n('MCU_DM'),XIN:n('XIN'),XOUT:n('XOUT'),RUN:n('RUN'),QSPI_SS:n('QSPI_CS'),QSPI_SCLK:n('QSPI_CLK'),QSPI_SD0:n('QSPI_D0'),QSPI_SD1:n('QSPI_D1'),QSPI_SD2:n('QSPI_D2'),QSPI_SD3:n('QSPI_D3')}} />
{[
['C_IO1',-29,22,'V3V3'],['C_IO2',-26,18,'V3V3'],['C_IO3',-26,11,'V3V3'],['C_IO4',-38,14,'V3V3'],['C_IO5',-38,18,'V3V3'],['C_IO6',-37,22,'V3V3'],['C_UV',-26,21,'V3V3'],['C_AV',-26,15,'V3V3'],['C_DV1',-32,23,'CORE'],['C_DV2',-36,11,'CORE']
].map(([name,x,y,a])=><C name={name} value="100nF" x={x} y={y} a={a} fp="0402"/>)}
<C name="C_VREGI" {...jlcPart("C_VREGI")} value="1uF" x={-24} y={18} a="V3V3" fp="0402" />
<C name="C_VREGO" {...jlcPart("C_VREGO")} value="1uF" x={-24} y={21} a="CORE" fp="0402" />
</>
<>
<W25Q16JVSSIQ name="U_FLASH" {...jlcPart("U_FLASH")} {...placement('U_FLASH')} connections={{pin1:n('QSPI_CS'),pin2:n('QSPI_D1'),IO2:n('QSPI_D2'),GND:n('GND'),pin5:n('QSPI_D0'),CLK:n('QSPI_CLK'),IO3:n('QSPI_D3'),VCC:n('V3V3')}} />
<C name="C_FLASH" {...jlcPart("C_FLASH")} value="100nF" x={-19} y={20} a="V3V3" />
<R name="R_CS" {...jlcPart("R_CS")} value="10k" x={-21} y={6} a="QSPI_CS" b="V3V3" />
<R name="R_BOOT" {...jlcPart("R_BOOT")} value="1k" x={-24} y={5} a="QSPI_CS" b="BOOT" />
<TS665CJ name="SW_BOOT" {...placement("SW_BOOT")} {...jlcPart("SW_BOOT")} connections={{pin1:n("BOOT"),pin3:n("GND")}}/>
<TS665CJ name="SW_RESET" {...placement("SW_RESET")} {...jlcPart("SW_RESET")} connections={{pin1:n("RUN"),pin3:n("GND")}}/>
<R name="R_RUN" {...jlcPart("R_RUN")} value="10k" x={-38} y={7} a="RUN" b="V3V3" />
</>
<>
<X322512MSB4SI name="Y1" {...jlcPart("Y1")} loadCapacitance="20pF" {...placement('Y1')} connections={{pin1:n('XIN'),pin2:n('GND'),pin3:n('XTAL_OUT'),pin4:n('GND')}} />
<trace from=".U_MCU > .XIN" to=".Y1 > .pin1" pcbPath={[{x:-0.6,y:-4.6},{x:-2.2,y:-6.2},{x:-2.2,y:-8.15},{x:-1.1,y:-8.85}]} width={0.15}/>
<trace from=".Y1 > .pin1" to=".C_X1 > .pin1" pcbPath={[{x:-2.86,y:-0.85},{x:-3.51,y:-1.5}]} width={0.15}/>
<trace from=".Y1 > .pin3" to=".C_X2 > .pin1" pcbPath={[{x:2.3,y:0.85},{x:2.49,y:0.66},{x:2.49,y:-1.5}]} width={0.15}/>
<trace from=".Y1 > .pin3" to=".R_XTAL > .pin2" pcbPath={[{x:2.3,y:0.85},{x:3.51,y:2.06},{x:3.51,y:3}]} width={0.15}/>
<trace from=".U_MCU > .XOUT" to=".R_XTAL > .pin1" pcbPath={[{x:-0.2,y:-4.4},{x:0.4,y:-5},{x:2.49,y:-5}]} width={0.15}/>
<R name="R_XTAL" {...jlcPart("R_XTAL")} value="1k" x={-29} y={12} a="XOUT" b="XTAL_OUT" fp="0402" />
<C name="C_X1" {...jlcPart("C_X1")} value="33pF" x={-35} y={7.5} a="XIN" fp="0402" />
<C name="C_X2" {...jlcPart("C_X2")} value="33pF" x={-29} y={7.5} a="XTAL_OUT" fp="0402" />
</>
</>
<>
<>
<Dial name="RV_COARSE" {...jlcPart("RV_COARSE")} {...placement('RV_COARSE')} connections={{pin1:n('GND'),pin2:n('KNOB_WIPER'),pin3:n('V3V3'),EH1:n('GND'),EH2:n('GND')}}><enclosure.cutoutaperture shape="circle" radius={3.3} heightDimensionOffset={6.5} margin={0.3}/></Dial>
<Dial name="RV_FINE" {...jlcPart("RV_FINE")} {...placement('RV_FINE')} connections={{pin1:n('GND'),pin2:n('FINE_WIPER'),pin3:n('V3V3'),EH1:n('GND'),EH2:n('GND')}}><enclosure.cutoutaperture shape="circle" radius={3.3} heightDimensionOffset={6.5} margin={0.3}/></Dial>
<R name="R_KNOB" {...jlcPart("R_KNOB")} value="1k" a="KNOB_WIPER" b="KNOB_ADC" />
<C name="C_KNOB" {...jlcPart("C_KNOB")} value="100nF" a="KNOB_ADC" />
<R name="R_KNOB_PD" {...jlcPart("R_KNOB_PD")} value="1M" a="KNOB_ADC" b="GND" />
<R name="R_FINE" {...jlcPart("R_FINE")} value="1k" a="FINE_WIPER" b="FINE_ADC" />
<C name="C_FINE" {...jlcPart("C_FINE")} value="100nF" a="FINE_ADC" />
<R name="R_FINE_PD" {...jlcPart("R_FINE_PD")} value="1M" a="FINE_ADC" b="GND" />
<R name="R_BLEED" {...jlcPart("R_BLEED")} rot={90} value="10k" x={10} y={-26} a="VOUT" b="GND" fp="1206" />
</>
<>
<R name="R_SHUNT" {...jlcPart("R_SHUNT")} value="0.05" x={15} y={-19} a="OUTPUT_BUS" b="VOUT" fp="2512" />
<Wago2604 pcbRotation={0} name="J_LEVER" {...jlcPart("J_LEVER")} {...placement('J_LEVER')} connections={{pin1:n('VOUT'),pin2:n('GND')}}><enclosure.cutoutaperture shape="rect" width={16} height={18} heightDimensionOffset={9} margin={0.5}/></Wago2604>
</>
</>
<>
<>
<INA219AIDR name="U_SENSE" {...jlcPart("U_SENSE")} {...placement('U_SENSE')} connections={{pin1:n('GND'),pin2:n('GND'),pin3:n('SDA'),pin4:n('SCL'),pin5:n('V3V3'),pin6:n('GND'),pin7:n('VOUT'),pin8:n('OUTPUT_BUS')}} />
<C name="C_SENSE" {...jlcPart("C_SENSE")} value="100nF" x={41} y={-11} a="V3V3" />
<R name="R_SDA" {...jlcPart("R_SDA")} value="4.7k" x={1} y={17} a="SDA" b="V3V3" />
<R name="R_SCL" {...jlcPart("R_SCL")} value="4.7k" x={1} y={20} a="SCL" b="V3V3" />
<JstPH4 name="J_I2C" {...jlcPart("J_I2C")} {...placement('J_I2C')} connections={{pin1:n('GND'),pin2:n('V3V3'),pin3:n('SCL'),pin4:n('SDA')}}><enclosure.cutoutaperture shape="rect" width={27} height={19} widthDimensionOffset={0} heightDimensionOffset={-19.829771} margin={0.5}/></JstPH4>
</>
</>
{/* Signal-rated SMD slide switch drives EN, never the 1 A load. ITIMER/AUXOFF/FLT unused. */}
<SmdToggle name="J_SWITCH" {...jlcPart("J_SWITCH")} {...placement('J_SWITCH')} pcbRotation={270} connections={{pin1:n('GND'),pin2:n('OUTPUT_EN'),pin3:n('V3V3')}}>
<enclosure.cutoutaperture shape="rect" width={10} height={4} heightDimensionOffset={0} margin={0.3}/>
</SmdToggle>
<LoadSwitch name="U_LOAD" {...jlcPart("U_LOAD")} {...placement('U_LOAD')} connections={{pin1:n('OUTPUT_EN'),pin2:n('GND'),IN:n('PD_BUS'),OUT:n('OUTPUT_BUS'),DVDT:n('LOAD_DVDT'),GND:n('GND'),ILM:n('LOAD_ILM')}}/>
<R name="R_LOAD_EN" {...jlcPart("R_LOAD_EN")} value="100k" a="OUTPUT_EN" b="GND"/>
<R name="R_LOAD_ILM" {...jlcPart("R_LOAD_ILM")} value="2.21k" a="LOAD_ILM" b="GND"/>
<C name="C_LOAD_DVDT" {...jlcPart("C_LOAD_DVDT")} value="3.3nF" a="LOAD_DVDT"/>
<C name="C_LOAD_IN" {...jlcPart("C_LOAD_IN")} value="1uF" a="PD_BUS" fp="0805"/>
<C name="C_LOAD_OUT" {...jlcPart("C_LOAD_OUT")} value="1uF" a="OUTPUT_BUS" fp="0805"/>
<Mounts/>
<silkscreentext text="DATA" pcbX={-36} pcbY={-12.8} fontSize={1.25} isKnockout knockoutPadding={0.5} knockoutPaddingRight={2}/>
<silkscreentext text="PWR" pcbX={-36} pcbY={11.1} fontSize={1.25} isKnockout knockoutPadding={0.5} knockoutPaddingRight={2}/>
<silkscreentext text="PD PPS / 1.1.5 / D0.3" pcbX={13} pcbY={21.1} fontSize={1}/>
<silkscreentext text="COARSE" pcbX={-21} pcbY={-7} fontSize={1.3}/>
<silkscreentext text="FINE" pcbX={3} pcbY={-7} fontSize={1.3}/>
<silkscreentext text="GND 3V3 SCL SDA" pcbX={-3} pcbY={13} fontSize={0.8}/>
<silkscreentext text="POWER" pcbX={-37} pcbY={21.65} fontSize={0.8}/>
<silkscreentext text="OUT / 1A" pcbX={22} pcbY={-4.7} fontSize={0.8}/>
<silkscreentext text="BOOT" pcbX={34} pcbY={12.2} fontSize={0.8}/>
<silkscreentext text="RESET" pcbX={-9} pcbY={-5.8} fontSize={0.8}/>
</board> }