文件
phonerail/.claude/p1b_nets.py
T
zhou yang和Claude Opus 5 2bfe308b30 初始导入:PhoneRail 五路手机直供电源板
原理图/PCB 已在 EasyEDA 里做到 12 页跨页 0 漏接,固件刚完成骨架包 A1。
这次是把已有的一切一次性纳入版本控制,没有改动任何设计内容。

纳入:
- 设计与需求文档、PROGRESS.md、小米8 参考原理图 PDF 与追脚脚本
- .claude/ 下的 EasyEDA 桥接工具链与几何/网表缓存(eda-parts.json、
  pcb-parts.json、pcb-pads.json、p2-ch1.json 等,是重画各页的唯一事实来源)
- 117 张验证截图(本项目所有方向问题都是靠人眼看截图发现的,属于证据不是垃圾)
- firmware/ 的 A1 骨架与 site/ 文档站源码

.gitignore 排除:构建产物(firmware/build、host/build、sdkconfig)、
site/node_modules、__pycache__、桥接日志 _bridge.log、脚本自标的 *.stale。

.gitattributes 默认 `* -text`:现有 .py/.json 大多是 CRLF,原样存,
不让 git 重写行尾。唯一例外是 *.sh 强制 LF —— 带 \r 的 shell 脚本 bash 跑不了。

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QYuExfgyYa6DzRRcUso8M8
2026-09-06 18:18:14 +08:00

