mirror of
https://github.com/diodeinc/pcb.git
synced 2026-09-14 20:17:19 +08:00
256bf1df69
* Use small KiCad symbols for stdlib generics * Add color variants for stdlib LED symbols
112 lines
3.5 KiB
Python
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,
|
|
},
|
|
)
|