From 32d9e507aed6544477887c985658e7ad3867f260 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Thu, 27 Aug 2026 22:36:41 +0530 Subject: [PATCH 01/21] Add TIDA-010266 blood pressure monitor schematic --- README.md | 28 ++ ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 321 ++++++++++++ ...itor_TIDA010266.circuit-schematic.snap.svg | 96 ++++ imports/MSPM0L1306SRHBR.tsx | 86 +++- index.ts | 38 ++ lib/chips/ATL431LI.circuit.tsx | 14 + lib/chips/ATL431LIBIDBZR.circuit.tsx | 34 ++ lib/chips/DRV8210DSGR.circuit.tsx | 12 + lib/chips/LMV324A.circuit.tsx | 14 + lib/chips/LMV324AIPWR.circuit.tsx | 260 ++++++++++ lib/chips/SMPP2_03.circuit.tsx | 281 +++++++++++ lib/chips/TPS7A24.circuit.tsx | 14 + lib/chips/TPS7A2433DBVR.circuit.tsx | 141 ++++++ lib/chips/index.tsx | 7 + .../ADCFilter_TIDA010266.circuit.tsx | 103 ++++ ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 292 +++++++++++ ...reMonitorInterfaces_TIDA010266.circuit.tsx | 469 ++++++++++++++++++ ...nstrumentationAmplifier_INA350.circuit.tsx | 139 +++++- ...tionAmplifier_MSPM0_TIDA010266.circuit.tsx | 207 ++++++++ ...ntroller_MSPM0L1306_TIDA010266.circuit.tsx | 295 +++++++++++ ...MotorDriver_DRV8210_TIDA010266.circuit.tsx | 173 +++++++ ...anagement_TPS7A2433_TIDA010266.circuit.tsx | 84 ++++ ...ssureSensor_2SMPP03_TIDA010266.circuit.tsx | 86 ++++ ...mingInterface_MSPM0_TIDA010266.circuit.tsx | 178 +++++++ lib/subcircuits/TIDA010266.types.ts | 6 + lib/subcircuits/TIDA010266InlineNetPorts.tsx | 47 ++ ...eReference_ATL431LI_TIDA010266.circuit.tsx | 95 ++++ package.json | 3 +- tests/TIDA010266.test.tsx | 405 +++++++++++++++ 29 files changed, 3908 insertions(+), 20 deletions(-) create mode 100644 examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx create mode 100644 examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg create mode 100644 lib/chips/ATL431LI.circuit.tsx create mode 100644 lib/chips/ATL431LIBIDBZR.circuit.tsx create mode 100644 lib/chips/LMV324A.circuit.tsx create mode 100644 lib/chips/LMV324AIPWR.circuit.tsx create mode 100644 lib/chips/SMPP2_03.circuit.tsx create mode 100644 lib/chips/TPS7A24.circuit.tsx create mode 100644 lib/chips/TPS7A2433DBVR.circuit.tsx create mode 100644 lib/subcircuits/ADCFilter_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/Microcontroller_MSPM0L1306_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx create mode 100644 lib/subcircuits/TIDA010266.types.ts create mode 100644 lib/subcircuits/TIDA010266InlineNetPorts.tsx create mode 100644 lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx create mode 100644 tests/TIDA010266.test.tsx diff --git a/README.md b/README.md index 08291568..cd9c042f 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,34 @@ example composes the CC2564C Bluetooth controller, MSP430F5229 host, TAS2505 audio amplifier, BQ24074 battery charger, and TPS7A2018 1.8 V regulator into a connected Bluetooth speaker schematic. +The +[`BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx`](examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx) +example reproduces TI's TIDA-010266 blood-pressure and heart-rate monitor from +the released schematic and BOM. It preserves reference designators U1-U7, +R1-R23, C1-C18, J1-J10, TP1-TP7, and S1, including the DNP shutdown resistor +and both selectable instrumentation-amplifier paths. The example composes these +reusable modules: + +- `PowerManagement_TPS7A2433_TIDA010266` +- `VoltageReference_ATL431LI_TIDA010266` +- `InstrumentationAmplifier_INA350` +- `IntegratedInstrumentationAmplifier_MSPM0_TIDA010266` +- `AnalogFrontEnd_LMV324A_TIDA010266` +- `PressureSensor_2SMPP03_TIDA010266` +- `ADCFilter_TIDA010266` +- `Microcontroller_MSPM0L1306_TIDA010266` +- `ProgrammingInterface_MSPM0_TIDA010266` +- `MotorDriver_DRV8210_TIDA010266` +- `BloodPressureMonitorInterfaces_TIDA010266` + +The newly modeled bare parts are available under the readable names +`TPS7A24`, `ATL431LI`, `LMV324A`, and `SMPP2_03`. Exact-package exports for the +TI devices remain available as `TPS7A2433DBVR`, `ATL431LIBIDBZR`, and +`LMV324AIPWR`; `SMPP2_03` directly models Omron's `2SMPP03` package. +The example is schematic-first (`routingDisabled`): place and route the PCB only +after selecting the mechanical outline and validating medical-device safety +requirements for the intended product. + ## System Block Builder The standalone [`system-block-ui`](system-block-ui/README.md) app provides a diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx new file mode 100644 index 00000000..717f827d --- /dev/null +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -0,0 +1,321 @@ +import { + ADCFilter_TIDA010266, + AnalogFrontEnd_LMV324A_TIDA010266, + BloodPressureMonitorInterfaces_TIDA010266, + InstrumentationAmplifier_INA350, + IntegratedInstrumentationAmplifier_MSPM0_TIDA010266, + Microcontroller_MSPM0L1306_TIDA010266, + MotorDriver_DRV8210_TIDA010266, + PowerManagement_TPS7A2433_TIDA010266, + PressureSensor_2SMPP03_TIDA010266, + ProgrammingInterface_MSPM0_TIDA010266, + VoltageReference_ATL431LI_TIDA010266, +} from "@tsci/tscircuit.ti"; +import "tscircuit"; + +const SectionTitle = ({ + title, + schX, + schY, +}: { + title: string; + schX: number; + schY: number; +}) => ( + +); + +/** + * Complete TIDA-010266 low-cost blood-pressure and heart-rate monitor. + * + * Electrical values, reference designators, jumper topology, test points, + * programming interface, pressure signal chain, and pump/valve driver follow + * TI TIDUF53 Figure 4-1 and the TIDMCH8/TIDMCH9 design files. + */ +export default () => ( + + + {/* Native section metadata drives divider placement and section-aware routing. */} + + + + + + + + + + + {/* Centered titles sit inside, rather than directly on, each top divider. */} + + + + + + + + + + + + + + + + + + + + + + + + + {/* R23 is intentionally not populated in TI's released assembly. */} + + + + + + {/* Input, regulated rails, buffered references, and the common return. */} + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* Sensor drive/feedback and both selectable instrumentation paths. */} + + + + + + + + + + + + + + + + + + + + + + {/* Shared pressure signal, oscillometric filter output, and ADC filters. */} + + + + + + + + {/* UART, GPIO expansion, and SWD programming connections. */} + + + + + + + + + + + + + + + + + + + {/* MCU control of the DRV8210 pump and valve channels. */} + + + +); diff --git a/examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg b/examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg new file mode 100644 index 00000000..d119c2f9 --- /dev/null +++ b/examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg @@ -0,0 +1,96 @@ +112233445566AABBCCDDTPS7A2433DBVRU11IN2GND3EN4NC5OUTC51uFC14.7uFATL431LIBIDBZRU31CATHODE2REF3ANODER3330ΩC24.7uFC34.7uF691101710002J11GND2V_EXT61300211121J41VIN2V_EXT90121-0766J31UART_RTS2UART_RX3UART_TX4NC5UART_CTS6GNDTSW-110-08-G-SJ71SDA2SCL3SPI0_CS4PA35SPI0_POCI6SPI0_PICO7SPI_SCLK8PA79PA1010PA1161300311121J51OPA1_IN0_POS2BRIDGE_POS3INA_IN_POS61300311121J61OPA1_OUT2PRESSURE3INA_OUT61300311121J81OPA0_IN0_POS2BRIDGE_NEG3INA_IN_NEG61300311121J101GND2INA_GS3V3_3TP1TP2TP3TP4TP5TP6TP7FTSH-105-01-L-DV-KJ21V3_32SWDIO_HEADER3GND_34SWCLK_HEADER5GND_56NC_67GND_78NC_89GND_910RSTR127ΩR527ΩR247kΩC41100pFS1IN_NEGIN_POSOUTSHDNV_POSGSEPV_NEGREFC130.1uFInternal OPA01inverting_input2non_inverting_input3outputInternal OPA11inverting_input2non_inverting_input3outputR1420kΩR12499ΩR1120kΩR15499ΩR1320kΩLMV324AIPWRU21OUT_A2IN_NEG_A3IN_POS_A4V_POS5IN_POS_B6IN_NEG_B7OUT_B8OUT_C9IN_NEG_C10IN_POS_C11V_NEG12IN_POS_D13IN_NEG_D14OUT_DR410kΩR610kΩC114.7uFR1620kΩR9270kΩC9100nFC124.7uFR1720kΩR10270kΩC10100nFR1845.3kΩR214.99kΩMSPM0L1306SRHBRU41PA02PA13NRST4VDD5VSS6PA2_ROSC7PA38PA49PA510PA611PA712PA813PA914PA1015PA1116PA1217PA1318PA1419PA1520PA1621PA1722PA1823SWDIO24SWCLK25PA2126PA2227PA2328PA2429PA2530PA2631PA2732VCORE33EPC610uFC7100nFC80.47uFR710kΩR810kΩ2SMPP03U71VOUT_POS2NC3GND4VOUT_NEG5SUB6ICCR222.49kΩR19200ΩC17100pFR20200ΩC18100pFDRV8210DSGRU61VM2OUT13OUT24GND5IN26IN17MODE8VCC9EPC1422uFC15100nFC16100nFM22-5330405J91GND_12VALVE_OUT3PUMP_OUT4GND_4R230ΩINA_IN_NEGINA_GSOPA0_OUTOPA1_IN0_POSOPA0_OUTOPA0_OUTVREF_1_25VREF_1_25FILTER_1_OUTFILTER_1_OUTFILTER_2_HPSENSOR_DRIVEInput + ReferenceConnectorsJumpers / Test PointsProgrammingINA + FilterMCUPressure SensorADC FilterMotor DriverU5INA350CDS-+GS: low = 30, high/open = 50VINGNDV3_3VREF_2_5GNDV3_3GNDGNDGNDV_EXTVINVINUART_RTSUART_RXUART_TXUART_CTSSDASCLSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7PA10PA11OPA1_IN0_POSBRIDGE_POSINA_IN_POSOPA1_OUTPRESSUREINA_OUTOPA0_IN0_POSBRIDGE_NEGV3_3VREF_2_5OSCILLATIONSSWDIO_HEADERSWDIO_HEADERSWCLK_HEADERV3_3GNDRSTRSTSWDIOSWCLKIN_NEGIN_POSOUTSHDNVSGSGNDGNDREFOPA0_IN0_NEGOPA0_IN0_NEGOPA1_IN0_NEGOPA1_IN0_NEGOPA0_IN0_POSOPA1_OUTOPA1_OUTVREF_1_25VREF_DIVFILTER_1_INVOSCILLATIONSFILTER_2_INVFILTER_2_INVGNDIBIAS_SETV3_3IBIAS_FBSENSOR_DRIVEVREF_2_5PRESSUREFILTER_1_HPSDASCLRSTV3_3GNDGNDSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7UART_RXUART_TXPA10PA11UART_CTSUART_RTSPUMP_CONTROLVALVE_CONTROLOPA1_OUTOPA1_IN0_NEGOPA1_IN0_POSSWDIOSWCLKOPA0_OUTVREF_2_5OPA0_IN0_NEGOPA0_IN0_POSADC_OSCILLATIONSADC_PRESSUREVCOREVCOREBRIDGE_POSIBIAS_FBBRIDGE_NEGGNDPRESSUREADC_PRESSUREGNDOSCILLATIONSADC_OSCILLATIONSVINGNDVALVE_OUTVALVE_OUTPUMP_OUTPUMP_OUTPUMP_CONTROLVALVE_CONTROLV3_3SHDNGND diff --git a/imports/MSPM0L1306SRHBR.tsx b/imports/MSPM0L1306SRHBR.tsx index bf692572..88da1a2e 100644 --- a/imports/MSPM0L1306SRHBR.tsx +++ b/imports/MSPM0L1306SRHBR.tsx @@ -1,4 +1,4 @@ -import type { ChipProps } from "@tscircuit/props"; +import type { ChipProps, PinAttributeMap } from "@tscircuit/props"; const pinLabels = { pin1: ["PA0", "GPIO_PA0"], @@ -36,14 +36,98 @@ const pinLabels = { pin33: ["EP", "QFN_PAD", "VSS_PAD", "thermalpad"], } as const; +const gpioAttributes = { isGpio: true } as const; + +const pinAttributes = { + pin1: { + ...gpioAttributes, + capabilities: ["i2c_sda"], + activeCapability: "i2c_sda", + needsExternalPullup: true, + }, + pin2: { + ...gpioAttributes, + capabilities: ["i2c_scl"], + activeCapability: "i2c_scl", + needsExternalPullup: true, + }, + pin3: { mustBeConnected: true, canUseInternalPullup: true }, + pin4: { + requiresPower: true, + mustBeConnected: true, + shouldHaveDecouplingCapacitor: true, + recommendedDecouplingCapacitorCapacitance: "0.1uF", + }, + pin5: { requiresGround: true, mustBeConnected: true }, + pin6: { + ...gpioAttributes, + capabilities: ["spi_cs"], + activeCapability: "spi_cs", + }, + pin7: gpioAttributes, + pin8: { + ...gpioAttributes, + capabilities: ["spi_miso"], + activeCapability: "spi_miso", + }, + pin9: { + ...gpioAttributes, + capabilities: ["spi_mosi"], + activeCapability: "spi_mosi", + }, + pin10: { + ...gpioAttributes, + capabilities: ["spi_sck"], + activeCapability: "spi_sck", + }, + pin11: gpioAttributes, + pin12: { + ...gpioAttributes, + capabilities: ["uart_rx"], + activeCapability: "uart_rx", + }, + pin13: { + ...gpioAttributes, + capabilities: ["uart_tx"], + activeCapability: "uart_tx", + }, + pin14: gpioAttributes, + pin15: gpioAttributes, + pin16: gpioAttributes, + pin17: gpioAttributes, + pin18: gpioAttributes, + pin19: gpioAttributes, + pin20: gpioAttributes, + pin21: gpioAttributes, + pin22: gpioAttributes, + pin23: { ...gpioAttributes, includeInBoardPinout: true }, + pin24: { ...gpioAttributes, includeInBoardPinout: true }, + pin25: gpioAttributes, + pin26: gpioAttributes, + pin27: gpioAttributes, + pin28: gpioAttributes, + pin29: gpioAttributes, + pin30: gpioAttributes, + pin31: gpioAttributes, + pin32: { + providesPower: true, + mustBeConnected: true, + shouldHaveDecouplingCapacitor: true, + recommendedDecouplingCapacitorCapacitance: "0.47uF", + }, + pin33: { requiresGround: true, mustBeConnected: true }, +} satisfies Record; + export const MSPM0L1306SRHBR = (props: ChipProps) => { return ( & { + footprintVariant?: "sot_23_3" | (string & {}); +}; + +/** ATL431LI wrapper; currently backed by the B-grade I-temperature DBZ part. */ +export const ATL431LI = ({ + footprintVariant: _variant, + ...props +}: ATL431LIProps) => ; + +export default ATL431LI; diff --git a/lib/chips/ATL431LIBIDBZR.circuit.tsx b/lib/chips/ATL431LIBIDBZR.circuit.tsx new file mode 100644 index 00000000..c03eb252 --- /dev/null +++ b/lib/chips/ATL431LIBIDBZR.circuit.tsx @@ -0,0 +1,34 @@ +import type { ChipProps } from "@tscircuit/props"; +import "tscircuit"; + +const pinLabels = { + pin1: ["CATHODE", "K"], + pin2: ["REF", "REFERENCE"], + pin3: ["ANODE", "A", "GND"], +} as const; + +/** ATL431LI B-grade shunt reference in the DBZ 3-pin SOT-23 package. */ +export const ATL431LIBIDBZR = (props: ChipProps) => ( + +); + +export default ATL431LIBIDBZR; diff --git a/lib/chips/DRV8210DSGR.circuit.tsx b/lib/chips/DRV8210DSGR.circuit.tsx index 58abf1b7..8f093c02 100644 --- a/lib/chips/DRV8210DSGR.circuit.tsx +++ b/lib/chips/DRV8210DSGR.circuit.tsx @@ -12,10 +12,22 @@ const pinLabels = { pin9: ["EP", "PAD"], } as const; +const pinAttributes = { + pin1: { requiresPower: true }, + pin4: { requiresGround: true }, + pin8: { + requiresPower: true, + shouldHaveDecouplingCapacitor: true, + recommendedDecouplingCapacitorCapacitance: "0.1uF", + }, + pin9: { requiresGround: true }, +} as const; + export const DRV8210DSGR = (props: ChipProps) => { return ( & { + footprintVariant?: "tssop_14" | (string & {}); +}; + +/** LMV324A quad operational-amplifier wrapper for the 14-pin PW package. */ +export const LMV324A = ({ + footprintVariant: _variant, + ...props +}: LMV324AProps) => ; + +export default LMV324A; diff --git a/lib/chips/LMV324AIPWR.circuit.tsx b/lib/chips/LMV324AIPWR.circuit.tsx new file mode 100644 index 00000000..b67e04ed --- /dev/null +++ b/lib/chips/LMV324AIPWR.circuit.tsx @@ -0,0 +1,260 @@ +import type { ChipProps } from "@tscircuit/props"; +import "tscircuit"; + +const pinLabels = { + pin1: ["OUT_A", "OUTA"], + pin2: ["IN_NEG_A", "INA_NEG"], + pin3: ["IN_POS_A", "INA_POS"], + pin4: ["V_POS", "V_PLUS", "VCC"], + pin5: ["IN_POS_B", "INB_POS"], + pin6: ["IN_NEG_B", "INB_NEG"], + pin7: ["OUT_B", "OUTB"], + pin8: ["OUT_C", "OUTC"], + pin9: ["IN_NEG_C", "INC_NEG"], + pin10: ["IN_POS_C", "INC_POS"], + pin11: ["V_NEG", "V_MINUS", "GND"], + pin12: ["IN_POS_D", "IND_POS"], + pin13: ["IN_NEG_D", "IND_NEG"], + pin14: ["OUT_D", "OUTD"], +} as const; + +const pinAttributes = { + pin4: { + requiresPower: true, + mustBeConnected: true, + shouldHaveDecouplingCapacitor: true, + recommendedDecouplingCapacitorCapacitance: "0.1uF", + }, + pin11: { requiresGround: true, mustBeConnected: true }, + pin1: { mustBeConnected: true }, + pin2: { mustBeConnected: true }, + pin3: { mustBeConnected: true }, + pin5: { mustBeConnected: true }, + pin6: { mustBeConnected: true }, + pin7: { mustBeConnected: true }, + pin8: { mustBeConnected: true }, + pin9: { mustBeConnected: true }, + pin10: { mustBeConnected: true }, + pin12: { mustBeConnected: true }, + pin13: { mustBeConnected: true }, + pin14: { mustBeConnected: true }, +} as const; + +export const LMV324AIPWR = (props: ChipProps) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + } + cadModel={{ + objUrl: + "https://modelcdn.tscircuit.com/easyeda_models/assets/C484733.obj?uuid=5377177da492449fa1a3111d646cac17", + stepUrl: + "https://modelcdn.tscircuit.com/easyeda_models/assets/C484733.step?uuid=5377177da492449fa1a3111d646cac17", + pcbRotationOffset: 90, + modelOriginPosition: { x: 0.000012700000013410317, y: 0, z: -0.069083 }, + }} + {...props} + /> + ); +}; + +export default LMV324AIPWR; diff --git a/lib/chips/SMPP2_03.circuit.tsx b/lib/chips/SMPP2_03.circuit.tsx new file mode 100644 index 00000000..61cd8496 --- /dev/null +++ b/lib/chips/SMPP2_03.circuit.tsx @@ -0,0 +1,281 @@ +import type { ChipProps } from "@tscircuit/props"; +import "tscircuit"; + +const pinLabels = { + pin1: ["VOUT_POS", "BRIDGE_POS"], + pin2: ["NC"], + pin3: ["GND"], + pin4: ["VOUT_NEG", "BRIDGE_NEG"], + pin5: ["N_SUB"], + pin6: ["ICC", "I_CC"], +} as const; + +const pinAttributes = { + pin1: { mustBeConnected: true }, + pin2: { doNotConnect: true }, + pin3: { mustBeConnected: true }, + pin4: { mustBeConnected: true }, + pin5: { mustBeConnected: true }, + pin6: { mustBeConnected: true }, +} as const; + +export const SMPP2_03 = (props: ChipProps) => { + return ( + + + + + + + + + + + + + + + + + + } + {...props} + /> + ); +}; + +export default SMPP2_03; diff --git a/lib/chips/TPS7A24.circuit.tsx b/lib/chips/TPS7A24.circuit.tsx new file mode 100644 index 00000000..c28ffb28 --- /dev/null +++ b/lib/chips/TPS7A24.circuit.tsx @@ -0,0 +1,14 @@ +import type { ComponentProps } from "react"; +import { TPS7A2433DBVR } from "./TPS7A2433DBVR.circuit.tsx"; + +type TPS7A24Props = ComponentProps & { + footprintVariant?: "sot_23_5" | (string & {}); +}; + +/** TPS7A24 fixed 3.3 V wrapper; currently backed by TPS7A2433DBVR. */ +export const TPS7A24 = ({ + footprintVariant: _variant, + ...props +}: TPS7A24Props) => ; + +export default TPS7A24; diff --git a/lib/chips/TPS7A2433DBVR.circuit.tsx b/lib/chips/TPS7A2433DBVR.circuit.tsx new file mode 100644 index 00000000..115f3249 --- /dev/null +++ b/lib/chips/TPS7A2433DBVR.circuit.tsx @@ -0,0 +1,141 @@ +import type { ChipProps } from "@tscircuit/props"; +import "tscircuit"; + +const pinLabels = { + pin1: ["IN"], + pin2: ["GND"], + pin3: ["EN"], + pin4: ["NC"], + pin5: ["OUT"], +} as const; + +const pinAttributes = { + pin1: { requiresPower: true, mustBeConnected: true }, + pin2: { requiresGround: true, mustBeConnected: true }, + pin3: { mustBeConnected: true }, + pin4: { doNotConnect: true }, + pin5: { providesPower: true, providesVoltage: "3.3V", mustBeConnected: true }, +} as const; + +export const TPS7A2433DBVR = (props: ChipProps) => { + return ( + + + + + + + + + + + + + + } + cadModel={{ + objUrl: + "https://modelcdn.tscircuit.com/easyeda_models/assets/C2866134.obj?uuid=8c971aea3af54c53b74baeb1f489d393", + stepUrl: + "https://modelcdn.tscircuit.com/easyeda_models/assets/C2866134.step?uuid=8c971aea3af54c53b74baeb1f489d393", + pcbRotationOffset: 90, + modelOriginPosition: { + x: -0.000012699999956566899, + y: 0.00006349999989652133, + z: -0.7, + }, + }} + {...props} + /> + ); +}; + +export default TPS7A2433DBVR; diff --git a/lib/chips/index.tsx b/lib/chips/index.tsx index 33dc3e5e..db8c525f 100644 --- a/lib/chips/index.tsx +++ b/lib/chips/index.tsx @@ -1,4 +1,5 @@ export { AM62L32 } from "./AM62L32.circuit.tsx"; +export { ATL431LI } from "./ATL431LI.circuit.tsx"; export { BQ24072 } from "./BQ24072.circuit.tsx"; export { BQ24073 } from "./BQ24073.circuit.tsx"; export { BQ24074 } from "./BQ24074.circuit.tsx"; @@ -29,6 +30,7 @@ export { } from "./LM74202QPWPRQ1.circuit.tsx"; export { LMK1C1104 } from "./LMK1C1104.circuit.tsx"; export { LP5892Q1 } from "./LP5892Q1.circuit.tsx"; +export { LMV324A } from "./LMV324A.circuit.tsx"; export { MSP430G2230ID } from "./MSP430G2230ID.circuit.tsx"; export { MSP430F5229 } from "./MSP430F5229.circuit.tsx"; export { MSPM0L1306 } from "./MSPM0L1306.circuit.tsx"; @@ -55,6 +57,7 @@ export { TPS63802 } from "./TPS63802.circuit.tsx"; export { TRF7960RHB } from "./TRF7960RHB.circuit.tsx"; export { TPS7A02 } from "./TPS7A02.circuit.tsx"; export { TPS7A20 } from "./TPS7A20.circuit.tsx"; +export { TPS7A24 } from "./TPS7A24.circuit.tsx"; export { TPS7E81Q1, TPS7E8133QDBVRQ1, @@ -66,6 +69,7 @@ export { TXB0104 } from "./TXB0104.circuit.tsx"; export { TXS0102 } from "./TXS0102.circuit.tsx"; export { AM62L32BOGHAANBR } from "./AM62L32BOGHAANBR.circuit.tsx"; +export { ATL431LIBIDBZR } from "./ATL431LIBIDBZR.circuit.tsx"; export { BQ24072RGTR } from "./BQ24072RGTR.circuit.tsx"; export { BQ24073RGTR } from "./BQ24073RGTR.circuit.tsx"; export { BQ24074RGTR } from "./BQ24074RGTR.circuit.tsx"; @@ -90,12 +94,14 @@ export { LM50HVQDBZRQ1_PIN_LABELS, } from "./LM50HVQDBZRQ1.circuit.tsx"; export { LMK1C1104PWR } from "./LMK1C1104PWR.circuit.tsx"; +export { LMV324AIPWR } from "./LMV324AIPWR.circuit.tsx"; export { LP5892QRRFRQ1 } from "./LP5892QRRFRQ1.circuit.tsx"; export { MSP430F5229IRGCR } from "./MSP430F5229IRGCR.circuit.tsx"; export { MSPM0L1306SRHBR } from "../../imports/MSPM0L1306SRHBR.tsx"; export { MSP430G2332IPW20 } from "./MSP430G2332IPW20.circuit.tsx"; export { MSPM0G3507SPMR } from "./MSPM0G3507SPMR.circuit.tsx"; export { SN65HVD1473DGSR } from "./SN65HVD1473DGSR.circuit.tsx"; +export { SMPP2_03 } from "./SMPP2_03.circuit.tsx"; export { TMP1075DSGR } from "./TMP1075DSGR.circuit.tsx"; export { W25Q128JVSIQ } from "./W25Q128JVSIQ.circuit.tsx"; export { PGA300ARHHR } from "./PGA300ARHHR.circuit.tsx"; @@ -105,6 +111,7 @@ export { TPS7A0230PDBVR } from "./TPS7A0230PDBVR.circuit.tsx"; export { TPS7A2018PDBVR } from "./TPS7A2018PDBVR.circuit.tsx"; export { TPS7A2028PDBVR } from "./TPS7A2028PDBVR.circuit.tsx"; export { TPS7A2033PDBVR } from "./TPS7A2033PDBVR.circuit.tsx"; +export { TPS7A2433DBVR } from "./TPS7A2433DBVR.circuit.tsx"; export { TLV75533PDBVR } from "./TLV75533PDBVR.circuit.tsx"; export { TLV9152IDR } from "./TLV9152IDR.circuit.tsx"; export { TPS61236RWLR } from "./TPS61236RWLR.circuit.tsx"; diff --git a/lib/subcircuits/ADCFilter_TIDA010266.circuit.tsx b/lib/subcircuits/ADCFilter_TIDA010266.circuit.tsx new file mode 100644 index 00000000..53f6ea30 --- /dev/null +++ b/lib/subcircuits/ADCFilter_TIDA010266.circuit.tsx @@ -0,0 +1,103 @@ +import "tscircuit"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; + +/** TIDA-010266 R19/R20/C17/C18 200-ohm, 100-pF ADC input filters. */ +export const ADCFilter_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + + + .pin1", + schX: -4, + schY: 0.9, + direction: "left", + }, + { + name: "ADC_PRESSURE", + connectsTo: [".R19 > .pin2", ".C17 > .pin1"], + schX: 0, + schY: 0.9, + direction: "right", + }, + { + name: "OSCILLATIONS", + connectsTo: ".R20 > .pin1", + schX: 1.4, + schY: 0.9, + direction: "left", + }, + { + name: "ADC_OSCILLATIONS", + connectsTo: [".R20 > .pin2", ".C18 > .pin1"], + schX: 5.5, + schY: 0.9, + direction: "right", + }, + { + name: "GND", + connectsTo: [".C17 > .pin2", ".C18 > .pin2"], + schX: 1.7, + schY: -1.5, + direction: "down", + }, + ]} + /> + + ); +}; + +export default ADCFilter_TIDA010266; diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx new file mode 100644 index 00000000..8e789fc5 --- /dev/null +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -0,0 +1,292 @@ +import "tscircuit"; +import { LMV324AIPWR } from "../chips/LMV324AIPWR.circuit.tsx"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; + +/** + * TIDA-010266 U2 quad-amplifier functions: 1.25 V reference buffer, + * two-stage oscillometric band-pass filter, and sensor current-bias loop. + */ +export const AnalogFrontEnd_LMV324A_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + + + + + + + + + + + + + + + + .V_POS", + schX: 0, + schY: 5, + direction: "up", + }, + { + name: "GND", + connectsTo: [".U2 > .V_NEG", ".R6 > .pin2", ".R21 > .pin2"], + schX: 0, + schY: -5.5, + direction: "down", + }, + { + name: "VREF_2_5", + connectsTo: [".R4 > .pin1", ".R18 > .pin1"], + schX: -7, + schY: 4.1, + direction: "left", + }, + { + name: "VREF_DIV", + connectsTo: [".R4 > .pin2", ".R6 > .pin1", ".U2 > .IN_POS_A"], + schX: -5, + schY: 3.6, + direction: "left", + }, + { + name: "VREF_1_25", + connectsTo: [ + ".U2 > .OUT_A", + ".U2 > .IN_NEG_A", + ".U2 > .IN_POS_B", + ".U2 > .IN_POS_C", + ], + schX: -1, + schY: 3, + direction: "left", + }, + { + name: "PRESSURE", + connectsTo: ".C11 > .pin1", + schX: -8, + schY: 0.6, + direction: "left", + }, + { + name: "FILTER_1_HP", + connectsTo: [".C11 > .pin2", ".R16 > .pin1"], + schX: -6, + schY: 0.6, + direction: "left", + }, + { + name: "FILTER_1_INV", + connectsTo: [ + ".R16 > .pin2", + ".R9 > .pin1", + ".C9 > .pin1", + ".U2 > .IN_NEG_B", + ], + schX: -3, + schY: 1, + direction: "left", + }, + { + name: "FILTER_1_OUT", + connectsTo: [ + ".U2 > .OUT_B", + ".R9 > .pin2", + ".C9 > .pin2", + ".C12 > .pin1", + ], + schX: 2.4, + schY: 1, + direction: "right", + }, + { + name: "FILTER_2_HP", + connectsTo: [".C12 > .pin2", ".R17 > .pin1"], + schX: 5.3, + schY: 0.3, + direction: "right", + }, + { + name: "FILTER_2_INV", + connectsTo: [ + ".R17 > .pin2", + ".R10 > .pin1", + ".C10 > .pin1", + ".U2 > .IN_NEG_C", + ], + schX: 3, + schY: 1, + direction: "right", + }, + { + name: "OSCILLATIONS", + connectsTo: [".U2 > .OUT_C", ".R10 > .pin2", ".C10 > .pin2"], + schX: 7, + schY: 1, + direction: "right", + }, + { + name: "SENSOR_DRIVE", + connectsTo: ".U2 > .OUT_D", + schX: 3, + schY: -2, + direction: "right", + }, + { + name: "IBIAS_FB", + connectsTo: ".U2 > .IN_NEG_D", + schX: 1, + schY: -3, + direction: "left", + }, + { + name: "IBIAS_SET", + connectsTo: [".U2 > .IN_POS_D", ".R18 > .pin2", ".R21 > .pin1"], + schX: -4.5, + schY: -4, + direction: "left", + }, + ]} + /> + + ); +}; + +export default AnalogFrontEnd_LMV324A_TIDA010266; diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx new file mode 100644 index 00000000..5b7f73eb --- /dev/null +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -0,0 +1,469 @@ +import type { SubcircuitProps } from "@tscircuit/props"; +import "tscircuit"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; + +const throughHoleTestPoint = { + footprintVariant: "through_hole" as const, + holeDiameter: "1mm", + padDiameter: "1.8mm", + doNotPlace: true, +}; + +export type BloodPressureMonitorInterfaces_TIDA010266Props = SubcircuitProps & { + schSectionName?: string; + inputSectionName?: string; + connectorSectionName?: string; + jumperSectionName?: string; +}; + +/** TIDA-010266 power, UART/GPIO, selection jumpers, and seven test points. */ +export const BloodPressureMonitorInterfaces_TIDA010266 = ({ + inputSectionName, + connectorSectionName, + jumperSectionName, + ...props +}: BloodPressureMonitorInterfaces_TIDA010266Props) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + + + + + + + + + + + + + + + + + + + + .V_EXT", ".J4 > .V_EXT"], + schX: -9, + schY: 3.4, + direction: "left", + }, + { + name: "VIN", + connectsTo: [".J4 > .VIN", ".TP1 > .pin1"], + schX: -9, + schY: 2.3, + direction: "left", + }, + { + name: "V3_3", + connectsTo: [".J10 > .V3_3", ".TP3 > .pin1"], + schX: 7.5, + schY: -0.4, + direction: "right", + }, + { + name: "VREF_2_5", + connectsTo: ".TP4 > .pin1", + schX: -0.1, + schY: -4, + direction: "down", + }, + { + name: "PRESSURE", + connectsTo: [".J6 > .PRESSURE", ".TP2 > .pin1"], + schX: -3.7, + schY: -1.2, + direction: "left", + }, + { + name: "OSCILLATIONS", + connectsTo: ".TP5 > .pin1", + schX: 2.2, + schY: -4, + direction: "down", + }, + { + name: "BRIDGE_POS", + connectsTo: ".J5 > .BRIDGE_POS", + schX: -8, + schY: -0.4, + direction: "left", + }, + { + name: "BRIDGE_NEG", + connectsTo: ".J8 > .BRIDGE_NEG", + schX: 1, + schY: -1.2, + direction: "left", + }, + { + name: "INA_IN_POS", + connectsTo: ".J5 > .INA_IN_POS", + schX: -8, + schY: -1.2, + direction: "left", + }, + { + name: "INA_OUT", + connectsTo: ".J6 > .INA_OUT", + schX: -3.7, + schY: -2, + direction: "left", + }, + { + name: "OPA0_IN0_POS", + connectsTo: ".J8 > .OPA0_IN0_POS", + schX: 1, + schY: 0.4, + direction: "left", + }, + { + name: "OPA1_IN0_POS", + connectsTo: ".J5 > .OPA1_IN0_POS", + schX: -8, + schY: 0.4, + direction: "left", + }, + { + name: "OPA1_OUT", + connectsTo: ".J6 > .OPA1_OUT", + schX: -3.7, + schY: 0.4, + direction: "left", + }, + { + name: "UART_RTS", + connectsTo: ".J3 > .UART_RTS", + schX: -2.5, + schY: 5.2, + direction: "left", + }, + { + name: "UART_RX", + connectsTo: ".J3 > .UART_RX", + schX: -2.5, + schY: 4.7, + direction: "left", + }, + { + name: "UART_TX", + connectsTo: ".J3 > .UART_TX", + schX: -2.5, + schY: 4.2, + direction: "left", + }, + { + name: "UART_CTS", + connectsTo: ".J3 > .UART_CTS", + schX: -2.5, + schY: 3.2, + direction: "left", + }, + { + name: "SDA", + connectsTo: ".J7 > .SDA", + schX: 3.5, + schY: 5.7, + direction: "left", + }, + { + name: "SCL", + connectsTo: ".J7 > .SCL", + schX: 3.5, + schY: 5.2, + direction: "left", + }, + { + name: "SPI0_CS", + connectsTo: ".J7 > .SPI0_CS", + schX: 3.5, + schY: 4.7, + direction: "left", + }, + { + name: "PA3", + connectsTo: ".J7 > .PA3", + schX: 3.5, + schY: 4.2, + direction: "left", + }, + { + name: "SPI0_POCI", + connectsTo: ".J7 > .SPI0_POCI", + schX: 3.5, + schY: 3.7, + direction: "left", + }, + { + name: "SPI0_PICO", + connectsTo: ".J7 > .SPI0_PICO", + schX: 3.5, + schY: 3.2, + direction: "left", + }, + { + name: "SPI_SCLK", + connectsTo: ".J7 > .SPI_SCLK", + schX: 3.5, + schY: 2.7, + direction: "left", + }, + { + name: "PA7", + connectsTo: ".J7 > .PA7", + schX: 3.5, + schY: 2.2, + direction: "left", + }, + { + name: "PA10", + connectsTo: ".J7 > .PA10", + schX: 3.5, + schY: 1.7, + direction: "left", + }, + { + name: "PA11", + connectsTo: ".J7 > .PA11", + schX: 3.5, + schY: 1.2, + direction: "left", + }, + { + name: "GND", + connectsTo: [ + ".J1 > .GND", + ".J3 > .GND", + ".J10 > .GND", + ".TP6 > .pin1", + ".TP7 > .pin1", + ], + schX: 0, + schY: -4.5, + direction: "down", + }, + ]} + /> + + ); +}; + +export default BloodPressureMonitorInterfaces_TIDA010266; diff --git a/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx b/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx index 09881f6b..881014b5 100644 --- a/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx +++ b/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx @@ -1,11 +1,20 @@ import type { SubcircuitProps } from "@tscircuit/props"; import { INA350CDSIDSGR } from "../chips/INA350CDSIDSGR.circuit.tsx"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; export type InstrumentationAmplifier_INA350Props = SubcircuitProps & { + /** Native schematic-section membership for the physical U/C components. */ + schSectionName?: string; /** CDS gains: GS low = 30, high/open = 50. External exposes GS to the parent. */ gain?: 30 | 50 | "external"; /** External exposes SHDN; high/open enables the amplifier, low disables it. */ shutdown?: "external" | "enabled"; + /** Override the internal reference designator when composing a reference board. */ + chipName?: string; + /** Override the bypass-capacitor reference designator. */ + bypassCapacitorName?: string; + /** Expose TIDA-style module ports and render their signal names inline. */ + inlineNetLabels?: boolean; }; /** @@ -18,11 +27,16 @@ export type InstrumentationAmplifier_INA350Props = SubcircuitProps & { export const InstrumentationAmplifier_INA350 = ({ gain = "external", shutdown = "external", + chipName = "U1", + bypassCapacitorName = "C1", + inlineNetLabels = false, ...props }: InstrumentationAmplifier_INA350Props) => { if (gain !== "external" && gain !== 30 && gain !== 50) { throw new Error(`INA350CDS supports gains 30/50, not ${gain}`); } + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; return ( .IN_NEG`} to="net.IN_NEG" /> .IN_POS`} to="net.IN_POS" /> .OUT`} to="net.OUT" /> .V_POS`} + inline={inlineNetLabels} /> .pin1`} + inline={inlineNetLabels} /> .V_POS"} + from={`.${chipName} > .SHDN`} + to={shutdown === "external" ? "net.SHDN" : `.${chipName} > .V_POS`} /> .GS`} to={ gain === "external" ? "net.GS" : gain === 50 - ? ".U1 > .V_POS" + ? `.${chipName} > .V_POS` : "net.GND" } // Keep the high-gain strap off the top-layer SHDN escape route. - pcbPathRelativeTo=".U1 > .GS" + pcbPathRelativeTo={`.${chipName} > .GS`} pcbPath={ gain === 50 ? [ - ".U1 > .GS", + `.${chipName} > .GS`, { x: -1.7, y: 0.75, via: true, toLayer: "bottom" }, { x: 1.7, y: 0.25, via: true, toLayer: "top" }, - ".U1 > .V_POS", + `.${chipName} > .V_POS`, ] : undefined } @@ -220,17 +245,95 @@ export const InstrumentationAmplifier_INA350 = ({ schX={1.5} schY={2.45} anchorSide="top" - connectsTo=".C1 > .pin2" + connectsTo={`.${bypassCapacitorName} > .pin2`} + inline={inlineNetLabels} /> - + .EP`} + to={`.${chipName} > .V_NEG`} + /> .REF`} to="net.REF" /> - + .V_NEG`} to="net.GND" /> + {inlineNetLabels && ( + .IN_NEG`, + schX: -3, + schY: 1, + direction: "left", + }, + { + name: "IN_POS", + connectsTo: `.${chipName} > .IN_POS`, + schX: -3, + schY: -1, + direction: "left", + }, + { + name: "OUT", + connectsTo: `.${chipName} > .OUT`, + schX: 3, + schY: 0, + direction: "right", + }, + { + name: "V_POS", + net: "VS", + connectsTo: [ + `.${chipName} > .V_POS`, + `.${bypassCapacitorName} > .pin1`, + ], + schX: -1, + schY: 3.7, + direction: "up", + }, + { + name: "V_NEG", + net: "GND", + connectsTo: [ + `.${chipName} > .V_NEG`, + `.${chipName} > .EP`, + `.${bypassCapacitorName} > .pin2`, + ], + schX: -1, + schY: -3, + direction: "down", + }, + { + name: "REF", + connectsTo: `.${chipName} > .REF`, + schX: 1.5, + schY: -2.2, + direction: "down", + }, + { + name: "GS", + connectsTo: `.${chipName} > .GS`, + schX: -0.35, + schY: 3, + direction: "up", + }, + { + name: "SHDN", + connectsTo: `.${chipName} > .SHDN`, + schX: -1.65, + schY: 3, + direction: "up", + }, + ]} + /> + )} { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .pin1", + schX: -6.5, + schY: 0.8, + direction: "left", + }, + { + name: "OPA0_IN0_NEG", + connectsTo: [ + ".OPA0 > .inverting_input", + ".R14 > .pin2", + ".R12 > .pin1", + ".R11 > .pin1", + ], + schX: -3.8, + schY: 0.6, + direction: "left", + }, + { + name: "OPA0_IN0_POS", + connectsTo: ".OPA0 > .non_inverting_input", + schX: -3.8, + schY: -0.6, + direction: "left", + }, + { + name: "OPA1_IN0_NEG", + connectsTo: [ + ".OPA1 > .inverting_input", + ".R11 > .pin2", + ".R15 > .pin2", + ".R13 > .pin1", + ], + schX: 1.6, + schY: 0.6, + direction: "left", + }, + { + name: "OPA1_OUT", + connectsTo: [".OPA1 > .output", ".R13 > .pin2"], + schX: 5, + schY: 0, + direction: "right", + }, + ]} + /> + + ); +}; + +export default IntegratedInstrumentationAmplifier_MSPM0_TIDA010266; diff --git a/lib/subcircuits/Microcontroller_MSPM0L1306_TIDA010266.circuit.tsx b/lib/subcircuits/Microcontroller_MSPM0L1306_TIDA010266.circuit.tsx new file mode 100644 index 00000000..aece8386 --- /dev/null +++ b/lib/subcircuits/Microcontroller_MSPM0L1306_TIDA010266.circuit.tsx @@ -0,0 +1,295 @@ +import "tscircuit"; +import { Fragment } from "react"; +import { MSPM0L1306SRHBR } from "../../imports/MSPM0L1306SRHBR.tsx"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; + +const inlineMcuNets = [ + { port: "V3_3", pin: "VDD", net: "V3_3", schY: 4 }, + { port: "RST", pin: "NRST", net: "RST", schY: 3.05 }, + { port: "SDA", pin: "PA0", net: "SDA", schY: 2.45 }, + { port: "SCL", pin: "PA1", net: "SCL", schY: 2.25 }, + { port: "SPI0_CS", pin: "PA2", net: "SPI0_CS", schY: 1.9 }, + { port: "PA3", pin: "PA3", net: "PA3", schY: 1.7 }, + { port: "SPI0_POCI", pin: "PA4", net: "SPI0_POCI", schY: 1.5 }, + { port: "SPI0_PICO", pin: "PA5", net: "SPI0_PICO", schY: 1.3 }, + { port: "SPI_SCLK", pin: "PA6", net: "SPI_SCLK", schY: 1.1 }, + { port: "PA7", pin: "PA7", net: "PA7", schY: 0.9 }, + { port: "UART_RX", pin: "PA8", net: "UART_RX", schY: 0.55 }, + { port: "UART_TX", pin: "PA9", net: "UART_TX", schY: 0.35 }, + { port: "PA10", pin: "PA10", net: "PA10", schY: 0.15 }, + { port: "PA11", pin: "PA11", net: "PA11", schY: -0.05 }, + { port: "UART_CTS", pin: "PA12", net: "UART_CTS", schY: -0.25 }, + { port: "UART_RTS", pin: "PA13", net: "UART_RTS", schY: -0.45 }, + { + port: "PUMP_CONTROL", + pin: "PA14", + net: "PUMP_CONTROL", + schY: -0.8, + }, + { + port: "VALVE_CONTROL", + pin: "PA15", + net: "VALVE_CONTROL", + schY: -1, + }, + { port: "OPA1_OUT", pin: "PA16", net: "OPA1_OUT", schY: -1.35 }, + { + port: "OPA1_IN0_NEG", + pin: "PA17", + net: "OPA1_IN0_NEG", + schY: -1.55, + }, + { + port: "OPA1_IN0_POS", + pin: "PA18", + net: "OPA1_IN0_POS", + schY: -1.75, + }, + { port: "SWDIO", pin: "PA19", net: "SWDIO", schY: -2.1 }, + { port: "SWCLK", pin: "PA20", net: "SWCLK", schY: -2.3 }, + { port: "OPA0_OUT", pin: "PA22", net: "OPA0_OUT", schY: -2.85 }, + { port: "VREF_2_5", pin: "PA23", net: "VREF_2_5", schY: -3.05 }, + { + port: "OPA0_IN0_NEG", + pin: "PA24", + net: "OPA0_IN0_NEG", + schY: -3.25, + }, + { + port: "OPA0_IN0_POS", + pin: "PA25", + net: "OPA0_IN0_POS", + schY: -3.45, + }, + { + port: "ADC_OSCILLATIONS", + pin: "PA26", + net: "ADC_OSCILLATIONS", + schY: -3.8, + }, + { + port: "ADC_PRESSURE", + pin: "PA27", + net: "ADC_PRESSURE", + schY: -4, + }, +] as const; + +/** TIDA-010266 U4 MCU, supply decoupling, VCORE capacitor, and I2C pull-ups. */ +export const Microcontroller_MSPM0L1306_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const schOriginX = typeof props.schX === "number" ? props.schX : 0; + const schOriginY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + {inlineMcuNets.map(({ port, pin, net, schY }) => ( + + + .${pin}`} inline /> + + ))} + + {[ + ".U4 > .VSS", + ".U4 > .VSS_PAD", + ".U4 > .PA21", + ".C6 > .pin2", + ".C7 > .pin2", + ".C8 > .pin2", + ].map((connectsTo) => ( + + + + ))} + {[".C6 > .pin1", ".C7 > .pin1", ".R7 > .pin1", ".R8 > .pin1"].map( + (connectsTo) => ( + + + + ), + )} + {[".U4 > .VCORE", ".C8 > .pin1"].map((connectsTo) => ( + + + + ))} + + + + + + + + + + ); +}; + +export default Microcontroller_MSPM0L1306_TIDA010266; diff --git a/lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx b/lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx new file mode 100644 index 00000000..0ee50050 --- /dev/null +++ b/lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx @@ -0,0 +1,173 @@ +import "tscircuit"; +import { DRV8210DSGR } from "../chips/DRV8210DSGR.circuit.tsx"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; + +/** TIDA-010266 U6/C14/C15/C16/J9 pump-and-valve driver stage. */ +export const MotorDriver_DRV8210_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + + + + .VM", ".C14 > .pin1", ".C15 > .pin1"], + schX: -2.7, + schY: 3.2, + direction: "up", + }, + { + name: "V3_3", + connectsTo: [".U6 > .VCC", ".C16 > .pin1"], + schX: -1, + schY: 3.2, + direction: "up", + }, + { + name: "VALVE_CONTROL", + connectsTo: ".U6 > .IN1", + schX: -3, + schY: 0.6, + direction: "left", + }, + { + name: "PUMP_CONTROL", + connectsTo: ".U6 > .IN2", + schX: -3, + schY: -0.2, + direction: "left", + }, + { + name: "VALVE_OUT", + connectsTo: [".U6 > .OUT1", ".J9 > .VALVE_OUT"], + schX: 3, + schY: 0.6, + direction: "right", + }, + { + name: "PUMP_OUT", + connectsTo: [".U6 > .OUT2", ".J9 > .PUMP_OUT"], + schX: 3, + schY: -0.2, + direction: "right", + }, + { + name: "GND", + connectsTo: [ + ".U6 > .MODE", + ".U6 > .GND", + ".U6 > .EP", + ".C14 > .pin2", + ".C15 > .pin2", + ".C16 > .pin2", + ".J9 > .GND_1", + ".J9 > .GND_4", + ], + schX: 0, + schY: -3.5, + direction: "down", + }, + ]} + /> + + ); +}; + +export default MotorDriver_DRV8210_TIDA010266; diff --git a/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx b/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx new file mode 100644 index 00000000..36529341 --- /dev/null +++ b/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx @@ -0,0 +1,84 @@ +import "tscircuit"; +import { TPS7A2433DBVR } from "../chips/TPS7A2433DBVR.circuit.tsx"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; + +/** TIDA-010266 U1/C1/C5 3.3 V input regulator stage. */ +export const PowerManagement_TPS7A2433_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + + .IN", ".U1 > .EN", ".C5 > .pin1"], + schX: -2.2, + schY: 0.7, + direction: "left", + }, + { + name: "V3_3", + connectsTo: [".U1 > .OUT", ".C1 > .pin1"], + schX: 2.2, + schY: 0.7, + direction: "right", + }, + { + name: "GND", + connectsTo: [".U1 > .GND", ".C5 > .pin2", ".C1 > .pin2"], + schX: 0, + schY: -2, + direction: "down", + }, + ]} + /> + + ); +}; + +export default PowerManagement_TPS7A2433_TIDA010266; diff --git a/lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx b/lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx new file mode 100644 index 00000000..d5b29ef0 --- /dev/null +++ b/lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx @@ -0,0 +1,86 @@ +import "tscircuit"; +import { SMPP2_03 } from "../chips/SMPP2_03.circuit.tsx"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; + +/** TIDA-010266 U7/R22 Omron bridge-pressure-sensor stage. */ +export const PressureSensor_2SMPP03_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + .ICC", ".U7 > .N_SUB"], + schX: -3, + schY: 1, + direction: "left", + }, + { + name: "BRIDGE_POS", + connectsTo: ".U7 > .VOUT_POS", + schX: 3, + schY: 1, + direction: "right", + }, + { + name: "BRIDGE_NEG", + connectsTo: ".U7 > .VOUT_NEG", + schX: 3, + schY: 0, + direction: "right", + }, + { + name: "IBIAS_FB", + connectsTo: [".U7 > .GND", ".R22 > .pin1"], + schX: 3, + schY: -1.4, + direction: "right", + }, + { + name: "GND", + connectsTo: ".R22 > .pin2", + schX: 3.8, + schY: -3.5, + direction: "down", + }, + ]} + /> + + ); +}; + +export default PressureSensor_2SMPP03_TIDA010266; diff --git a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx new file mode 100644 index 00000000..d6401c84 --- /dev/null +++ b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx @@ -0,0 +1,178 @@ +import "tscircuit"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; + +/** TIDA-010266 J2/S1 reset and Arm 10-pin SWD programming interface. */ +export const ProgrammingInterface_MSPM0_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + + + + + + + } + /> + .V3_3", ".R2 > .pin1"], + schX: 0, + schY: 3, + direction: "up", + }, + { + name: "RST", + connectsTo: [ + ".J2 > .RST", + ".R2 > .pin2", + ".C4 > .pin1", + ".S1 > .pin1", + ], + schX: -5, + schY: 0, + direction: "left", + }, + { + name: "SWDIO", + connectsTo: ".R1 > .pin2", + schX: 7.5, + schY: 1.4, + direction: "right", + }, + { + name: "SWCLK", + connectsTo: ".R5 > .pin2", + schX: 7.5, + schY: 0.2, + direction: "right", + }, + { + name: "GND", + connectsTo: [ + ".J2 > .GND_3", + ".J2 > .GND_5", + ".J2 > .GND_7", + ".J2 > .GND_9", + ".C4 > .pin2", + ".S1 > .pin3", + ], + schX: 0, + schY: -2.5, + direction: "down", + }, + ]} + /> + + ); +}; + +export default ProgrammingInterface_MSPM0_TIDA010266; diff --git a/lib/subcircuits/TIDA010266.types.ts b/lib/subcircuits/TIDA010266.types.ts new file mode 100644 index 00000000..92100811 --- /dev/null +++ b/lib/subcircuits/TIDA010266.types.ts @@ -0,0 +1,6 @@ +import type { SubcircuitProps } from "@tscircuit/props"; + +/** Section metadata propagated to physical components in the one-sheet design. */ +export type TIDA010266SectionedSubcircuitProps = SubcircuitProps & { + schSectionName?: string; +}; diff --git a/lib/subcircuits/TIDA010266InlineNetPorts.tsx b/lib/subcircuits/TIDA010266InlineNetPorts.tsx new file mode 100644 index 00000000..63ea58c1 --- /dev/null +++ b/lib/subcircuits/TIDA010266InlineNetPorts.tsx @@ -0,0 +1,47 @@ +import "tscircuit"; +import { Fragment } from "react"; + +export type TIDA010266InlineNetPort = { + name: string; + net?: string; + connectsTo: string | string[]; + schX: number; + schY: number; + direction?: "left" | "right" | "up" | "down"; +}; + +/** + * Gives a module an electrically real boundary port while drawing the net name + * inline at the connected component pin(s). Boundary-port coordinates are + * absolute because schematic subcircuit ports are not transformed by schX/Y. + */ +export const TIDA010266InlineNetPorts = ({ + originX, + originY, + ports, +}: { + originX: number; + originY: number; + ports: TIDA010266InlineNetPort[]; +}) => ( + <> + {ports.map(({ name, net = name, connectsTo, schX, schY, direction }) => ( + + + {(Array.isArray(connectsTo) ? connectsTo : [connectsTo]).map( + (target, index) => ( + + + + ), + )} + + ))} + +); diff --git a/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx b/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx new file mode 100644 index 00000000..244c5361 --- /dev/null +++ b/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx @@ -0,0 +1,95 @@ +import "tscircuit"; +import { ATL431LIBIDBZR } from "../chips/ATL431LIBIDBZR.circuit.tsx"; +import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; +import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; + +/** TIDA-010266 U3/R3/C2/C3 precision 2.5 V shunt-reference stage. */ +export const VoltageReference_ATL431LI_TIDA010266 = ( + props: TIDA010266SectionedSubcircuitProps, +) => { + const originX = typeof props.schX === "number" ? props.schX : 0; + const originY = typeof props.schY === "number" ? props.schY : 0; + + return ( + + + + {[ + ["C2", -2.1], + ["C3", 2.1], + ].map(([name, schX]) => ( + + ))} + + .pin1", + schX: 0, + schY: 3.2, + direction: "up", + }, + { + name: "VREF_2_5", + connectsTo: [ + ".U3 > .CATHODE", + ".U3 > .REF", + ".R3 > .pin2", + ".C2 > .pin1", + ".C3 > .pin1", + ], + schX: -2, + schY: 0, + direction: "left", + }, + { + name: "GND", + connectsTo: [".U3 > .ANODE", ".C2 > .pin2", ".C3 > .pin2"], + schX: 0, + schY: -3, + direction: "down", + }, + ]} + /> + + ); +}; + +export default VoltageReference_ATL431LI_TIDA010266; diff --git a/package.json b/package.json index 4bb1e00b..3ecfc9dc 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,8 @@ "devDependencies": { "@biomejs/biome": "^2.4.16", "@types/react": "^19.2.17", - "tscircuit": "^0.0.2445", + "circuit-to-svg": "0.0.410", + "tscircuit": "0.0.2460", "typescript": "^5.0.0" }, "peerDependencies": { diff --git a/tests/TIDA010266.test.tsx b/tests/TIDA010266.test.tsx new file mode 100644 index 00000000..e2f6c0ab --- /dev/null +++ b/tests/TIDA010266.test.tsx @@ -0,0 +1,405 @@ +/// + +import assert from "node:assert/strict"; +import { test } from "node:test"; +import { Circuit } from "@tscircuit/core"; +import TIDA010266 from "../examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx"; +import { + ATL431LI, + ATL431LIBIDBZR, + LMV324A, + LMV324AIPWR, + SMPP2_03, + TPS7A24, + TPS7A2433DBVR, + TiChipComponents, + TiSubcircuitComponents, +} from "../index.ts"; + +type TestCircuit = InstanceType; + +function getPort(circuit: TestCircuit, componentName: string, pin: string) { + const component = circuit.db.source_component.getWhere({ + name: componentName, + }); + assert.ok(component, componentName); + const port = circuit.db.source_port + .list({ source_component_id: component.source_component_id }) + .find((candidate) => candidate.port_hints?.includes(pin)); + assert.ok(port, `${componentName}.${pin}`); + return port; +} + +function assertConnected( + circuit: TestCircuit, + first: readonly [string, string], + ...rest: ReadonlyArray +) { + const firstPort = getPort(circuit, ...first); + const connected = new Set([firstPort.source_port_id]); + let previousSize = 0; + while (previousSize !== connected.size) { + previousSize = connected.size; + for (const trace of circuit.db.source_trace.list()) { + const ids = [ + ...trace.connected_source_port_ids, + ...trace.connected_source_net_ids, + ]; + if (ids.some((id) => connected.has(id))) { + for (const id of ids) connected.add(id); + } + } + } + for (const endpoint of rest) { + assert.ok( + connected.has(getPort(circuit, ...endpoint).source_port_id), + `${first.join(".")} -> ${endpoint.join(".")}`, + ); + } +} + +function assertNoErrors(circuit: TestCircuit) { + assert.deepEqual( + circuit + .getCircuitJson() + .filter((element) => element.type.endsWith("_error")), + [], + ); +} + +test("TIDA-010266 raw parts expose the released package pinouts", async () => { + assert.equal(TiChipComponents.TPS7A24, TPS7A24); + assert.equal(TiChipComponents.ATL431LI, ATL431LI); + assert.equal(TiChipComponents.LMV324A, LMV324A); + assert.equal(TiChipComponents.SMPP2_03, SMPP2_03); + + for (const [Chip, mpn, pins] of [ + [TPS7A24, "TPS7A2433DBVR", 5], + [ATL431LI, "ATL431LIBIDBZR", 3], + [LMV324A, "LMV324AIPWR", 14], + [SMPP2_03, "2SMPP03", 6], + ] as const) { + const circuit = new Circuit(); + circuit.add( + + + , + ); + await circuit.renderUntilSettled(); + const component = circuit.db.source_component.getWhere({ name: "U1" }); + assert.equal(component?.manufacturer_part_number, mpn); + assert.equal( + circuit.db.source_port.list({ + source_component_id: component?.source_component_id, + }).length, + pins, + ); + assert.equal(circuit.db.pcb_smtpad.list().length, pins); + } + + assert.equal(typeof TPS7A2433DBVR, "function"); + assert.equal(typeof ATL431LIBIDBZR, "function"); + assert.equal(typeof LMV324AIPWR, "function"); +}); + +test("TIDA-010266 example contains the complete released BOM and net topology", { + timeout: 60_000, +}, async () => { + const circuit = new Circuit({ platform: { pcbDisabled: true } }); + circuit.add(); + await circuit.renderUntilSettled(); + assertNoErrors(circuit); + + assert.equal(circuit.db.schematic_sheet.list().length, 1); + assert.equal(circuit.db.schematic_sheet.list()[0]?.name, "main"); + assert.ok( + circuit.db.schematic_line.list().some((line) => line.is_dashed), + "schematicsection should generate native dashed dividers", + ); + + const expectedInlineMcuLabels = [ + "V3_3", + "RST", + "SDA", + "SCL", + "SPI0_CS", + "PA3", + "SPI0_POCI", + "SPI0_PICO", + "SPI_SCLK", + "PA7", + "UART_RX", + "UART_TX", + "PA10", + "PA11", + "UART_CTS", + "UART_RTS", + "PUMP_CONTROL", + "VALVE_CONTROL", + "OPA1_OUT", + "OPA1_IN0_NEG", + "OPA1_IN0_POS", + "SWDIO", + "SWCLK", + "OPA0_OUT", + "VREF_2_5", + "OPA0_IN0_NEG", + "OPA0_IN0_POS", + "ADC_OSCILLATIONS", + "ADC_PRESSURE", + ]; + const schematicText = new Set( + circuit.db.schematic_text.list().map((text) => text.text), + ); + for (const label of expectedInlineMcuLabels) { + assert.ok(schematicText.has(label), `${label} should render inline`); + } + + const u4 = circuit.db.source_component.getWhere({ name: "U4" }); + assert.ok(u4); + const u4SchematicComponent = circuit.db.schematic_component.getWhere({ + source_component_id: u4.source_component_id, + }); + assert.ok(u4SchematicComponent); + const u4LeftPinPositions = circuit.db.schematic_port + .list({ + schematic_component_id: u4SchematicComponent.schematic_component_id, + }) + .filter((port) => port.facing_direction === "left") + .map((port) => port.center); + const boxedLabelsAtU4 = circuit.db.schematic_net_label + .list() + .filter((label) => + label.anchor_position + ? u4LeftPinPositions.some( + (position) => + Math.abs(label.anchor_position!.x - position.x) < 1e-6 && + Math.abs(label.anchor_position!.y - position.y) < 1e-6, + ) + : false, + ); + assert.deepEqual( + boxedLabelsAtU4.map((label) => label.text), + [], + "MCU pin nets should use inline text instead of boxed net labels", + ); + + const designators = circuit.db.source_component + .list() + .map((component) => component.name) + .sort((a, b) => a.localeCompare(b, undefined, { numeric: true })); + assert.deepEqual(designators, [ + ...Array.from({ length: 18 }, (_, index) => `C${index + 1}`), + ...Array.from({ length: 10 }, (_, index) => `J${index + 1}`), + ...Array.from({ length: 23 }, (_, index) => `R${index + 1}`), + "S1", + ...Array.from({ length: 7 }, (_, index) => `TP${index + 1}`), + ...Array.from({ length: 7 }, (_, index) => `U${index + 1}`), + ]); + + const expectedResistors: Record = { + R1: 27, + R2: 47_000, + R3: 330, + R4: 10_000, + R5: 27, + R6: 10_000, + R7: 10_000, + R8: 10_000, + R9: 270_000, + R10: 270_000, + R11: 20_000, + R12: 499, + R13: 20_000, + R14: 20_000, + R15: 499, + R16: 20_000, + R17: 20_000, + R18: 45_300, + R19: 200, + R20: 200, + R21: 4_990, + R22: 2_490, + R23: 0, + }; + for (const [name, resistance] of Object.entries(expectedResistors)) { + const component = circuit.db.source_component.getWhere({ name }); + assert.equal(component?.ftype, "simple_resistor"); + assert.equal(component.resistance, resistance, name); + } + + const expectedCapacitors: Record = { + C1: 4.7e-6, + C2: 4.7e-6, + C3: 4.7e-6, + C4: 1.1e-9, + C5: 1e-6, + C6: 10e-6, + C7: 100e-9, + C8: 470e-9, + C9: 100e-9, + C10: 100e-9, + C11: 4.7e-6, + C12: 4.7e-6, + C13: 100e-9, + C14: 22e-6, + C15: 100e-9, + C16: 100e-9, + C17: 100e-12, + C18: 100e-12, + }; + for (const [name, capacitance] of Object.entries(expectedCapacitors)) { + const component = circuit.db.source_component.getWhere({ name }); + assert.equal(component?.ftype, "simple_capacitor"); + assert.equal(component.capacitance, capacitance, name); + } + + for (const [name, mpn] of Object.entries({ + U1: "TPS7A2433DBVR", + U2: "LMV324AIPWR", + U3: "ATL431LIBIDBZR", + U4: "MSPM0L1306SRHBR", + U5: "INA350CDSIDSGR", + U6: "DRV8210DSGR", + U7: "2SMPP03", + })) { + assert.equal( + circuit.db.source_component.getWhere({ name })?.manufacturer_part_number, + mpn, + name, + ); + } + + assertConnected( + circuit, + ["J4", "VIN"], + ["U1", "IN"], + ["U1", "EN"], + ["U6", "VM"], + ["TP1", "pin1"], + ); + assertConnected( + circuit, + ["U1", "OUT"], + ["U2", "V_POS"], + ["U4", "VDD"], + ["U5", "V_POS"], + ["U6", "VCC"], + ["J10", "V3_3"], + ["TP3", "pin1"], + ); + assertConnected( + circuit, + ["U3", "CATHODE"], + ["U3", "REF"], + ["R4", "pin1"], + ["U4", "PA23"], + ["TP4", "pin1"], + ); + assertConnected( + circuit, + ["U2", "OUT_A"], + ["U2", "IN_NEG_A"], + ["U5", "REF"], + ["R14", "pin1"], + ); + + assertConnected(circuit, ["U2", "OUT_D"], ["U7", "ICC"], ["U7", "N_SUB"]); + assertConnected(circuit, ["U7", "GND"], ["R22", "pin1"], ["U2", "IN_NEG_D"]); + assertConnected(circuit, ["U7", "VOUT_POS"], ["J5", "BRIDGE_POS"]); + assertConnected(circuit, ["U7", "VOUT_NEG"], ["J8", "BRIDGE_NEG"]); + assertConnected(circuit, ["U5", "IN_POS"], ["J5", "INA_IN_POS"]); + assertConnected(circuit, ["U5", "IN_NEG"], ["J8", "INA_IN_NEG"]); + assertConnected(circuit, ["U5", "OUT"], ["J6", "INA_OUT"]); + assertConnected(circuit, ["U5", "GS"], ["J10", "INA_GS"]); + assertConnected(circuit, ["U5", "SHDN"], ["R23", "pin1"]); + + assertConnected( + circuit, + ["J6", "PRESSURE"], + ["C11", "pin1"], + ["R19", "pin1"], + ["TP2", "pin1"], + ); + assertConnected(circuit, ["C11", "pin2"], ["R16", "pin1"]); + assertConnected( + circuit, + ["R16", "pin2"], + ["U2", "IN_NEG_B"], + ["R9", "pin1"], + ["C9", "pin1"], + ); + assertConnected( + circuit, + ["U2", "OUT_B"], + ["R9", "pin2"], + ["C9", "pin2"], + ["C12", "pin1"], + ); + assertConnected(circuit, ["C12", "pin2"], ["R17", "pin1"]); + assertConnected( + circuit, + ["R17", "pin2"], + ["U2", "IN_NEG_C"], + ["R10", "pin1"], + ["C10", "pin1"], + ); + assertConnected( + circuit, + ["U2", "OUT_C"], + ["R10", "pin2"], + ["C10", "pin2"], + ["R20", "pin1"], + ["TP5", "pin1"], + ); + assertConnected(circuit, ["R19", "pin2"], ["C17", "pin1"], ["U4", "PA27"]); + assertConnected(circuit, ["R20", "pin2"], ["C18", "pin1"], ["U4", "PA26"]); + + assertConnected( + circuit, + ["R14", "pin2"], + ["R12", "pin1"], + ["R11", "pin1"], + ["U4", "PA24"], + ); + assertConnected(circuit, ["R12", "pin2"], ["R15", "pin1"], ["U4", "PA22"]); + assertConnected( + circuit, + ["R11", "pin2"], + ["R15", "pin2"], + ["R13", "pin1"], + ["U4", "PA17"], + ); + assertConnected(circuit, ["R13", "pin2"], ["U4", "PA16"], ["J6", "OPA1_OUT"]); + + assertConnected( + circuit, + ["U4", "NRST"], + ["R2", "pin2"], + ["C4", "pin1"], + ["S1", "pin1"], + ["S1", "pin2"], + ["J2", "RST"], + ); + assertConnected(circuit, ["U4", "SWDIO"], ["R1", "pin2"]); + assertConnected(circuit, ["U4", "SWCLK"], ["R5", "pin2"]); + assertConnected(circuit, ["U4", "PA14"], ["U6", "IN2"]); + assertConnected(circuit, ["U4", "PA15"], ["U6", "IN1"]); + assertConnected(circuit, ["U6", "OUT1"], ["J9", "VALVE_OUT"]); + assertConnected(circuit, ["U6", "OUT2"], ["J9", "PUMP_OUT"]); + + for (const key of [ + "ADCFilter_TIDA010266", + "AnalogFrontEnd_LMV324A_TIDA010266", + "BloodPressureMonitorInterfaces_TIDA010266", + "IntegratedInstrumentationAmplifier_MSPM0_TIDA010266", + "Microcontroller_MSPM0L1306_TIDA010266", + "MotorDriver_DRV8210_TIDA010266", + "PowerManagement_TPS7A2433_TIDA010266", + "PressureSensor_2SMPP03_TIDA010266", + "ProgrammingInterface_MSPM0_TIDA010266", + "VoltageReference_ATL431LI_TIDA010266", + ] as const) { + assert.equal(typeof TiSubcircuitComponents[key], "function", key); + } +}); From 82f9b3b4701b42238c2272490ccaf60daca01148 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Thu, 27 Aug 2026 22:59:46 +0530 Subject: [PATCH 02/21] Match TIDA-010266 pressure sensor layout --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 3 + ...itor_TIDA010266.circuit-schematic.snap.svg | 58 +++----- lib/chips/SMPP2_03.circuit.tsx | 12 +- ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 127 ++++++++++++++---- ...ssureSensor_2SMPP03_TIDA010266.circuit.tsx | 38 +++--- tests/TIDA010266.test.tsx | 33 +++++ 6 files changed, 176 insertions(+), 95 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 717f827d..dc14e80f 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -121,6 +121,8 @@ export default () => ( @@ -209,6 +211,7 @@ export default () => ( 112233445566AABBCCDDTPS7A2433DBVRU11IN2GND3EN4NC5OUTC51uFC14.7uFATL431LIBIDBZRU31CATHODE2REF3ANODER3330ΩC24.7uFC34.7uF691101710002J11GND2V_EXT61300211121J41VIN2V_EXT90121-0766J31UART_RTS2UART_RX3UART_TX4NC5UART_CTS6GNDTSW-110-08-G-SJ71SDA2SCL3SPI0_CS4PA35SPI0_POCI6SPI0_PICO7SPI_SCLK8PA79PA1010PA1161300311121J51OPA1_IN0_POS2BRIDGE_POS3INA_IN_POS61300311121J61OPA1_OUT2PRESSURE3INA_OUT61300311121J81OPA0_IN0_POS2BRIDGE_NEG3INA_IN_NEG61300311121J101GND2INA_GS3V3_3TP1TP2TP3TP4TP5TP6TP7FTSH-105-01-L-DV-KJ21V3_32SWDIO_HEADER3GND_34SWCLK_HEADER5GND_56NC_67GND_78NC_89GND_910RSTR127ΩR527ΩR247kΩC41100pFS1IN_NEGIN_POSOUTSHDNV_POSGSEPV_NEGREFC130.1uFInternal OPA01inverting_input2non_inverting_input3outputInternal OPA11inverting_input2non_inverting_input3outputR1420kΩR12499ΩR1120kΩR15499ΩR1320kΩLMV324AIPWRU21OUT_A2IN_NEG_A3IN_POS_A4V_POS5IN_POS_B6IN_NEG_B7OUT_B8OUT_C9IN_NEG_C10IN_POS_C11V_NEG12IN_POS_D13IN_NEG_D14OUT_DR410kΩR610kΩC114.7uFR1620kΩR9270kΩC9100nFC124.7uFR1720kΩR10270kΩC10100nFR1845.3kΩR214.99kΩMSPM0L1306SRHBRU41PA02PA13NRST4VDD5VSS6PA2_ROSC7PA38PA49PA510PA611PA712PA813PA914PA1015PA1116PA1217PA1318PA1419PA1520PA1621PA1722PA1823SWDIO24SWCLK25PA2126PA2227PA2328PA2429PA2530PA2631PA2732VCORE33EPC610uFC7100nFC80.47uFR710kΩR810kΩ2SMPP03U71VOUT_POS2NC3GND4VOUT_NEG5SUB6ICCR222.49kΩR19200ΩC17100pFR20200ΩC18100pFDRV8210DSGRU61VM2OUT13OUT24GND5IN26IN17MODE8VCC9EPC1422uFC15100nFC16100nFM22-5330405J91GND_12VALVE_OUT3PUMP_OUT4GND_4R230Ω112233445566AABBCCDDTPS7A2433DBVRU11IN2GND3EN4NC5OUTC51uFC14.7uFATL431LIBIDBZRU31CATHODE2REF3ANODER3330ΩC24.7uFC34.7uF691101710002J11GND2V_EXT61300211121J41VIN2V_EXT90121-0766J31UART_RTS2UART_RX3UART_TX4NC5UART_CTS6GNDTSW-110-08-G-SJ71SDA2SCL3SPI0_CS4PA35SPI0_POCI6SPI0_PICO7SPI_SCLK8PA79PA1010PA1161300311121J51OPA1_IN0_POS2BRIDGE_POS3INA_IN_POS61300311121J61OPA1_OUT2PRESSURE3INA_OUT61300311121J81OPA0_IN0_POS2BRIDGE_NEG3INA_IN_NEG61300311121J101GND2INA_GS3V3_3TP1TP2TP3TP4TP5TP6TP7FTSH-105-01-L-DV-KJ21V3_32SWDIO_HEADER3GND_34SWCLK_HEADER5GND_56NC_67GND_78NC_89GND_910RSTR127ΩR527ΩR247kΩC41100pFS1IN_NEGIN_POSOUTSHDNV_POSGSEPV_NEGREFC130.1uFInternal OPA01inverting_input2non_inverting_input3outputInternal OPA11inverting_input2non_inverting_input3outputR1420kΩR12499ΩR1120kΩR15499ΩR1320kΩU2AU2BU2CU2DR410kΩR610kΩC114.7uFR1620kΩR9270kΩC9100nFC124.7uFR1720kΩR10270kΩC10100nFR1845.3kΩR214.99kΩMSPM0L1306SRHBRU41PA02PA13NRST4VDD5VSS6PA2_ROSC7PA38PA49PA510PA611PA712PA813PA914PA1015PA1116PA1217PA1318PA1419PA1520PA1621PA1722PA1823SWDIO24SWCLK25PA2126PA2227PA2328PA2429PA2530PA2631PA2732VCORE33EPC610uFC7100nFC80.47uFR710kΩR810kΩ2SMPP03U71VOUT_POS2NC3GND4VOUT_NEG5SUB6ICCR222.49kΩR19200ΩC17100pFR20200ΩC18100pFDRV8210DSGRU61VM2OUT13OUT24GND5IN26IN17MODE8VCC9EPC1422uFC15100nFC16100nFM22-5330405J91GND_12VALVE_OUT3PUMP_OUT4GND_4R230ΩOPA0_OUTOPA0_OUTVREF_1_25VREF_1_25V3_3VREF_1_25 VREF_1_25FILTER_1_OUTFILTER_1_OUTFILTER_2_HPSENSOR_DRIVEInput + ReferenceConnectorsJumpers / Test PointsProgrammingINA + FilterMCUPressure SensorADC FilterMotor DriverU5INA350CDS-+GS: low = 30, high/open = 50VINGNDV3_3VREF_2_5GNDV3_3GNDGNDGNDV_EXTVINVINUART_RTSUART_RXUART_TXUART_CTSSDASCLSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7PA10PA11OPA1_IN0_POSBRIDGE_POSINA_IN_POSOPA1_OUTPRESSUREINA_OUTOPA0_IN0_POSBRIDGE_NEGV3_3VREF_2_5OSCILLATIONSSWDIO_HEADERSWDIO_HEADERSWCLK_HEADERV3_3GNDRSTRSTSWDIOSWCLKIN_NEGIN_POSOUTSHDNVSGSGNDGNDREFOPA0_IN0_NEGOPA0_IN0_NEGOPA1_IN0_NEGOPA1_IN0_NEGOPA0_IN0_POSOPA1_OUTOPA1_OUTVREF_1_25VREF_DIVFILTER_1_INVOSCILLATIONSFILTER_2_INVFILTER_2_INVGNDIBIAS_SETV3_3IBIAS_FBSENSOR_DRIVEVREF_2_5PRESSUREFILTER_1_HPSDASCLRSTV3_3GNDGNDSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7UART_RXUART_TXPA10PA11UART_CTSUART_RTSPUMP_CONTROLVALVE_CONTROLOPA1_OUTOPA1_IN0_NEGOPA1_IN0_POSSWDIOSWCLKOPA0_OUTVREF_2_5OPA0_IN0_NEGOPA0_IN0_POSADC_OSCILLATIONSADC_PRESSUREVCOREVCOREBRIDGE_POSIBIAS_FBBRIDGE_NEGGNDPRESSUREADC_PRESSUREGNDOSCILLATIONSADC_OSCILLATIONSVINGNDVALVE_OUTVALVE_OUTPUMP_OUTPUMP_OUTPUMP_CONTROLVALVE_CONTROLV3_3SHDNGND + " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.347976067176px"/>SENSOR_DRIVEInput + ReferenceConnectorsJumpers / Test PointsProgrammingINA + FilterMCUPressure SensorADC FilterMotor DriverU5INA350CDS-+GS: low = 30, high/open = 50VINGNDV3_3VREF_2_5GNDV3_3GNDGNDGNDV_EXTVINVINUART_RTSUART_RXUART_TXUART_CTSSDASCLSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7PA10PA11OPA1_IN0_POSBRIDGE_POSINA_IN_POSOPA1_OUTPRESSUREINA_OUTOPA0_IN0_POSBRIDGE_NEGV3_3VREF_2_5OSCILLATIONSSWDIO_HEADERSWDIO_HEADERSWCLK_HEADERV3_3GNDRSTRSTSWDIOSWCLKIN_NEGIN_POSOUTSHDNVSGSGNDGNDREFOPA0_IN0_NEGOPA0_IN0_NEGOPA1_IN0_NEGOPA1_IN0_NEGOPA0_IN0_POSOPA1_OUTOPA1_OUTVREF_1_25VREF_DIVFILTER_1_INVFILTER_1_OUTFILTER_2_INVOSCILLATIONSIBIAS_SETGNDGNDIBIAS_FBVREF_2_5VREF_2_5PRESSUREFILTER_1_HPSDASCLRSTV3_3GNDGNDSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7UART_RXUART_TXPA10PA11UART_CTSUART_RTSPUMP_CONTROLVALVE_CONTROLOPA1_OUTOPA1_IN0_NEGOPA1_IN0_POSSWDIOSWCLKOPA0_OUTVREF_2_5OPA0_IN0_NEGOPA0_IN0_POSADC_OSCILLATIONSADC_PRESSUREVCOREVCOREBRIDGE_POSIBIAS_FBBRIDGE_NEGGNDPRESSUREADC_PRESSUREGNDOSCILLATIONSADC_OSCILLATIONSVINGNDVALVE_OUTVALVE_OUTPUMP_OUTPUMP_OUTPUMP_CONTROLVALVE_CONTROLV3_3SHDNGND diff --git a/lib/chips/SMPP2_03.circuit.tsx b/lib/chips/SMPP2_03.circuit.tsx index 61cd8496..7f7e60eb 100644 --- a/lib/chips/SMPP2_03.circuit.tsx +++ b/lib/chips/SMPP2_03.circuit.tsx @@ -25,8 +25,8 @@ export const SMPP2_03 = (props: ChipProps) => { pinLabels={pinLabels} pinAttributes={pinAttributes} datasheetUrl="https://components.omron.com/eu-en/products/sensors/2SMPP-03" - schWidth="3.8mm" - schHeight="3.6mm" + schWidth="3.2mm" + schHeight="1.8mm" schPinArrangement={{ leftSide: { direction: "top-to-bottom", pins: ["ICC", "N_SUB", "NC"] }, rightSide: { @@ -35,10 +35,10 @@ export const SMPP2_03 = (props: ChipProps) => { }, }} schPinStyle={{ - N_SUB: { marginTop: 0.55 }, - NC: { marginTop: 0.55 }, - VOUT_NEG: { marginTop: 0.55 }, - GND: { marginTop: 0.55 }, + N_SUB: { marginTop: 0.15 }, + NC: { marginTop: 0.15 }, + VOUT_NEG: { marginTop: 0.15 }, + GND: { marginTop: 0.15 }, }} supplierPartNumbers={{ jlcpcb: ["C3243672"], diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx index 8e789fc5..af20e03f 100644 --- a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -3,13 +3,21 @@ import { LMV324AIPWR } from "../chips/LMV324AIPWR.circuit.tsx"; import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; +export type AnalogFrontEnd_LMV324A_TIDA010266Props = + TIDA010266SectionedSubcircuitProps & { + inputReferenceSectionName?: string; + pressureSectionName?: string; + }; + /** * TIDA-010266 U2 quad-amplifier functions: 1.25 V reference buffer, * two-stage oscillometric band-pass filter, and sensor current-bias loop. */ -export const AnalogFrontEnd_LMV324A_TIDA010266 = ( - props: TIDA010266SectionedSubcircuitProps, -) => { +export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ + inputReferenceSectionName, + pressureSectionName, + ...props +}: AnalogFrontEnd_LMV324A_TIDA010266Props) => { const originX = typeof props.schX === "number" ? props.schX : 0; const originY = typeof props.schY === "number" ? props.schY : 0; @@ -21,9 +29,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ( > + {/* U2 is one physical quad op-amp with four schematic units. */} + .IN_POS_A", + inp2: ".U2 > .IN_NEG_A", + out: ".U2 > .OUT_A", + }} + /> + .IN_POS_B", + inp2: ".U2 > .IN_NEG_B", + out: ".U2 > .OUT_B", + }} + /> + .IN_POS_C", + inp2: ".U2 > .IN_NEG_C", + out: ".U2 > .OUT_C", + }} + /> + .IN_POS_D", + inp2: ".U2 > .IN_NEG_D", + out: ".U2 > .OUT_D", + "V+": ".U2 > .V_POS", + "V-": ".U2 > .V_NEG", + }} + /> + @@ -136,24 +204,32 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ( + + .OUT_D", - schX: 3, - schY: -2, - direction: "right", - }, { name: "IBIAS_FB", connectsTo: ".U2 > .IN_NEG_D", - schX: 1, - schY: -3, + schX: -19.6, + schY: -16.4, direction: "left", }, { name: "IBIAS_SET", connectsTo: [".U2 > .IN_POS_D", ".R18 > .pin2", ".R21 > .pin1"], - schX: -4.5, - schY: -4, + schX: -19.6, + schY: -16.7, direction: "left", }, ]} diff --git a/lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx b/lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx index d5b29ef0..a33abe0f 100644 --- a/lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx +++ b/lib/subcircuits/PressureSensor_2SMPP03_TIDA010266.circuit.tsx @@ -19,7 +19,7 @@ export const PressureSensor_2SMPP03_TIDA010266 = ( + + .ICC", ".U7 > .N_SUB"]} + schDisplayLabel=" " + /> .ICC", ".U7 > .N_SUB"], - schX: -3, - schY: 1, - direction: "left", - }, { name: "BRIDGE_POS", connectsTo: ".U7 > .VOUT_POS", - schX: 3, - schY: 1, + schX: 7.2, + schY: 0.45, direction: "right", }, { name: "BRIDGE_NEG", connectsTo: ".U7 > .VOUT_NEG", - schX: 3, + schX: 7.2, schY: 0, direction: "right", }, { name: "IBIAS_FB", connectsTo: [".U7 > .GND", ".R22 > .pin1"], - schX: 3, - schY: -1.4, + schX: 7.2, + schY: -0.45, direction: "right", }, { name: "GND", connectsTo: ".R22 > .pin2", - schX: 3.8, - schY: -3.5, + schX: 5.3, + schY: -2.8, direction: "down", }, ]} diff --git a/tests/TIDA010266.test.tsx b/tests/TIDA010266.test.tsx index e2f6c0ab..78946321 100644 --- a/tests/TIDA010266.test.tsx +++ b/tests/TIDA010266.test.tsx @@ -186,6 +186,8 @@ test("TIDA-010266 example contains the complete released BOM and net topology", const designators = circuit.db.source_component .list() + // SchematicSymbol projections U2A-U2D share the one physical U2 package. + .filter((component) => !/^U2[A-D]$/.test(component.name)) .map((component) => component.name) .sort((a, b) => a.localeCompare(b, undefined, { numeric: true })); assert.deepEqual(designators, [ @@ -197,6 +199,37 @@ test("TIDA-010266 example contains the complete released BOM and net topology", ...Array.from({ length: 7 }, (_, index) => `U${index + 1}`), ]); + const getSchematicComponent = (name: string) => { + const source = circuit.db.source_component.getWhere({ name }); + assert.ok(source, name); + const schematic = circuit.db.schematic_component.getWhere({ + source_component_id: source.source_component_id, + }); + assert.ok(schematic, `${name} schematic representation`); + return schematic; + }; + const pressureLayout = ["R18", "U2D", "U7", "R22"].map(getSchematicComponent); + assert.ok( + pressureLayout.every( + (component, index) => + index === 0 || pressureLayout[index - 1]!.center.x < component.center.x, + ), + "pressure stage should run left-to-right from its bias divider to R22", + ); + const u7Schematic = getSchematicComponent("U7"); + assert.deepEqual(u7Schematic.size, { width: 3.2, height: 1.8 }); + for (const name of ["R18", "R21", "R22"]) { + const component = getSchematicComponent(name); + const ports = circuit.db.schematic_port.list({ + schematic_component_id: component.schematic_component_id, + }); + assert.equal(ports.length, 2, name); + assert.ok( + Math.abs(ports[0]!.center.x - ports[1]!.center.x) < 1e-6, + `${name} should be vertical`, + ); + } + const expectedResistors: Record = { R1: 27, R2: 47_000, From 93ea95d20f2f5c564084d9cc2e9d2584f730183d Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 13:03:15 +0530 Subject: [PATCH 03/21] Match TIDA-010266 input reference layout --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 8 +- ...itor_TIDA010266.circuit-schematic.snap.svg | 25 +- lib/chips/ATL431LIBIDBZR.circuit.tsx | 71 +++++- ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 221 ++++++++++++++++-- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 56 ++++- ...anagement_TPS7A2433_TIDA010266.circuit.tsx | 54 ++++- ...eReference_ATL431LI_TIDA010266.circuit.tsx | 57 +++-- tests/TIDA010266.test.tsx | 26 +++ 8 files changed, 448 insertions(+), 70 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index dc14e80f..7d83657d 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -64,10 +64,10 @@ export default () => ( {/* Centered titles sit inside, rather than directly on, each top divider. */} - - + + - + @@ -83,7 +83,7 @@ export default () => ( 112233445566AABBCCDDTPS7A2433DBVRU11IN2GND3EN4NC5OUTC51uFC14.7uFATL431LIBIDBZRU31CATHODE2REF3ANODER3330ΩC24.7uFC34.7uF691101710002J11GND2V_EXT61300211121J41VIN2V_EXT90121-0766J31UART_RTS2UART_RX3UART_TX4NC5UART_CTS6GNDTSW-110-08-G-SJ71SDA2SCL3SPI0_CS4PA35SPI0_POCI6SPI0_PICO7SPI_SCLK8PA79PA1010PA1161300311121J51OPA1_IN0_POS2BRIDGE_POS3INA_IN_POS61300311121J61OPA1_OUT2PRESSURE3INA_OUT61300311121J81OPA0_IN0_POS2BRIDGE_NEG3INA_IN_NEG61300311121J101GND2INA_GS3V3_3TP1TP2TP3TP4TP5TP6TP7FTSH-105-01-L-DV-KJ21V3_32SWDIO_HEADER3GND_34SWCLK_HEADER5GND_56NC_67GND_78NC_89GND_910RSTR127ΩR527ΩR247kΩC41100pFS1IN_NEGIN_POSOUTSHDNV_POSGSEPV_NEGREFC130.1uFInternal OPA01inverting_input2non_inverting_input3outputInternal OPA11inverting_input2non_inverting_input3outputR1420kΩR12499ΩR1120kΩR15499ΩR1320kΩU2AU2BU2CU2DR410kΩR610kΩC114.7uFR1620kΩR9270kΩC9100nFC124.7uFR1720kΩR10270kΩC10100nFR1845.3kΩR214.99kΩMSPM0L1306SRHBRU41PA02PA13NRST4VDD5VSS6PA2_ROSC7PA38PA49PA510PA611PA712PA813PA914PA1015PA1116PA1217PA1318PA1419PA1520PA1621PA1722PA1823SWDIO24SWCLK25PA2126PA2227PA2328PA2429PA2530PA2631PA2732VCORE33EPC610uFC7100nFC80.47uFR710kΩR810kΩ2SMPP03U71VOUT_POS2NC3GND4VOUT_NEG5SUB6ICCR222.49kΩR19200ΩC17100pFR20200ΩC18100pFDRV8210DSGRU61VM2OUT13OUT24GND5IN26IN17MODE8VCC9EPC1422uFC15100nFC16100nFM22-5330405J91GND_12VALVE_OUT3PUMP_OUT4GND_4R230Ω112233445566AABBCCDDTPS7A2433DBVRU11IN2GND3EN4NC5OUTC51uFC14.7uFCATHODEREFANODER3330ΩC24.7uFC34.7uF691101710002J11GND2V_EXT61300211121J41VIN2V_EXT90121-0766J31UART_RTS2UART_RX3UART_TX4NC5UART_CTS6GNDTSW-110-08-G-SJ71SDA2SCL3SPI0_CS4PA35SPI0_POCI6SPI0_PICO7SPI_SCLK8PA79PA1010PA1161300311121J51OPA1_IN0_POS2BRIDGE_POS3INA_IN_POS61300311121J61OPA1_OUT2PRESSURE3INA_OUT61300311121J81OPA0_IN0_POS2BRIDGE_NEG3INA_IN_NEG61300311121J101GND2INA_GS3V3_3TP1TP2TP3TP4TP5TP6TP7FTSH-105-01-L-DV-KJ21V3_32SWDIO_HEADER3GND_34SWCLK_HEADER5GND_56NC_67GND_78NC_89GND_910RSTR127ΩR527ΩR247kΩC41100pFS1IN_NEGIN_POSOUTSHDNV_POSGSEPV_NEGREFC130.1uFInternal OPA01inverting_input2non_inverting_input3outputInternal OPA11inverting_input2non_inverting_input3outputR1420kΩR12499ΩR1120kΩR15499ΩR1320kΩU2AU2BU2CU2DR410kΩR610kΩC114.7uFR1620kΩR9270kΩC9100nFC124.7uFR1720kΩR10270kΩC10100nFR1845.3kΩR214.99kΩMSPM0L1306SRHBRU41PA02PA13NRST4VDD5VSS6PA2_ROSC7PA38PA49PA510PA611PA712PA813PA914PA1015PA1116PA1217PA1318PA1419PA1520PA1621PA1722PA1823SWDIO24SWCLK25PA2126PA2227PA2328PA2429PA2530PA2631PA2732VCORE33EPC610uFC7100nFC80.47uFR710kΩR810kΩ2SMPP03U71VOUT_POS2NC3GND4VOUT_NEG5SUB6ICCR222.49kΩR19200ΩC17100pFR20200ΩC18100pFDRV8210DSGRU61VM2OUT13OUT24GND5IN26IN17MODE8VCC9EPC1422uFC15100nFC16100nFM22-5330405J91GND_12VALVE_OUT3PUMP_OUT4GND_4R230ΩGNDGNDGNDGNDGNDGNDINA_IN_NEGINA_IN_NEGINA_GSINA_GSOPA0_OUTOPA0_OUTOPA1_IN0_POSOPA1_IN0_POSOPA0_OUTOPA0_OUTOPA0_OUTVREF_1_25VREF_1_25V3_3OPA0_OUTVREF_DIVVREF_1_25VREF_1_25 SENSOR_DRIVEInput + ReferenceConnectorsJumpers / Test PointsProgrammingINA + FilterMCUPressure SensorADC FilterMotor DriverU5INA350CDS-+GS: low = 30, high/open = 50VINGNDV3_3VREF_2_5GNDV3_3GNDGNDGNDV_EXTVINVINUART_RTSUART_RXUART_TXUART_CTSSDASCLSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7PA10PA11OPA1_IN0_POSBRIDGE_POSINA_IN_POSOPA1_OUTPRESSUREINA_OUTOPA0_IN0_POSBRIDGE_NEGV3_3VREF_2_5OSCILLATIONSSWDIO_HEADERSWDIO_HEADERSWCLK_HEADERV3_3GNDRSTRSTSWDIOSWCLKIN_NEGIN_POSOUTSHDNVSGSGNDGNDREFOPA0_IN0_NEGOPA0_IN0_NEGOPA1_IN0_NEGOPA1_IN0_NEGOPA0_IN0_POSOPA1_OUTOPA1_OUTVREF_1_25VREF_DIVFILTER_1_INVFILTER_1_OUTFILTER_2_INVOSCILLATIONSIBIAS_SETGNDGNDIBIAS_FBVREF_2_5VREF_2_5PRESSUREFILTER_1_HPSDASCLRSTV3_3GNDGNDSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7UART_RXUART_TXPA10PA11UART_CTSUART_RTSPUMP_CONTROLVALVE_CONTROLOPA1_OUTOPA1_IN0_NEGOPA1_IN0_POSSWDIOSWCLKOPA0_OUTVREF_2_5OPA0_IN0_NEGOPA0_IN0_POSADC_OSCILLATIONSADC_PRESSUREVCOREVCOREBRIDGE_POSIBIAS_FBBRIDGE_NEGGNDPRESSUREADC_PRESSUREGNDOSCILLATIONSADC_OSCILLATIONSVINGNDVALVE_OUTVALVE_OUTPUMP_OUTPUMP_OUTPUMP_CONTROLVALVE_CONTROLV3_3SHDNGND + " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.347976067176px"/>SENSOR_DRIVEInput + ReferenceConnectorsJumpers / Test PointsProgrammingINA + FilterMCUPressure SensorADC FilterMotor DriverU3ATL431LIBIDBZRU5INA350CDS-+GS: low = 30, high/open = 503.3V411GND3.3VGNDVINV3_3VREF_2_5V3_3GNDGNDGNDV_EXTVINVINUART_RTSUART_RXUART_TXUART_CTSSDASCLSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7PA10PA11OPA1_IN0_POSBRIDGE_POSINA_IN_POSOPA1_OUTPRESSUREINA_OUTOPA0_IN0_POSBRIDGE_NEGV3_3VREF_2_5OSCILLATIONSSWDIO_HEADERSWDIO_HEADERSWCLK_HEADERV3_3GNDRSTRSTSWDIOSWCLKIN_NEGIN_POSOUTSHDNVSGSGNDGNDREFOPA0_IN0_NEGOPA0_IN0_NEGOPA1_IN0_NEGOPA1_IN0_NEGOPA0_IN0_POSOPA1_OUTOPA1_OUTVREF_1_25FILTER_1_INVFILTER_1_OUTFILTER_2_INVOSCILLATIONSIBIAS_SETIBIAS_FBVREF_2_5VREF_2_5GNDGNDPRESSUREFILTER_1_HPSDASCLRSTV3_3GNDGNDSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7UART_RXUART_TXPA10PA11UART_CTSUART_RTSPUMP_CONTROLVALVE_CONTROLOPA1_OUTOPA1_IN0_NEGOPA1_IN0_POSSWDIOSWCLKOPA0_OUTVREF_2_5OPA0_IN0_NEGOPA0_IN0_POSADC_OSCILLATIONSADC_PRESSUREVCOREVCOREBRIDGE_POSIBIAS_FBBRIDGE_NEGGNDPRESSUREADC_PRESSUREGNDOSCILLATIONSADC_OSCILLATIONSVINGNDVALVE_OUTVALVE_OUTPUMP_OUTPUMP_OUTPUMP_CONTROLVALVE_CONTROLV3_3SHDNGND diff --git a/lib/chips/ATL431LIBIDBZR.circuit.tsx b/lib/chips/ATL431LIBIDBZR.circuit.tsx index c03eb252..6af79a69 100644 --- a/lib/chips/ATL431LIBIDBZR.circuit.tsx +++ b/lib/chips/ATL431LIBIDBZR.circuit.tsx @@ -7,6 +7,68 @@ const pinLabels = { pin3: ["ANODE", "A", "GND"], } as const; +const atl431SchematicSymbol = ( + + + + + + + + + + +); + /** ATL431LI B-grade shunt reference in the DBZ 3-pin SOT-23 package. */ export const ATL431LIBIDBZR = (props: ChipProps) => ( ) => ( pin2: { mustBeConnected: true }, pin3: { requiresGround: true, mustBeConnected: true }, }} - schWidth="2.6mm" - schHeight="2.2mm" - schPinArrangement={{ - topSide: { direction: "left-to-right", pins: ["CATHODE"] }, - leftSide: { direction: "top-to-bottom", pins: ["REF"] }, - bottomSide: { direction: "left-to-right", pins: ["ANODE"] }, - }} - schPinStyle={{ REF: { marginTop: 0.35 } }} + symbol={atl431SchematicSymbol} {...props} /> ); diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx index af20e03f..83cb3a33 100644 --- a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -48,9 +48,10 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ name="U2A" displayName="U2A" chipRef=".U2" - symbolName="opamp_no_power_right" + symbolName="opamp_no_power_left" + schRotation={180} schSectionName={inputReferenceSectionName ?? props.schSectionName} - schX={-3} + schX={-8.5} schY={15} connections={{ inp1: ".U2 > .IN_POS_A", @@ -58,6 +59,117 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ out: ".U2 > .OUT_A", }} /> + {/* The released drawing flips the input order and shows the shared + package power pins on unit A. These primitives complete that IEC + presentation while U2 remains the sole electrical/PCB component. */} + + + + + + + + + + + + + + .IN_POS_D", inp2: ".U2 > .IN_NEG_D", out: ".U2 > .OUT_D", - "V+": ".U2 > .V_POS", - "V-": ".U2 > .V_NEG", }} /> + + + + + + + + + + + .V_NEG", ".R6 > .pin2", ".R21 > .pin2"], + connectsTo: [".U2 > .V_NEG", ".R21 > .pin2"], schX: 0, schY: -5.5, direction: "down", @@ -251,15 +441,8 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ { name: "VREF_2_5", connectsTo: [".R4 > .pin1", ".R18 > .pin1"], - schX: -7, - schY: 4.1, - direction: "left", - }, - { - name: "VREF_DIV", - connectsTo: [".R4 > .pin2", ".R6 > .pin1", ".U2 > .IN_POS_A"], - schX: -5, - schY: 3.6, + schX: -11.5, + schY: 16.1, direction: "left", }, { @@ -270,8 +453,8 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ ".U2 > .IN_POS_B", ".U2 > .IN_POS_C", ], - schX: -1, - schY: 3, + schX: -8, + schY: 15, direction: "left", }, { diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 5b7f73eb..008ac25f 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -9,6 +9,35 @@ const throughHoleTestPoint = { doNotPlace: true, }; +const InvertedGroundGlyph = ({ x, y }: { x: number; y: number }) => ( + <> + + + + +); + export type BloodPressureMonitorInterfaces_TIDA010266Props = SubcircuitProps & { schSectionName?: string; inputSectionName?: string; @@ -37,8 +66,14 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={inputSectionName ?? props.schSectionName} manufacturerPartNumber="691101710002" footprint="pinrow2_rows1_p5mm" - schX={-8} - schY={4.5} + schX={-30} + schY={2.8} + schWidth="0.8mm" + schHeight="1.1mm" + schPinArrangement={{ + rightSide: { pins: ["pin1", "pin2"], direction: "top-to-bottom" }, + }} + schPinStyle={{ pin2: { marginTop: 0.15 } }} pinLabels={{ pin1: ["GND"], pin2: ["V_EXT"] }} connections={{ pin1: "net.GND", pin2: "net.V_EXT" }} /> @@ -47,8 +82,14 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={inputSectionName ?? props.schSectionName} manufacturerPartNumber="61300211121" footprint="pinrow2" - schX={-8} - schY={2.3} + schX={-30} + schY={0.8} + schWidth="0.8mm" + schHeight="1.1mm" + schPinArrangement={{ + rightSide: { pins: ["pin2", "pin1"], direction: "top-to-bottom" }, + }} + schPinStyle={{ pin1: { marginTop: 0.15 } }} pinLabels={{ pin1: ["VIN"], pin2: ["V_EXT"] }} connections={{ pin1: "net.VIN", pin2: "net.V_EXT" }} /> @@ -190,6 +231,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ direction="right" /> + + .V_EXT", ".J4 > .V_EXT"], - schX: -9, + schX: -31, schY: 3.4, direction: "left", }, { name: "VIN", connectsTo: [".J4 > .VIN", ".TP1 > .pin1"], - schX: -9, + schX: -31, schY: 2.3, direction: "left", }, @@ -450,7 +493,6 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ { name: "GND", connectsTo: [ - ".J1 > .GND", ".J3 > .GND", ".J10 > .GND", ".TP6 > .pin1", diff --git a/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx b/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx index 36529341..c33f7ec0 100644 --- a/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx +++ b/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx @@ -3,6 +3,35 @@ import { TPS7A2433DBVR } from "../chips/TPS7A2433DBVR.circuit.tsx"; import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; +const GroundGlyph = ({ x, y }: { x: number; y: number }) => ( + <> + + + + +); + /** TIDA-010266 U1/C1/C5 3.3 V input regulator stage. */ export const PowerManagement_TPS7A2433_TIDA010266 = ( props: TIDA010266SectionedSubcircuitProps, @@ -25,7 +54,6 @@ export const PowerManagement_TPS7A2433_TIDA010266 = ( IN: "net.VIN", EN: "net.VIN", OUT: "net.V3_3", - GND: "net.GND", }} /> + + + + + + + .GND", ".C5 > .pin2", ".C1 > .pin2"], - schX: 0, - schY: -2, - direction: "down", - }, ]} /> diff --git a/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx b/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx index 244c5361..cb8a41ff 100644 --- a/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx +++ b/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx @@ -3,6 +3,35 @@ import { ATL431LIBIDBZR } from "../chips/ATL431LIBIDBZR.circuit.tsx"; import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; +const GroundGlyph = ({ x, y }: { x: number; y: number }) => ( + <> + + + + +); + /** TIDA-010266 U3/R3/C2/C3 precision 2.5 V shunt-reference stage. */ export const VoltageReference_ATL431LI_TIDA010266 = ( props: TIDA010266SectionedSubcircuitProps, @@ -38,8 +67,8 @@ export const VoltageReference_ATL431LI_TIDA010266 = ( connections={{ pin1: "net.V3_3", pin2: "net.VREF_2_5" }} /> {[ - ["C2", -2.1], - ["C3", 2.1], + ["C2", 1.5], + ["C3", 2.8], ].map(([name, schX]) => ( ))} + + + .pin1", ".C3 > .pin1", ], - schX: -2, - schY: 0, - direction: "left", - }, - { - name: "GND", - connectsTo: [".U3 > .ANODE", ".C2 > .pin2", ".C3 > .pin2"], - schX: 0, - schY: -3, - direction: "down", + schX: 3.5, + schY: 0.35, + direction: "right", }, ]} /> diff --git a/tests/TIDA010266.test.tsx b/tests/TIDA010266.test.tsx index 78946321..3940e68b 100644 --- a/tests/TIDA010266.test.tsx +++ b/tests/TIDA010266.test.tsx @@ -230,6 +230,32 @@ test("TIDA-010266 example contains the complete released BOM and net topology", ); } + const inputReferenceLayout = ["J1", "U1", "U3", "R4", "U2A"].map( + getSchematicComponent, + ); + assert.ok( + inputReferenceLayout.every( + (component, index) => + index === 0 || + inputReferenceLayout[index - 1]!.center.x < component.center.x, + ), + "input/reference stage should follow the released left-to-right signal flow", + ); + const u3Schematic = getSchematicComponent("U3"); + assert.ok(u3Schematic.size.width < 1.5, "U3 should use the compact symbol"); + assert.ok(u3Schematic.size.height < 1.3, "U3 should use the compact symbol"); + for (const name of ["R3", "R4", "R6", "C1", "C2", "C3", "C5"]) { + const component = getSchematicComponent(name); + const ports = circuit.db.schematic_port.list({ + schematic_component_id: component.schematic_component_id, + }); + assert.equal(ports.length, 2, name); + assert.ok( + Math.abs(ports[0]!.center.x - ports[1]!.center.x) < 1e-6, + `${name} should be vertical in the input/reference section`, + ); + } + const expectedResistors: Record = { R1: 27, R2: 47_000, From 4690ff601eb4bbddfc354fc0ce30730aeb4cb3eb Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 13:09:20 +0530 Subject: [PATCH 04/21] Use solver ground symbols in TIDA-010266 --- ...itor_TIDA010266.circuit-schematic.snap.svg | 4 +- lib/chips/ATL431LIBIDBZR.circuit.tsx | 41 ++++--- ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 114 +----------------- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 30 ----- ...anagement_TPS7A2433_TIDA010266.circuit.tsx | 32 ----- ...eReference_ATL431LI_TIDA010266.circuit.tsx | 30 ----- tests/TIDA010266.test.tsx | 26 ---- 7 files changed, 25 insertions(+), 252 deletions(-) diff --git a/examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg b/examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg index cf9fb243..934ed081 100644 --- a/examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg +++ b/examples/__snapshots__/BloodPressureAndHeartRateMonitor_TIDA010266.circuit-schematic.snap.svg @@ -9,7 +9,7 @@ .port-label { fill: rgb(0, 100, 100); } .component-name { fill: rgb(0, 100, 100); } - 112233445566AABBCCDDTPS7A2433DBVRU11IN2GND3EN4NC5OUTC51uFC14.7uFCATHODEREFANODER3330ΩC24.7uFC34.7uF691101710002J11GND2V_EXT61300211121J41VIN2V_EXT90121-0766J31UART_RTS2UART_RX3UART_TX4NC5UART_CTS6GNDTSW-110-08-G-SJ71SDA2SCL3SPI0_CS4PA35SPI0_POCI6SPI0_PICO7SPI_SCLK8PA79PA1010PA1161300311121J51OPA1_IN0_POS2BRIDGE_POS3INA_IN_POS61300311121J61OPA1_OUT2PRESSURE3INA_OUT61300311121J81OPA0_IN0_POS2BRIDGE_NEG3INA_IN_NEG61300311121J101GND2INA_GS3V3_3TP1TP2TP3TP4TP5TP6TP7FTSH-105-01-L-DV-KJ21V3_32SWDIO_HEADER3GND_34SWCLK_HEADER5GND_56NC_67GND_78NC_89GND_910RSTR127ΩR527ΩR247kΩC41100pFS1IN_NEGIN_POSOUTSHDNV_POSGSEPV_NEGREFC130.1uFInternal OPA01inverting_input2non_inverting_input3outputInternal OPA11inverting_input2non_inverting_input3outputR1420kΩR12499ΩR1120kΩR15499ΩR1320kΩU2AU2BU2CU2DR410kΩR610kΩC114.7uFR1620kΩR9270kΩC9100nFC124.7uFR1720kΩR10270kΩC10100nFR1845.3kΩR214.99kΩMSPM0L1306SRHBRU41PA02PA13NRST4VDD5VSS6PA2_ROSC7PA38PA49PA510PA611PA712PA813PA914PA1015PA1116PA1217PA1318PA1419PA1520PA1621PA1722PA1823SWDIO24SWCLK25PA2126PA2227PA2328PA2429PA2530PA2631PA2732VCORE33EPC610uFC7100nFC80.47uFR710kΩR810kΩ2SMPP03U71VOUT_POS2NC3GND4VOUT_NEG5SUB6ICCR222.49kΩR19200ΩC17100pFR20200ΩC18100pFDRV8210DSGRU61VM2OUT13OUT24GND5IN26IN17MODE8VCC9EPC1422uFC15100nFC16100nFM22-5330405J91GND_12VALVE_OUT3PUMP_OUT4GND_4R230ΩGNDGNDGNDGND112233445566AABBCCDDTPS7A2433DBVRU11IN2GND3EN4NC5OUTC51uFC14.7uFKRAR3330ΩC24.7uFC34.7uF691101710002J11GND2V_EXT61300211121J41VIN2V_EXT90121-0766J31UART_RTS2UART_RX3UART_TX4NC5UART_CTS6GNDTSW-110-08-G-SJ71SDA2SCL3SPI0_CS4PA35SPI0_POCI6SPI0_PICO7SPI_SCLK8PA79PA1010PA1161300311121J51OPA1_IN0_POS2BRIDGE_POS3INA_IN_POS61300311121J61OPA1_OUT2PRESSURE3INA_OUT61300311121J81OPA0_IN0_POS2BRIDGE_NEG3INA_IN_NEG61300311121J101GND2INA_GS3V3_3TP1TP2TP3TP4TP5TP6TP7FTSH-105-01-L-DV-KJ21V3_32SWDIO_HEADER3GND_34SWCLK_HEADER5GND_56NC_67GND_78NC_89GND_910RSTR127ΩR527ΩR247kΩC41100pFS1IN_NEGIN_POSOUTSHDNV_POSGSEPV_NEGREFC130.1uFInternal OPA01inverting_input2non_inverting_input3outputInternal OPA11inverting_input2non_inverting_input3outputR1420kΩR12499ΩR1120kΩR15499ΩR1320kΩU2AU2BU2CU2DR410kΩR610kΩC114.7uFR1620kΩR9270kΩC9100nFC124.7uFR1720kΩR10270kΩC10100nFR1845.3kΩR214.99kΩMSPM0L1306SRHBRU41PA02PA13NRST4VDD5VSS6PA2_ROSC7PA38PA49PA510PA611PA712PA813PA914PA1015PA1116PA1217PA1318PA1419PA1520PA1621PA1722PA1823SWDIO24SWCLK25PA2126PA2227PA2328PA2429PA2530PA2631PA2732VCORE33EPC610uFC7100nFC80.47uFR710kΩR810kΩ2SMPP03U71VOUT_POS2NC3GND4VOUT_NEG5SUB6ICCR222.49kΩR19200ΩC17100pFR20200ΩC18100pFDRV8210DSGRU61VM2OUT13OUT24GND5IN26IN17MODE8VCC9EPC1422uFC15100nFC16100nFM22-5330405J91GND_12VALVE_OUT3PUMP_OUT4GND_4R230ΩGNDGNDGNDGNDSENSOR_DRIVEInput + ReferenceConnectorsJumpers / Test PointsProgrammingINA + FilterMCUPressure SensorADC FilterMotor DriverU3ATL431LIBIDBZRU5INA350CDS-+GS: low = 30, high/open = 503.3V411GND3.3VGNDVINV3_3VREF_2_5V3_3GNDGNDGNDV_EXTVINVINUART_RTSUART_RXUART_TXUART_CTSSDASCLSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7PA10PA11OPA1_IN0_POSBRIDGE_POSINA_IN_POSOPA1_OUTPRESSUREINA_OUTOPA0_IN0_POSBRIDGE_NEGV3_3VREF_2_5OSCILLATIONSSWDIO_HEADERSWDIO_HEADERSWCLK_HEADERV3_3GNDRSTRSTSWDIOSWCLKIN_NEGIN_POSOUTSHDNVSGSGNDGNDREFOPA0_IN0_NEGOPA0_IN0_NEGOPA1_IN0_NEGOPA1_IN0_NEGOPA0_IN0_POSOPA1_OUTOPA1_OUTVREF_1_25FILTER_1_INVFILTER_1_OUTFILTER_2_INVOSCILLATIONSIBIAS_SETIBIAS_FBVREF_2_5VREF_2_5GNDGNDPRESSUREFILTER_1_HPSDASCLRSTV3_3GNDGNDSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7UART_RXUART_TXPA10PA11UART_CTSUART_RTSPUMP_CONTROLVALVE_CONTROLOPA1_OUTOPA1_IN0_NEGOPA1_IN0_POSSWDIOSWCLKOPA0_OUTVREF_2_5OPA0_IN0_NEGOPA0_IN0_POSADC_OSCILLATIONSADC_PRESSUREVCOREVCOREBRIDGE_POSIBIAS_FBBRIDGE_NEGGNDPRESSUREADC_PRESSUREGNDOSCILLATIONSADC_OSCILLATIONSVINGNDVALVE_OUTVALVE_OUTPUMP_OUTPUMP_OUTPUMP_CONTROLVALVE_CONTROLV3_3SHDNGND + " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="1.347976067176px"/>SENSOR_DRIVEInput + ReferenceConnectorsJumpers / Test PointsProgrammingINA + FilterMCUPressure SensorADC FilterMotor DriverU3ATL431LIBIDBZRU5INA350CDS-+GS: low = 30, high/open = 503.3V43.3VVINV3_3VREF_2_5V3_3GNDGNDGNDV_EXTVINVINUART_RTSUART_RXUART_TXUART_CTSSDASCLSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7PA10PA11OPA1_IN0_POSBRIDGE_POSINA_IN_POSOPA1_OUTPRESSUREINA_OUTOPA0_IN0_POSBRIDGE_NEGV3_3VREF_2_5OSCILLATIONSSWDIO_HEADERSWDIO_HEADERSWCLK_HEADERV3_3GNDRSTRSTSWDIOSWCLKIN_NEGIN_POSOUTSHDNVSGSGNDGNDREFOPA0_IN0_NEGOPA0_IN0_NEGOPA1_IN0_NEGOPA1_IN0_NEGOPA0_IN0_POSOPA1_OUTOPA1_OUTVREF_1_25FILTER_1_INVFILTER_1_OUTFILTER_2_INVOSCILLATIONSIBIAS_SETIBIAS_FBVREF_2_5VREF_2_5GNDGNDPRESSUREFILTER_1_HPSDASCLRSTV3_3GNDGNDSPI0_CSPA3SPI0_POCISPI0_PICOSPI_SCLKPA7UART_RXUART_TXPA10PA11UART_CTSUART_RTSPUMP_CONTROLVALVE_CONTROLOPA1_OUTOPA1_IN0_NEGOPA1_IN0_POSSWDIOSWCLKOPA0_OUTVREF_2_5OPA0_IN0_NEGOPA0_IN0_POSADC_OSCILLATIONSADC_PRESSUREVCOREVCOREBRIDGE_POSIBIAS_FBBRIDGE_NEGGNDPRESSUREADC_PRESSUREGNDOSCILLATIONSADC_OSCILLATIONSVINGNDVALVE_OUTVALVE_OUTPUMP_OUTPUMP_OUTPUMP_CONTROLVALVE_CONTROLV3_3SHDNGND diff --git a/lib/chips/ATL431LIBIDBZR.circuit.tsx b/lib/chips/ATL431LIBIDBZR.circuit.tsx index 6af79a69..0851c44f 100644 --- a/lib/chips/ATL431LIBIDBZR.circuit.tsx +++ b/lib/chips/ATL431LIBIDBZR.circuit.tsx @@ -2,25 +2,25 @@ import type { ChipProps } from "@tscircuit/props"; import "tscircuit"; const pinLabels = { - pin1: ["CATHODE", "K"], - pin2: ["REF", "REFERENCE"], - pin3: ["ANODE", "A", "GND"], + pin1: ["K", "CATHODE"], + pin2: ["R", "REF", "REFERENCE"], + pin3: ["A", "ANODE", "GND"], } as const; const atl431SchematicSymbol = ( - + - + ); @@ -76,6 +76,7 @@ export const ATL431LIBIDBZR = (props: ChipProps) => ( datasheetUrl="https://www.ti.com/lit/ds/symlink/atl431li.pdf" footprint="sot23_3" pinLabels={pinLabels} + showPinAliases={false} pinAttributes={{ pin1: { mustBeConnected: true }, pin2: { mustBeConnected: true }, diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx index 83cb3a33..9327b9fa 100644 --- a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -59,9 +59,8 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ out: ".U2 > .OUT_A", }} /> - {/* The released drawing flips the input order and shows the shared - package power pins on unit A. These primitives complete that IEC - presentation while U2 remains the sole electrical/PCB component. */} + {/* The released drawing flips the input order and loops the output back + to the inverting input. U2 remains the sole electrical/PCB package. */} - - - - - - - - - - - - - - ( - <> - - - - -); - export type BloodPressureMonitorInterfaces_TIDA010266Props = SubcircuitProps & { schSectionName?: string; inputSectionName?: string; @@ -232,7 +203,6 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ /> - ( - <> - - - - -); - /** TIDA-010266 U1/C1/C5 3.3 V input regulator stage. */ export const PowerManagement_TPS7A2433_TIDA010266 = ( props: TIDA010266SectionedSubcircuitProps, @@ -81,9 +52,6 @@ export const PowerManagement_TPS7A2433_TIDA010266 = ( - - - ( - <> - - - - -); - /** TIDA-010266 U3/R3/C2/C3 precision 2.5 V shunt-reference stage. */ export const VoltageReference_ATL431LI_TIDA010266 = ( props: TIDA010266SectionedSubcircuitProps, @@ -85,7 +56,6 @@ export const VoltageReference_ATL431LI_TIDA010266 = ( ))} - - index === 0 || - inputReferenceLayout[index - 1]!.center.x < component.center.x, - ), - "input/reference stage should follow the released left-to-right signal flow", - ); - const u3Schematic = getSchematicComponent("U3"); - assert.ok(u3Schematic.size.width < 1.5, "U3 should use the compact symbol"); - assert.ok(u3Schematic.size.height < 1.3, "U3 should use the compact symbol"); - for (const name of ["R3", "R4", "R6", "C1", "C2", "C3", "C5"]) { - const component = getSchematicComponent(name); - const ports = circuit.db.schematic_port.list({ - schematic_component_id: component.schematic_component_id, - }); - assert.equal(ports.length, 2, name); - assert.ok( - Math.abs(ports[0]!.center.x - ports[1]!.center.x) < 1e-6, - `${name} should be vertical in the input/reference section`, - ); - } - const expectedResistors: Record = { R1: 27, R2: 47_000, From a0cb2670439c362a9d40a610b83cbef93421ba11 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 13:26:48 +0530 Subject: [PATCH 05/21] Refine TIDA-010266 reference schematic --- lib/chips/ATL431LIBIDBZR.circuit.tsx | 84 ++++++++++++------- ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 2 + ...reMonitorInterfaces_TIDA010266.circuit.tsx | 2 + ...anagement_TPS7A2433_TIDA010266.circuit.tsx | 2 + lib/subcircuits/TIDA010266InlineNetPorts.tsx | 57 +++++++++---- ...eReference_ATL431LI_TIDA010266.circuit.tsx | 7 +- 6 files changed, 104 insertions(+), 50 deletions(-) diff --git a/lib/chips/ATL431LIBIDBZR.circuit.tsx b/lib/chips/ATL431LIBIDBZR.circuit.tsx index 0851c44f..c86c66b5 100644 --- a/lib/chips/ATL431LIBIDBZR.circuit.tsx +++ b/lib/chips/ATL431LIBIDBZR.circuit.tsx @@ -8,63 +8,89 @@ const pinLabels = { } as const; const atl431SchematicSymbol = ( - + + + - - + + + + ); diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx index 9327b9fa..863955a2 100644 --- a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -331,6 +331,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ { name: "VREF_2_5", connectsTo: [".R4 > .pin1", ".R18 > .pin1"], + inlineLabelConnectsTo: ".R18 > .pin1", schX: -11.5, schY: 16.1, direction: "left", @@ -343,6 +344,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ ".U2 > .IN_POS_B", ".U2 > .IN_POS_C", ], + inlineLabelConnectsTo: [".U2 > .IN_POS_B", ".U2 > .IN_POS_C"], schX: -8, schY: 15, direction: "left", diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index ea6da66c..6653c8b3 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -274,6 +274,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ { name: "V_EXT", connectsTo: [".J1 > .V_EXT", ".J4 > .V_EXT"], + inlineLabelConnectsTo: false, schX: -31, schY: 3.4, direction: "left", @@ -281,6 +282,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ { name: "VIN", connectsTo: [".J4 > .VIN", ".TP1 > .pin1"], + inlineLabelConnectsTo: ".TP1 > .pin1", schX: -31, schY: 2.3, direction: "left", diff --git a/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx b/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx index 6ece34d3..9f7ff5eb 100644 --- a/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx +++ b/lib/subcircuits/PowerManagement_TPS7A2433_TIDA010266.circuit.tsx @@ -66,6 +66,7 @@ export const PowerManagement_TPS7A2433_TIDA010266 = ( { name: "VIN", connectsTo: [".U1 > .IN", ".U1 > .EN", ".C5 > .pin1"], + inlineLabelConnectsTo: false, schX: -2.2, schY: 0.7, direction: "left", @@ -73,6 +74,7 @@ export const PowerManagement_TPS7A2433_TIDA010266 = ( { name: "V3_3", connectsTo: [".U1 > .OUT", ".C1 > .pin1"], + inlineLabelConnectsTo: false, schX: 2.2, schY: 0.7, direction: "right", diff --git a/lib/subcircuits/TIDA010266InlineNetPorts.tsx b/lib/subcircuits/TIDA010266InlineNetPorts.tsx index 63ea58c1..0515b4df 100644 --- a/lib/subcircuits/TIDA010266InlineNetPorts.tsx +++ b/lib/subcircuits/TIDA010266InlineNetPorts.tsx @@ -5,6 +5,8 @@ export type TIDA010266InlineNetPort = { name: string; net?: string; connectsTo: string | string[]; + /** Override which connected endpoints receive inline labels. */ + inlineLabelConnectsTo?: string | string[] | false; schX: number; schY: number; direction?: "left" | "right" | "up" | "down"; @@ -25,23 +27,42 @@ export const TIDA010266InlineNetPorts = ({ ports: TIDA010266InlineNetPort[]; }) => ( <> - {ports.map(({ name, net = name, connectsTo, schX, schY, direction }) => ( - - - {(Array.isArray(connectsTo) ? connectsTo : [connectsTo]).map( - (target, index) => ( - - - - ), - )} - - ))} + {ports.map( + ({ + name, + net = name, + connectsTo, + inlineLabelConnectsTo, + schX, + schY, + direction, + }) => { + const selectedLabelTargets: string | string[] | false = + inlineLabelConnectsTo ?? connectsTo; + const labelTargets: string[] = + selectedLabelTargets === false + ? [] + : Array.isArray(selectedLabelTargets) + ? selectedLabelTargets + : [selectedLabelTargets]; + + return ( + + + {labelTargets.map((target, index) => ( + + + + ))} + + ); + }, + )} ); diff --git a/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx b/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx index 238d30f9..1e058fc2 100644 --- a/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx +++ b/lib/subcircuits/VoltageReference_ATL431LI_TIDA010266.circuit.tsx @@ -38,8 +38,8 @@ export const VoltageReference_ATL431LI_TIDA010266 = ( connections={{ pin1: "net.V3_3", pin2: "net.VREF_2_5" }} /> {[ - ["C2", 1.5], - ["C3", 2.8], + ["C2", 2], + ["C3", 3.4], ].map(([name, schX]) => ( ))} - .pin1", + inlineLabelConnectsTo: false, schX: 0, schY: 3.2, direction: "up", @@ -83,6 +83,7 @@ export const VoltageReference_ATL431LI_TIDA010266 = ( ".C2 > .pin1", ".C3 > .pin1", ], + inlineLabelConnectsTo: false, schX: 3.5, schY: 0.35, direction: "right", From f6311dd943f73db77111978720c5508dd76e8fd0 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 13:38:08 +0530 Subject: [PATCH 06/21] Match TIDA-010266 interface sections --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 16 +- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 256 +++++++++++------- ...mingInterface_MSPM0_TIDA010266.circuit.tsx | 8 +- 3 files changed, 176 insertions(+), 104 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 7d83657d..1e96b2ed 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -55,7 +55,8 @@ export default () => ( {/* Native section metadata drives divider placement and section-aware routing. */} - + + @@ -65,11 +66,12 @@ export default () => ( {/* Centered titles sit inside, rather than directly on, each top divider. */} - - + + + - - + + @@ -90,7 +92,9 @@ export default () => ( name="interfaces" inputSectionName="input_reference" connectorSectionName="connectors" - jumperSectionName="jumpers_test_points" + jumperSectionName="jumpers" + testPointSectionName="test_points" + inaFilterSectionName="ina_filter" schX={-4} schY={17} /> diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 6653c8b3..d38846ba 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -14,6 +14,8 @@ export type BloodPressureMonitorInterfaces_TIDA010266Props = SubcircuitProps & { inputSectionName?: string; connectorSectionName?: string; jumperSectionName?: string; + testPointSectionName?: string; + inaFilterSectionName?: string; }; /** TIDA-010266 power, UART/GPIO, selection jumpers, and seven test points. */ @@ -21,6 +23,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ inputSectionName, connectorSectionName, jumperSectionName, + testPointSectionName, + inaFilterSectionName, ...props }: BloodPressureMonitorInterfaces_TIDA010266Props) => { const originX = typeof props.schX === "number" ? props.schX : 0; @@ -69,8 +73,16 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={connectorSectionName ?? props.schSectionName} manufacturerPartNumber="90121-0766" footprint="pinrow6" - schX={-1} - schY={4.2} + schX={-6.5} + schY={1.5} + schWidth="0.8mm" + schHeight="3mm" + schPinArrangement={{ + leftSide: { + pins: ["pin1", "pin2", "pin3", "pin4", "pin5", "pin6"], + direction: "top-to-bottom", + }, + }} pinLabels={{ pin1: ["UART_RTS"], pin2: ["UART_RX"], @@ -93,8 +105,27 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={connectorSectionName ?? props.schSectionName} manufacturerPartNumber="TSW-110-08-G-S" footprint="pinrow10" - schX={5} - schY={3.5} + schX={-6.5} + schY={-5.8} + schWidth="0.8mm" + schHeight="5mm" + schPinArrangement={{ + leftSide: { + pins: [ + "pin1", + "pin2", + "pin3", + "pin4", + "pin5", + "pin6", + "pin7", + "pin8", + "pin9", + "pin10", + ], + direction: "top-to-bottom", + }, + }} pinLabels={{ pin1: ["SDA"], pin2: ["SCL"], @@ -126,8 +157,16 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={jumperSectionName ?? props.schSectionName} manufacturerPartNumber="61300311121" footprint="pinrow3" - schX={-7} - schY={-0.4} + schX={-28} + schY={-4.6} + schWidth="0.8mm" + schHeight="1.5mm" + schPinArrangement={{ + rightSide: { + pins: ["pin3", "pin2", "pin1"], + direction: "top-to-bottom", + }, + }} pinLabels={{ pin1: ["OPA1_IN0_POS"], pin2: ["BRIDGE_POS"], @@ -144,8 +183,16 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={jumperSectionName ?? props.schSectionName} manufacturerPartNumber="61300311121" footprint="pinrow3" - schX={-2.5} - schY={-0.4} + schX={-21} + schY={-4.6} + schWidth="0.8mm" + schHeight="1.5mm" + schPinArrangement={{ + rightSide: { + pins: ["pin3", "pin2", "pin1"], + direction: "top-to-bottom", + }, + }} pinLabels={{ pin1: ["OPA1_OUT"], pin2: ["PRESSURE"], @@ -162,8 +209,16 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={jumperSectionName ?? props.schSectionName} manufacturerPartNumber="61300311121" footprint="pinrow3" - schX={2} - schY={-0.4} + schX={-28} + schY={-7} + schWidth="0.8mm" + schHeight="1.5mm" + schPinArrangement={{ + rightSide: { + pins: ["pin3", "pin2", "pin1"], + direction: "top-to-bottom", + }, + }} pinLabels={{ pin1: ["OPA0_IN0_POS"], pin2: ["BRIDGE_NEG"], @@ -176,18 +231,26 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ /> + + + + .V3_3", ".TP3 > .pin1"], - schX: 7.5, - schY: -0.4, - direction: "right", + schX: -15.2, + schY: -5.4, + direction: "left", }, { name: "VREF_2_5", connectsTo: ".TP4 > .pin1", - schX: -0.1, - schY: -4, - direction: "down", + schX: -15.2, + schY: -6.6, + direction: "left", }, { name: "PRESSURE", connectsTo: [".J6 > .PRESSURE", ".TP2 > .pin1"], - schX: -3.7, - schY: -1.2, - direction: "left", + schX: -11.7, + schY: -5.4, + direction: "right", }, { name: "OSCILLATIONS", connectsTo: ".TP5 > .pin1", - schX: 2.2, - schY: -4, - direction: "down", + schX: -11.7, + schY: -7.2, + direction: "right", }, { name: "BRIDGE_POS", connectsTo: ".J5 > .BRIDGE_POS", - schX: -8, - schY: -0.4, + schX: -29.2, + schY: -4.6, direction: "left", }, { name: "BRIDGE_NEG", connectsTo: ".J8 > .BRIDGE_NEG", - schX: 1, - schY: -1.2, + schX: -29.2, + schY: -7, direction: "left", }, { name: "INA_IN_POS", connectsTo: ".J5 > .INA_IN_POS", - schX: -8, - schY: -1.2, + schX: -29.2, + schY: -5.4, direction: "left", }, { name: "INA_OUT", connectsTo: ".J6 > .INA_OUT", - schX: -3.7, - schY: -2, + schX: -22.2, + schY: -5.4, direction: "left", }, { name: "OPA0_IN0_POS", connectsTo: ".J8 > .OPA0_IN0_POS", - schX: 1, - schY: 0.4, + schX: -29.2, + schY: -6.2, direction: "left", }, { name: "OPA1_IN0_POS", connectsTo: ".J5 > .OPA1_IN0_POS", - schX: -8, - schY: 0.4, + schX: -29.2, + schY: -3.8, direction: "left", }, { name: "OPA1_OUT", connectsTo: ".J6 > .OPA1_OUT", - schX: -3.7, - schY: 0.4, + schX: -22.2, + schY: -3.8, direction: "left", }, { name: "UART_RTS", connectsTo: ".J3 > .UART_RTS", - schX: -2.5, - schY: 5.2, + schX: -9, + schY: 2.5, direction: "left", }, { name: "UART_RX", connectsTo: ".J3 > .UART_RX", - schX: -2.5, - schY: 4.7, + schX: -9, + schY: 2, direction: "left", }, { name: "UART_TX", connectsTo: ".J3 > .UART_TX", - schX: -2.5, - schY: 4.2, + schX: -9, + schY: 1.5, direction: "left", }, { name: "UART_CTS", connectsTo: ".J3 > .UART_CTS", - schX: -2.5, - schY: 3.2, + schX: -9, + schY: 0.5, direction: "left", }, { name: "SDA", connectsTo: ".J7 > .SDA", - schX: 3.5, - schY: 5.7, + schX: -9.3, + schY: -3.55, direction: "left", }, { name: "SCL", connectsTo: ".J7 > .SCL", - schX: 3.5, - schY: 5.2, + schX: -9.3, + schY: -4.05, direction: "left", }, { name: "SPI0_CS", connectsTo: ".J7 > .SPI0_CS", - schX: 3.5, - schY: 4.7, + schX: -9.3, + schY: -4.55, direction: "left", }, { name: "PA3", connectsTo: ".J7 > .PA3", - schX: 3.5, - schY: 4.2, + schX: -9.3, + schY: -5.05, direction: "left", }, { name: "SPI0_POCI", connectsTo: ".J7 > .SPI0_POCI", - schX: 3.5, - schY: 3.7, + schX: -9.3, + schY: -5.55, direction: "left", }, { name: "SPI0_PICO", connectsTo: ".J7 > .SPI0_PICO", - schX: 3.5, - schY: 3.2, + schX: -9.3, + schY: -6.05, direction: "left", }, { name: "SPI_SCLK", connectsTo: ".J7 > .SPI_SCLK", - schX: 3.5, - schY: 2.7, + schX: -9.3, + schY: -6.55, direction: "left", }, { name: "PA7", connectsTo: ".J7 > .PA7", - schX: 3.5, - schY: 2.2, + schX: -9.3, + schY: -7.05, direction: "left", }, { name: "PA10", connectsTo: ".J7 > .PA10", - schX: 3.5, - schY: 1.7, + schX: -9.3, + schY: -7.55, direction: "left", }, { name: "PA11", connectsTo: ".J7 > .PA11", - schX: 3.5, - schY: 1.2, + schX: -9.3, + schY: -8.05, direction: "left", }, { @@ -470,8 +537,9 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ ".TP6 > .pin1", ".TP7 > .pin1", ], - schX: 0, - schY: -4.5, + inlineLabelConnectsTo: false, + schX: -14, + schY: -10, direction: "down", }, ]} diff --git a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx index d6401c84..54a81928 100644 --- a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx +++ b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx @@ -80,7 +80,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( schSectionName={props.schSectionName} resistance="47k" footprint="0603" - schX={-3.6} + schX={-24} schY={1.7} schOrientation="vertical" connections={{ pin1: "net.V3_3", pin2: "net.RST" }} @@ -91,7 +91,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( capacitance="1100pF" maxVoltageRating="50V" footprint="0603" - schX={-3.6} + schX={-24} schY={-0.2} schOrientation="vertical" connections={{ @@ -104,7 +104,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( schSectionName={props.schSectionName} manufacturerPartNumber="EVQ-21505R" footprint="smdpushbutton" - schX={-1} + schX={-21} schY={0.7} // EVQ-21505R has two pins on each switch terminal. The upstream // pushbutton prop type currently exposes only the two logical pins, @@ -137,7 +137,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( ".C4 > .pin1", ".S1 > .pin1", ], - schX: -5, + schX: -25.5, schY: 0, direction: "left", }, From 31283a361e52eefe5f913748478080e59c2269ea Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 13:46:28 +0530 Subject: [PATCH 07/21] Compact TIDA-010266 connector section --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 6 +-- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 44 +++++++++---------- ...mingInterface_MSPM0_TIDA010266.circuit.tsx | 8 ++-- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 1e96b2ed..87df9387 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -66,9 +66,9 @@ export default () => ( {/* Centered titles sit inside, rather than directly on, each top divider. */} - + - + @@ -127,7 +127,7 @@ export default () => ( schSectionName="ina_filter" inputReferenceSectionName="input_reference" pressureSectionName="pressure_sensor" - schX={-7} + schX={-4} schY={2} /> @@ -312,7 +312,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ name="TP5" schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5117" - schX={-10.5} + schX={6.5} schY={-7.2} connections={{ pin1: "net.OSCILLATIONS" }} /> @@ -371,14 +371,14 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ { name: "PRESSURE", connectsTo: [".J6 > .PRESSURE", ".TP2 > .pin1"], - schX: -11.7, + schX: 5.3, schY: -5.4, direction: "right", }, { name: "OSCILLATIONS", connectsTo: ".TP5 > .pin1", - schX: -11.7, + schX: 5.3, schY: -7.2, direction: "right", }, @@ -434,98 +434,98 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ { name: "UART_RTS", connectsTo: ".J3 > .UART_RTS", - schX: -9, + schX: 7.2, schY: 2.5, direction: "left", }, { name: "UART_RX", connectsTo: ".J3 > .UART_RX", - schX: -9, + schX: 7.2, schY: 2, direction: "left", }, { name: "UART_TX", connectsTo: ".J3 > .UART_TX", - schX: -9, + schX: 7.2, schY: 1.5, direction: "left", }, { name: "UART_CTS", connectsTo: ".J3 > .UART_CTS", - schX: -9, + schX: 7.2, schY: 0.5, direction: "left", }, { name: "SDA", connectsTo: ".J7 > .SDA", - schX: -9.3, + schX: 7.2, schY: -3.55, direction: "left", }, { name: "SCL", connectsTo: ".J7 > .SCL", - schX: -9.3, + schX: 7.2, schY: -4.05, direction: "left", }, { name: "SPI0_CS", connectsTo: ".J7 > .SPI0_CS", - schX: -9.3, + schX: 7.2, schY: -4.55, direction: "left", }, { name: "PA3", connectsTo: ".J7 > .PA3", - schX: -9.3, + schX: 7.2, schY: -5.05, direction: "left", }, { name: "SPI0_POCI", connectsTo: ".J7 > .SPI0_POCI", - schX: -9.3, + schX: 7.2, schY: -5.55, direction: "left", }, { name: "SPI0_PICO", connectsTo: ".J7 > .SPI0_PICO", - schX: -9.3, + schX: 7.2, schY: -6.05, direction: "left", }, { name: "SPI_SCLK", connectsTo: ".J7 > .SPI_SCLK", - schX: -9.3, + schX: 7.2, schY: -6.55, direction: "left", }, { name: "PA7", connectsTo: ".J7 > .PA7", - schX: -9.3, + schX: 7.2, schY: -7.05, direction: "left", }, { name: "PA10", connectsTo: ".J7 > .PA10", - schX: -9.3, + schX: 7.2, schY: -7.55, direction: "left", }, { name: "PA11", connectsTo: ".J7 > .PA11", - schX: -9.3, + schX: 7.2, schY: -8.05, direction: "left", }, diff --git a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx index 54a81928..2e6e4721 100644 --- a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx +++ b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx @@ -80,7 +80,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( schSectionName={props.schSectionName} resistance="47k" footprint="0603" - schX={-24} + schX={-8} schY={1.7} schOrientation="vertical" connections={{ pin1: "net.V3_3", pin2: "net.RST" }} @@ -91,7 +91,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( capacitance="1100pF" maxVoltageRating="50V" footprint="0603" - schX={-24} + schX={-8} schY={-0.2} schOrientation="vertical" connections={{ @@ -104,7 +104,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( schSectionName={props.schSectionName} manufacturerPartNumber="EVQ-21505R" footprint="smdpushbutton" - schX={-21} + schX={-5} schY={0.7} // EVQ-21505R has two pins on each switch terminal. The upstream // pushbutton prop type currently exposes only the two logical pins, @@ -137,7 +137,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( ".C4 > .pin1", ".S1 > .pin1", ], - schX: -25.5, + schX: -9.5, schY: 0, direction: "left", }, From e0a29fc530dd08f9a7ba75f11a47f36e2dc3067b Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 13:57:39 +0530 Subject: [PATCH 08/21] Align TIDA-010266 section boundaries --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 6 +-- ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 38 +++++++++---------- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 18 ++++----- 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 87df9387..2e0467bb 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -65,10 +65,10 @@ export default () => ( {/* Centered titles sit inside, rather than directly on, each top divider. */} - + - - + + diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx index 863955a2..6c1e2c4c 100644 --- a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -51,7 +51,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ symbolName="opamp_no_power_left" schRotation={180} schSectionName={inputReferenceSectionName ?? props.schSectionName} - schX={-8.5} + schX={4.5} schY={15} connections={{ inp1: ".U2 > .IN_POS_A", @@ -62,63 +62,63 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ {/* The released drawing flips the input order and loops the output back to the inverting input. U2 remains the sole electrical/PCB package. */} .pin1", ".R18 > .pin1"], inlineLabelConnectsTo: ".R18 > .pin1", - schX: -11.5, + schX: 1.5, schY: 16.1, direction: "left", }, @@ -345,7 +345,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ ".U2 > .IN_POS_C", ], inlineLabelConnectsTo: [".U2 > .IN_POS_B", ".U2 > .IN_POS_C"], - schX: -8, + schX: 5, schY: 15, direction: "left", }, diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 26787f0d..6ff8d179 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -276,7 +276,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ name="TP1" schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5000" - schX={-14} + schX={-6} schY={-4.2} connections={{ pin1: "net.VIN" }} /> @@ -294,7 +294,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ name="TP3" schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5000" - schX={-14} + schX={-6} schY={-5.4} connections={{ pin1: "net.V3_3" }} /> @@ -303,7 +303,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ name="TP4" schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5000" - schX={-14} + schX={-6} schY={-6.6} connections={{ pin1: "net.VREF_2_5" }} /> @@ -321,7 +321,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ name="TP6" schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5001" - schX={-14} + schX={-6} schY={-7.8} connections={{ pin1: "net.GND" }} /> @@ -330,8 +330,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ name="TP7" schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5001" - schX={-12.8} - schY={-9} + schX={-6} + schY={-8.2} connections={{ pin1: "net.GND" }} /> .V3_3", ".TP3 > .pin1"], - schX: -15.2, + schX: -7.2, schY: -5.4, direction: "left", }, { name: "VREF_2_5", connectsTo: ".TP4 > .pin1", - schX: -15.2, + schX: -7.2, schY: -6.6, direction: "left", }, @@ -538,7 +538,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ ".TP7 > .pin1", ], inlineLabelConnectsTo: false, - schX: -14, + schX: -6, schY: -10, direction: "down", }, From fc25ca10b5b047e9d1ca51e53d7af5b76ce9f442 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 14:07:17 +0530 Subject: [PATCH 09/21] Widen TIDA-010266 connector symbols --- .../BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 6ff8d179..29f06ef0 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -75,7 +75,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ footprint="pinrow6" schX={10} schY={1.5} - schWidth="0.8mm" + schWidth="1.2mm" schHeight="1.2mm" schPinArrangement={{ leftSide: { @@ -107,7 +107,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ footprint="pinrow10" schX={10} schY={-5.8} - schWidth="0.8mm" + schWidth="1.2mm" schHeight="2.2mm" schPinArrangement={{ leftSide: { From 2b4d3dc5861ad2c53583a536c60018a9c5b56ca2 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 14:10:25 +0530 Subject: [PATCH 10/21] Refine TIDA-010266 jumper layout --- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 29f06ef0..800bd167 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -157,10 +157,10 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={jumperSectionName ?? props.schSectionName} manufacturerPartNumber="61300311121" footprint="pinrow3" - schX={-28} + schX={-25} schY={-4.6} - schWidth="0.8mm" - schHeight="1.5mm" + schWidth="1.1mm" + schHeight="1.8mm" schPinArrangement={{ rightSide: { pins: ["pin3", "pin2", "pin1"], @@ -183,10 +183,10 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={jumperSectionName ?? props.schSectionName} manufacturerPartNumber="61300311121" footprint="pinrow3" - schX={-21} + schX={-15} schY={-4.6} - schWidth="0.8mm" - schHeight="1.5mm" + schWidth="1.1mm" + schHeight="1.8mm" schPinArrangement={{ rightSide: { pins: ["pin3", "pin2", "pin1"], @@ -209,10 +209,10 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={jumperSectionName ?? props.schSectionName} manufacturerPartNumber="61300311121" footprint="pinrow3" - schX={-28} - schY={-7} - schWidth="0.8mm" - schHeight="1.5mm" + schX={-25} + schY={-7.2} + schWidth="1.1mm" + schHeight="1.8mm" schPinArrangement={{ rightSide: { pins: ["pin3", "pin2", "pin1"], @@ -229,6 +229,22 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ pin2: "net.BRIDGE_NEG", }} /> + + .BRIDGE_POS", - schX: -29.2, + schX: -26.2, schY: -4.6, direction: "left", }, { name: "BRIDGE_NEG", connectsTo: ".J8 > .BRIDGE_NEG", - schX: -29.2, - schY: -7, + schX: -26.2, + schY: -7.2, direction: "left", }, { name: "INA_IN_POS", connectsTo: ".J5 > .INA_IN_POS", - schX: -29.2, + schX: -26.2, schY: -5.4, direction: "left", }, { name: "INA_OUT", connectsTo: ".J6 > .INA_OUT", - schX: -22.2, + schX: -16.2, schY: -5.4, direction: "left", }, { name: "OPA0_IN0_POS", connectsTo: ".J8 > .OPA0_IN0_POS", - schX: -29.2, - schY: -6.2, + schX: -26.2, + schY: -6.4, direction: "left", }, { name: "OPA1_IN0_POS", connectsTo: ".J5 > .OPA1_IN0_POS", - schX: -29.2, + schX: -26.2, schY: -3.8, direction: "left", }, { name: "OPA1_OUT", connectsTo: ".J6 > .OPA1_OUT", - schX: -22.2, + schX: -16.2, schY: -3.8, direction: "left", }, From cba3ff681b1fd90ec0a55a1d1ec542d8cd545bf3 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 14:13:40 +0530 Subject: [PATCH 11/21] Widen TIDA-010266 jumper symbols --- .../BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 800bd167..ecf0eb85 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -159,7 +159,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ footprint="pinrow3" schX={-25} schY={-4.6} - schWidth="1.1mm" + schWidth="1.8mm" schHeight="1.8mm" schPinArrangement={{ rightSide: { @@ -185,7 +185,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ footprint="pinrow3" schX={-15} schY={-4.6} - schWidth="1.1mm" + schWidth="1.8mm" schHeight="1.8mm" schPinArrangement={{ rightSide: { @@ -211,7 +211,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ footprint="pinrow3" schX={-25} schY={-7.2} - schWidth="1.1mm" + schWidth="1.8mm" schHeight="1.8mm" schPinArrangement={{ rightSide: { From 6f43c2347cc1d4d9bb1e480389c8a2650a646198 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 14:21:35 +0530 Subject: [PATCH 12/21] Match TIDA-010266 programming section --- ...ssureAndHeartRateMonitor_TIDA010266.circuit.tsx | 11 +++++++++++ ...ogrammingInterface_MSPM0_TIDA010266.circuit.tsx | 14 +++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 2e0467bb..20d442f0 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -64,6 +64,17 @@ export default () => ( + {/* Continue the native Programming/MCU divider to the sheet border. */} + + {/* Centered titles sit inside, rather than directly on, each top divider. */} diff --git a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx index 2e6e4721..d1bef4b1 100644 --- a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx +++ b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx @@ -13,7 +13,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( Date: Fri, 28 Aug 2026 14:32:43 +0530 Subject: [PATCH 13/21] Refine TIDA-010266 programming layout --- .../BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx | 2 +- .../ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 20d442f0..25de0bc5 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -80,7 +80,7 @@ export default () => ( - + diff --git a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx index d1bef4b1..b5ee5b48 100644 --- a/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx +++ b/lib/subcircuits/ProgrammingInterface_MSPM0_TIDA010266.circuit.tsx @@ -23,7 +23,7 @@ export const ProgrammingInterface_MSPM0_TIDA010266 = ( schX={3.4} schY={0.8} schWidth="2.2mm" - schHeight="2.4mm" + schHeight="2.1mm" schPinArrangement={{ leftSide: { pins: ["pin1", "pin3", "pin5", "pin7", "pin9"], From 9931de0eace4b8ac7a70ec7cd6bbee329bdc5fa1 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 14:34:51 +0530 Subject: [PATCH 14/21] Align TIDA-010266 test points and MCU title --- .../BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx | 2 +- .../BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 25de0bc5..aed5d8a2 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -82,7 +82,7 @@ export default () => ( - + diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index ecf0eb85..5dd76b1d 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -329,7 +329,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5117" schX={6.5} - schY={-7.2} + schY={-7.8} connections={{ pin1: "net.OSCILLATIONS" }} /> .pin1", schX: 5.3, - schY: -7.2, + schY: -7.8, direction: "right", }, { From b2d0c58a15a41d57115299406113d70c46f95759 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 14:39:04 +0530 Subject: [PATCH 15/21] Restore TIDA-010266 test point divider --- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 5dd76b1d..96bf8bff 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -293,7 +293,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={testPointSectionName ?? props.schSectionName} manufacturerPartNumber="5000" schX={-6} - schY={-4.2} + schY={-3.7} connections={{ pin1: "net.VIN" }} /> .V3_3", ".TP3 > .pin1"], schX: -7.2, - schY: -5.4, + schY: -4.9, direction: "left", }, { name: "VREF_2_5", connectsTo: ".TP4 > .pin1", schX: -7.2, - schY: -6.6, + schY: -6.1, direction: "left", }, { name: "PRESSURE", connectsTo: [".J6 > .PRESSURE", ".TP2 > .pin1"], schX: 5.3, - schY: -5.4, + schY: -4.9, direction: "right", }, { name: "OSCILLATIONS", connectsTo: ".TP5 > .pin1", schX: 5.3, - schY: -7.8, + schY: -7.3, direction: "right", }, { From bcbd3203cf24c909c4594eca12fedf60419ce677 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 14:57:07 +0530 Subject: [PATCH 16/21] updt --- ...ssureAndHeartRateMonitor_TIDA010266.circuit.tsx | 4 ++-- ...ressureMonitorInterfaces_TIDA010266.circuit.tsx | 14 +++++++------- ...ogrammingInterface_MSPM0_TIDA010266.circuit.tsx | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index aed5d8a2..04850e01 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -90,13 +90,13 @@ export default () => ( Date: Fri, 28 Aug 2026 15:08:44 +0530 Subject: [PATCH 17/21] Join TIDA-010266 schematic section dividers --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 49 ++++++++++++++++++- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 14 +++--- 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 04850e01..1ebd6253 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -64,9 +64,9 @@ export default () => ( - {/* Continue the native Programming/MCU divider to the sheet border. */} + {/* Continue native dividers from their exact endpoints to the sheet border. */} ( color="#000000" isDashed /> + + + + + {/* Centered titles sit inside, rather than directly on, each top divider. */} diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index c8984385..96bf8bff 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -41,8 +41,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={inputSectionName ?? props.schSectionName} manufacturerPartNumber="691101710002" footprint="pinrow2_rows1_p5mm" - schX={-28} - schY={1.8} + schX={-30} + schY={2.8} schWidth="0.8mm" schHeight="1.1mm" schPinArrangement={{ @@ -57,8 +57,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={inputSectionName ?? props.schSectionName} manufacturerPartNumber="61300211121" footprint="pinrow2" - schX={-28} - schY={-1} + schX={-30} + schY={0.8} schWidth="0.8mm" schHeight="1.1mm" schPinArrangement={{ @@ -73,10 +73,10 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={connectorSectionName ?? props.schSectionName} manufacturerPartNumber="90121-0766" footprint="pinrow6" - schX={11.5} + schX={10} schY={1.5} schWidth="1.2mm" - schHeight="1.4mm" + schHeight="1.2mm" schPinArrangement={{ leftSide: { pins: ["pin1", "pin2", "pin3", "pin4", "pin5", "pin6"], @@ -105,7 +105,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={connectorSectionName ?? props.schSectionName} manufacturerPartNumber="TSW-110-08-G-S" footprint="pinrow10" - schX={11.5} + schX={10} schY={-5.8} schWidth="1.2mm" schHeight="2.2mm" From 7f6410faca7e51f5ab627642262c1724c03d5f4a Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 15:32:27 +0530 Subject: [PATCH 18/21] Match TIDA-010266 motor driver schematic --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 28 ++-- lib/chips/DRV8210DSGR.circuit.tsx | 6 +- ...MotorDriver_DRV8210_TIDA010266.circuit.tsx | 125 ++++++++---------- 3 files changed, 74 insertions(+), 85 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index 1ebd6253..f2d3df2b 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -66,26 +66,26 @@ export default () => ( {/* Continue native dividers from their exact endpoints to the sheet border. */} ( isDashed /> ( /> ( isDashed /> ( name="motor_driver" schSectionName="motor_driver" schX={21} - schY={-16} + schY={-13} /> {/* R23 is intentionally not populated in TI's released assembly. */} diff --git a/lib/chips/DRV8210DSGR.circuit.tsx b/lib/chips/DRV8210DSGR.circuit.tsx index 8f093c02..86c34df9 100644 --- a/lib/chips/DRV8210DSGR.circuit.tsx +++ b/lib/chips/DRV8210DSGR.circuit.tsx @@ -5,11 +5,11 @@ const pinLabels = { pin2: ["OUT1"], pin3: ["OUT2"], pin4: ["GND"], - pin5: ["IN2", "EN", "IN2_EN"], - pin6: ["IN1", "PH", "IN1_PH"], + pin5: ["IN2/EN", "IN2", "EN", "IN2_EN"], + pin6: ["IN1/PH", "IN1", "PH", "IN1_PH"], pin7: ["MODE"], pin8: ["VCC"], - pin9: ["EP", "PAD"], + pin9: ["Thermal_Pad", "EP", "PAD"], } as const; const pinAttributes = { diff --git a/lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx b/lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx index 0ee50050..5dc1192e 100644 --- a/lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx +++ b/lib/subcircuits/MotorDriver_DRV8210_TIDA010266.circuit.tsx @@ -14,39 +14,29 @@ export const MotorDriver_DRV8210_TIDA010266 = ( + + + + + + + + + + + + .VM", ".C14 > .pin1", ".C15 > .pin1"], - schX: -2.7, - schY: 3.2, + inlineLabelConnectsTo: ".C14 > .pin1", + schX: -6.2, + schY: 3.5, direction: "up", }, { name: "V3_3", connectsTo: [".U6 > .VCC", ".C16 > .pin1"], - schX: -1, - schY: 3.2, + inlineLabelConnectsTo: ".C16 > .pin1", + schX: -10, + schY: 1.3, direction: "up", }, { name: "VALVE_CONTROL", connectsTo: ".U6 > .IN1", - schX: -3, - schY: 0.6, + schX: -5.5, + schY: -0.7, direction: "left", }, { name: "PUMP_CONTROL", connectsTo: ".U6 > .IN2", - schX: -3, - schY: -0.2, + schX: -5.5, + schY: -1.4, direction: "left", }, { name: "VALVE_OUT", connectsTo: [".U6 > .OUT1", ".J9 > .VALVE_OUT"], - schX: 3, - schY: 0.6, + inlineLabelConnectsTo: ".J9 > .VALVE_OUT", + schX: 6.5, + schY: 0.8, direction: "right", }, { name: "PUMP_OUT", connectsTo: [".U6 > .OUT2", ".J9 > .PUMP_OUT"], - schX: 3, - schY: -0.2, + inlineLabelConnectsTo: ".J9 > .PUMP_OUT", + schX: 6.5, + schY: 0.1, direction: "right", }, - { - name: "GND", - connectsTo: [ - ".U6 > .MODE", - ".U6 > .GND", - ".U6 > .EP", - ".C14 > .pin2", - ".C15 > .pin2", - ".C16 > .pin2", - ".J9 > .GND_1", - ".J9 > .GND_4", - ], - schX: 0, - schY: -3.5, - direction: "down", - }, ]} /> From f1946d23bca62c539c9cf0d204fe080b1642cdec Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 15:41:00 +0530 Subject: [PATCH 19/21] Refine TIDA-010266 interface section layout --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 28 ++++++------ ...reMonitorInterfaces_TIDA010266.circuit.tsx | 43 ++++++++++--------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index f2d3df2b..d1e0122b 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -67,35 +67,35 @@ export default () => ( {/* Continue native dividers from their exact endpoints to the sheet border. */} ( isDashed /> ( /> {/* Centered titles sit inside, rather than directly on, each top divider. */} - - + + diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 96bf8bff..69922d09 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -41,8 +41,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={inputSectionName ?? props.schSectionName} manufacturerPartNumber="691101710002" footprint="pinrow2_rows1_p5mm" - schX={-30} - schY={2.8} + schX={-29.8} + schY={2} schWidth="0.8mm" schHeight="1.1mm" schPinArrangement={{ @@ -57,8 +57,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={inputSectionName ?? props.schSectionName} manufacturerPartNumber="61300211121" footprint="pinrow2" - schX={-30} - schY={0.8} + schX={-29.8} + schY={0} schWidth="0.8mm" schHeight="1.1mm" schPinArrangement={{ @@ -73,7 +73,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={connectorSectionName ?? props.schSectionName} manufacturerPartNumber="90121-0766" footprint="pinrow6" - schX={10} + schX={11.8} schY={1.5} schWidth="1.2mm" schHeight="1.2mm" @@ -105,7 +105,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={connectorSectionName ?? props.schSectionName} manufacturerPartNumber="TSW-110-08-G-S" footprint="pinrow10" - schX={10} + schX={11.8} schY={-5.8} schWidth="1.2mm" schHeight="2.2mm" @@ -167,6 +167,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ direction: "top-to-bottom", }, }} + schPinStyle={{ pin2: { marginTop: 0.12 }, pin1: { marginTop: 0.12 } }} pinLabels={{ pin1: ["OPA1_IN0_POS"], pin2: ["BRIDGE_POS"], @@ -193,6 +194,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ direction: "top-to-bottom", }, }} + schPinStyle={{ pin2: { marginTop: 0.12 }, pin1: { marginTop: 0.12 } }} pinLabels={{ pin1: ["OPA1_OUT"], pin2: ["PRESSURE"], @@ -219,6 +221,7 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ direction: "top-to-bottom", }, }} + schPinStyle={{ pin2: { marginTop: 0.12 }, pin1: { marginTop: 0.12 } }} pinLabels={{ pin1: ["OPA0_IN0_POS"], pin2: ["BRIDGE_NEG"], @@ -450,98 +453,98 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ { name: "UART_RTS", connectsTo: ".J3 > .UART_RTS", - schX: 7.2, + schX: 9.6, schY: 2.5, direction: "left", }, { name: "UART_RX", connectsTo: ".J3 > .UART_RX", - schX: 7.2, + schX: 9.6, schY: 2, direction: "left", }, { name: "UART_TX", connectsTo: ".J3 > .UART_TX", - schX: 7.2, + schX: 9.6, schY: 1.5, direction: "left", }, { name: "UART_CTS", connectsTo: ".J3 > .UART_CTS", - schX: 7.2, + schX: 9.6, schY: 0.5, direction: "left", }, { name: "SDA", connectsTo: ".J7 > .SDA", - schX: 7.2, + schX: 9.6, schY: -3.55, direction: "left", }, { name: "SCL", connectsTo: ".J7 > .SCL", - schX: 7.2, + schX: 9.6, schY: -4.05, direction: "left", }, { name: "SPI0_CS", connectsTo: ".J7 > .SPI0_CS", - schX: 7.2, + schX: 9.6, schY: -4.55, direction: "left", }, { name: "PA3", connectsTo: ".J7 > .PA3", - schX: 7.2, + schX: 9.6, schY: -5.05, direction: "left", }, { name: "SPI0_POCI", connectsTo: ".J7 > .SPI0_POCI", - schX: 7.2, + schX: 9.6, schY: -5.55, direction: "left", }, { name: "SPI0_PICO", connectsTo: ".J7 > .SPI0_PICO", - schX: 7.2, + schX: 9.6, schY: -6.05, direction: "left", }, { name: "SPI_SCLK", connectsTo: ".J7 > .SPI_SCLK", - schX: 7.2, + schX: 9.6, schY: -6.55, direction: "left", }, { name: "PA7", connectsTo: ".J7 > .PA7", - schX: 7.2, + schX: 9.6, schY: -7.05, direction: "left", }, { name: "PA10", connectsTo: ".J7 > .PA10", - schX: 7.2, + schX: 9.6, schY: -7.55, direction: "left", }, { name: "PA11", connectsTo: ".J7 > .PA11", - schX: 7.2, + schX: 9.6, schY: -8.05, direction: "left", }, From 93ef7803536d138bc1dcd947936a4c86011d5b41 Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 16:10:52 +0530 Subject: [PATCH 20/21] Match TIDA-010266 INA filter schematic --- ...AndHeartRateMonitor_TIDA010266.circuit.tsx | 46 +- ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 145 ++++-- ...reMonitorInterfaces_TIDA010266.circuit.tsx | 12 +- ...nstrumentationAmplifier_INA350.circuit.tsx | 447 ++++++++++++------ ...tionAmplifier_MSPM0_TIDA010266.circuit.tsx | 178 +++++-- 5 files changed, 587 insertions(+), 241 deletions(-) diff --git a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx index d1e0122b..41bbeb8d 100644 --- a/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx +++ b/examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx @@ -64,21 +64,43 @@ export default () => ( + {/* A visually empty DNP anchor keeps the MCU and INA baselines aligned. */} + + + + } + /> + {/* Continue native dividers from their exact endpoints to the sheet border. */} ( isDashed /> ( gain="external" shutdown="external" inlineNetLabels - schX={-30} - schY={2} + schematicStyle="box" + supplyNetName="V3_3" + schX={-25} + schY={-2.5} /> ( resistance="0" footprint="0402" doNotPlace - schX={-28} - schY={-2} + schX={-29} + schY={-3.3} connections={{ pin1: "net.SHDN", pin2: "net.GND", @@ -228,7 +252,7 @@ export default () => ( /> - + {/* Input, regulated rails, buffered references, and the common return. */} diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx index 6c1e2c4c..42cc9dc7 100644 --- a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -3,6 +3,64 @@ import { LMV324AIPWR } from "../chips/LMV324AIPWR.circuit.tsx"; import { TIDA010266InlineNetPorts } from "./TIDA010266InlineNetPorts.tsx"; import type { TIDA010266SectionedSubcircuitProps } from "./TIDA010266.types.ts"; +const filterOpAmpSymbol = (unitName: "U2B" | "U2C") => ( + + + + + + + + + + + + +); + export type AnalogFrontEnd_LMV324A_TIDA010266Props = TIDA010266SectionedSubcircuitProps & { inputReferenceSectionName?: string; @@ -123,34 +181,40 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ strokeWidth={0.025} color="#008000" /> - .IN_POS_B", - inp2: ".U2 > .IN_NEG_B", - out: ".U2 > .OUT_B", + pinLabels={{ + pin4: "V+", + pin5: "+", + pin6: "-", + pin7: "OUT", + pin11: "V-", }} + symbol={filterOpAmpSymbol("U2B")} /> - .IN_POS_C", - inp2: ".U2 > .IN_NEG_C", - out: ".U2 > .OUT_C", + pinLabels={{ + pin4: "V+", + pin5: "+", + pin6: "-", + pin7: "OUT", + pin11: "V-", }} + symbol={filterOpAmpSymbol("U2C")} /> + + + + @@ -249,7 +313,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ capacitance="4.7uF" maxVoltageRating="16V" footprint="0603" - schX={4.7} + schX={3.5} schY={0.3} connections={{}} /> @@ -258,7 +322,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ schSectionName={props.schSectionName} resistance="20k" footprint="0603" - schX={6} + schX={4.8} schY={0.6} connections={{ pin2: "net.FILTER_2_INV" }} /> @@ -267,8 +331,8 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ schSectionName={props.schSectionName} resistance="270k" footprint="0603" - schX={3.8} - schY={2.2} + schX={7} + schY={3.2} connections={{ pin1: "net.FILTER_2_INV", pin2: "net.OSCILLATIONS" }} /> @@ -343,6 +407,8 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ ".U2 > .IN_NEG_A", ".U2 > .IN_POS_B", ".U2 > .IN_POS_C", + ".U2B > .pin5", + ".U2C > .pin5", ], inlineLabelConnectsTo: [".U2 > .IN_POS_B", ".U2 > .IN_POS_C"], schX: 5, @@ -359,6 +425,7 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ { name: "FILTER_1_HP", connectsTo: [".C11 > .pin2", ".R16 > .pin1"], + inlineLabelConnectsTo: ".C11 > .pin2", schX: -6, schY: 0.6, direction: "left", @@ -370,7 +437,9 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ ".R9 > .pin1", ".C9 > .pin1", ".U2 > .IN_NEG_B", + ".U2B > .pin6", ], + inlineLabelConnectsTo: ".R16 > .pin2", schX: -3, schY: 1, direction: "left", @@ -382,7 +451,9 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ ".R9 > .pin2", ".C9 > .pin2", ".C12 > .pin1", + ".U2B > .pin7", ], + inlineLabelConnectsTo: ".U2B > .pin7", schX: 2.4, schY: 1, direction: "right", @@ -390,7 +461,8 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ { name: "FILTER_2_HP", connectsTo: [".C12 > .pin2", ".R17 > .pin1"], - schX: 5.3, + inlineLabelConnectsTo: ".C12 > .pin2", + schX: 4.2, schY: 0.3, direction: "right", }, @@ -401,15 +473,22 @@ export const AnalogFrontEnd_LMV324A_TIDA010266 = ({ ".R10 > .pin1", ".C10 > .pin1", ".U2 > .IN_NEG_C", + ".U2C > .pin6", ], - schX: 3, + inlineLabelConnectsTo: ".R17 > .pin2", + schX: 5.5, schY: 1, direction: "right", }, { name: "OSCILLATIONS", - connectsTo: [".U2 > .OUT_C", ".R10 > .pin2", ".C10 > .pin2"], - schX: 7, + connectsTo: [ + ".U2 > .OUT_C", + ".R10 > .pin2", + ".C10 > .pin2", + ".U2C > .pin7", + ], + schX: 8.5, schY: 1, direction: "right", }, diff --git a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx index 69922d09..b8355769 100644 --- a/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx +++ b/lib/subcircuits/BloodPressureMonitorInterfaces_TIDA010266.circuit.tsx @@ -253,10 +253,10 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ schSectionName={inaFilterSectionName ?? props.schSectionName} manufacturerPartNumber="61300311121" footprint="pinrow3" - schX={-23} - schY={-11.5} - schWidth="0.8mm" - schHeight="1.5mm" + schX={-14.5} + schY={-19.5} + schWidth="1.1mm" + schHeight="2mm" schPinArrangement={{ rightSide: { pins: ["pin3", "pin2", "pin1"], @@ -279,8 +279,8 @@ export const BloodPressureMonitorInterfaces_TIDA010266 = ({ /> diff --git a/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx b/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx index 881014b5..03e8b674 100644 --- a/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx +++ b/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx @@ -15,6 +15,10 @@ export type InstrumentationAmplifier_INA350Props = SubcircuitProps & { bypassCapacitorName?: string; /** Expose TIDA-style module ports and render their signal names inline. */ inlineNetLabels?: boolean; + /** Select the compact reusable symbol or TI reference-drawing block style. */ + schematicStyle?: "triangle" | "box"; + /** Internal supply-net label; the reusable default remains VS. */ + supplyNetName?: string; }; /** @@ -30,6 +34,8 @@ export const InstrumentationAmplifier_INA350 = ({ chipName = "U1", bypassCapacitorName = "C1", inlineNetLabels = false, + schematicStyle = "triangle", + supplyNetName = "VS", ...props }: InstrumentationAmplifier_INA350Props) => { if (gain !== "external" && gain !== 30 && gain !== 50) { @@ -47,7 +53,7 @@ export const InstrumentationAmplifier_INA350 = ({ {...(inlineNetLabels ? { schTraceAutoLabelEnabled: false, - schMaxTraceDistance: "1000mm", + schMaxTraceDistance: schematicStyle === "box" ? "4mm" : "1000mm", } : {})} > @@ -58,108 +64,259 @@ export const InstrumentationAmplifier_INA350 = ({ pcbY={0} schX={0} schY={0} - schWidth={undefined} - schHeight={undefined} - schPinArrangement={undefined} - schPinStyle={undefined} + schWidth={schematicStyle === "box" ? "4.2mm" : undefined} + schHeight={schematicStyle === "box" ? "5mm" : undefined} + schPinArrangement={ + schematicStyle === "box" + ? { + leftSide: { + direction: "top-to-bottom", + pins: ["V_POS", "IN_NEG", "IN_POS", "SHDN", "GS"], + }, + rightSide: { + direction: "top-to-bottom", + pins: ["OUT", "REF"], + }, + bottomSide: { + direction: "left-to-right", + pins: ["EP", "V_NEG"], + }, + } + : undefined + } + schPinStyle={ + schematicStyle === "box" + ? { + IN_NEG: { marginTop: 0.25 }, + IN_POS: { marginTop: 0.25 }, + SHDN: { marginTop: 0.25 }, + GS: { marginTop: 0.25 }, + REF: { marginTop: 0.8 }, + V_NEG: { marginLeft: 0.7 }, + } + : undefined + } symbol={ - - - - - - - - - - - - - - - - + schematicStyle === "triangle" ? ( + + + + + + + + + + + + + + + + + ) : schematicStyle === "box" ? ( + + + + + + + + + + + + + + + + + + + ) : undefined } /> .pin2`} inline={inlineNetLabels} /> + {schematicStyle === "box" && ( + .V_NEG`} + anchorSide="top" + /> + )} .IN_NEG`, schX: -3, - schY: 1, + schY: schematicStyle === "box" ? 0.8 : 1, direction: "left", }, { name: "IN_POS", connectsTo: `.${chipName} > .IN_POS`, schX: -3, - schY: -1, + schY: schematicStyle === "box" ? 0 : -1, direction: "left", }, { name: "OUT", connectsTo: `.${chipName} > .OUT`, schX: 3, - schY: 0, + schY: schematicStyle === "box" ? 0.8 : 0, direction: "right", }, { name: "V_POS", - net: "VS", + net: supplyNetName, connectsTo: [ `.${chipName} > .V_POS`, `.${bypassCapacitorName} > .pin1`, ], - schX: -1, - schY: 3.7, - direction: "up", + inlineLabelConnectsTo: + schematicStyle === "box" + ? `.${bypassCapacitorName} > .pin1` + : undefined, + schX: schematicStyle === "box" ? -5.8 : -1, + schY: schematicStyle === "box" ? 1.9 : 3.7, + direction: schematicStyle === "box" ? "left" : "up", }, { name: "V_NEG", net: "GND", - connectsTo: [ - `.${chipName} > .V_NEG`, - `.${chipName} > .EP`, - `.${bypassCapacitorName} > .pin2`, - ], - schX: -1, + connectsTo: [`.${chipName} > .V_NEG`, `.${chipName} > .EP`], + inlineLabelConnectsTo: + schematicStyle === "box" ? false : undefined, + schX: schematicStyle === "box" ? 1 : -1, schY: -3, direction: "down", }, { name: "REF", connectsTo: `.${chipName} > .REF`, - schX: 1.5, - schY: -2.2, - direction: "down", + schX: schematicStyle === "box" ? 3 : 1.5, + schY: schematicStyle === "box" ? 0 : -2.2, + direction: schematicStyle === "box" ? "right" : "down", }, { name: "GS", connectsTo: `.${chipName} > .GS`, - schX: -0.35, - schY: 3, - direction: "up", + schX: schematicStyle === "box" ? -3 : -0.35, + schY: schematicStyle === "box" ? -1.4 : 3, + direction: schematicStyle === "box" ? "left" : "up", }, { name: "SHDN", connectsTo: `.${chipName} > .SHDN`, - schX: -1.65, - schY: 3, - direction: "up", + schX: schematicStyle === "box" ? -3 : -1.65, + schY: schematicStyle === "box" ? -0.8 : 3, + direction: schematicStyle === "box" ? "left" : "up", }, ]} /> )} - + {schematicStyle === "triangle" && ( + + )} ); }; diff --git a/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx b/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx index 4d98515b..00bcdadf 100644 --- a/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx +++ b/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx @@ -15,59 +15,133 @@ export const IntegratedInstrumentationAmplifier_MSPM0_TIDA010266 = ( schTraceAutoLabelEnabled={false} schMaxTraceDistance="1000mm" > - - - - - - - + schX={-2.2} + schY={-0.4} + symbol={ + + + + + + + + + + } + /> + + - - - - - - - + schX={3.2} + schY={-0.4} + symbol={ + + + + + + + + + + } + /> + + @@ -96,11 +170,11 @@ export const IntegratedInstrumentationAmplifier_MSPM0_TIDA010266 = ( @@ -163,39 +237,39 @@ export const IntegratedInstrumentationAmplifier_MSPM0_TIDA010266 = ( { name: "OPA0_IN0_NEG", connectsTo: [ - ".OPA0 > .inverting_input", + ".OPA0 > .pin2", ".R14 > .pin2", ".R12 > .pin1", ".R11 > .pin1", ], schX: -3.8, - schY: 0.6, + schY: 0.15, direction: "left", }, { name: "OPA0_IN0_POS", - connectsTo: ".OPA0 > .non_inverting_input", + connectsTo: ".OPA0 > .pin1", schX: -3.8, - schY: -0.6, + schY: -0.95, direction: "left", }, { name: "OPA1_IN0_NEG", connectsTo: [ - ".OPA1 > .inverting_input", + ".OPA1 > .pin2", ".R11 > .pin2", ".R15 > .pin2", ".R13 > .pin1", ], schX: 1.6, - schY: 0.6, + schY: 0.15, direction: "left", }, { name: "OPA1_OUT", - connectsTo: [".OPA1 > .output", ".R13 > .pin2"], + connectsTo: [".OPA1 > .pin3", ".R13 > .pin2"], schX: 5, - schY: 0, + schY: -0.4, direction: "right", }, ]} From 81b59aab3057bfa719a3c3e3f0a44ca31240427f Mon Sep 17 00:00:00 2001 From: imrishabh18 Date: Fri, 28 Aug 2026 16:19:29 +0530 Subject: [PATCH 21/21] Join TIDA-010266 custom symbol ports --- ...logFrontEnd_LMV324A_TIDA010266.circuit.tsx | 10 +++++----- ...nstrumentationAmplifier_INA350.circuit.tsx | 20 +++++++++---------- ...tionAmplifier_MSPM0_TIDA010266.circuit.tsx | 12 +++++------ 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx index 42cc9dc7..4a326517 100644 --- a/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx +++ b/lib/subcircuits/AnalogFrontEnd_LMV324A_TIDA010266.circuit.tsx @@ -24,7 +24,7 @@ const filterOpAmpSymbol = (unitName: "U2B" | "U2C") => ( schX={-1.5} schY={0.48} direction="left" - schStemLength={0.4} + schStemLength={0.5} /> ( schX={-1.5} schY={-0.48} direction="left" - schStemLength={0.4} + schStemLength={0.5} /> ( schX={1.5} schY={0} direction="right" - schStemLength={0.4} + schStemLength={0.5} /> ( schX={0} schY={1.45} direction="up" - schStemLength={0.45} + schStemLength={1.05} /> ( schX={0} schY={-1.45} direction="down" - schStemLength={0.45} + schStemLength={1.05} /> ); diff --git a/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx b/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx index 03e8b674..c8c2bda0 100644 --- a/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx +++ b/lib/subcircuits/InstrumentationAmplifier_INA350.circuit.tsx @@ -246,10 +246,10 @@ export const InstrumentationAmplifier_INA350 = ({ ) : undefined diff --git a/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx b/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx index 00bcdadf..def70992 100644 --- a/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx +++ b/lib/subcircuits/IntegratedInstrumentationAmplifier_MSPM0_TIDA010266.circuit.tsx @@ -51,7 +51,7 @@ export const IntegratedInstrumentationAmplifier_MSPM0_TIDA010266 = ( schX={-1.85} schY={0.55} direction="left" - schStemLength={0.5} + schStemLength={0.6} /> } @@ -111,7 +111,7 @@ export const IntegratedInstrumentationAmplifier_MSPM0_TIDA010266 = ( schX={-1.85} schY={0.55} direction="left" - schStemLength={0.5} + schStemLength={0.6} /> }