105 行
4.8 KiB
Python
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# -*- coding: utf-8 -*-
u"""P1B-5V 网表:12V→5V 辅助轨(U30)+ Hub 专用 5V→3.3V LDO(U31)。
为什么单独一页:Hub 那页是 65 脚 QFN,塞不下;而这两路电源和 P1 的 U19
是同一类东西(辅助电源),单独成页最清爽。逐项计算见设计文档 §9.4 / §9.5。
用法: python .claude/build.py p1b_nets p1b-pins.json 508b1219ec8a9f83 [--push]
"""
import io, json, os, sys
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
sys.path.insert(0, os.path.join(HERE, 'skills', 'easyeda-sch-geometry', 'scripts'))
import local_netcheck as N
w, port, txt = N.w, N.port, N.txt
PIN = json.load(io.open(os.path.join(HERE, 'p1b-pins.json'), encoding='utf-8'))
def P(des, pin):
x, y, _ = PIN[des][str(pin)]
return (x, y)
def gnd_dn(x, y):
u"""导线从上方接进来 → Ground rot=0(引脚在上、符号在下)。"""
N.FLAGS.append(('Ground', 'GND', x, y, 0))
def gnd_up(x, y):
u"""导线从下方接进来 → Ground rot=180。"""
N.FLAGS.append(('Ground', 'GND', x, y, 180))
def p12_up(x, y):
u"""+12V 电源旗:导线从下方接进来 → Power rot=0(符号在上、引脚在下)。"""
N.FLAGS.append(('Power', '+12V', x, y, 0))
# ═══════════════ 12V → 4.98V(U30 LMR51430YDDCR,§9.4)═══════════════
# U30: 1 GND(565,610) 2 SW(565,600) 3 VIN(565,590) 4 FB(635,590) 5 EN(635,600) 6 CB(635,610)
# ── 输入:VIN + 两颗 10µF(§9.3 的教训:输入去耦要 ≥4.7µF,不能只放 2.2µF)──
w('+12V', P('U30', 3), P('C732', 1)) # (565,590) -> (500,590),C731.1 在线上
w('+12V', (460, 590), P('C732', 1))
w('+12V', (460, 590), (460, 630)); p12_up(460, 630)
w('GND', P('C732', 2), P('C731', 2)) # (500,550) -> (540,550)
w('GND', P('C732', 2), (500, 510)); gnd_dn(500, 510)
w('GND', P('U30', 1), (565, 645)); gnd_up(565, 645)
# EN 直接接 VIN —— datasheet 原文 "This pin can be tied to VIN"(§9.3 已复核)
w('+12V', P('U30', 5), (690, 600))
w('+12V', (690, 600), (690, 640)); p12_up(690, 640)
# ── SW → L3。SW 是左侧中间那个脚,往左绕开输入回路再下到电感 ──
w('SW5V', P('U30', 2), (410, 600))
w('SW5V', (410, 600), (410, 470))
w('SW5V', (410, 470), P('L3', 1))
# 自举电容 C733:一端 SW、一端 CB
w('SW5V', P('C733', 1), (410, 560))
w('CB5V', P('C733', 2), (390, 520))
w('CB5V', (390, 520), (390, 660))
w('CB5V', (390, 660), (660, 660))
w('CB5V', (660, 660), (660, 610))
w('CB5V', (660, 610), P('U30', 6))
# ── 输出:22µF ×2 ──
w('+5V', P('L3', 2), P('C735', 1)) # (600,470) -> (750,470),C734.1 在线上
w('GND', P('C734', 2), P('C735', 2))
w('GND', P('C734', 2), (700, 410)); gnd_dn(700, 410)
w('+5V', P('C735', 1), (790, 470))
w('+5V', (790, 470), (790, 560))
w('+5V', (790, 560), P('R706', 1))
w('+5V', (790, 490), (830, 490)); port('+5V', 830, 490, 0, 'OUT')
# ── 反馈分压 100k / 13.7k → 0.6×(1+100/13.7) = 4.98V ──
w('FB5V', P('R706', 2), P('R707', 1))
w('FB5V', (860, 490), (900, 490))
w('FB5V', (900, 490), (900, 590))
w('FB5V', (900, 590), P('U30', 4))
w('GND', P('R707', 2), (860, 390)); gnd_dn(860, 390)
# ═══════════ 5V → 3.3V(U31 AMS1117-3.3,只给 Hub,§9.5)═══════════
# U31: 1 GND(355,260) 2 VOUT(355,250) 3 VIN(355,240) 4 VOUT(445,250)
w('+5V', P('U31', 3), P('C736', 1)) # (355,240) -> (250,240)
w('+5V', P('C736', 1), (200, 240)); port('+5V', 200, 240, 180, 'IN')
w('GND', P('C736', 2), (250, 175)); gnd_dn(250, 175)
w('GND', P('U31', 1), (355, 300)); gnd_up(355, 300)
w('+3V3_HUB', P('U31', 4), (600, 250))
w('+3V3_HUB', (600, 250), P('C737', 2))
w('+3V3_HUB', (600, 250), (680, 250)); port('+3V3_HUB', 680, 250, 0, 'OUT')
w('GND', P('C737', 1), (600, 330)); gnd_up(600, 330)
# 符号里 VOUT 出现两次(pin2 = 中间脚、pin4 = 散热片),两个都要接
w('+3V3_HUB', P('U31', 2), (320, 250))
w('+3V3_HUB', (320, 250), (320, 330)); port('+3V3_HUB', 320, 330, 180, 'BI')
NC = {}
txt(u'【P1B-5V】12V→5V 辅助轨 + Hub 专用 3.3V —— 板载 USB Hub 用(§9.4 / §9.5)', 45, 800, 15)
txt(u'U30 LMR51430YDDCR(与 U19 同料): Vref 0.6V, R706/R707=100k/13.7k -> 4.98V', 45, 175, 11)
txt(u'L3 = SPM6530T-4R7M(与 L1~L5 同料): 1.1MHz 下 ΔIL=0.56A, 2A 负载峰值 2.28A << Isat 6.2A', 45, 157, 11)
txt(u'负载:正常 <0.5A(关充电后手机基本不从 VBUS 取电);最坏 2.8A(五路 input_suspend 全失效)', 45, 139, 11)
txt(u'U31 AMS1117-3.3 只给 U32 供电:Hub 满配 5 口约 420mA,挂不到 U19 那条 0.5A 控制轨上', 45, 121, 11)
txt(u'U31 耗散 0.42A×1.7V≈0.71W —— PCB 上 SOT-223 必须铺铜散热(§10)', 45, 103, 11)