"""
Analog Devices LT1763 Low Dropout Linear Regulator
Component and circuit definitions for the Analog Devices LT1763 series
low dropout linear regulators with complete application circuit.
"""
from jitx.anchor import Anchor
from jitx.circuit import Circuit
from jitx.common import Power
from jitx.component import Component
from jitx.landpattern import PadMapping
from jitx.net import Port, ShortTrace
from jitx.shapes.composites import rectangle
from jitx.shapes.primitive import Circle, Text
from jitx.si import Toleranced
from jitx.symbol import Direction, Pin, Symbol, SymbolMapping
from jitx.units import F, V
from jitxlib.landpatterns.generators.soic import SOIC
from jitxlib.landpatterns.ipc import DensityLevel
from jitxlib.landpatterns.leads import LeadProfile, SMDLead
from jitxlib.landpatterns.leads.protrusions import BigGullWingLeads
from jitxlib.landpatterns.package import RectanglePackage
from jitxlib.parts import AtLeast, Capacitor
[docs]
class SymbolLT1763CS8(Symbol):
pin_name_size = 0.7874
pad_name_size = 0.7874
OUT = Pin((-11, 3), 2, Direction.Left)
SENSE_ADJ = Pin((-11, 1), 2, Direction.Left)
GND0 = Pin((-11, -1), 2, Direction.Left)
BYP = Pin((-11, -3), 2, Direction.Left)
SHDN_NOT = Pin((11, -3), 2, Direction.Right)
GND1 = Pin((11, -1), 2, Direction.Right)
GND2 = Pin((11, 1), 2, Direction.Right)
IN = Pin((11, 3), 2, Direction.Right)
reference_designator = Text(">REF", 0.55559, Anchor.C).at((0, 5.87481))
value_label = Text(">VALUE", 0.55559, Anchor.C).at((0, 5.08741))
shapes = [rectangle(22, 10), Circle(radius=0.3).at((-10, 4))]
[docs]
class LT1763CS8(Component):
"""
Analog Devices LT1763 Low Dropout Linear Regulator
Parametric component supporting multiple output voltages:
- 1.5V, 1.8V, 2.5V, 3.0V, 3.3V, 5.0V
Features:
- Low dropout voltage: 300mV @ 500mA
- Output current: 500mA
- Input voltage range: 1.8V to 20V
- Shutdown control
- Thermal protection
"""
OUT = Port()
"""Regulated output voltage"""
SENSE_ADJ = Port()
"""Remote sense/adjust pin"""
GND0 = Port()
"""Ground pin 1"""
BYP = Port()
"""Bypass pin for internal reference"""
SHDN_NOT = Port()
"""Shutdown control (active low)"""
GND1 = Port()
"""Ground pin 2"""
GND2 = Port()
"""Ground pin 3"""
IN = Port()
"""Input voltage"""
def __init__(self, output_voltage: float):
"""Initialize an LT1763 with the specified output voltage.
``output_voltage`` is in volts and must be 1.5, 1.8, 2.5, 3.0, 3.3,
or 5.0.
"""
super().__init__()
# Voltage to MPN mapping
voltage_mpn_map = {
1.5: "LT1763CS8-1.5#TRPBF",
1.8: "LT1763CS8-1.8#TRPBF",
2.5: "LT1763CS8-2.5#TRPBF",
3.0: "LT1763CS8-3#TRPBF",
3.3: "LT1763CS8-3.3#TRPBF",
5.0: "LT1763CS8-5#TRPBF",
}
if output_voltage not in voltage_mpn_map:
raise ValueError(
f"Unsupported output voltage: {output_voltage}V. Supported voltages: {list(voltage_mpn_map.keys())}"
)
self.output_voltage = output_voltage
self.manufacturer = "Analog Devices"
self.mpn = voltage_mpn_map[output_voltage]
self.reference_designator_prefix = "U"
self.datasheet = "https://www.analog.com/media/en/technical-documentation/data-sheets/1763fa.pdf"
# Landpattern using SOIC generator
self.landpattern = (
SOIC(num_leads=8)
.lead_profile(
LeadProfile(
span=Toleranced.min_typ_max(
5.79, 6.00, 6.20
), # E dimension from drawing (5.791-6.197mm)
pitch=1.27, # 1.27mm pitch for SOIC-8
type=SMDLead(
length=Toleranced.min_typ_max(
0.40, 0.50, 0.65
), # L dimension (lead length)
width=Toleranced.min_typ_max(
0.35, 0.41, 0.48
), # b dimension (lead width)
lead_type=BigGullWingLeads,
),
),
)
.package_body(
RectanglePackage(
width=Toleranced.min_typ_max(
3.81, 3.90, 3.99
), # E1 dimension (body width) from drawing
length=Toleranced.min_typ_max(
4.80, 4.90, 5.00
), # D dimension (body length) from drawing
height=Toleranced.min_typ_max(
1.35, 1.55, 1.75
), # A dimension (height, typical SOIC-8)
)
)
.density_level(DensityLevel.C)
)
self.symbol = SymbolLT1763CS8()
self.symbolmapping = SymbolMapping(
{
self.OUT: self.symbol.OUT,
self.SENSE_ADJ: self.symbol.SENSE_ADJ,
self.GND0: self.symbol.GND0,
self.BYP: self.symbol.BYP,
self.SHDN_NOT: self.symbol.SHDN_NOT,
self.GND1: self.symbol.GND1,
self.GND2: self.symbol.GND2,
self.IN: self.symbol.IN,
}
)
self.padmapping = PadMapping(
{
self.OUT: self.landpattern.p[1],
self.SENSE_ADJ: self.landpattern.p[2],
self.GND0: self.landpattern.p[3],
self.BYP: self.landpattern.p[4],
self.SHDN_NOT: self.landpattern.p[5],
self.GND1: self.landpattern.p[6],
self.GND2: self.landpattern.p[7],
self.IN: self.landpattern.p[8],
}
)
[docs]
class LT1763LDO(Circuit):
"""Parametric LT1763 low-dropout regulator circuit.
The circuit includes the input, output, and bypass capacitors recommended by
the datasheet. ``input_voltage`` and ``output_voltage`` are in volts. When
``enable_control`` is true, the shutdown pin is exposed; otherwise it is tied
high.
"""
# Port definitions as class attributes
power_in = Power() # Input power: .Vp (VIN), .Vn (GND)
power_out = Power() # Output power: .Vp (VOUT), .Vn (GND)
enable: Port | None = None # Shutdown control pin (if enable_control=True)
def __init__(
self, input_voltage: float, output_voltage: float, enable_control: bool = False
) -> None:
"""Initialize an LT1763 LDO circuit.
``input_voltage`` must exceed ``output_voltage`` by at least 0.3 V.
``output_voltage`` must be 1.5, 1.8, 2.5, 3.0, 3.3, or 5.0 V. When
``enable_control`` is true, the shutdown pin is exposed; otherwise it is
tied high internally.
"""
super().__init__()
# Validate input parameters
dropout_min = 0.3 # Minimum dropout voltage from datasheet
if input_voltage < (output_voltage + dropout_min):
raise ValueError(
f"Input voltage ({input_voltage}V) too low. Minimum required: {output_voltage + dropout_min}V"
)
self.input_voltage = input_voltage
self.output_voltage = output_voltage
self.enable_control = enable_control
# Instantiate the LT1763 regulator
self.regulator = LT1763CS8(output_voltage)
# Calculate capacitor voltage ratings (2x expected voltage minimum)
input_cap_voltage = max(10.0, input_voltage * 2.0) # Minimum 10V rating
output_cap_voltage = max(10.0, output_voltage * 2.0) # Minimum 10V rating
bypass_cap_voltage = max(
10.0, output_voltage * 2.0
) # Bypass referenced to output
# Input capacitor: 10µF between VIN and GND
self.cin = Capacitor(
capacitance=(10e-6) * F,
rated_voltage_dc=AtLeast(input_cap_voltage * V),
temperature_coefficient_code="X7R", # Stable ceramic for power applications
)
self.cin_short_traces = [
ShortTrace(self.regulator.IN, self.cin.p1),
ShortTrace(self.cin.p2, self.power_in.Vn),
]
# Output capacitor: 10µF between VOUT and GND
self.cout = Capacitor(
capacitance=(10e-6) * F,
rated_voltage_dc=AtLeast(output_cap_voltage * V),
temperature_coefficient_code="X7R",
)
self.cout_short_traces = [
ShortTrace(self.regulator.OUT, self.cout.p1),
ShortTrace(self.cout.p2, self.power_out.Vn),
]
# Bypass capacitor: 0.01µF between BYP and GND
self.cbyp = Capacitor(
capacitance=(0.01e-6) * F,
rated_voltage_dc=AtLeast(bypass_cap_voltage * V),
temperature_coefficient_code="C0G", # Stable for reference bypass
)
self.cbyp_short_traces = [
ShortTrace(self.regulator.BYP, self.cbyp.p1),
ShortTrace(self.cbyp.p2, self.power_out.Vn),
]
# Connect power nets
# Input power connections
self.IN = self.power_in.Vp + self.regulator.IN
self.GND = (
self.power_in.Vn
+ self.power_out.Vn
+ self.regulator.GND0
+ self.regulator.GND1
+ self.regulator.GND2
)
# Output power connections; SENSE ties to OUT for local sensing
# (typical application)
self.OUT = self.power_out.Vp + self.regulator.OUT + self.regulator.SENSE_ADJ
# Handle shutdown control
if enable_control:
# Expose shutdown control pin
self.enable = Port()
"""Enable control (active high). Pull low to shutdown regulator."""
self.SHDN_NOT = self.enable + self.regulator.SHDN_NOT
else:
# Tie SHDN high to always enable the regulator
self.IN += self.regulator.SHDN_NOT
# Device alias points to the complete LDO circuit
Device: type[LT1763LDO] = LT1763LDO