原理图/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
105 行
4.8 KiB
Python
105 行
4.8 KiB
Python
# -*- 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)
|