diff --git a/hardware/BOM.csv b/hardware/BOM.csv index 03df903..7a1597f 100644 --- a/hardware/BOM.csv +++ b/hardware/BOM.csv @@ -12,10 +12,10 @@ U7,Power/USB,USB ESD protection array,STMicroelectronics,USBLC6-2SC6,1,0.30,D+/D FL1,Power/USB,USB common-mode choke,Wurth,744232090,1,0.35,data-pair EMI U8,Click,I2S audio DAC,Texas Instruments,PCM5102APWR,1,2.20,Burr-Brown; reliability-first X1,Click,Low-jitter audio oscillator,Abracon,ASEM1-24.576MHZ-LR-T,1,1.40,dedicated MCLK; not PIO-jittered -U9,Audio-in,Balanced line receiver,THAT Corp,THAT1240W16-U,1,3.20,laser-trimmed; high CMRR +U9,Audio-in,Balanced line receiver,THAT Corp,THAT1240S08-U,1,3.20,0dB unity; pinout verified doc600035 rev05; 2nd-src INA134/SSM2141 U10,Audio-in,JFET Hi-Z instrument buffer,Texas Instruments,OPA1641AID,1,1.60,>=1Mohm DI buffer + gain U11,Audio-mix,Dual audio op-amp (sum/filter),Texas Instruments,OPA1612AIDR,1,2.40,signal-path low noise -U12,Audio-out,Balanced line driver,THAT Corp,THAT1646W16-U,1,3.30,near-zero source; 47ohm build-out per leg +U12,Audio-out,Balanced line driver,THAT Corp,THAT1646S08-U,1,3.30,near-zero source; 47ohm build-out per leg; pinout TBV at output stage RV1,Audio-out,Output level cal trimmer 25-turn,Bourns,3296W-1-103LF,1,0.70,factory-set DAC FS -> +4dBu U13,Indicator,Dual comparator (sig/clip),Texas Instruments,LM393DR,1,0.15,peak-detect -> RP2350 GPIO + LED lines K1,Audio-in,Signal relay line/inst (DPDT gold),Panasonic,TQ2SA-5V,1,1.30,sealed gold bifurcated contacts diff --git a/hardware/eda/circuits/stage1_input.py b/hardware/eda/circuits/stage1_input.py index c7bc5a6..5fd9c0b 100644 --- a/hardware/eda/circuits/stage1_input.py +++ b/hardware/eda/circuits/stage1_input.py @@ -6,12 +6,13 @@ Code-defined schematic. Run INSIDE the EDA container: Outputs ERC results + a KiCad netlist at hardware/kicad/stage1_input.net, which imports into Pcbnew for layout. -VERIFY-BEFORE-LAYOUT (datasheet items -- flagged, not guessed): - * exact THAT line-receiver suffix for the gain we want (1240/1243/1246 differ) - * the receiver's SO-8 pin NUMBERS (function->pin map below is placeholder) - * clamp-diode part choice + pin orientation -The TOPOLOGY/connectivity below is correct; only these pin-level details need -confirming against the datasheet. +VERIFIED against datasheets: + * THAT1240 = 0 dB (unity-gain) line receiver; SO-8 pinout per THAT doc 600035 + rev 05: 1=Ref 2=In- 3=In+ 4=Vee 5=Sense 6=Vout 7=Vcc 8=NC. Supply 6-36V + (our +/-15V is in range). Pin-compatible 2nd sources: INA134 / SSM2141. + * clamp-diode orientation per KiCad Device:D (pin1=K cathode, pin2=A anode). +Open at BOM time only: exact clamp-diode part (fast low-leakage small-signal; +1N4148WS is a placeholder). """ import os from skidl import * @@ -30,17 +31,17 @@ p15, n15, gnd = Net("+15V"), Net("-15V"), Net("GND") for n in (p15, n15, gnd): n.drive = POWER -# ---------- balanced line receiver (THAT124x) : PINOUT TODO-VERIFY ---------- -RX = Part(name="THAT124x_RX", tool=SKIDL, dest=TEMPLATE, ref_prefix="U", +# ---------- THAT1240 balanced line receiver (0 dB) : pinout VERIFIED ---------- +RX = Part(name="THAT1240", tool=SKIDL, dest=TEMPLATE, ref_prefix="U", footprint="Package_SO:SOIC-8_3.9x4.9mm_P1.27mm", pins=[ - Pin(num=1, name="IN-", func=Pin.types.INPUT), - Pin(num=2, name="REF", func=Pin.types.INPUT), - Pin(num=3, name="OUT", func=Pin.types.OUTPUT), + Pin(num=1, name="REF", func=Pin.types.INPUT), + Pin(num=2, name="IN-", func=Pin.types.INPUT), + Pin(num=3, name="IN+", func=Pin.types.INPUT), Pin(num=4, name="V-", func=Pin.types.PWRIN), - Pin(num=5, name="V+", func=Pin.types.PWRIN), - Pin(num=6, name="SENSE", func=Pin.types.INPUT), - Pin(num=7, name="IN+", func=Pin.types.INPUT), + Pin(num=5, name="SENSE", func=Pin.types.PASSIVE), + Pin(num=6, name="OUT", func=Pin.types.OUTPUT), + Pin(num=7, name="V+", func=Pin.types.PWRIN), Pin(num=8, name="NC", func=Pin.types.NOCONNECT), ]) rx = RX(ref="U1") @@ -57,8 +58,9 @@ def protected_input(src, node_name): node = Net(node_name) src += cblk[1]; cblk[2] += rs[1]; rs[2] += node rb[1] += node; rb[2] += gnd - dp[2] += p15; node += dp[1] # clamp high to +15 - dn[1] += n15; dn[2] += node # clamp low to -15 (avoid rebinding globals) + # clamp diodes: KiCad Device:D is pin1=K (cathode), pin2=A (anode). + dp[1] += p15; dp[2] += node # high clamp: conducts when node > +15 + dn[1] += node; dn[2] += n15 # low clamp: conducts when node < -15 return node rx["IN+"] += protected_input(ain_hot, "RXIN_P") diff --git a/hardware/kicad/stage1_input.log b/hardware/kicad/stage1_input.log index c6ab3e5..77e85c2 100644 --- a/hardware/kicad/stage1_input.log +++ b/hardware/kicad/stage1_input.log @@ -5,32 +5,32 @@ WARNING: fp-lib-table file was not found. Component footprints are not available WARNING: fp-lib-table file was not found. Component footprints are not available. WARNING: fp-lib-table file was not found. Component footprints are not available. WARNING: fp-lib-table file was not found. Component footprints are not available. -WARNING: Missing tag on THAT124x_RX instantiated at /work/hardware/eda/circuits/stage1_input.py:46. -WARNING: Random tag NiUcdSBKvZ generated for THAT124x_RX. -WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:54. -WARNING: Random tag UDuxvr_uTL generated for C. -WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:55. -WARNING: Random tag _Np5DvK_aE generated for R. -WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:55. -WARNING: Random tag 7TLEUp_48E generated for R. -WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:56. -WARNING: Random tag e2BBosboqS generated for D. -WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:56. -WARNING: Random tag ngnho2nWKf generated for D. -WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:54. -WARNING: Random tag WXfeI7Gfj2 generated for C. -WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:55. -WARNING: Random tag jKB97sf61u generated for R. -WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:55. -WARNING: Random tag mXEcsSvVUJ generated for R. -WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:56. -WARNING: Random tag aEBPrkC6b9 generated for D. -WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:56. -WARNING: Random tag vSi9f4M7Zg generated for D. -WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:74. -WARNING: Random tag I5Ulz7qVtA generated for C. -WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:74. -WARNING: Random tag clPAosAbcJ generated for C. +WARNING: Missing tag on THAT1240 instantiated at /work/hardware/eda/circuits/stage1_input.py:47. +WARNING: Random tag QgKieWmNoe generated for THAT1240. +WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:55. +WARNING: Random tag iOc5_iqozn generated for C. +WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:56. +WARNING: Random tag pZqcRwtR8R generated for R. +WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:56. +WARNING: Random tag YRKF1YkzBd generated for R. +WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:57. +WARNING: Random tag 9_z9ZD6kzY generated for D. +WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:57. +WARNING: Random tag BmXsrS9O5J generated for D. +WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:55. +WARNING: Random tag AA57mtziiu generated for C. +WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:56. +WARNING: Random tag OlgSnmTOjl generated for R. +WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/stage1_input.py:56. +WARNING: Random tag cs8OUXPRRM generated for R. +WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:57. +WARNING: Random tag i9mJhNwc3K generated for D. +WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/stage1_input.py:57. +WARNING: Random tag UUQtRJt6zT generated for D. +WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:76. +WARNING: Random tag MU_6d6hLHv generated for C. +WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/stage1_input.py:76. +WARNING: Random tag jSRPH3NSVb generated for C. WARNING: Missing tag on instantiated at /work/hardware/kicad/:488. INFO: 31 warnings found while generating netlist. INFO: 0 errors found while generating netlist. diff --git a/hardware/kicad/stage1_input_sklib.py b/hardware/kicad/stage1_input_sklib.py index a9ed94a..0c44f1a 100644 --- a/hardware/kicad/stage1_input_sklib.py +++ b/hardware/kicad/stage1_input_sklib.py @@ -6,14 +6,14 @@ from skidl.pin import pin_types SKIDL_lib_version = '0.0.1' stage1_input = SchLib(tool=SKIDL).add_parts(*[ - Part(**{ 'name':'THAT124x_RX', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'THAT124x_RX'}), 'ref_prefix':'U', 'fplist':None, 'footprint':'Package_SO:SOIC-8_3.9x4.9mm_P1.27mm', 'keywords':None, 'description':'', 'datasheet':None, 'pins':[ - Pin(num='1',name='IN-',func=pin_types.INPUT), - Pin(num='2',name='REF',func=pin_types.INPUT), - Pin(num='3',name='OUT',func=pin_types.OUTPUT), + Part(**{ 'name':'THAT1240', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'THAT1240'}), 'ref_prefix':'U', 'fplist':None, 'footprint':'Package_SO:SOIC-8_3.9x4.9mm_P1.27mm', 'keywords':None, 'description':'', 'datasheet':None, 'pins':[ + Pin(num='1',name='REF',func=pin_types.INPUT), + Pin(num='2',name='IN-',func=pin_types.INPUT), + Pin(num='3',name='IN+',func=pin_types.INPUT), Pin(num='4',name='V-',func=pin_types.PWRIN), - Pin(num='5',name='V+',func=pin_types.PWRIN), - Pin(num='6',name='SENSE',func=pin_types.INPUT), - Pin(num='7',name='IN+',func=pin_types.INPUT), + Pin(num='5',name='SENSE',func=pin_types.PASSIVE), + Pin(num='6',name='OUT',func=pin_types.OUTPUT), + Pin(num='7',name='V+',func=pin_types.PWRIN), Pin(num='8',name='NC',func=pin_types.NOCONNECT)] }), Part(**{ 'name':'C', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'C'}), 'ref_prefix':'C', 'fplist':[''], 'footprint':'Capacitor_SMD:C_1206_3216Metric', 'keywords':'cap capacitor', 'description':'Unpolarized capacitor', 'datasheet':'~', 'pins':[ Pin(num='1',name='~',func=pin_types.PASSIVE,unit=1),