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

151 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```python
# 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)
```python
@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
```python
@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