PM_K-1 hardware: integrate audio chain into one netlist (dedup shared parts)
circuits/audio_chain.py wires stages 1/1b/2/3/4 with shared nets and deduplicated parts: ONE OPA1612 (U4) does both the Stage-2 filter (A) and Stage-3 summer (B); ONE ULN2003 (U6) drives all three relays (K1 select, K2 mute, K3 ground-lift). 54 components, ERC 0 errors, netlist 0 errors. Per-stage files remain as the documented, individually-simulated building blocks. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5a75dbbbdc
commit
617bb5a8b2
4 changed files with 460 additions and 0 deletions
195
hardware/eda/circuits/audio_chain.py
Normal file
195
hardware/eda/circuits/audio_chain.py
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
#!/usr/bin/env python3
|
||||
"""PM_K-1 audio chain - INTEGRATED board netlist (SKiDL).
|
||||
|
||||
Wires stages 1, 1b, 2, 3, 4 into one netlist with shared nets and DEDUPLICATED parts:
|
||||
* the Stage-2 reconstruction filter and the Stage-3 summer share ONE OPA1612 dual
|
||||
(U4: section A = filter, section B = summer) -- no parked half.
|
||||
* the three relays (K1 select, K2 mute, K3 ground-lift) share ONE ULN2003 (U6).
|
||||
This is the source of truth for the integrated audio netlist; the per-stage circuits/
|
||||
files remain as the documented, individually-simulated building blocks.
|
||||
|
||||
Run INSIDE the EDA container:
|
||||
cd hardware/eda && ./run.sh python3 ../eda/circuits/audio_chain.py
|
||||
Outputs ERC + hardware/kicad/audio_chain.net.
|
||||
|
||||
All IC pinouts datasheet-verified (see the per-stage files for the citations):
|
||||
THAT1240 1=Ref 2=In- 3=In+ 4=Vee 5=Sns 6=Vout 7=Vcc 8=NC
|
||||
OPA1641 1=NC 2=-IN 3=+IN 4=V- 5=NC 6=OUT 7=V+ 8=NC
|
||||
OPA1612 1=OUTA 2=-INA 3=+INA 4=V- 5=+INB 6=-INB 7=OUTB 8=V+
|
||||
PCM5102A (TSSOP-20) per TI SLAS859C
|
||||
THAT1646 1=Out- 2=Sns- 3=Gnd 4=In 5=Vee 6=Vcc 7=Sns+ 8=Out+
|
||||
TQ2SA coil 1/10; pole1 COM3/NC4/NO2; pole2 COM8/NC7/NO9
|
||||
ULN2003A in 1B-7B=1..7, out 1C-7C=16..10, GND=8, COM=9
|
||||
"""
|
||||
import os
|
||||
from skidl import *
|
||||
|
||||
set_default_tool(KICAD9)
|
||||
|
||||
R = Part("Device", "R", dest=TEMPLATE, footprint="Resistor_SMD:R_0805_2012Metric")
|
||||
C = Part("Device", "C", dest=TEMPLATE, footprint="Capacitor_SMD:C_0805_2012Metric")
|
||||
D = Part("Device", "D", dest=TEMPLATE, footprint="Diode_SMD:D_SOD-323")
|
||||
|
||||
# ---------------- nets ----------------
|
||||
p15, n15, p3v3, p5, gnd = Net("+15V"), Net("-15V"), Net("+3V3"), Net("+5V"), Net("GND")
|
||||
for n in (p15, n15, p3v3, p5, gnd):
|
||||
n.drive = POWER
|
||||
# audio signal flow
|
||||
ain_hot, ain_cold = Net("AIN_HOT"), Net("AIN_COLD") # input jack tip/ring
|
||||
rx_hot_in = Net("RX_HOT_IN") # relay-routed hot -> receiver
|
||||
rx_out, di_in, di_out = Net("RX_OUT"), Net("DI_IN"), Net("DI_OUT")
|
||||
stage1_out, click_out, mix_out = Net("STAGE1_OUT"), Net("CLICK_OUT"), Net("MIX_OUT")
|
||||
aout_hot, aout_cold, chassis = Net("AOUT_HOT"), Net("AOUT_COLD"), Net("CHASSIS")
|
||||
# DAC clocks/data + control
|
||||
mclk, i2s_bck, i2s_din, i2s_lrck = Net("MCLK"), Net("I2S_BCK"), Net("I2S_DIN"), Net("I2S_LRCK")
|
||||
dac_xsmt = Net("DAC_XSMT")
|
||||
sel_linst, mute_en, gndlift_en = Net("SEL_LINST"), Net("MUTE_EN"), Net("GNDLIFT_EN")
|
||||
k1_drv, k2_drv, k3_drv = Net("K1_DRV"), Net("K2_DRV"), Net("K3_DRV")
|
||||
|
||||
# ---------------- part definitions ----------------
|
||||
def mk(name, pins, ref_prefix="U", fp="Package_SO:SOIC-8_3.9x4.9mm_P1.27mm"):
|
||||
return Part(name=name, tool=SKIDL, dest=TEMPLATE, ref_prefix=ref_prefix, footprint=fp, pins=pins)
|
||||
|
||||
P = Pin.types
|
||||
THAT1240 = mk("THAT1240", [Pin(num=1,name="REF",func=P.INPUT),Pin(num=2,name="IN-",func=P.INPUT),
|
||||
Pin(num=3,name="IN+",func=P.INPUT),Pin(num=4,name="V-",func=P.PWRIN),Pin(num=5,name="SENSE",func=P.PASSIVE),
|
||||
Pin(num=6,name="OUT",func=P.OUTPUT),Pin(num=7,name="V+",func=P.PWRIN),Pin(num=8,name="NC",func=P.NOCONNECT)])
|
||||
OPA1641 = mk("OPA1641", [Pin(num=1,name="NC1",func=P.NOCONNECT),Pin(num=2,name="-IN",func=P.INPUT),
|
||||
Pin(num=3,name="+IN",func=P.INPUT),Pin(num=4,name="V-",func=P.PWRIN),Pin(num=5,name="NC5",func=P.NOCONNECT),
|
||||
Pin(num=6,name="OUT",func=P.OUTPUT),Pin(num=7,name="V+",func=P.PWRIN),Pin(num=8,name="NC8",func=P.NOCONNECT)])
|
||||
OPA1612 = mk("OPA1612", [Pin(num=1,name="OUTA",func=P.OUTPUT),Pin(num=2,name="-INA",func=P.INPUT),
|
||||
Pin(num=3,name="+INA",func=P.INPUT),Pin(num=4,name="V-",func=P.PWRIN),Pin(num=5,name="+INB",func=P.INPUT),
|
||||
Pin(num=6,name="-INB",func=P.INPUT),Pin(num=7,name="OUTB",func=P.OUTPUT),Pin(num=8,name="V+",func=P.PWRIN)])
|
||||
THAT1646 = mk("THAT1646", [Pin(num=1,name="OUT-",func=P.OUTPUT),Pin(num=2,name="SNS-",func=P.INPUT),
|
||||
Pin(num=3,name="GND",func=P.PWRIN),Pin(num=4,name="IN",func=P.INPUT),Pin(num=5,name="V-",func=P.PWRIN),
|
||||
Pin(num=6,name="V+",func=P.PWRIN),Pin(num=7,name="SNS+",func=P.INPUT),Pin(num=8,name="OUT+",func=P.OUTPUT)])
|
||||
PCM5102A = mk("PCM5102A", [Pin(num=1,name="CPVDD",func=P.PWRIN),Pin(num=2,name="CAPP",func=P.PASSIVE),
|
||||
Pin(num=3,name="CPGND",func=P.PWRIN),Pin(num=4,name="CAPM",func=P.PASSIVE),Pin(num=5,name="VNEG",func=P.PASSIVE),
|
||||
Pin(num=6,name="OUTL",func=P.OUTPUT),Pin(num=7,name="OUTR",func=P.OUTPUT),Pin(num=8,name="AVDD",func=P.PWRIN),
|
||||
Pin(num=9,name="AGND",func=P.PWRIN),Pin(num=10,name="DEMP",func=P.INPUT),Pin(num=11,name="FLT",func=P.INPUT),
|
||||
Pin(num=12,name="SCK",func=P.INPUT),Pin(num=13,name="BCK",func=P.INPUT),Pin(num=14,name="DIN",func=P.INPUT),
|
||||
Pin(num=15,name="LRCK",func=P.INPUT),Pin(num=16,name="FMT",func=P.INPUT),Pin(num=17,name="XSMT",func=P.INPUT),
|
||||
Pin(num=18,name="LDOO",func=P.PWROUT),Pin(num=19,name="DGND",func=P.PWRIN),Pin(num=20,name="DVDD",func=P.PWRIN)],
|
||||
fp="Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm")
|
||||
TQ2SA = mk("TQ2SA-5V", [Pin(num=1,name="COIL_A",func=P.PASSIVE),Pin(num=10,name="COIL_B",func=P.PASSIVE),
|
||||
Pin(num=3,name="P1_COM",func=P.PASSIVE),Pin(num=4,name="P1_NC",func=P.PASSIVE),Pin(num=2,name="P1_NO",func=P.PASSIVE),
|
||||
Pin(num=8,name="P2_COM",func=P.PASSIVE),Pin(num=7,name="P2_NC",func=P.PASSIVE),Pin(num=9,name="P2_NO",func=P.PASSIVE),
|
||||
Pin(num=5,name="NC5",func=P.NOCONNECT),Pin(num=6,name="NC6",func=P.NOCONNECT)],
|
||||
ref_prefix="K", fp="Relay_SMD:Relay_DPDT_Panasonic_TQ2-SA")
|
||||
ULN2003 = mk("ULN2003A", [Pin(num=1,name="1B",func=P.INPUT),Pin(num=2,name="2B",func=P.INPUT),
|
||||
Pin(num=3,name="3B",func=P.INPUT),Pin(num=4,name="4B",func=P.INPUT),Pin(num=5,name="5B",func=P.INPUT),
|
||||
Pin(num=6,name="6B",func=P.INPUT),Pin(num=7,name="7B",func=P.INPUT),Pin(num=8,name="GND",func=P.PWRIN),
|
||||
Pin(num=9,name="COM",func=P.PWRIN),Pin(num=10,name="7C",func=P.OPENCOLL),Pin(num=11,name="6C",func=P.OPENCOLL),
|
||||
Pin(num=12,name="5C",func=P.OPENCOLL),Pin(num=13,name="4C",func=P.OPENCOLL),Pin(num=14,name="3C",func=P.OPENCOLL),
|
||||
Pin(num=15,name="2C",func=P.OPENCOLL),Pin(num=16,name="1C",func=P.OPENCOLL)],
|
||||
fp="Package_SO:SOIC-16_3.9x9.9mm_P1.27mm")
|
||||
|
||||
# instances (deduplicated)
|
||||
u1 = THAT1240(ref="U1") # line receiver
|
||||
u2 = OPA1641(ref="U2") # Hi-Z DI buffer
|
||||
u3 = PCM5102A(ref="U3") # DAC
|
||||
u4 = OPA1612(ref="U4") # A = recon filter, B = summer (shared dual)
|
||||
u5 = THAT1646(ref="U5") # balanced driver
|
||||
u6 = ULN2003(ref="U6") # shared relay driver
|
||||
k1, k2, k3 = TQ2SA(ref="K1"), TQ2SA(ref="K2"), TQ2SA(ref="K3")
|
||||
|
||||
def dcp(rail): # 100nF decoupling helper
|
||||
c = C(value="100nF"); rail += c[1]; c[2] += gnd
|
||||
|
||||
# ---------------- Stage 1: balanced line receiver + protection ----------------
|
||||
def protect_bal(src, tag):
|
||||
cblk = C(value="2.2uF", footprint="Capacitor_SMD:C_1206_3216Metric")
|
||||
rs, rb = R(value="1k"), R(value="1Meg")
|
||||
dp, dn = D(value="1N4148WS"), D(value="1N4148WS")
|
||||
node = Net(tag)
|
||||
src += cblk[1]; cblk[2] += rs[1]; rs[2] += node
|
||||
rb[1] += node; rb[2] += gnd
|
||||
dp[1] += p15; dp[2] += node # Device:D pin1=K,pin2=A : high clamp
|
||||
dn[1] += node; dn[2] += n15 # low clamp
|
||||
return node
|
||||
u1["IN+"] += protect_bal(rx_hot_in, "RXIN_P") # hot comes from the select relay (NC)
|
||||
u1["IN-"] += protect_bal(ain_cold, "RXIN_N") # cold is the ring (direct)
|
||||
u1["REF"] += gnd; u1["SENSE"] += rx_out; u1["OUT"] += rx_out
|
||||
u1["V+"] += p15; u1["V-"] += n15; dcp(p15); dcp(n15)
|
||||
|
||||
# ---------------- Stage 1b: Hi-Z DI buffer (OPA1641) ----------------
|
||||
cblk = C(value="100nF", footprint="Capacitor_SMD:C_1206_3216Metric")
|
||||
rbias = R(value="1Meg"); dp, dn = D(value="1N4148WS"), D(value="1N4148WS")
|
||||
di_node = Net("DI_NODE")
|
||||
di_in += cblk[1]; cblk[2] += di_node
|
||||
rbias[1] += di_node; rbias[2] += gnd
|
||||
dp[1] += p15; dp[2] += di_node
|
||||
dn[1] += di_node; dn[2] += n15
|
||||
u2["+IN"] += di_node
|
||||
rf2, rg2 = R(value="3k"), R(value="1k") # +12 dB
|
||||
u2["OUT"] += di_out
|
||||
rf2[1] += di_out; rf2[2] += u2["-IN"]
|
||||
rg2[1] += u2["-IN"]; rg2[2] += gnd
|
||||
u2["V+"] += p15; u2["V-"] += n15; dcp(p15); dcp(n15)
|
||||
|
||||
# ---------------- Stage 1b: select relay K1 ----------------
|
||||
k1["P1_COM"] += ain_hot; k1["P1_NC"] += rx_hot_in; k1["P1_NO"] += di_in # route tip
|
||||
k1["P2_COM"] += stage1_out; k1["P2_NC"] += rx_out; k1["P2_NO"] += di_out # select output
|
||||
k1["COIL_A"] += p5; k1["COIL_B"] += k1_drv
|
||||
|
||||
# ---------------- Stage 2: PCM5102A DAC ----------------
|
||||
for pin in ("AVDD","CPVDD","DVDD"): u3[pin] += p3v3
|
||||
for pin in ("AGND","DGND","CPGND"): u3[pin] += gnd
|
||||
for pin in ("AVDD","CPVDD","DVDD"):
|
||||
c = C(value="100nF"); u3[pin] += c[1]; c[2] += gnd
|
||||
cb = C(value="10uF", footprint="Capacitor_SMD:C_1206_3216Metric"); u3["AVDD"] += cb[1]; cb[2] += gnd
|
||||
cfly = C(value="2.2uF"); u3["CAPP"] += cfly[1]; u3["CAPM"] += cfly[2]
|
||||
cvneg = C(value="2.2uF"); u3["VNEG"] += cvneg[1]; cvneg[2] += gnd
|
||||
cldoo = C(value="1uF"); u3["LDOO"] += cldoo[1]; cldoo[2] += gnd
|
||||
u3["DEMP"] += gnd; u3["FLT"] += gnd; u3["FMT"] += gnd
|
||||
u3["XSMT"] += dac_xsmt; rpu = R(value="10k"); dac_xsmt += rpu[1]; rpu[2] += p3v3
|
||||
u3["SCK"] += mclk; u3["BCK"] += i2s_bck; u3["DIN"] += i2s_din; u3["LRCK"] += i2s_lrck
|
||||
rload = R(value="2.2k"); u3["OUTR"] += rload[1]; rload[2] += gnd
|
||||
|
||||
# ---------------- Stage 2: reconstruction filter = OPA1612 section A ----------------
|
||||
r1, r2 = R(value="1.5k"), R(value="1.5k"); ca = C(value="2.2nF"); cbq = C(value="1nF")
|
||||
rcA = Net("RC_A")
|
||||
u3["OUTL"] += r1[1]; r1[2] += rcA
|
||||
r2[1] += rcA; r2[2] += u4["+INA"]
|
||||
ca[1] += rcA; ca[2] += u4["OUTA"]
|
||||
cbq[1] += u4["+INA"]; cbq[2] += gnd
|
||||
u4["-INA"] += u4["OUTA"]; u4["OUTA"] += click_out
|
||||
u4["V+"] += p15; u4["V-"] += n15; dcp(p15); dcp(n15)
|
||||
|
||||
# ---------------- Stage 3: summer = OPA1612 section B (shared chip) ----------------
|
||||
ri_in, ri_clk, rf3 = R(value="10k"), R(value="10k"), R(value="10k")
|
||||
stage1_out += ri_in[1]; ri_in[2] += u4["-INB"]
|
||||
click_out += ri_clk[1]; ri_clk[2] += u4["-INB"]
|
||||
rf3[1] += u4["-INB"]; rf3[2] += u4["OUTB"]
|
||||
u4["+INB"] += gnd; u4["OUTB"] += mix_out
|
||||
|
||||
# ---------------- Stage 4: level trim + THAT1646 + build-out ----------------
|
||||
RV = Part("Device","R_Potentiometer", dest=TEMPLATE,
|
||||
footprint="Potentiometer_THT:Potentiometer_Bourns_3296W_Vertical")
|
||||
rv1 = RV(value="10k", ref="RV1")
|
||||
mix_out += rv1[1]; rv1[3] += gnd; rv1[2] += u5["IN"]
|
||||
u5["SNS-"] += u5["OUT-"]; u5["SNS+"] += u5["OUT+"]; u5["GND"] += gnd
|
||||
u5["V+"] += p15; u5["V-"] += n15; dcp(p15); dcp(n15)
|
||||
rbo_h, rbo_c = R(value="47"), R(value="47")
|
||||
u5["OUT-"] += rbo_h[1]; rbo_h[2] += aout_hot # phase-corrected: HOT<-OUT-
|
||||
u5["OUT+"] += rbo_c[1]; rbo_c[2] += aout_cold # COLD<-OUT+
|
||||
|
||||
# ---------------- Stage 4: mute relay K2 + ground-lift relay K3 ----------------
|
||||
k2["P1_COM"] += aout_hot; k2["P1_NC"] += gnd # de-energized = muted (short to gnd)
|
||||
k2["P2_COM"] += aout_cold; k2["P2_NC"] += gnd
|
||||
k2["COIL_A"] += p5; k2["COIL_B"] += k2_drv
|
||||
k3["P1_COM"] += gnd; k3["P1_NC"] += chassis # de-energized = bonded
|
||||
rlift = R(value="100"); clift = C(value="10nF")
|
||||
rlift[1] += gnd; rlift[2] += chassis; clift[1] += gnd; clift[2] += chassis
|
||||
k3["COIL_A"] += p5; k3["COIL_B"] += k3_drv
|
||||
|
||||
# ---------------- shared relay driver U6 (ULN2003): 3 channels ----------------
|
||||
u6["1B"] += sel_linst; u6["1C"] += k1_drv
|
||||
u6["2B"] += mute_en; u6["2C"] += k2_drv
|
||||
u6["3B"] += gndlift_en; u6["3C"] += k3_drv
|
||||
u6["GND"] += gnd; u6["COM"] += p5 # flyback common to coil supply
|
||||
|
||||
ERC()
|
||||
out = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "kicad", "audio_chain.net"))
|
||||
generate_netlist(file_=out)
|
||||
print("Integrated audio netlist ->", out)
|
||||
40
hardware/kicad/audio_chain.erc
Normal file
40
hardware/kicad/audio_chain.erc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
ERC WARNING: Only one pin (INPUT pin 3/3B of ULN2003A/U6) attached to net GNDLIFT_EN.
|
||||
ERC WARNING: No drivers for net GNDLIFT_EN.
|
||||
ERC WARNING: Insufficient drive current on net GNDLIFT_EN for pin INPUT pin 3/3B of ULN2003A/U6.
|
||||
ERC WARNING: Only one pin (INPUT pin 15/LRCK of PCM5102A/U3) attached to net I2S_LRCK.
|
||||
ERC WARNING: No drivers for net I2S_LRCK.
|
||||
ERC WARNING: Insufficient drive current on net I2S_LRCK for pin INPUT pin 15/LRCK of PCM5102A/U3.
|
||||
ERC WARNING: Only one pin (INPUT pin 2/2B of ULN2003A/U6) attached to net MUTE_EN.
|
||||
ERC WARNING: No drivers for net MUTE_EN.
|
||||
ERC WARNING: Insufficient drive current on net MUTE_EN for pin INPUT pin 2/2B of ULN2003A/U6.
|
||||
ERC WARNING: Only one pin (INPUT pin 1/1B of ULN2003A/U6) attached to net SEL_LINST.
|
||||
ERC WARNING: No drivers for net SEL_LINST.
|
||||
ERC WARNING: Insufficient drive current on net SEL_LINST for pin INPUT pin 1/1B of ULN2003A/U6.
|
||||
ERC WARNING: Only one pin (PASSIVE pin 1/~ of C/C2) attached to net AIN_COLD.
|
||||
ERC WARNING: Only one pin (INPUT pin 14/DIN of PCM5102A/U3) attached to net I2S_DIN.
|
||||
ERC WARNING: No drivers for net I2S_DIN.
|
||||
ERC WARNING: Insufficient drive current on net I2S_DIN for pin INPUT pin 14/DIN of PCM5102A/U3.
|
||||
ERC WARNING: Only one pin (INPUT pin 12/SCK of PCM5102A/U3) attached to net MCLK.
|
||||
ERC WARNING: No drivers for net MCLK.
|
||||
ERC WARNING: Insufficient drive current on net MCLK for pin INPUT pin 12/SCK of PCM5102A/U3.
|
||||
ERC WARNING: Only one pin (INPUT pin 13/BCK of PCM5102A/U3) attached to net I2S_BCK.
|
||||
ERC WARNING: No drivers for net I2S_BCK.
|
||||
ERC WARNING: Insufficient drive current on net I2S_BCK for pin INPUT pin 13/BCK of PCM5102A/U3.
|
||||
ERC WARNING: Only one pin (PASSIVE pin 3/P1_COM of TQ2SA-5V/K1) attached to net AIN_HOT.
|
||||
ERC WARNING: Unconnected pin: INPUT pin 4/4B of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: INPUT pin 5/5B of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: INPUT pin 6/6B of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: INPUT pin 7/7B of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: OPEN-COLLECTOR pin 10/7C of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: OPEN-COLLECTOR pin 11/6C of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: OPEN-COLLECTOR pin 12/5C of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: OPEN-COLLECTOR pin 13/4C of ULN2003A/U6.
|
||||
ERC WARNING: Unconnected pin: PASSIVE pin 2/P1_NO of TQ2SA-5V/K2.
|
||||
ERC WARNING: Unconnected pin: PASSIVE pin 9/P2_NO of TQ2SA-5V/K2.
|
||||
ERC WARNING: Unconnected pin: PASSIVE pin 2/P1_NO of TQ2SA-5V/K3.
|
||||
ERC WARNING: Unconnected pin: PASSIVE pin 8/P2_COM of TQ2SA-5V/K3.
|
||||
ERC WARNING: Unconnected pin: PASSIVE pin 7/P2_NC of TQ2SA-5V/K3.
|
||||
ERC WARNING: Unconnected pin: PASSIVE pin 9/P2_NO of TQ2SA-5V/K3.
|
||||
ERC INFO: 37 warnings found while running ERC.
|
||||
ERC INFO: 0 errors found while running ERC.
|
||||
|
||||
119
hardware/kicad/audio_chain.log
Normal file
119
hardware/kicad/audio_chain.log
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
WARNING: KICAD8_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched. @ [/work/hardware/kicad/<frozen importlib._bootstrap_external>:995=>/work/hardware/kicad/<frozen importlib._bootstrap>:488]
|
||||
WARNING: KICAD6_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched. @ [/work/hardware/kicad/<frozen importlib._bootstrap_external>:995=>/work/hardware/kicad/<frozen importlib._bootstrap>:488]
|
||||
WARNING: KICAD7_SYMBOL_DIR environment variable is missing, so the default KiCad symbol libraries won't be searched. @ [/work/hardware/kicad/<frozen importlib._bootstrap_external>:995=>/work/hardware/kicad/<frozen importlib._bootstrap>:488]
|
||||
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 THAT1240 instantiated at /work/hardware/eda/circuits/audio_chain.py:88.
|
||||
WARNING: Random tag NaoCkmuv6F generated for THAT1240.
|
||||
WARNING: Missing tag on OPA1641 instantiated at /work/hardware/eda/circuits/audio_chain.py:89.
|
||||
WARNING: Random tag bhZEXwD6Ma generated for OPA1641.
|
||||
WARNING: Missing tag on PCM5102A instantiated at /work/hardware/eda/circuits/audio_chain.py:90.
|
||||
WARNING: Random tag GKJv8Mk9db generated for PCM5102A.
|
||||
WARNING: Missing tag on OPA1612 instantiated at /work/hardware/eda/circuits/audio_chain.py:91.
|
||||
WARNING: Random tag ZiUYdGNUpf generated for OPA1612.
|
||||
WARNING: Missing tag on THAT1646 instantiated at /work/hardware/eda/circuits/audio_chain.py:92.
|
||||
WARNING: Random tag PA94RBoDz5 generated for THAT1646.
|
||||
WARNING: Missing tag on ULN2003A instantiated at /work/hardware/eda/circuits/audio_chain.py:93.
|
||||
WARNING: Random tag 7az6rCV1b8 generated for ULN2003A.
|
||||
WARNING: Missing tag on TQ2SA-5V instantiated at /work/hardware/eda/circuits/audio_chain.py:94.
|
||||
WARNING: Random tag a5p3EKoZSh generated for TQ2SA-5V.
|
||||
WARNING: Missing tag on TQ2SA-5V instantiated at /work/hardware/eda/circuits/audio_chain.py:94.
|
||||
WARNING: Random tag nzmU2EFKQ5 generated for TQ2SA-5V.
|
||||
WARNING: Missing tag on TQ2SA-5V instantiated at /work/hardware/eda/circuits/audio_chain.py:94.
|
||||
WARNING: Random tag PvvXwCojLV generated for TQ2SA-5V.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:101.
|
||||
WARNING: Random tag 1BQDYOk7Jk generated for C.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:102.
|
||||
WARNING: Random tag VJCWjFmo15 generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:102.
|
||||
WARNING: Random tag F3pmXe3Ukl generated for R.
|
||||
WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/audio_chain.py:103.
|
||||
WARNING: Random tag GcBAEBfRsm generated for D.
|
||||
WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/audio_chain.py:103.
|
||||
WARNING: Random tag DxTLvXTPXw generated for D.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:101.
|
||||
WARNING: Random tag TbYYz7sRwg generated for C.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:102.
|
||||
WARNING: Random tag q4ANsoJP6d generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:102.
|
||||
WARNING: Random tag XafPhdShAz generated for R.
|
||||
WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/audio_chain.py:103.
|
||||
WARNING: Random tag 3Dy7kKhUuS generated for D.
|
||||
WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/audio_chain.py:103.
|
||||
WARNING: Random tag srbPiv0wDA generated for D.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag cywPzV0BP5 generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag ys82MNo87q generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:116.
|
||||
WARNING: Random tag GjB9TiUkLV generated for C.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:117.
|
||||
WARNING: Random tag 5d0DxRmiVK generated for R.
|
||||
WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/audio_chain.py:117.
|
||||
WARNING: Random tag UiNgHe5ZoI generated for D.
|
||||
WARNING: Missing tag on D instantiated at /work/hardware/eda/circuits/audio_chain.py:117.
|
||||
WARNING: Random tag dREXHB06LQ generated for D.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:124.
|
||||
WARNING: Random tag IzL4dTk5KE generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:124.
|
||||
WARNING: Random tag aecw3XjGu8 generated for R.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag ZkkukzL1dw generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag SiWPcikSTD generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:139.
|
||||
WARNING: Random tag XkEyeGCXrV generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:139.
|
||||
WARNING: Random tag KtTaLAKE12 generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:139.
|
||||
WARNING: Random tag kxLUIeU4MG generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:140.
|
||||
WARNING: Random tag G0gy3YpApr generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:141.
|
||||
WARNING: Random tag 54BIrx4GwW generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:142.
|
||||
WARNING: Random tag D2ift49ZDj generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:143.
|
||||
WARNING: Random tag 2xrRFHfzVn generated for C.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:145.
|
||||
WARNING: Random tag ciywLsI1BV generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:147.
|
||||
WARNING: Random tag iHP45ECBTV generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:150.
|
||||
WARNING: Random tag SpTEBfUSZQ generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:150.
|
||||
WARNING: Random tag GANJXVVJhX generated for R.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:150.
|
||||
WARNING: Random tag cTcBdxazGj generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:150.
|
||||
WARNING: Random tag WltiwW7vNV generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag K76qTGXZDl generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag qNcbyMvj04 generated for C.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:160.
|
||||
WARNING: Random tag 8Z8qBauuqJ generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:160.
|
||||
WARNING: Random tag ZvbhQbNpVf generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:160.
|
||||
WARNING: Random tag XI22X1n2tP generated for R.
|
||||
WARNING: Missing tag on R_Potentiometer instantiated at /work/hardware/eda/circuits/audio_chain.py:169.
|
||||
WARNING: Random tag joe6s3brR6 generated for R_Potentiometer.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag MjG60k1gb_ generated for C.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:97.
|
||||
WARNING: Random tag JNrbq6C1BQ generated for C.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:173.
|
||||
WARNING: Random tag IwhpZyA9LO generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:173.
|
||||
WARNING: Random tag cWxhi7FDib generated for R.
|
||||
WARNING: Missing tag on R instantiated at /work/hardware/eda/circuits/audio_chain.py:182.
|
||||
WARNING: Random tag GS23xEE7xZ generated for R.
|
||||
WARNING: Missing tag on C instantiated at /work/hardware/eda/circuits/audio_chain.py:182.
|
||||
WARNING: Random tag fJUwwIBJ1g generated for C.
|
||||
WARNING: Missing tag on instantiated at /work/hardware/kicad/<frozen importlib._bootstrap>:488.
|
||||
INFO: 113 warnings found while generating netlist.
|
||||
INFO: 0 errors found while generating netlist.
|
||||
|
||||
106
hardware/kicad/audio_chain_sklib.py
Normal file
106
hardware/kicad/audio_chain_sklib.py
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
from collections import defaultdict
|
||||
from skidl import Pin, Part, Alias, SchLib, SKIDL, TEMPLATE
|
||||
|
||||
from skidl.pin import pin_types
|
||||
|
||||
SKIDL_lib_version = '0.0.1'
|
||||
|
||||
audio_chain = SchLib(tool=SKIDL).add_parts(*[
|
||||
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='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':'OPA1641', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'OPA1641'}), '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='NC1',func=pin_types.NOCONNECT),
|
||||
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='NC5',func=pin_types.NOCONNECT),
|
||||
Pin(num='6',name='OUT',func=pin_types.OUTPUT),
|
||||
Pin(num='7',name='V+',func=pin_types.PWRIN),
|
||||
Pin(num='8',name='NC8',func=pin_types.NOCONNECT)] }),
|
||||
Part(**{ 'name':'PCM5102A', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'PCM5102A'}), 'ref_prefix':'U', 'fplist':None, 'footprint':'Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm', 'keywords':None, 'description':'', 'datasheet':None, 'pins':[
|
||||
Pin(num='1',name='CPVDD',func=pin_types.PWRIN),
|
||||
Pin(num='2',name='CAPP',func=pin_types.PASSIVE),
|
||||
Pin(num='3',name='CPGND',func=pin_types.PWRIN),
|
||||
Pin(num='4',name='CAPM',func=pin_types.PASSIVE),
|
||||
Pin(num='5',name='VNEG',func=pin_types.PASSIVE),
|
||||
Pin(num='6',name='OUTL',func=pin_types.OUTPUT),
|
||||
Pin(num='7',name='OUTR',func=pin_types.OUTPUT),
|
||||
Pin(num='8',name='AVDD',func=pin_types.PWRIN),
|
||||
Pin(num='9',name='AGND',func=pin_types.PWRIN),
|
||||
Pin(num='10',name='DEMP',func=pin_types.INPUT),
|
||||
Pin(num='11',name='FLT',func=pin_types.INPUT),
|
||||
Pin(num='12',name='SCK',func=pin_types.INPUT),
|
||||
Pin(num='13',name='BCK',func=pin_types.INPUT),
|
||||
Pin(num='14',name='DIN',func=pin_types.INPUT),
|
||||
Pin(num='15',name='LRCK',func=pin_types.INPUT),
|
||||
Pin(num='16',name='FMT',func=pin_types.INPUT),
|
||||
Pin(num='17',name='XSMT',func=pin_types.INPUT),
|
||||
Pin(num='18',name='LDOO',func=pin_types.PWROUT),
|
||||
Pin(num='19',name='DGND',func=pin_types.PWRIN),
|
||||
Pin(num='20',name='DVDD',func=pin_types.PWRIN)] }),
|
||||
Part(**{ 'name':'OPA1612', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'OPA1612'}), '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='OUTA',func=pin_types.OUTPUT),
|
||||
Pin(num='2',name='-INA',func=pin_types.INPUT),
|
||||
Pin(num='3',name='+INA',func=pin_types.INPUT),
|
||||
Pin(num='4',name='V-',func=pin_types.PWRIN),
|
||||
Pin(num='5',name='+INB',func=pin_types.INPUT),
|
||||
Pin(num='6',name='-INB',func=pin_types.INPUT),
|
||||
Pin(num='7',name='OUTB',func=pin_types.OUTPUT),
|
||||
Pin(num='8',name='V+',func=pin_types.PWRIN)] }),
|
||||
Part(**{ 'name':'THAT1646', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'THAT1646'}), '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='OUT-',func=pin_types.OUTPUT),
|
||||
Pin(num='2',name='SNS-',func=pin_types.INPUT),
|
||||
Pin(num='3',name='GND',func=pin_types.PWRIN),
|
||||
Pin(num='4',name='IN',func=pin_types.INPUT),
|
||||
Pin(num='5',name='V-',func=pin_types.PWRIN),
|
||||
Pin(num='6',name='V+',func=pin_types.PWRIN),
|
||||
Pin(num='7',name='SNS+',func=pin_types.INPUT),
|
||||
Pin(num='8',name='OUT+',func=pin_types.OUTPUT)] }),
|
||||
Part(**{ 'name':'ULN2003A', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'ULN2003A'}), 'ref_prefix':'U', 'fplist':None, 'footprint':'Package_SO:SOIC-16_3.9x9.9mm_P1.27mm', 'keywords':None, 'description':'', 'datasheet':None, 'pins':[
|
||||
Pin(num='1',name='1B',func=pin_types.INPUT),
|
||||
Pin(num='2',name='2B',func=pin_types.INPUT),
|
||||
Pin(num='3',name='3B',func=pin_types.INPUT),
|
||||
Pin(num='4',name='4B',func=pin_types.INPUT),
|
||||
Pin(num='5',name='5B',func=pin_types.INPUT),
|
||||
Pin(num='6',name='6B',func=pin_types.INPUT),
|
||||
Pin(num='7',name='7B',func=pin_types.INPUT),
|
||||
Pin(num='8',name='GND',func=pin_types.PWRIN),
|
||||
Pin(num='9',name='COM',func=pin_types.PWRIN),
|
||||
Pin(num='10',name='7C',func=pin_types.OPENCOLL),
|
||||
Pin(num='11',name='6C',func=pin_types.OPENCOLL),
|
||||
Pin(num='12',name='5C',func=pin_types.OPENCOLL),
|
||||
Pin(num='13',name='4C',func=pin_types.OPENCOLL),
|
||||
Pin(num='14',name='3C',func=pin_types.OPENCOLL),
|
||||
Pin(num='15',name='2C',func=pin_types.OPENCOLL),
|
||||
Pin(num='16',name='1C',func=pin_types.OPENCOLL)] }),
|
||||
Part(**{ 'name':'TQ2SA-5V', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'TQ2SA-5V'}), 'ref_prefix':'K', 'fplist':None, 'footprint':'Relay_SMD:Relay_DPDT_Panasonic_TQ2-SA', 'keywords':None, 'description':'', 'datasheet':None, 'pins':[
|
||||
Pin(num='1',name='COIL_A',func=pin_types.PASSIVE),
|
||||
Pin(num='10',name='COIL_B',func=pin_types.PASSIVE),
|
||||
Pin(num='3',name='P1_COM',func=pin_types.PASSIVE),
|
||||
Pin(num='4',name='P1_NC',func=pin_types.PASSIVE),
|
||||
Pin(num='2',name='P1_NO',func=pin_types.PASSIVE),
|
||||
Pin(num='8',name='P2_COM',func=pin_types.PASSIVE),
|
||||
Pin(num='7',name='P2_NC',func=pin_types.PASSIVE),
|
||||
Pin(num='9',name='P2_NO',func=pin_types.PASSIVE),
|
||||
Pin(num='5',name='NC5',func=pin_types.NOCONNECT),
|
||||
Pin(num='6',name='NC6',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),
|
||||
Pin(num='2',name='~',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
||||
Part(**{ 'name':'R', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'R'}), 'ref_prefix':'R', 'fplist':[''], 'footprint':'Resistor_SMD:R_0805_2012Metric', 'keywords':'R res resistor', 'description':'Resistor', 'datasheet':'~', 'pins':[
|
||||
Pin(num='1',name='~',func=pin_types.PASSIVE,unit=1),
|
||||
Pin(num='2',name='~',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
||||
Part(**{ 'name':'D', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'D'}), 'ref_prefix':'D', 'fplist':[''], 'footprint':'Diode_SMD:D_SOD-323', 'keywords':'diode', 'description':'Diode', 'datasheet':'~', 'pins':[
|
||||
Pin(num='1',name='K',func=pin_types.PASSIVE,unit=1),
|
||||
Pin(num='2',name='A',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] }),
|
||||
Part(**{ 'name':'R_Potentiometer', 'dest':TEMPLATE, 'tool':SKIDL, 'aliases':Alias({'R_Potentiometer'}), 'ref_prefix':'RV', 'fplist':[''], 'footprint':'Potentiometer_THT:Potentiometer_Bourns_3296W_Vertical', 'keywords':'resistor variable', 'description':'Potentiometer', 'datasheet':'~', 'pins':[
|
||||
Pin(num='1',name='1',func=pin_types.PASSIVE,unit=1),
|
||||
Pin(num='3',name='3',func=pin_types.PASSIVE,unit=1),
|
||||
Pin(num='2',name='2',func=pin_types.PASSIVE,unit=1)], 'unit_defs':[] })])
|
||||
Loading…
Reference in a new issue