Files
claude-skills/pcb-ai-engineer/references/power_design.md
T
2026-03-21 19:36:11 +03:00

5.5 KiB
Raw Blame History

Power Supply Design Guide

Topology Selection

Topology When to Use Efficiency Noise Cost
LDO Vdrop < 1V, Iout < 500mA, noise-sensitive Low (η ≈ Vout/Vin) Very low Low
Buck Vdrop > 1V, Iout > 200mA, efficiency matters High (85-95%) Medium Medium
Buck + LDO chain High Vin, multiple rails, mixed noise needs Good overall Low on LDO rails Medium
Boost Vout > Vin (battery → 5V, etc.) Medium (80-90%) Medium-High Medium
Buck-Boost Vin can be above or below Vout Medium High High
Charge Pump Small current (<100mA), voltage doubling/inversion Medium High Low

Decision Tree

Is Vin always > Vout?
├─ Yes → Is (Vin - Vout) < 1V AND Iout < 500mA?
│        ├─ Yes → LDO
│        └─ No  → Is noise critical on this rail?
│                 ├─ Yes → Buck + LDO (buck for bulk, LDO for clean rail)
│                 └─ No  → Buck
└─ No  → Is Vin sometimes < Vout?
         ├─ Yes → Buck-Boost (or SEPIC)
         └─ No  → Boost

Input Protection

Every power input should have:

  1. Reverse polarity protection: P-MOSFET (preferred) or Schottky diode (simpler, lossy)
  2. Overvoltage / transient protection: TVS diode rated above max operating voltage
  3. Inrush current limiting: NTC thermistor or soft-start IC for high-capacitance designs
  4. Fuse: Resettable PTC or standard fuse, rated for max expected current × 1.5
# circuit-synth pattern: input protection block
@circuit(name="input_protection")
def input_protection(vin_raw, vin_protected, gnd):
    fuse = Component(symbol="Device:Fuse_Small", ref="F", value="2A",
                     footprint="Fuse:Fuse_1206_3216Metric")
    tvs = Component(symbol="Diode:TVS", ref="D_TVS", value="SMBJ15A",
                    footprint="Diode_SMD:D_SMA")
    cin = Component(symbol="Device:C", ref="C_IN", value="10uF",
                    footprint="Capacitor_SMD:C_1206_3216Metric")

    vin_raw += fuse[1]
    fuse[2] += tvs["A"]  # TVS anode to fused input
    tvs["K"] += gnd       # TVS cathode to ground (unidirectional)
    vin_protected += fuse[2], cin[1]
    gnd += cin[2]

Decoupling Strategy

Per-IC decoupling (mandatory)

  • 100nF ceramic (X7R/X5R, 0402 or 0603) on every VDD pin, placed as close as possible.
  • For MCUs with VDDA (analog supply): separate 100nF + 1µF, with ferrite bead isolation.
  • For MCUs with VCAP (internal regulator output): capacitor per datasheet (typically 2.2µF).

Per-rail bulk capacitors

  • 10µF ceramic per power rail (at the regulator output).
  • 100µF electrolytic/tantalum for high-current rails (>500mA).

High-frequency bypass

  • 100nF + 10nF pair for noise-sensitive analog circuits.
  • Place smaller cap closest to IC pin.

Layout rules

  • Capacitor → IC pin via is shorter than capacitor → pour via.
  • Ground vias under decoupling caps (direct path to ground plane).
  • Never route high-speed signals under/near switching regulators.

Common Regulator Reference Circuits

LDO: AMS1117-3.3 (SOT-223)

@circuit(name="ldo_3v3")
def ldo_3v3(vin, vout_3v3, gnd):
    reg = Component(symbol="Regulator_Linear:AMS1117-3.3", ref="U_LDO",
                    footprint="Package_TO_SOT_SMD:SOT-223-3_TabPin2")
    cin = Component(symbol="Device:C", ref="C_LDO_IN", value="10uF",
                    footprint="Capacitor_SMD:C_0805_2012Metric")
    cout = Component(symbol="Device:C", ref="C_LDO_OUT", value="22uF",
                     footprint="Capacitor_SMD:C_0805_2012Metric")

    vin += reg["VI"], cin[1]
    vout_3v3 += reg["VO"], cout[1]
    gnd += reg["GND"], cin[2], cout[2]

Buck: TPS54331 (SOIC-8) — 3A, 3.5-28V input

@circuit(name="buck_5v")
def buck_5v(vin, vout_5v, gnd):
    buck = Component(symbol="Regulator_Switching:TPS54331", ref="U_BUCK",
                     footprint="Package_SO:SOIC-8_3.9x4.9mm_P1.27mm")
    inductor = Component(symbol="Device:L", ref="L_BUCK", value="15uH",
                         footprint="Inductor_SMD:L_1210_3225Metric")
    diode = Component(symbol="Diode:SS34", ref="D_BUCK",
                      footprint="Diode_SMD:D_SMA")
    # Feedback resistors, bootstrap cap, input/output caps...
    # (Complete circuit depends on exact target voltage)

    vin += buck["VIN"]
    buck["GND"] += gnd
    buck["PH"] += inductor[1], diode["K"]
    inductor[2] += vout_5v
    diode["A"] += gnd

Multi-Rail Design Patterns

Pattern: 12V → 5V (Buck) → 3.3V (LDO) → 1.8V (LDO)

Good for: general-purpose MCU boards, moderate current.

VIN_12V ──→ [Buck] ──→ 5V rail (1A)
                         ├──→ [LDO] ──→ 3.3V rail (500mA)
                         │                └──→ MCU VDD, peripherals
                         └──→ [LDO] ──→ 1.8V rail (200mA)
                                          └──→ MCU VCORE (if separate)

Pattern: USB 5V → 3.3V (LDO)

Good for: simple USB-powered devices.

USB_VBUS ──→ [Fuse 500mA] ──→ [LDO] ──→ 3.3V

Pattern: Battery (3.0-4.2V) → 3.3V (Buck-Boost or LDO)

Good for: battery-powered IoT. LDO if battery always > 3.5V; buck-boost otherwise.

Thermal Considerations

  • Calculate power dissipation: P = (Vin - Vout) × Iout for LDO
  • Check junction temperature: Tj = Ta + P × θja
  • SOT-223 θja ≈ 65°C/W; SOIC-8 ≈ 125°C/W; QFN exposed pad ≈ 35°C/W
  • If Tj > 125°C at max load → need larger package or switch to buck