R2 底板改 4 层(D15):规则 / 几何 / 背面摆位 / 4 层布线与铺铜,已下发
- 规则:铜层 2→4,差分 0.28/0.18,间距 0.15,过孔 0.3/0.2(rules_base) - 几何:98×98 板框 + 4×M3,槽阵居中,L1 12V 大铜 + 指头(pcb_base) - 摆位:五插槽留 L1,其余 133 件翻到 L4;背面镜像规则实测;Hub 放走廊 2、 东移 2.5 mm;扇出圈 / 小件间距 1.5(去耦例外)/ 9 A 过孔阵禁区(place_base) - 叠层按用户决定改为 L1 槽面 / L2 整层 +3V3 / L3 整层 GND / L4 器件面 - 布线:D± 七对按构造布通(USB3 掉头、USB1/2 北去掉头、USB4/5 东绕、 J23 桥),+3V3 / GND / +12V 平面网每脚一孔,0.125 网格 + PathFinder 开关(route_base、remote_route.ps1);剩 37 个网待手工补 - 铺铜:4 层重写,入口链自南向北切段 + 断面校核(pour_base); 已下发布线 / 缝合孔 / 铜面轮廓,填铜未成功(待查) - 工具:plot_base / plot_routes / shot_base,board_check 通孔两层都算 Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_0168Bu6SEx3cXXCJLkdnE6zB
这个提交包含在:
+162
-14
@@ -79,28 +79,95 @@ HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
sys.path.insert(0, HERE)
|
||||
from eda import run
|
||||
|
||||
PCB = 'f126ffb29c92f9b2' # PCB2-CARRIER
|
||||
PCB = '942ed1560d81c1e7' # PCB2-CARRIER
|
||||
MIL = 39.3700787401575
|
||||
|
||||
BW, BH = 220.0, 135.0 # 板框 mm
|
||||
CORNER_R = 5.0
|
||||
# 载板自己的 M3 安装孔(来历见 obsolete/pcb2_place_topside_2026-09-06.py 文件头,位置没动)。
|
||||
MH = [(8.0, 8.0), (212.0, 8.0), (7.0, 60.0), (213.0, 45.0),
|
||||
(76.6, 79.5), (148.1, 79.5)] # v3:中跨孔随上排下移 0.6(焊盘顶 82.5 < 83.0)
|
||||
(76.6, 79.5), (148.1, 79.5), # v3:中跨孔随上排下移 0.6(焊盘顶 82.5 < 83.0)
|
||||
# 2026-09-06 用户指令「两板尺寸取大对齐、四角定位孔对齐」:下板改成同样的 220×135、
|
||||
# 四角孔与本板重合。底部两角本来就有 (8,8)/(212,8);顶部两角被上排主板(y ≤ 127.66)和
|
||||
# 尾插槽(site1 x 8.09~27.09,见 SLOTS 注释)夹住,只剩板角 4×4 那一块:
|
||||
# 孔心 (4,131)/(216,131),焊盘 Ø6 → 离板边 1.0、离主板边 0.34(主板架在 3 mm 立柱上,螺钉头 ≤ 2)、离槽 1.09。
|
||||
(4.0, 131.0), (216.0, 131.0)]
|
||||
MH_HOLE, MH_PAD = 3.2, 6.0
|
||||
MH_KEEP = 3.5 # 底层元件离 M3 孔中心的最小距离(螺钉头 Ø6)
|
||||
|
||||
# ---- 小米8 主板(顶视,板左下角原点,mm)----
|
||||
PW, PH = 67.09, 44.66
|
||||
HOLES = {'H1': (54.2, 42.3), 'H2': (2.6, 38.2), 'H3': (61.9, 33.7), 'H4': (62.1, 29.2),
|
||||
'H5': (2.6, 27.0), 'H6': (4.0, 10.8), 'H7': (42.6, 3.7)}
|
||||
HOLE_D = 2.5 # 载板上的定位孔,NPTH
|
||||
HOLE_KEEP = 2.8 # 底层元件离定位孔中心的最小距离(M2.5 尼龙螺钉头 Ø4.5 + 余量)
|
||||
# 2026-09-06 实测替换(旧值的 7 孔是**从照片认的**,最大错 4.8 mm)。
|
||||
# 新值来源:测量底板(四基准点 Φ6,圆心矩形 160x110)上描轮廓 + 每孔戳一点 -> 扫描 ->
|
||||
# `pcb2_measure_read.py` 单应反算。**再拿真主板平板扫描件做了一次独立复核**:
|
||||
# 用这 7 个孔去套扫描件上的孔,**7/7 命中、平均残差 0.38 mm**(`_fit.png`)。
|
||||
# ⚠️ 编号整体重排过,别拿旧 H 号对新 H 号。
|
||||
# ⚠️ 板长 67 = **裸板**。用户描轮廓时 SIM 卡托还插着,卡托在 u 大的那一端伸出约 3.3 mm,
|
||||
# 所以描出来是 70.3。他早先给的 u 值是拿 66 / 70.3 混着换算的,才有那 3~4 mm 的怪差。
|
||||
PW, PH = 67.0, 44.0
|
||||
HOLES = {'H1': (1.4, 9.9), 'H2': (0.7, 27.3), 'H3': (1.7, 38.7), 'H4': (41.9, 1.9),
|
||||
'H5': (57.4, 41.2), 'H6': (64.6, 28.1), 'H7': (64.8, 32.4)}
|
||||
HOLE_D = 1.8 # 载板上的定位孔,NPTH。2026-09-06 用户卡尺:**主板孔 Φ2.0**
|
||||
# (先前口头的 Φ1.5 作废)。Φ2.0 是手机自己的过孔 ⇒ 配 **M1.6 尼龙立柱**
|
||||
# (M2 螺杆 Φ2.0 塞 Φ2.0 没余量,不选);载板这侧是螺钉过孔,取 M1.6 的通孔 Φ1.8。
|
||||
# 原来整套按 Φ2.5 / M2.5 做的,是错的。
|
||||
HOLE_KEEP = 2.2 # 底层元件离定位孔中心的最小距离(M1.6 尼龙螺钉头 Ø3.2 + 余量)
|
||||
# 2026-09-07:**H5 不打**。J61~J65(EDL 座)离 P*H5 只有 0.92(要 2.2),二选一里「不打 H5」代价为零:
|
||||
# 每台还有 6 颗螺钉,H5 在 u 大 / v 大那个角(离侧键触点最远的角),那里没有需要压紧的东西。
|
||||
# 模型里 HOLES 保留 7 个(它是实测数据),只在下发孔 / 螺钉头避让时跳过这里列的。
|
||||
SKIP_HOLES = {'H5'}
|
||||
|
||||
# 侧键触点(§22.3b,已折算成顶视投影)。顶针顺序 = c4_site.py 的 pogo[0..3]
|
||||
POGO_XY = [(3.11, 6.91), (2.70, 4.60), (5.41, 6.52), (2.12, 2.46)]
|
||||
# 侧键触点。旧值(§22.3b 那四个点)是从照片认的,**内部排布是错的**,见下。
|
||||
#
|
||||
# ---- 已经问清楚的(可信)----
|
||||
# 触点是 **4 个 Φ1.35 的圆盘,排成菱形**:相邻 1.87 mm、对角 2.65 mm。
|
||||
# 来源:中框(配合件)上那四个金色焊盘的平板扫描,边界干净,k-means 分开后直接量。
|
||||
# ⚠️ **顶针本体直径必须 < 1.87 mm**,常规 Φ2 以上的排不下 —— 选型硬约束。
|
||||
#
|
||||
# ---- 位置:**中框螺柱配准**那一版(已被卡尺判定为正确)----
|
||||
# 2026-09-06:用户卡尺实测 **H1 孔心到四触点菱形中心 = 5 mm**,判死了两条路之争:
|
||||
# 中框配准版 (3.42, 5.07) -> 离 H1 5.24 mm ✔ 采信
|
||||
# 红漆配准版 (0.81, 7.08) -> 离 H1 2.88 mm �’ 弃
|
||||
# 红漆那条当时的论据是「同图内量到最近孔 2.7 mm,不经配准也不吃手性」,**论据是错的**:
|
||||
# 那个「最近的孔」是环形滤波器几百个候选里的一个,多半是过孔/焊盘误报,不是真孔。
|
||||
# ⚠️ 教训:环形滤波器在这块板上误报率极高,**任何"离最近的孔多少"都不能直接用**,
|
||||
# 必须先确认那个候选真的是 7 孔之一。
|
||||
# 旁证:中框版四个点全在板内(红漆版算出 GND 在板边外 0.5 mm,与用户「GND 离短板边最近」矛盾),
|
||||
# 而且和旧 §22.3b 的簇心 (3.34, 5.12) 只差 0.1 mm —— 旧数据的**簇心本来就是对的,错的是内部排布**。
|
||||
# 下面四个坐标直接取中框配准的实测值(不是理想菱形),残差 0.57 mm。
|
||||
POGO_XY = [(4.72, 5.16), # PWR 电源 u+
|
||||
(3.42, 6.37), # VUP 音量+ v+
|
||||
(3.49, 3.74), # VDN 音量- v-
|
||||
(2.05, 4.99)] # GND u-
|
||||
POGO_TAG = ['J603 PWR', 'J601 VUP', 'J602 VDN', 'J604 GND']
|
||||
|
||||
# ---- 2026-09-06 用户改方案:**顶针取消,改成和中框一样的焊盘** ----
|
||||
# 装配方式跟着改:不再靠顶针弹力,而是**用螺丝把主板压在载板上**,
|
||||
# 由主板自己的侧键弹片直接压在载板的焊盘上 —— 完全复刻中框的接触方式。
|
||||
# 好处:顶针那个「本体必须 < 1.87 mm」的硬卡点直接消失(现有 POGO-SMD1P_D1.9 的 Ø1.9
|
||||
# 在真实 1.78 mm 最小间距下是负净距,正是那 20 条重叠的来源)。
|
||||
#
|
||||
# 焊盘定径:四点实测最小间距 **1.78 mm**(不是理想菱形的 1.87)⇒
|
||||
# 净距 0.20 -> 最大 Ø1.58 · 净距 0.25 -> Ø1.53 · 净距 0.30 -> Ø1.48
|
||||
# 中框原盘 Ø1.35。取 **Ø1.5**:净距 0.28(好做),容许位置误差 0.50 mm。
|
||||
POGO_PAD_D = 1.5
|
||||
# ⚠️ **位置不确定度 ±0.6 mm 已经吃掉全部余量**(Ø1.5 只容许 0.50)。
|
||||
# 打样前必须把触点位置收到 ±0.3:办法是「**一次装夹**」——
|
||||
# 主板放测量底板上,先戳 7 个孔、再把弹片涂红盖印,孔和触点落进同一套基准圆,一次量完。
|
||||
# ⚠️ **立柱高度 3.0 -> 1.0 mm**:2026-09-06 用户实测中框「螺柱支撑面 到 金焊盘面 = 1 mm」,
|
||||
# 这就是载板面到主板贴合面该有的间隙。原来是 3.0 mm 立柱 + 顶针压缩 0.5,整套作废。
|
||||
# ✅ **不用挖空**:2026-09-06 用户实测「贴合面上元件全都低于 1 mm」(屏蔽罩、SIM 卡座都算过),
|
||||
# 所以载板**保持平板**,1.0 mm 间隙直接成立。曾担心的「挖空会和底层 BAND 那组元件打架」不存在了。
|
||||
# ✅ 排线反而更宽裕(绕边下落 5 -> 3 mm):
|
||||
# 尾插 2.9 + 3 + 2.9 + 1.6 + 34.1 ≈ 44.5 ≤ 50(原 46.5)
|
||||
# 电池 4.6 + 3 + ... ≈ 29.6 ≤ 35(原 31.6)
|
||||
# ⇒ §25.16 那串长度核算只会更松,不用改路径。
|
||||
# ⚠️ **1 mm 立柱不好买**:M1.6 尼龙立柱通常从 3 mm 起。可行做法是
|
||||
# 「螺钉从上穿过手机孔 + 1 mm 尼龙垫片 + 穿过载板 Φ1.8 孔 + 底面尼龙螺母」。垫片可叠。
|
||||
# ⚠️ 顶角那两个 M3 孔(4,131)/(216,131) 的旧注释写着「主板架在 3 mm 立柱上,螺钉头 ≤ 2」——
|
||||
# 现在只剩 1 mm,那两个孔真要补的话螺钉头必须 ≤ 1 或者挪开。(它们本来就没打到板上。)
|
||||
POGO_STANDOFF_H = 1.0
|
||||
|
||||
|
||||
# ---- 五个手机位:本体左下角 + 旋转(0 = 接口边朝下,180 = 接口边朝上;to_board 里 rot 180 是绕本体中心转,位置矩形不变)----
|
||||
# v3(2026-09-06 用户拍板):穿线槽挪到**主板投影外侧、靠板边**那一条,排线(按 6 cm 算)
|
||||
# 跨过主板正面到远端边、下穿、再折回底面。上排下移 / 下排上移各 2.5 mm,让板边那条留出
|
||||
@@ -132,7 +199,9 @@ SLOTS = {
|
||||
# 2026-09-06 v4c(用户拍板):尾插槽挪到**和电池槽同一条线**(接口边外侧 v −4.2~−1.2),排线翻过接口边直接下穿,
|
||||
# 不再从主板反面 3.0 mm 的缝里钻。背面到 J7n 变长 5.6,J7n 从 v 37 收到 **v 35**:
|
||||
# 2.86 + 绕边 5 + 到槽心 2.7 + 穿板 1.6 + 背面 37.7 ≈ 49.9 ≤ 50 ✔(实长 55)。
|
||||
'tail': (45.0, 65.0, -4.2, -1.2), # 尾插排线:接口边外侧,与电池槽同线,正对 J1401 (u 47.5~59.7)
|
||||
# 2026-09-06 顶角 M3 孔 (4,131):site1 rot 180 下槽的 x = 72.09 − u,u=65 → x 7.09 会压到 Ø6 焊盘(边 7.0)。
|
||||
# 东端 65 → 64(x 8.09,离焊盘 1.09)。排线 18 宽盖 u 44.6~62.6,64 端还余 1.4。
|
||||
'tail': (45.0, 64.0, -4.2, -1.2), # 尾插排线:接口边外侧,与电池槽同线,正对 J1401 (u 47.5~59.7)
|
||||
}
|
||||
# 排线在背面占的车道(本体坐标)。**车道里不放任何元件**(排线要平贴着走到插头 / 焊盘,0402 也别放):
|
||||
# 尾插排线 u 44.6~62.6,v 4.4 ~ J7n 北沿(EDL 组 / VBUS 组因此整体西移到 u ≤ 44);
|
||||
@@ -195,6 +264,19 @@ BAND = {
|
||||
'r76': (52.233, 38.0, 0), # R76n 56k CC1→VBUS,pin1 (51.800) = J7n.22 正北
|
||||
'r77': (54.8, 38.0, 0), # R77n 100k,pin1 (54.367) 收 THERM
|
||||
'j6': (62.5, 41.0, 0), # J6n EDL 1.25mm 2P,J7n 东北、H1 keep-out 东侧;EDL 飞线随尾插排线穿槽走背面 ~40 mm
|
||||
# ── 按键 MOS 三列(2026-09-06 随 74HC595 从下板搬来,§26.23):顶针(顶层,u 2.1~5.4 / v 2.5~7)背面那片空地。
|
||||
# 列距 3.5;SOT-23 框 ±1.5×±1.27,0402 框 ±0.72×±0.27(竖放 ±0.27×±0.72)。
|
||||
# 东沿 15.5+1.5 = 17.0 < 电池排线车道 18.8;离 H6 (4,10.8) 最近的是 R%21 (8.5,10):4.6 > 2.8;
|
||||
# 漏极→顶针焊盘要换层(顶针是顶层单面焊盘),过孔由布线器自己打。
|
||||
'q3': (8.5, 4.0, 0), # Q%03 PWR
|
||||
'q4': (12.0, 4.0, 0), # Q%04 VUP
|
||||
'q5': (15.5, 4.0, 0), # Q%05 VDN
|
||||
'r20': (8.5, 7.5, 90), # R%20 1k 栅阻
|
||||
'r22': (12.0, 7.5, 90),
|
||||
'r24': (15.5, 7.5, 90),
|
||||
'r21': (8.5, 10.0, 90), # R%21 100k 栅极下拉
|
||||
'r23': (12.0, 10.0, 90),
|
||||
'r25': (15.5, 10.0, 90),
|
||||
}
|
||||
# SMD 罐体 keep-out(相对元件原点):10.3 见方 + 单边 0.25
|
||||
CAN_BODY = (-5.4, -5.4, 5.4, 5.4)
|
||||
@@ -211,6 +293,9 @@ def desig(n):
|
||||
'j7': 'J7%d' % n, 'u5': 'U5%d' % n, 'r76': 'R76%d' % n, 'r77': 'R77%d' % n,
|
||||
'u2': 'U%d' % (23 + n), 'c70': 'C70%d' % n, 'c71': 'C71%d' % n,
|
||||
'c72': 'C72%d' % n, 'r70': 'R70%d' % n,
|
||||
'q3': 'Q%d03' % n, 'q4': 'Q%d04' % n, 'q5': 'Q%d05' % n,
|
||||
'r20': 'R%d20' % n, 'r21': 'R%d21' % n, 'r22': 'R%d22' % n,
|
||||
'r23': 'R%d23' % n, 'r24': 'R%d24' % n, 'r25': 'R%d25' % n,
|
||||
}
|
||||
|
||||
|
||||
@@ -246,7 +331,23 @@ GLOBAL = {
|
||||
# v3 布线:U31 组挪到 J31 东端**南**侧(走廊北带 y 70~80 留给差分对上顶层北上)
|
||||
'U31': (87.5, 60.5, 0), # 底边 57.65 让开 CH4 电池槽(y ≤ 56.36 + 0.5);USB1 车道改走 y 64.0/64.46
|
||||
'C736': (80.5, 58.5, 0), # +5V 输入 0805(U31 西侧)
|
||||
'C737': (93.0, 54.0, 0), # +3V3 输出 1206,Hub 晶振窝西南、CH4 电池槽东侧
|
||||
# ── 2026-09-07:U32 的 PRT_SWP1~5 五个 strap 脚的 100k 下拉(R900~R904,见 §21.6a)──
|
||||
# BOOST/GANG_EN/SWP6-7 那五颗用户拍板不装(采到 1 也无功能后果)。
|
||||
# ⚠️ 第一版把十颗全摆在 U32 北边 y=79 那一排(那一片唯一的整块空地),
|
||||
# `pcb2_route_sig` **10 条只布通 3 条** —— 南边(49/50/51)、西边(15/17)、东南(47/48)
|
||||
# 那七个脚要绕过整颗 QFN 和一圈去耦,绕不出去。改成**每颗贴着自己的引脚**。
|
||||
# 坐标是 `pcb2_strap_place.py` 按布线器的障碍表搜出来的(以引脚为心一圈圈往外找,
|
||||
# 判据:两个焊盘离异网铜 >= 0.20 且不落进任何已有元件的本体投影)。改摆位请重跑它。
|
||||
'R904': (103.458, 73.632, 0), # U32.31 PRT_SWP5,离脚 1.2 mm
|
||||
'R903': (105.632, 71.958, 90), # U32.33 PRT_SWP4,离脚 1.2 mm
|
||||
'R902': (106.635, 62.145, 0), # U32.47 PRT_SWP3,离脚 3.4 mm
|
||||
'R901': (103.021, 59.414, 0), # U32.49 PRT_SWP2,离脚 4.2 mm
|
||||
'R900': (102.750, 58.550, 0), # U32.51 PRT_SWP1,离脚 5.0 mm
|
||||
# 2026-09-07:C737 由 1206 陶瓷换成 KEMET T491A226K010AT 固态钽(AMS1117 手册 §Stability
|
||||
# 要求的 22uF 固态钽)。钽是极性件且 1 脚 = 正极,而板上 +3V3_HUB 的铜在东、GND 在西,
|
||||
# 所以必须 rot 180;再东移 0.17 mm,让 1 脚(+3V3_HUB)西沿离那颗 GND 过孔 0.265 mm。
|
||||
# 改这两个数之前先读 §26.25:0.17 是算出来的净距,不是随手摆的。
|
||||
'C737': (93.17, 54.0, 180), # +3V3 输出,CASE-A_3216 固态钽
|
||||
# LM75BD 测温 + 100nF(SCL/SDA 在 J31.21/23 = x 63.3/65.8,北排;走线从排母针缝里穿到南边)
|
||||
# v2 第二版:挪到 J31 **南**边(走廊北带 y 70~76 要留给差分高速路)。CH4 行 B 只剩 U54(48.3)/R764/R774,这里是空的。
|
||||
# v3 布线:J31 **南**边(USB1 那对在底层 y 62.9/63.6 从排母南边一路西行,U34 顶边 62.2)
|
||||
@@ -255,6 +356,30 @@ GLOBAL = {
|
||||
# 上游 VBUS 分压 -> UP_VBUS_DET -> J31 pin36 (81.049, 65.100),跟着高阻端走
|
||||
'R721': (80.0, 61.5, 180), # pin1 = VBUS_UP(v3:让开 U31 与 USB1 车道)
|
||||
'R722': (78.0, 61.5, 180), # pin1 = UP_VBUS_DET, pin2 = GND
|
||||
# ── 三片 74HC595(2026-09-06 从下板搬来,§26.23)。SOIC-16 框 9.5 × 7.44(rot 90 后 7.44 宽 × 9.5 高)。
|
||||
# 走廊中段 x 113~132 里能用的其实只有 **y 60.8~75.26 那条带**:UP_DP/UP_DM(底层 y 60.1/60.6)从 x 99 一路横穿到 205,
|
||||
# 下面 y 52.5/53.0 是 USB5,上面 y 75.4/77.0 是 USB3(第一版只查了端点落在框里的线,把 UP 这对漏了,
|
||||
# U21 rot 0 摆在 y 58.5 直接压在 UP 上;再上一版 rot 90 面对面缝 1.56,16 个脚的出线口互相堵死)。
|
||||
# U21 (117,66.5) / U22 (128,66.5) rot 90:x 113.28~120.72 / 124.28~131.72(缝 3.56,出线段各 1.3 还剩 1 mm),
|
||||
# y 61.75~71.25:离 UP_DM 线边 60.74 有 1.0,离 USB3_DP 线边 75.26 有 4.0;离 USB5 竖段 111.44 有 1.84、离 J32 焊盘边 133.0 有 1.28。
|
||||
# U33 单独放 **J32 东侧**(x 183~208 / y 52~86 只有 UP 那对在 y 60.1/60.6 横穿):(193.5,68.5) rot 90 → y 63.75~73.25,离 UP_DM 3.0。
|
||||
# 四根控制线从 J32 北排 3~6 行(x 138.95~146.57)进来,正好夹在两处中间。
|
||||
# 2026-09-07 第三十轮:rot 90 的两片各 8 个西排脚全从 x 113~114 / 124 那两条竖缝出线,8 个网络布不通
|
||||
# (EDL_EN2/3/5、K5_VDN 等,§26.23 落地末尾)。改成 **rot 0 / 180:引脚排朝南北**,16 根脚沿 9 mm 宽的边出线:
|
||||
# 北带 y 70.23~75.26(5 mm,C604/R609/C605 在 y 73)、南带 y 60.74~62.77(2 mm,够打一排换层孔到顶层)。
|
||||
# 底层 rot 0:脚 1~8(K/EDL 输出)在**北**排、9~16(控制/+3V3)在南排;rot 180 反过来。
|
||||
# U21 rot 0:K1 去 site1(西北)、EDL_EN2/3 去 site2/3(北),输出朝北顺路;控制脚南排沿 y≈63 东行去 J32。
|
||||
# U22 rot 180:K4/K5 去 site4/5(南),输出朝南,从南带换层到顶层跨过 UP 差分;控制脚北排。
|
||||
# U21 (116.5,66.5):焊盘 x 111.56~121.44,离 USB5 竖段线边 111.4 有 0.5(≥0.2);
|
||||
# U22 (127.5,66.5):焊盘 x 122.56~132.44,离 J32.1 盘边 ~133.1 有 0.6;两片焊盘之间 1.1。
|
||||
'U21': (116.5, 66.5, 0),
|
||||
'U22': (127.5, 66.5, 180),
|
||||
'U33': (193.5, 68.5, 90),
|
||||
# 去耦 / OE# 上拉都放两片北边那条带(y 72.73~73.27,离芯片上沿 71.25 有 1.5、离 USB3_DP 有 2.0)
|
||||
'C604': (117.0, 73.0, 0),
|
||||
'C605': (128.0, 73.0, 0),
|
||||
'R609': (122.5, 73.0, 0),
|
||||
'C739': (199.5, 68.5, 90),
|
||||
}
|
||||
HDR = {'J31': (62.0, 67.5, 0), 'J32': (158.0, 67.5, 0)}
|
||||
HUB_CENTER = (100.0, 68.0) # v1 是 (110, 67):西移 10 让开 CH2 行 A / CH5 行 B,北移 1 让 C741 离开 CH4 电池槽
|
||||
@@ -416,9 +541,20 @@ def check(pos):
|
||||
errs.append(u'越框: %s @ (%.1f, %.1f)' % (d, pos[d][0], pos[d][1]))
|
||||
|
||||
# 同层重叠
|
||||
# 侧键触点盘(J41~J60)是 Ø1.5 的圆盘、盘心距最小 1.78 ⇒ 净距 0.28。
|
||||
# 包围盒判会把菱形里相邻的两个盘报成重叠(dx 1.30 < 1.50),所以这一组按**圆**判:
|
||||
# 盘心距 >= POGO_PAD_D + 0.20(DRC 净距)。
|
||||
pogo = set()
|
||||
for n in SITES:
|
||||
pogo |= set(desig(n)['pogo'])
|
||||
for i in range(len(items)):
|
||||
for j in range(i + 1, len(items)):
|
||||
a, b_ = items[i], items[j]
|
||||
if a in pogo and b_ in pogo:
|
||||
dd = math.hypot(pos[a][0] - pos[b_][0], pos[a][1] - pos[b_][1])
|
||||
if dd < POGO_PAD_D + 0.20:
|
||||
errs.append(u'触点盘太近: %s x %s 盘心距 %.2f(要 >= %.2f)' % (a, b_, dd, POGO_PAD_D + 0.20))
|
||||
continue
|
||||
shared = set(layers(a, pos[a][3])) & set(layers(b_, pos[b_][3]))
|
||||
for L in sorted(shared):
|
||||
if _overlap(abs_box(a, L), abs_box(b_, L)):
|
||||
@@ -474,6 +610,8 @@ def check(pos):
|
||||
b = abs_box(d, 2)
|
||||
for n in SITES:
|
||||
for hn, (u_, v_) in HOLES.items():
|
||||
if hn in SKIP_HOLES:
|
||||
continue
|
||||
hx, hy, _ = to_board(n, u_, v_)
|
||||
dd = _dist_box_pt(b, hx, hy)
|
||||
if dd < HOLE_KEEP:
|
||||
@@ -641,11 +779,13 @@ return k;
|
||||
|
||||
|
||||
def mech_items():
|
||||
u"""35 个手机定位孔(NPTH)+ 5 个手机位的丝印外框与标签。"""
|
||||
u"""手机定位孔(NPTH,7 孔模型减去 SKIP_HOLES ⇒ 30 个)+ 5 个手机位的丝印外框与标签。"""
|
||||
holes, lines, texts = [], [], []
|
||||
for n in SITES:
|
||||
x0, y0, rho = SITES[n]
|
||||
for hn, (u, v) in HOLES.items():
|
||||
if hn in SKIP_HOLES: # 2026-09-07:H5 不打(push_mech 会先删掉板上全部 P*H* 再建)
|
||||
continue
|
||||
x, y, _ = to_board(n, u, v)
|
||||
holes.append(['P%d%s' % (n, hn), round(x * MIL, 2), round(y * MIL, 2)])
|
||||
c = [(x0, y0), (x0 + PW, y0), (x0 + PW, y0 + PH), (x0, y0 + PH)]
|
||||
@@ -791,6 +931,7 @@ return out;
|
||||
HEIGHT = {
|
||||
'J31': 8.5, 'J32': 8.5, # 直插排母本体(C5307344)
|
||||
'J23': 3.2, 'U31': 1.8, 'U32': 0.9, 'Y1': 1.2, 'U34': 1.6,
|
||||
'C737': 1.8, # KEMET A 壳 EIA-3216-18,最大高 1.8(不是 1206 的 1.7)
|
||||
}
|
||||
|
||||
|
||||
@@ -850,8 +991,15 @@ if __name__ == '__main__':
|
||||
print(' ', e)
|
||||
if len(errs) > 40:
|
||||
print(u' ...还有 %d 条' % (len(errs) - 40))
|
||||
sys.exit(1)
|
||||
print(u'本地检查通过:无重叠、无越框、没人压槽、顶层只有顶针、底层件避开了螺钉头')
|
||||
# --force:只下发 --mech / --outline(孔、槽、丝印)时,元件级的报错不该挡路 ——
|
||||
# 那些是「元件 vs 孔」「元件 vs 元件」,和要写的机械图元本身无关。
|
||||
# ⚠️ 但 --push(重摆元件)绝不允许 force,摆错了会连着布线一起烂。
|
||||
if '--force' in sys.argv and '--push' not in sys.argv:
|
||||
print(u'--force:以上按警告处理,继续下发机械图元(元件没动)')
|
||||
else:
|
||||
sys.exit(1)
|
||||
else:
|
||||
print(u'本地检查通过:无重叠、无越框、没人压槽、顶层只有顶针、底层件避开了螺钉头')
|
||||
if '--layers' in sys.argv:
|
||||
push_layers()
|
||||
if '--clean-copper' in sys.argv:
|
||||
|
||||
在新工单中引用
屏蔽一个用户