R2:底板 / 刀片布局布线脚本、快照、截图与规划文档更新(含外壳、打印件、布线归档)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
zhou yang
2026-10-04 19:24:45 +08:00
共同撰写人 Claude Opus 5.5
父节点 cd01640c40
当前提交 cf7cc9cf90
共修改 759 个文件,包含 76962 行新增和 5299 行删除
+25 -2
查看文件
@@ -19,7 +19,26 @@ u"""**从板上读回铜**,按真实几何判每个网通没通(M7)。
## 平面网另算
`GND` / `VO_P` / `+12V` 靠铜面 + 缝合过孔成网,铜面不在这个检查里(读不回填充多边形),
所以它们只报「有几只脚一根铜都不挨」——那种才是真漏。
所以它们只报「有几只脚一根铜都不挨」。
⛔ **但「一根铜都不挨」在刀片上几乎全是假阳性**(2026-09-12 晚踩了一次,白查半天):
摘掉「被计划中的铜面盖住」那些脚的是 `covered()`,而它第一行就是 `if '--base' not in sys.argv:
return False` ⇒ **只对底板生效**。刀片下一只脚都不摘,于是凡是「只靠铺铜盖住、不单独拉线」的
去耦件地脚(`C*.2` / `R*.1` / `U*.2` 那一票)全被报成孤立 —— 刀片实测固定 **49 只**。
⇒ 判据:**跟重铺前的板面快照逐只比对**。2026-09-12 晚 `NOTCH_D` 加深后重铺,前后两边
`49 == 49` 且逐只同名、L1/2/15/16 的铜都是 899 段(铺铜只动填充多边形、不动导线)
⇒ 与重铺无关。别看见这一长串就以为把地铺断了。
⛔ **底板(`--base`)下 `covered()` 也有两种假阳性**,2026-09-12 晚查实,5 只脚全是假的:
① **通孔脚被内层整层盖住,但 `covered()` 只看外层**:第 119 行是 `if lay in (1, 2)`,
把 `GND-L2-4`/`GND-L3-4`(L15/L16 整层 GND,x 6.20~90.30 / y 0.50~97.50)滤掉了。
而 `C3.2` / `J26.1` / `J1.2` / `J1.3` 是 layer 12 的**通孔**焊盘,穿透所有层,
正是被那两块内层盖住的 ⇒ 报「一根铜都不挨」,其实盖得好好的。
② **贴片脚跨在两块同网瓦片的接缝上**:`U29.3` 焊盘框 x 1.71~2.36,而 `GND-L4-1` 到 1.80、
`GND-L4-4` 从 1.80 起 —— 铜面实际连续(瓦片只是切分),但 `covered()` 要求**单块完全包住**,
跨缝就不认。
⚠ **没有放宽判据**:放宽(改成"多块并集包住"或"含内层")会把真漏一起摘掉,代价更大。
遇到这类报告,按上面两条**手工排除**,或跟重铺前快照比对。
"""
import io
import json
@@ -41,7 +60,11 @@ else:
PADS_JSON = os.path.join(HERE, '_blade_pads.json')
MIL = B.MIL
PLANE = ('GND', 'VO_P', '+12V', '+12V_F', '+3V3')
# ⚠ 底板 2026-09-10 深夜起 L2 改整层 GND,+3V3 回到布线网 ⇒ 底板上 +3V3 按普通网查连通(刀片不变)
# ⛔ 2026-09-11 更正:原来是 `+ (() if '--base' else ('+3V3',))` —— 「+3V3 铜面网」是**底板** M9b 的槽墙,
# 刀片上从来没有 +3V3 铜面(pcb_pour 只铺 GND / VO / V12),却一直按铜面网只查「脚挨不挨铜」,
# 刀片 +3V3 的真实连通性等于没验过。两块板现在都按普通布线网查。
PLANE = ('GND', 'VO_P', '+12V', '+12V_F')
# ⚠ `+3V3` 从 M9b 起也是**铜面网**(五块槽墙,方案 §30):15 只槽脚一根线都不接,
# 靠铺铜盖住。⇒ 它和 12V 一样,只能判「脚是不是至少挨着一根铜」,
# 而**被计划中的铜面盖住的脚要先摘掉**(下面 `covered()`),否则每次都刷一堆假漏。