Files
Akhil Velagapudi 256bf1df69 Smol symbols (#887)
* Use small KiCad symbols for stdlib generics

* Add color variants for stdlib LED symbols
2026-06-17 14:29:07 -04:00

112 lines
3.5 KiB
Python

"""
Generic rectifier diode.
This module covers both small-signal / signaling diodes and power rectifiers.
"""
load("../io.zen", "io")
load("../interfaces.zen", "Net")
load("../units.zen", "Current", "Voltage")
load("../utils.zen", "format_value")
# Package JEDEC Legacy
# SMF DO-219AB SMF
# SMA DO-214AC SMA
# SMB DO-214AA SMB
# SMC DO-214AB SMC
# SOD-123FL SOD-123FL -
# SOD-123 SOD-123 -
# SOD-323 SOD-323 -
# SOD-523 SOD-523 -
Package = enum("DO-219AB", "DO-214AC", "DO-214AA", "DO-214AB", "SOD-123FL", "SOD-123", "SOD-323", "SOD-523")
Technology = enum("PN", "Schottky")
package = config(Package, default=Package("DO-214AC"), optional=False)
technology = config(Technology, default=Technology("PN"))
reverse_voltage = config(Voltage, help="Maximum repetitive reverse voltage")
# IF(AV): continuous average forward current. Treat as a thermal class proxy,
# not as a guaranteed pulsed or unconstrained operating current.
forward_current = config(Current, optional=True, help="IF(AV) continuous average forward current")
forward_voltage = config(Voltage, optional=True, help="Maximum forward voltage drop")
properties = {
"value": format_value(forward_current, reverse_voltage, technology, "Rectifier"),
"package": package,
"technology": technology,
"reverse_voltage": reverse_voltage,
}
if forward_current:
properties["forward_current"] = forward_current
if forward_voltage:
properties["forward_voltage"] = forward_voltage
A = io(Net)
K = io(Net)
def _symbol_name(technology: Technology) -> str:
if technology == Technology("Schottky"):
return "D_Schottky_Small"
return "D_Small"
def _symbol(technology: Technology) -> str:
return "../kicad-symbols/Device.kicad_symdir/" + _symbol_name(technology) + ".kicad_sym"
def _footprint(package: Package) -> str:
kicad_footprints = {
Package("DO-219AB"): "../kicad-footprints/Diode_SMD.pretty/D_SMF.kicad_mod",
Package("DO-214AC"): "../kicad-footprints/Diode_SMD.pretty/D_SMA.kicad_mod",
Package("DO-214AA"): "../kicad-footprints/Diode_SMD.pretty/D_SMB.kicad_mod",
Package("DO-214AB"): "../kicad-footprints/Diode_SMD.pretty/D_SMC.kicad_mod",
Package("SOD-123FL"): "../kicad-footprints/Diode_SMD.pretty/D_SOD-123F.kicad_mod",
Package("SOD-123"): "../kicad-footprints/Diode_SMD.pretty/D_SOD-123.kicad_mod",
Package("SOD-323"): "../kicad-footprints/Diode_SMD.pretty/D_SOD-323.kicad_mod",
Package("SOD-523"): "../kicad-footprints/Diode_SMD.pretty/D_SOD-523.kicad_mod",
}
return kicad_footprints[package]
def _spice_subcircuit_name(technology: Technology):
if technology == Technology("Schottky"):
return "D_Schottky"
return "D"
def _spice_args(technology: Technology):
if technology == Technology("Schottky"):
return {
"IS": "1e-8",
"N": "1.2",
"RS": "5m",
"CJO": "2p",
}
return {
"IS": "1e-14",
"N": "1.0",
"RS": "10m",
"CJO": "1p",
}
Component(
name="D",
prefix="D",
symbol=Symbol(_symbol(technology)),
footprint=File(_footprint(package)),
spice_model=SpiceModel(
"spice/Diode.lib",
_spice_subcircuit_name(technology),
nets=[A, K],
args=_spice_args(technology),
),
properties=properties,
type="rectifier",
pins={
"A": A,
"K": K,
},
)