+820
-29
@@ -1,5 +1,44 @@
|
|||||||
# 进度与交接
|
# 进度与交接
|
||||||
|
|
||||||
|
> ▶ **下一步:给板 B 第 1 路的小米8 刷 PhoneRail LineageOS —— 新对话先读 `phone/FLASH-HANDOFF.md`**(状态、包路径 + sha256、步骤、验收清单)。
|
||||||
|
|
||||||
|
## ⭐ 2026-09-29:固件 0.1.14-c5 Hub 按需启停(已 OTA 上板 B,实测省 1.03 W)
|
||||||
|
|
||||||
|
- 没人用 USB 时 ESP32 用 GPIO8 把 USB2517I 按住复位,省下「连着电脑 Hub 空转」的约 1 W;任一路 VBUS / 刷机模式 / EDL /
|
||||||
|
`hub` 保持窗口 / MQTT 断满 60 s 就放开,最后一次需要后再留 10 分钟。推翻 R-11「运行期不许动 `HUB_RST`」,
|
||||||
|
理由与退路见 `刀片式方案规划-R2.md` §8.2a,细节见 `firmware/HANDOFF.md`。
|
||||||
|
- 宿主机 27 组测试全绿;板 B 实测 Hub 开 / 关底板损耗 1.77 / ≈0.72 W ⇒ **空转 1.03 W**。rack 单板页加了「Hub」一行(按需 / 常开、唤醒 30 分、马上休眠),已部署。
|
||||||
|
- ⚠️ 板 B 没人用 USB 10 分钟后 COM 口会消失,USB 烧录前先在 rack 点「唤醒 30 分」。电脑侧的消失 / 重现还没亲眼验证。
|
||||||
|
|
||||||
|
## ⭐ 2026-09-28 中午:固件 0.1.5-c5 刷机模式(已 OTA 上板)+ LineageOS 包编好
|
||||||
|
|
||||||
|
- **刷机模式**:某一路限时(默认 60 / 最长 120 分钟、最多同时 2 路)允许手机充电、不断 USB —— fastboot 阶段充电器把节点顶到 ~4.4 V
|
||||||
|
不再触发断 VBUS;过压按绝对 4.45 V 判,反灌 / 欠压不变;依据是 eFuse 反向阻断。需求 SR-10 / SW-8、设计决策 12 写明为有意例外。
|
||||||
|
rack 单板页「更多 → 刷机模式」(0.1.6:默认 1 小时 + 加钟)。**台架实测通过**:fastboot 下节点 3.86~4.39 V 锯齿、VBUS 不断、
|
||||||
|
电流 −1~+1.5 mA、12V 不动;FLT 在 eFuse 反向阻断期间为 true(正常指示);重启过渡时出现过 −59 mA 反灌 ⇒ 断 VBUS(保护生效)。
|
||||||
|
详见 `firmware/HANDOFF.md`。
|
||||||
|
- **LineageOS 22.2 包**:`/root/lineage/out/target/product/dipper/lineage-22.2-20260928-UNOFFICIAL-dipper.zip`(1.23 GB)+ `recovery.img`。
|
||||||
|
产物已核:ReSukiSU(KSU + manual hook)、`PHONERAIL_INPUT_SUSPEND`、TMPFS_XATTR、自定义 health HAL、7 个应用已删、adb_keys、
|
||||||
|
`persist.sys.usb.config=mtp,adb` / `persist.adb.tcp.port=5555`、userdata `barrier=1`、首次开机脚本(带自动重启)、
|
||||||
|
RRO 里 `def_device_provisioned` / `def_user_setup_complete` = true。第一轮编译 OTA 打包失败的根因(root 编译 + zip 跟随 `ROOT/d`
|
||||||
|
软链进宿主 debugfs)已在 `build/make` 修(`zip -y`)。**还没刷机**;刷机流程建议见 `phone/ROM-LineageOS.md`。
|
||||||
|
|
||||||
|
## ⭐ 2026-09-28 上午:手机「经常开机失败」查清 + 固件 0.1.2-c5 开机重按(已 OTA 上板)
|
||||||
|
|
||||||
|
- **原因**:板 B 第 1 路 7 次 power_cycle 只开 1 次,失败时电流 1~2 mA、屏不亮;按键命令全 ok;**镊子短接 J603 能开**
|
||||||
|
⇒ 电源键**弹片压刀片铜盘接触不良**(决策 14 的中框式焊盘)。凌晨 02:09~02:20 那串板子 POWERON 复位是换槽时整板断电,不是故障。
|
||||||
|
- **固件兜底**:硬重启按完 5 s 松键后 3~5 s 看电流,< 100 mA 就重按,最多 3 次;仍不开记新事件 **19「开机重按」**(rack 标红),电继续开着。
|
||||||
|
详见 `firmware/HANDOFF.md`。实机 power_cycle → 第一下就开、res ok;重按路径靠宿主机测试(37 例)。
|
||||||
|
- **还欠**:① 弹片/铜盘的机械处理(压力、间隙 1.0 mm 是否够、铜盘加厚或换顶针);② 06:31~07:49 板子失联 78 分钟没查(分不清 WiFi 断还是卡死);
|
||||||
|
③ 带屏开机时第 1 路又出现过 PUSHED_UP(VBUS 开着充电顶到 4.39 V)—— 等 LineageOS 版 ROM 从内核关充电。
|
||||||
|
|
||||||
|
## ⭐ 2026-09-28:小米8 刷 LineageOS 22.2 —— 源码已同步到服务器
|
||||||
|
|
||||||
|
- 调研结论与方案见 `phone/ROM-LineageOS.md`;源码 `/root/lineage`(116 GB,TUNA 镜像、限速 160 Mbit 的 `shape.sh`,同步脚本 `sync.sh`)。
|
||||||
|
- 充电改动已写好未应用:`phone/rom/vendor_phonerail/`(自定义 health HAL 固定电量 80%、init 写 input_suspend、sepolicy)+ `phone/rom/apply_phonerail.py`(sdm845-common 去 qti health、dipper 引入、内核 smb2 probe 挂起输入)。
|
||||||
|
- ⚠️ 服务器装 `python-is-python3` 时 apt 顺手卸了 python-is-python2 等几个老 python2 包(无服务依赖,服务都用 venv)。
|
||||||
|
- **下一步**:推 vendor_phonerail → 跑 apply 脚本 → 对照 qti 填 vintf 版本号 → `brunch dipper`。
|
||||||
|
|
||||||
## ⭐ 2026-09-27 深夜:rack 界面改版 + 底板温度曲线 + 推固件页 + 固件目录自动清理
|
## ⭐ 2026-09-27 深夜:rack 界面改版 + 底板温度曲线 + 推固件页 + 固件目录自动清理
|
||||||
|
|
||||||
- **推固件页**(顶栏「固件」):上传 .bin → 选板推送 OTA,实时看下载进度 / 待验证 / 回滚;上传时核镜像头,标出「重启不断电」支不支持。
|
- **推固件页**(顶栏「固件」):上传 .bin → 选板推送 OTA,实时看下载进度 / 待验证 / 回滚;上传时核镜像头,标出「重启不断电」支不支持。
|
||||||
@@ -31,8 +70,8 @@
|
|||||||
## ⭐ 2026-09-27 夜:固件 A16(风扇闭环 + NTC/TACH 真实采样)完成 ⇒ A1~A16 齐了
|
## ⭐ 2026-09-27 夜:固件 A16(风扇闭环 + NTC/TACH 真实采样)完成 ⇒ A1~A16 齐了
|
||||||
|
|
||||||
- 新增 `firmware/main/ntc.{h,c}`(R-T 表换算,宿主机 4 例)与 `thermal_esp.{h,c}`(ADC1 + PCNT);任务体接上,status 带温度 / 风扇。全工程 429 例全绿。
|
- 新增 `firmware/main/ntc.{h,c}`(R-T 表换算,宿主机 4 例)与 `thermal_esp.{h,c}`(ADC1 + PCNT);任务体接上,status 带温度 / 风扇。全工程 429 例全绿。
|
||||||
- 板 B 已烧 **0.1.0-a16**:两路 NTC 38.2 / 34.0 °C(合理);两路风扇 `rpm 0` 报停转 —— 拉满占空比输入电流不涨,**多半是风扇没插**,待确认。
|
- 板 B 已烧 **0.1.0-a16**:两路 NTC 38.2 / 34.0 °C(合理);两路风扇 `rpm 0` 报停转 —— **风扇还没下单购买**,属预期。
|
||||||
- ~~分区只剩 9%~~ ✅ C2 已重排(双槽各 3 MB)。
|
- ~~下个会话:C2 OTA~~ ✅ 见上。
|
||||||
|
|
||||||
## ⭐ 2026-09-27 晚:固件 A15(启动顺序 + 降级矩阵)完成,已上板
|
## ⭐ 2026-09-27 晚:固件 A15(启动顺序 + 降级矩阵)完成,已上板
|
||||||
|
|
||||||
@@ -49,6 +88,26 @@
|
|||||||
- **broker**:复用 evse 的 mosquitto 8883 TLS;顺手修了 evse 8883 缺 cafile ⇒ 公网明文的漏洞(备份 `.bak-20260927-*`)。
|
- **broker**:复用 evse 的 mosquitto 8883 TLS;顺手修了 evse 8883 缺 cafile ⇒ 公网明文的漏洞(备份 `.bak-20260927-*`)。
|
||||||
- 还没做:固件 A15 / A16;自动恢复阈值待刀片 + 手机上架后实测;固件分区只剩 12%(C2 前重排)。
|
- 还没做:固件 A15 / A16;自动恢复阈值待刀片 + 手机上架后实测;固件分区只剩 12%(C2 前重排)。
|
||||||
|
|
||||||
|
## ⭐ 2026-09-27 交接:底板上板调通 → 下个会话开始「手机机架管理」前后端
|
||||||
|
|
||||||
|
### 上板现状(底板 ×2,刀片还没插)
|
||||||
|
- 供电链路通:PD 20V → U37 → VIN_SW 12V → +12V → 3.3V / 5V。CH224A 实测 20V/3A 档,输入 INA226 读到 12.03 V。
|
||||||
|
- USB:Hub(USB2517)+ ESP32 都识别。I²C 主干 0x22/0x23/0x43/0x4A/0x4B/0x70 全应答(另有 0x47,推测 DAC 广播地址)。
|
||||||
|
- 固件(commit `29ea7a3`)已烧在板 B(MAC b8:1f:3f:c9:c8:bc),空机巡检 `skipped=0 i2c_err=0`。
|
||||||
|
- 焊接踩的坑(第二块板若没改要照改):
|
||||||
|
- **R7 ↔ 120k 焊错位置** ⇒ CH224A 只要到 12V,U37 EN 门限 13.9V 不启动 ⇒ 全板无电。
|
||||||
|
- **R708(USB2517 RBIAS,12k)焊成了电容** ⇒ Hub 能挂上拉但不回应,电脑「设备描述符请求失败」、Full-Speed、地址 0。
|
||||||
|
- 板 A(MAC b8:1f:3f:c8:5d:2c)还是 09-27 前的旧固件:首次重烧要走 J33(1 GND / 4 EN / 5 IO0,IO0 接地再碰 EN)。
|
||||||
|
- ⚠ 两块板的**丝印目前是「器件值」**(焊接用)。再出 Gerber / 下单前先 `python .claude/r2/silk_value.py --restore`。
|
||||||
|
- git:本地三个新 commit(`d013ab7` R2 迁移补提交 / `29ea7a3` 上板修复 / `aa9f7a8` 丝印器件值),**仓库没有配置 remote,没推送**。
|
||||||
|
|
||||||
|
### 下个会话:手机机架管理前后端(先读这几处)
|
||||||
|
- ⚠ **范围变更**:`需求文档.md` N7 写的是「上位机管理软件 / Web 界面本期不做,由农场既有系统对接」。开发前先和用户确认并改 N7。
|
||||||
|
- 板侧接口已定稿但**固件还没实现**:`需求文档.md` §10.8(方案 C:WiFi 常态 MQTT/HTTP + USB CDC 兜底、单行 JSON 分帧、全局序号判重、失联不动作)。
|
||||||
|
固件对应 A12(命令处理器)/ A13(CDC 分帧)/ C1(WiFi 配网)均未做(`固件开发计划.md` §进度:「还欠 A12~A16」)。
|
||||||
|
⇒ 前后端要么先定协议 + 用模拟板开发,要么先把 A12/A13 做出来。
|
||||||
|
- 部署目标若是 home 服务器(10.5.5.13 / home.example),按全局 CLAUDE.md 走统一门户(加应用用 `gen-vhosts.py`,别新开公网端口)。
|
||||||
|
|
||||||
## 固定执行约束(2026-09-10 用户明确要求)
|
## 固定执行约束(2026-09-10 用户明确要求)
|
||||||
|
|
||||||
- **以后所有 PCB 布线运算都用 `10.5.5.13` 服务器跑。** 本机仅做快照、结果校验、
|
- **以后所有 PCB 布线运算都用 `10.5.5.13` 服务器跑。** 本机仅做快照、结果校验、
|
||||||
@@ -56,38 +115,733 @@
|
|||||||
- 底板入口为 `.claude/r2/remote_route.ps1`;`route_base.py` 已加本机硬阻断,避免新会话误跑。
|
- 底板入口为 `.claude/r2/remote_route.ps1`;`route_base.py` 已加本机硬阻断,避免新会话误跑。
|
||||||
- **刀片**入口为 `bash .claude/r2/remote_blade.sh ['变体' ...]`(2026-09-11 新加);`router.py --replan/--pf` 同样本机硬阻断。
|
- **刀片**入口为 `bash .claude/r2/remote_blade.sh ['变体' ...]`(2026-09-11 新加);`router.py --replan/--pf` 同样本机硬阻断。
|
||||||
|
|
||||||
## 🔵 新会话从这里开始(2026-09-12 交接:SolidWorks 三维装配)
|
## ✅ 2026-09-15 晚 BLADE-PCB_1:4 颗上拉电阻挪到 U4 东南 + 总线重布(用户选方案 1)
|
||||||
|
|
||||||
|
DRC 仍只剩 J1 缺口 4 条 0.2(已知项),连接性 0;已存盘、重载后复核。走线 790 段(客户端读回)/ 过孔 289(缓存 247 + 缝合 42)/ 铺铜 28 块全填。
|
||||||
|
**权威缓存 = `.claude/r2/_blade_routes.blade1_0915_pullup.json`**(= 当前 `_blade_routes.json`)+ `_blade_stitch_pts.json`(42 个)。
|
||||||
|
|
||||||
|
| 网 | 原来 | 现在 |
|
||||||
|
|---|---|---|
|
||||||
|
| INA_ALERT | 87 mm | **29** |
|
||||||
|
| EFUSE_PG | 80 | **51** |
|
||||||
|
| SDA | 107 | **73** |
|
||||||
|
| SCL | 71 | 80 |
|
||||||
|
| EFUSE_FLT | 63 | 65 |
|
||||||
|
|
||||||
|
- **摆位改动**:R15(PG) / R13(FLT) / R41(SCL) / R40(SDA) 从 U2 西侧、(41,18) 挪到 **U4 东南一排 y 29.3,x 66.6 / 67.5 / 68.4 / 69.3**
|
||||||
|
(0402,信号脚朝北、+3V3 脚朝南,+3V3 脚各一个孔 (x, 28.1) 下 L3 +3V3 岛)。电阻原位置留下的 +3V3 残线 / 孔已删。**位号丝印没重排**。
|
||||||
|
- 走法:电阻 → U4 那几段手定(U4 体下 L4 竖线 INA x65.75 / PG x66.6 / FLT x67.1,SCL / SDA 走 L1),
|
||||||
|
服务器补 INA / PG / FLT 的长段(`MODE=opt`,`_opt_virt.json` 给接入点),SCL / SDA 的 U3 段和金手指段手定(金手指两行 y 12.8 / 13.2 并排东去,D± 处各跳一次 L4)。
|
||||||
|
- `router.py`:`FIXED_PATHS` 去掉 U2.20→R13.2,改成 `ESC_PATHS`(U2.20 出口折线到 (47.0, 25.3))。
|
||||||
|
- 新脚本:`opt_blade1.py`(按顺序逐网 route_groups,ESC 孔当虚拟焊盘,0.15 线宽)、`opt_legs.py`(手定拓扑分段 A*)、`remote_blade.sh` 的 `MODE=opt / legs`。
|
||||||
|
- 删掉 2 个和新 I²C 行相撞的 GND 缝合孔 (52.5,13.0)、(57.5,13.0);U4 东列 GND 脚 17~21 被新线切断了底层铺铜 ⇒ 焊盘外端短接 + (69.75,35.2) 地孔,U4.9 接 U4.10。
|
||||||
|
- **位号丝印已重排**(同日):`.claude/r2/silk_blade1.py [--push]`,82 个全部重排、读回 82/82 对上;体检压焊盘 / 压过孔 / 越框入禁区 / 互相重叠 **全 0**,
|
||||||
|
且不压任何别的元件本体(老脚本 `silk_blade.py` 不判这条,会把 C11 放到 C6 本体上)。J1 位号手工定 (43.0, 10.5)(原位落进台阶以下、压地母线孔)。
|
||||||
|
离本体最远的三个:C11 1.87 / R14 2.11 / R41 1.91 mm。对照图 `_blade1_0915_silk_plot.png`(离线画的,待人眼确认)。
|
||||||
|
- ⚠ 0.25 网格的布线器在 0.5 mm 级缝里挤不过去(孔 / 焊盘膨胀框互相压成 255),这一片的关键段只能手算几何 + probe 核净距。
|
||||||
|
|
||||||
|
## ✅ 2026-09-15 BLADE-PCB_1 **按用户新摆位重新布完**:DRC 只剩 J1 缺口 4 条 0.2(已知项),连接性 0
|
||||||
|
|
||||||
|
用户把 82 件全部重摆、铜清空(H2/H3 定位孔也挪过)。板上现状(已存盘、重载客户端后复核):
|
||||||
|
走线 636 段 / 过孔 299(缓存 255 + 缝合 44)/ 铺铜 28 块全填 / 4 层。**权威缓存 = `.claude/r2/_blade_routes.blade1_0915_final.json`**
|
||||||
|
(= 当前 `_blade_routes.json`)+ `_blade_stitch_pts.json`。老摆位的缓存 / 脚本备份在 `.claude/r2/archive_blade1_0914_layout/`。
|
||||||
|
复现:服务器 `--pf --first $1N137,$1N165,$1N173,$1N147,$1N177,BUCK_PG` 出 `_blade_routes.r15.json` →
|
||||||
|
`hand_blade1b.py _blade_routes.r15.json <out> R4b R40b SDA23 EN14 FING GNDTIE GNDJ4 U1EP`。
|
||||||
|
|
||||||
|
| 改了什么 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| 定位孔 | `pcb_blade.phone_holes()` 优先读板面快照 `_blade_holes_live.json`(H2/H3 被用户挪过,和 mi8_mech 推算不一致) |
|
||||||
|
| L3 五个岛(`pcb_pour.py`) | `VO_P` x35.5~59/y36.3~53.8;`+12V` 竖条 x18.75~23.9/y9~27.2;`+5V` 舌头横带 + x24.5~26.4 竖腿 + 西臂到 U5;**新增 `VO`**(x27~55/y16.1~33.5,L1.2→U2 的 4 A 不再走 L4);**新增 `+3V3`**(东块 x55.6~70 + y34.1~35.8 细带西伸到 x27.6) |
|
||||||
|
| 路由器(`router.py`) | `PLANE_VIA_NETS` 加 `+5V/VO/+3V3`;`HYBRID_PLANE`(+3V3:岛内脚打孔、岛外脚走线接岛上孔);D± 竖放 U7 的新构造 `dp_blade_col`,**L 形**(金手指直上到 y34.5 再西去;斜线版把 U1 一簇和 R4/VDAC 隔开,服务器绕出 100 mm);`ESC_VIAS` 给 U4 东西两列 + U3 西列 3/4/5 脚预打逃逸孔(最先落,Kelvin 也绕着它);`FIXED_PATHS`(U2.19→R12.2、U2.20→R13.2);`PIN_TIES` 支持同一行;`HAND_TIES`(C65.2→U3.8);`--u4fan` 开关 |
|
||||||
|
| 手工收尾 `hand_blade1b.py` | 按补丁名挑着用,每段都按精确几何核过净距 ≥0.15 |
|
||||||
|
| GND | `MODE=stitch` 44 孔;`MODE=gndtie` 20 只脚;J4 剩 6 只地脚两排之间错开打孔;U2/U1 散热盘经引脚短接 |
|
||||||
|
| `remote_blade.sh` | ssh/scp 加 ConnectTimeout/ServerAlive(走公网时轮询会无声挂死,远端早跑完) |
|
||||||
|
|
||||||
|
⚠ 本轮踩到的:
|
||||||
|
- **10.5.5.13 内网路由不通**(ping/22 端口全超时),同一台机器走 `SERVER=home.example` 可用。轮询仍偶发挂死 ⇒ 远端 `/tmp/dcdc-blade.*` 里有 `done` 就手动 scp 回 `v*/.claude/r2/_blade_routes.json`。
|
||||||
|
- 路由器自己的 `check_connected` 对岛网 / 细碎几何会漏报也会误报,**以 `hand_blade1.pieces()` 按铜并查集为准**(`+3V3` 西组一度完全没接到岛上,它没报)。
|
||||||
|
- 重载客户端铺铜 28 → 14,照旧 `pcb_pour.py --push` 重建后再 DRC。
|
||||||
|
- 金手指地母线「整段被对排信号占着就往外伸 1 mm」在 B32 伸出了舌头(孔在板外)⇒ `FING` 补丁改到台阶以上打孔。
|
||||||
|
|
||||||
|
⚠ 质量遗留(电气都通、DRC 干净,但不好看):`INA_ALERT` 87 mm(直线 23)、`EFUSE_PG` 80 mm、`SDA` 107 mm / 13 孔 —— 都是慢速信号;
|
||||||
|
Buck 的 FB/COMP/BOOT/SW 都是短线。位号丝印没重排(`silk_blade.py` 没对新摆位跑)。截图:`_blade1_0915_routed_plot.png`(离线画的 L4/L1,客户端截图这次取回的是空图)。
|
||||||
|
|
||||||
|
## 🔵 2026-09-14 刀片:出板版已还原 + `BLADE-PCB_1` 板框收到 71×62
|
||||||
|
|
||||||
|
**现在工程里有两块刀片 PCB,别搞混:**
|
||||||
|
|
||||||
|
| 文档 | uuid | 状态 |
|
||||||
|
|---|---|---|
|
||||||
|
| `BLADE-PCB`(挂在 Board `BLADE` 上)| `3b9c4e39c8d164db` | ✅ **已还原成今天 08:42 出 Gerber 的那一版**(`新建文件夹/制版文件/Gerber_BLADE-PCB_2026-09-14.zip`)。89.5×67,82 件 / 343 过孔 / 31 块铺铜全填。DRC 只剩 J1 `A11/A12/B11/B12` 板框到焊盘 0.2 共 4 条(已知项),连接性 0 |
|
||||||
|
| `BLADE-PCB_1`(用户另存的新布局,没挂 Board)| `c575a2e854057614` | 只摆了件、**还没布线**。板框按现摆位收到 **71.0 × 62.0**(原 89.5×67,面积 −26.6%)|
|
||||||
|
|
||||||
|
**还原怎么做的**(下次可照抄):还原前 `BLADE-PCB` 已被清空(0 线 0 孔 0 铺铜、件被重摆)。
|
||||||
|
客户端自动备份 `Documents/LCEDA-Pro/online-projects-backup/PhoneRail-R2/PhoneRail-R2_2026-09-14-08-38-49.zip`
|
||||||
|
里的 `.epru` 中 `BLADE-PCB` 块过孔数 343 = Gerber 钻孔数 343 ⇒ 就是出板版。把那一块抠出来,经
|
||||||
|
`sys_FileManager.setDocumentSource()` 写回,再 `pcb_pour.py --rebuild` 重填铺铜、存盘。
|
||||||
|
还原前的板面源码存档:`.claude/r2/_blade_live_src_0914_before_restore.txt`;`BLADE-PCB_1` 改板框前:`_blade1_live_src_0914_before_outline.txt`。
|
||||||
|
- ⛔ `setDocumentSource` 的坑:**最后一行不能带结尾的 `|`**(原样写回 true,多一个 `|` 就 false,删掉最后一条也 false)。
|
||||||
|
返回 false 时板面一点不变、没有报错信息,很容易误判成「不能新增图元」。
|
||||||
|
- 备份里有 `META` / `ELE_PLACEHOLDER` 记录,写回前去掉;实时源码里的 `LAYER_PHYS 15/16` 备份里没有,要补上。
|
||||||
|
- 写回后客户端会自动规整:删 3 段零长线、合并重复段、在过孔处拆线(10 删 11 增,铜形状不变),丢 20 个依附其上的泪滴。
|
||||||
|
|
||||||
|
**`BLADE-PCB_1` 板框**:`.claude/r2/outline_blade1.py [--push]`。只收东边和北边,形状仍由 `pcb_blade.outline_polygon()` 生成
|
||||||
|
(运行时覆盖 BW/BH,**`pcb_blade.py` 里的 89.5×67 没改**,它仍描述出板版)。
|
||||||
|
东 = 最东器件 C5 69.89 + 1.0 → 71.0(手机右沿 68.59 在板内);北 = max(J3 60.10 + 1.0, 槽顶 59.87 + 肋 2.0) → 62.0。
|
||||||
|
西边没动。**同日用户要求金手指居中**:`J1` 从 x 45.0 挪到 **35.5**(= 71/2),舌头 18.25~52.75、防呆缺口跟着走,
|
||||||
|
板框按新 `J1_X` 重画(脚本默认居中,`--keep-j1` 才保持原位)。只动了 J1 一个件,其他器件 / 孔 / 槽不动,舌头附近 1 mm 内无件。
|
||||||
|
⚠ 刀片相对插槽整体东移了 9.5 mm(插槽和底板本身不用改),但机箱 / 导轨 / 3D 装配是按 89.5×67、金手指 x=45 做的,要跟着改。
|
||||||
|
截图:`.claude/r2/_blade1_centered_71x62.png`(现状)、`_blade_restored_0914.png`。
|
||||||
|
|
||||||
|
### ✅ 2026-09-14 深夜:BLADE-PCB_1 **4 层 / 70×55.5 / 布线完成**,DRC 只剩 J1 缺口 4 条 0.2(已知项),连接性 0
|
||||||
|
|
||||||
|
**这一节取代下面「卡在 2 层」那节的结论**(用户先说要 2 层,看完代价评估改选 4 层)。板上状态(已存盘,重载客户端后复核过):
|
||||||
|
82 件 / 走线 799 段(客户端合并后读回 836)/ 孔 286(缓存 250 + 缝合 36)/ 铺铜 26 块全填 / 4 层。
|
||||||
|
截图 `.claude/r2/_blade1_70x55_routed.png`。**权威缓存 = `_blade_routes.json`**(同 `_blade_routes.blade1_south_final.json`)+ `_blade_stitch_pts.json`。
|
||||||
|
|
||||||
|
| 改了什么 | 说明 |
|
||||||
|
|---|---|
|
||||||
|
| 4 层 | `pcb_Layer.setTheNumberOfCopperLayers(4)` |
|
||||||
|
| 板框 70×55.5 | `pcb_blade.BX0 = 0.5`(板框 x 0.5~70.5,J1_X 35.5 仍居中、一根线不用动)、`BH 55.5`、`TOP_NOTCH`:两条排线槽改成**顶边开口缺口**(槽底 R1),层 12 挖槽区域已删 |
|
||||||
|
| 主板南移 2.5 | `PHONE_ORG` y 11.0 → **8.5**(上限:插槽塑料体顶在刀片 y 8.0,留 0.5;主板在台阶处悬空 1.4)。J1 以外 81 件 + H1~H7 整体 dy −2.5;铜由 `shift_blade1.py` 平移(指区 y ≤ 11.76 固定),D± 由 `router.dp_blade()` 重构(`DP_DIAG_Y0` 13 → 12.5) |
|
||||||
|
| J3 | 越出板边,挪到 (33.07, 53.93) 再随主板南移;$3N44/$3N45 重接 |
|
||||||
|
| 补线 | 平移后 12 个网压进指区 / 撞新 D± → `MODE=repair`;BUCK_PG、PRSNT#、EFUSE_PG 手工几何;EFUSE_FLT 服务器补西半段 + 手接东半段 |
|
||||||
|
| GND 地脚 | 新增服务器入口 `MODE=gndvia`(`gndvia_blade1.py`,36 孔)与 `MODE=gndtie`(`gndtie_blade1.py`,脚→已有孔/新孔,禁盘中孔);C13.2/C65.1 被 EFUSE_FLT 围死 ⇒ 拆掉那段重复补线、(25.0, 20.5) 打 GND 孔;U2.1 短接散热盘 |
|
||||||
|
| 铺铜岛 | VO_P 主体 (25.0, 32.3)~(55.5, 53.8);+12V 横带顶 15.5、东腿顶 27.5;+5V 岛 y 16.1~31.4 / 西塔到 36.3 |
|
||||||
|
| 其他脚本改动 | `drc_read.py --pcb <uuid>`;`router.py` 网格/板边改用 BX0/BX1、`--w5v`、`PIN_TIES`、Kelvin 互相可见、J4 段 D± 平行斜线;`pcb_pour.py` 用 BX0/BX1 |
|
||||||
|
|
||||||
|
⛔ 本轮踩到的坑(都已记进脚本注释或记忆):
|
||||||
|
- **重载客户端会丢铺铜边框**(26 → 12,已存盘也丢)⇒ 重载后一律 `pcb_pour.py --push` 重建再跑 DRC。
|
||||||
|
- `MODE=repair` 会把**已部分连通的网整条重布**,留下平行重复线和同网叠孔(本轮三次)⇒ 只取真正新增的那一段,其余丢弃;合并后必须查同网孔距。
|
||||||
|
- 服务器补线 / gndvia **看不到缝合孔**,补完要按缝合孔再核一遍净距(本轮删了 5+1+6+10 个缝合孔)。
|
||||||
|
- 平移后 GND 缝合孔落在新板边 / 台阶边上,推板前要按新板框查一遍。
|
||||||
|
|
||||||
|
⚠ 未做:位号丝印没重排(件挪过、板缩了,`silk_blade.py` 还没对 _1 跑过);机箱 / 导轨 / 3D 装配仍按 89.5×67 旧刀片;工程树里 `BLADE-PCB_1` 板子(createBoard 建的,无原理图)还在。
|
||||||
|
|
||||||
|
### ⛔ 2026-09-14 晚:BLADE-PCB_1 布线 —— 走线已下发,**卡在「它是 2 层板」**(已被上一节取代)
|
||||||
|
|
||||||
|
**脚本已整体改指 BLADE-PCB_1**(`pcb_blade.PCB/BW/BH/J1_X/TONGUE`),R 版(BLADE-PCB)的脚本与缓存全在 `.claude/r2/archive_blade_R_0914/`。
|
||||||
|
|
||||||
|
板上现状(已存盘):82 件(**R9 / R14 / R40 / R41 四颗电阻按用户同意挪过**,位置见 `hand_blade1.py` 同目录的会话记录)、
|
||||||
|
**598 段线 / 259 孔**(含 59 个 GND 缝合孔)、**0 块铺铜**。工程树里新增了一个板子 `BLADE-PCB_1`(`dmt_Board.createBoard` 包住这块 PCB,排查铺铜时建的,无原理图,可删)。
|
||||||
|
|
||||||
|
走线怎么来的:服务器 6 轮(最好 `--nofan --pf`,缓存 `_blade_routes.var3.json`)剩 8 个网 → `hand_blade1.py` 逐段写死几何补完 6 个网 +
|
||||||
|
`MODE=repair` 只取 SDA 那 6 段(repair 会把已通的 VO_P/+12V_F 当普通线重铺、33 对同网孔叠在一起,其余全弃)。
|
||||||
|
判据:`hand_blade1.py` 按铜并查集 **碎块网 0**、平面网每块都有岛内过孔;`router_check` **净距 0**;线宽不低于规则下限。
|
||||||
|
布线器改动:Kelvin 第二条看得见第一条(原来会整段重叠短路)、J4 段 D± 改平行 45° + 水平错位、`PIN_TIES`(U3.8↔U3.9)、`--w5v`。
|
||||||
|
铺铜规划改动:VO_P 岛拆西南腿、西沿收到 25.0(**原来岛压着 Kelvin 取样线自己的换层孔**);新增 L3 `+5V` 岛(A* 在 0.6/0.4/0.3 都接不到 U5)。
|
||||||
|
|
||||||
|
**卡点**:`pcb_Layer.getTheNumberOfCopperLayers()` = **2**(BLADE-PCB = 4)。L2 地 / L3 三个电源岛全落在不存在的层上 ⇒
|
||||||
|
铺铜管理器点了不弹窗、`setDocumentSource` 只要源码里有 POUR 就返回 false(连原样往返都失败)。**用户确认:就要 2 层。**
|
||||||
|
⇒ 这套「内层平面」方案在 2 层上不成立,待评估后决定怎么改(量化:VO_P 岛区域两外层被 19 个别的网穿过、+12V 18 个、+5V 56 个)。
|
||||||
|
过期物:`_blade_stitch_pts.json`(现是 _1 的 59 个点);R 版的旧落点在 archive 里 `.moved`。
|
||||||
|
|
||||||
|
## ⛔ 底板内层 GND 平面第二次整块消失(2026-09-13,已恢复)
|
||||||
|
|
||||||
|
**现象**:用户看到底板大量 GND 断开,DRC 报连接性 **65 条,全是 GND**,都是背面靠过孔下内层的地脚和 GND 过孔:
|
||||||
|
A1 输入区 C4/C10/C13/C15~C23/R3/R11/R13/U13/U30/U37,风扇区 Q6/R734/R749,以及一批 GND 过孔。
|
||||||
|
**根因**:`GND-L2-0~7` / `GND-L3-0~7` 这 16 块内层 GND 铺铜被删了。L2/L3 各 13 块只剩东边 x 91.8~97.5 的 5 条窄边条,
|
||||||
|
主平面 `GND-L2-4/L3-4`(x 6.2~90.3)没了。线(2060 段)、过孔(671 个)、外层铺铜(L1 55 / L4 66 块)、8 块内层禁布区都没变。
|
||||||
|
**和 09-12 早上那次一模一样**(见 R2 方案 §37 附近「2026-09-12 复核板面」),两次删除的触发原因**都没查出来**。
|
||||||
|
|
||||||
|
**恢复**(只补缺的,不删不重建其他铺铜):先核对 `pour_base.plan()`,板上 131 块的名字、层和留下的 10 块内层轮廓都与计划逐块一致 ⇒
|
||||||
|
只按计划 `JS_MAKE` 建这 16 块 → 通过界面「重建所有」→ 147 块填出 135,空的 12 块都是 GND 小瓦片,功率铜面全部填出 → 存盘 →
|
||||||
|
`drc_read --base`:**只剩插槽封装 5 条间距,连接性 0**。
|
||||||
|
现场存档:`.claude/r2/_base_pours_lost_inner_0913.json`(丢失时的铺铜清单)、`.claude/r2/_base_drc_gnd65_0913.txt`(DRC 明细)。
|
||||||
|
|
||||||
|
**防再犯**:
|
||||||
|
- 交接 / 投板前**按「层 + 网 + 名字」逐块比铺铜**。L2/L3 应各 13 块,全板 147 块,填出 135。光看 DRC 间距或 `board_check` 看不出来,
|
||||||
|
`board_check` 会把这类脚当成「靠铜面成网」直接放过。
|
||||||
|
- **不要用 `reload_base.py` 做 DRC 前的重载**:它会先删掉**全部**铺铜再重载(理由是「重载反正会丢」,见 skill 里的重载说明)。
|
||||||
|
这次没有重载,界面「重建所有」之后 DRC 连接性就是准的。
|
||||||
|
- 怀疑方向(未证实):客户端重载 / 重开文档时丢铺铜。skill 里记过「重载会丢掉重载前建的铺铜边框,即使 save 过」。下次再丢,先问用户中间有没有重载或重开过客户端。
|
||||||
|
|
||||||
|
## 📦 BOM 与淘宝比价(2026-09-13,与布线工作独立)
|
||||||
|
|
||||||
|
R2 一套(1 底板 + 5 刀片)的 BOM 已从原理图读出并在淘宝比价:
|
||||||
|
**`BOM/PhoneRail-R2_BOM_淘宝比价.xlsx`**,方法、结论、坑、如何重跑见 **`BOM/README.md`**。
|
||||||
|
77 种可采购料,立创参考总价约 ¥760;**淘宝实际一套 ≈ ¥558**(关键 IC 改走立创则 ≈ ¥756)。ESP32 已定 N16R8,U20 已换 C2913202。
|
||||||
|
|
||||||
|
## 🔵 新会话从这里开始(2026-09-12 深夜交接,**取代上一版**)
|
||||||
|
|
||||||
> 上一会话的上下文已清空。这一节是唯一入口,读完再动手。
|
> 上一会话的上下文已清空。这一节是唯一入口,读完再动手。
|
||||||
|
|
||||||
### 现在卡在哪
|
### 一句话状态
|
||||||
|
|
||||||
**用户已经在 SolidWorks 里手工把两块板载入同一个装配体**,但**刀片还没摆位**(还是平放的)。
|
刀片这一轮改了四处,**都已下发并读回验证**:`NOTCH_D` 7.45 → **8.3**、板框 90×68 → **89.5×67**、
|
||||||
下一步就是把刀片竖起来插进槽位,然后跑干涉检查,量出那个一直缺的数:
|
台阶 `STEP_H` 12.0 → **9.9**(舌头变短)、缺口 `NOTCH_W` 1.6 → **1.9**(§42)。
|
||||||
**`d` = 卡插进插槽塑料体的深度**。
|
连通性 **56/57**;底板铺铜重铺完成(DRC 5 条,与重铺前逐条一致,全是插槽封装自带的老问题)。
|
||||||
|
**上一版交接里的待办 ④ 已不成立** —— 用户自己在客户端把那几个网布通了。
|
||||||
|
|
||||||
|
### ⛔ 刀片 DRC 现在是 **5 条,这是有意接受的,不是回归**
|
||||||
|
|
||||||
|
别看到非 0 就去"修"。5 条全是同一性质「板框到铜」,**缺口回 1.9 的必然结果**:
|
||||||
|
|
||||||
|
| 内容 | 条数 | 距离 |
|
||||||
|
|---|---:|---:|
|
||||||
|
| `J1_A11`(EFUSE_EN) / `A12`(GND) / `B11`(INT#) / `B12`(GND) | 4 | **0.2** |
|
||||||
|
| `GND` 过孔 (41.500, 7.000) | 1 | **0.245** |
|
||||||
|
|
||||||
|
0.2 是 **PCIe 几何定死的**(1.0 间距 / 0.7 指宽 / 1.9 缺口 ⇒ 任何 PCIe 卡都是这个数),
|
||||||
|
`fp_edge.selfcheck` 的门槛已相应由 0.3 放回 0.2。
|
||||||
|
⇒ **下单时统一向嘉立创确认「金手指缺口处铜到板边 0.2 mm 可做」即可覆盖全部 5 条。**
|
||||||
|
⚠ 若嘉立创回复做不了,退路是把 `A11/A12/B11/B12` 四根指改窄到 0.50(都不走电流,载流零代价),
|
||||||
|
可换回 DRC 0 条,代价是偏离 CEM 标准指宽。
|
||||||
|
|
||||||
|
⚠ **板框改动后有两个常量的关系变了,下次动板框前必读**:
|
||||||
|
`J1_X` 已从 `BW/2` **解耦成常数 45.0**(否则板宽一改金手指连同舌头就整体平移、全板对不上),
|
||||||
|
所以**改 `BW` 时 `J1_X` 不会自动跟着走**;金手指现在偏心 **0.25**(板宽的 0.3%,用户拍板接受)。
|
||||||
|
东侧已经没有余量了:`VO_P`(4 A 主通道,宽 1.283)东沿 88.391 卡死,**再裁就必须切地平面**(§41.3)。
|
||||||
|
|
||||||
|
### ⛔⛔ 板框改小后有两个「过期物」,碰它们之前先看这里
|
||||||
|
|
||||||
|
| 过期物 | 状态 | 后果 / 正确做法 |
|
||||||
|
|---|---|---|
|
||||||
|
| **`.claude/r2/_blade_routes.json`** | 里面仍有 **6 条 `INA_ALERT` 旧段**,东沿 >88.5(含 `(89.0,52.5)-(89.0,65.0)` 那条贴边竖线) | ⛔ **谁拿这份缓存 `--push`,就会把已删的旧线原样推回板外**。板面才是权威(§41.4 已下发并核过连通性)。缓存里是 `88.75,52.5`、板上是 `88.75,52.375` —— 它本来就不是板面的精确镜像。要修得重跑布线,**没必要,加警告即可** |
|
||||||
|
| ~~**`新建文件夹/PhoneRail_blade.step`**~~ | ✅ **已作废(2026-09-12 21:49 用户重导)** | 现在的权威是 `新建文件夹/3D_BASE-PCB_2026-09-12.step`(44.9 MB)+ `3D_BLADE-PCB_2026-09-12.step`(25.9 MB),两份都已做过 3D 复核(见下「3D 复核结论」)。旧的 `PhoneRail_*.step` / `PhoneRail_*.SLDASM` 别再用 |
|
||||||
|
|
||||||
|
### ⏭ 下一步做什么
|
||||||
|
|
||||||
|
1. ⭐ **等用户卡尺量三个数**(只有人能做):插槽开口长 / 插入深度 / 防呆键筋宽。
|
||||||
|
模型值分别是 **35.08 / 8.00 / 1.78**,实测才是权威口径。
|
||||||
|
2. 用户人眼确认刀片丝印排版(图已发)。
|
||||||
|
3. **没有别的待办了。** 两块板 DRC 都干净、连通性都到顶,别为了"继续推进"去动它们。
|
||||||
|
|
||||||
|
### ✅ 3D 复核结论(2026-09-12 深夜,用户重导两份 STEP 之后)
|
||||||
|
|
||||||
|
在 SolidWorks 里把**新底板 + 新刀片**装起来实测(方法与坑见 `solidworks-assembly` skill NOTES §29~§31):
|
||||||
|
|
||||||
|
| 项 | 设计 | STEP 实测 | 判 |
|
||||||
|
|---|---:|---:|---|
|
||||||
|
| 刀片外形 | 89.5 × 67.0 | 89.47 × 66.97 × **1.67** | ✅ |
|
||||||
|
| 舌头宽 | 34.50 | **34.474** | ✅ 对开口 35.08 每侧余 0.30 |
|
||||||
|
| 台阶高 | 9.9 | **9.900** | ✅ |
|
||||||
|
| 防呆缺口 | 40.0 / 1.9 / 深 8.3 | 39.037~40.963(**1.926**)/ 深 8.3 | ✅ |
|
||||||
|
| **插入深度 d** | 8.00 | **坐到腔底,8.00 达成** | ✅ 刀片底边离板面 **2.66** |
|
||||||
|
| 5 块同插 | — | **刀片↔刀片 0 处干涉**,相邻净距 **13.95** | ✅ |
|
||||||
|
|
||||||
|
⛔ **读这个结论时必须记住一条**:dz 扫描的「首次接触」发生在插入 **3.03** 处,
|
||||||
|
那是 **64 根簧片触点**(模型把簧片建成刚性、通道 1.568 < 板厚 1.67),**不是机械止点**。
|
||||||
|
判据要看**干涉体积随深度的斜率**并做阳性对照:坐到腔底时总干涉仅 **1.49 mm³**,
|
||||||
|
再压 0.53 就暴涨到 **28.2 mm³**。只按"有没有干涉"读会得出"还是插不到底"的错结论。
|
||||||
|
|
||||||
|
⚠ 仍是厂商标称模型、不含公差 ⇒ **上面 ⭐ 那三个卡尺数照旧是权威口径**,这次 3D 只是
|
||||||
|
把「34.5 这一版轮廓在标称几何下装得进」钉死了。
|
||||||
|
⚠ 刀片 **A 面(手机主板那一侧)在 STEP 里没有任何模型** ⇒ 刀片之间的间距结论只覆盖 B 面。
|
||||||
|
|
||||||
|
### 🔨 外壳进行中(2026-09-13):托盘 + 两端板已成型,正在做封闭盒子
|
||||||
|
|
||||||
|
**已建好的件**(都在 `新建文件夹\5blades\`,原生特征建模、可在 GUI 里改):
|
||||||
|
|
||||||
|
| 件 | 文件 | 关键尺寸 |
|
||||||
|
|---|---|---|
|
||||||
|
| 托盘 | **`Tray_v7.SLDPRT`** | 106×106×2.4;四角 Ø8 柱高 **10**,柱顶 Ø4.2 热熔螺母孔;4× Ø3.4 端板锁孔 @ x −1.9/99.9;**南边两个 USB-C 缺口** x 6.53~18.47 / 78.03~89.97 |
|
||||||
|
| 端板 ×2 | **`EndPlate_v4.SLDPRT`** | 106(y)×82(z)×2.4;Ø60 风口(中心 y 51.345 / z 37.85);4× Ø3.4 风扇孔(50×50);L 脚长 25×厚 2.4 |
|
||||||
|
|
||||||
|
装配 `PhoneRail_5blades.SLDASM` 共 11 件,**干涉 360 = 基线,外壳件零新增**。
|
||||||
|
⚠ 端板的 2 个脚锁孔尚未成形(`FeatureCut4` 在本机连续 7 次返回 None),需在 GUI 补:
|
||||||
|
零件本地 x=25.5,y=21.345 / 81.345,Ø3.4 通孔。
|
||||||
|
⚠ 东端板 y 落在 0.69~106.69,比托盘北探出 4.69(零件不对称所致,功能无碍)。
|
||||||
|
|
||||||
|
~~**整机包围盒 152.8 (x) × 110.7 (y) × 84.4 (z)**~~
|
||||||
|
⇒ ⛔ **2026-09-13 已变**:改 15 mm 分风腔后为 **174.8 × 110.8 × 86.8**(见下面那一节)。
|
||||||
|
|
||||||
|
#### ⛔ 量出来的一条硬约束:两个 USB-C 朝南、埋在板底
|
||||||
|
|
||||||
|
`J1` / `J23` 的 box 都是 `y 0.20~8.10 / z −3.25~0.85`(底板**背面**、朝南开口),
|
||||||
|
而托盘面板占 z −2.40~0 ⇒ **与插入通道实打实重叠 2.40 mm**,插头进不来。
|
||||||
|
⇒ 托盘 v7 已在南边开缺口解决;**南侧板也必须在同样的 x 段开口**。
|
||||||
|
|
||||||
|
#### 封闭盒子的分件(2026-09-13 用户拍板)
|
||||||
|
|
||||||
|
- 南/北侧板:**各一整块 153×84**(不再细分,接缝最少、刚性最好)
|
||||||
|
- 风道:**进风口加滤网 + 顶盖开泄压细缝**(R2 改一进一出后 R1 的"4 进 1 出正压"已不成立,
|
||||||
|
靠这条恢复轻微正压,灰尘往外走,也给覆盖不到的边缘通道一条出路)
|
||||||
|
|
||||||
|
#### ✅ 封闭盒子已完成(2026-09-13):5 件外壳,干涉 360 = 基线,零冲突
|
||||||
|
|
||||||
|
| 件 | 文件 | 装配位置 |
|
||||||
|
|---|---|---|
|
||||||
|
| 托盘 | `Tray_v7.SLDPRT` | x −4~102、y −4~102、z −12.4~0 |
|
||||||
|
| 端板 ×2 | **`EndPlate_v5.SLDPRT`** | 西 x −27.4~0 / 东 x 98~125.4,**y −1.655~104.345**(两块完全一致)|
|
||||||
|
| 南板 | `SouthPanel.SLDPRT` | y −4.055~−1.655(贴端板外侧)|
|
||||||
|
| 北板 | `NorthPanel.SLDPRT` | y 104.345~106.745(贴端板外侧)|
|
||||||
|
| 顶盖 | `TopPanel.SLDPRT` | z 72~74.4,内表面离刀片顶 71.34 **0.66**(兼做导轨,咬边 ≤1 ✅)|
|
||||||
|
|
||||||
|
**所有外壳件外轮廓四角都倒了 R3 圆角**(用户 2026-09-13 要求),
|
||||||
|
每件都用圆柱面半径直方图验过 4/4 条。
|
||||||
|
|
||||||
|
⛔ **端板必须做成 y 对称**(以风口中心 51.345 为中心,−1.655~104.345):
|
||||||
|
原来按托盘边缘取 −4~102 时板几何中心是 49、风口中心 51.345,**零件不对称**,
|
||||||
|
东端板绕 z 翻转后偏 4.69、撞穿北板 616 mm³。对称化后两端 `dy = 0` 即自然对位。
|
||||||
|
⛔ **南北板要贴端板外侧、不是托盘边缘**:端板比托盘宽(−1.655~104.345 vs −4~102),
|
||||||
|
南北板若按托盘边缘摆会与端板重叠 2.345。
|
||||||
|
|
||||||
|
**⚠ 仍待补的两处**:端板的 2 个脚锁孔(`FeatureCut4` 在本机连续 7 次返回 None,
|
||||||
|
需在 GUI 补:零件本地 x=25.5、y=21.345/81.345、Ø3.4 通孔);西端进风口的滤网槽。
|
||||||
|
|
||||||
|
#### ⛔ 一条容易漏的判据:**干涉为零 ≠ 装配成立**
|
||||||
|
|
||||||
|
外壳五件干涉一直是 360 基线"零冲突",但用**贴合面分析**(两两包围盒相邻性)一查才发现
|
||||||
|
`Tray ↔ SouthPanel` / `Tray ↔ NorthPanel` **一处接触都没有** —— 两块侧板悬空、螺丝无处可打。
|
||||||
|
干涉检查只回答"有没有撞",不回答"该碰的碰上了没有"。
|
||||||
|
|
||||||
|
⇒ 修法:**托盘 y 必须与侧板内表面齐平**(不是外表面)。
|
||||||
|
`Tray_v8` 外扩到 −4.055~106.745(与侧板外表面齐平)**无效**,侧板只是擦过;
|
||||||
|
`Tray_v9` 改成 **−1.655~104.345** 后,侧板从外侧包住托盘端面,贴合带 **z 10.0 × x 106.0** 出现。
|
||||||
|
|
||||||
|
#### ✅ 装配终态(2026-09-13):14 个零部件,干涉 360 = 基线,九组贴合面全部成立
|
||||||
|
|
||||||
```
|
```
|
||||||
活动文档:D:\DCDC\新建文件夹D_BASE-PCB_2026-09-12.SLDASM
|
Tray_v9 ↔ SouthPanel_v3 沿y 10.0 × 106.0 ← 侧板落脚(螺丝可打)
|
||||||
├─ 3D_BASE-PCB_2026-09-12.step-1 底板 包围盒 x 0.01~97.99 / y 0.01~97.99 / z -6.30~13.17
|
Tray_v9 ↔ NorthPanel_v2 沿y 10.0 × 106.0
|
||||||
│ 变换 = 单位阵 ⇒ **原点 = 板左下角,与 EDA 板坐标一致**(可直接套板坐标算平移)
|
EndPlate_v9 ×2 ↔ SouthPanel 沿y 82.0 × 27.4 ← A 组 8 颗螺丝
|
||||||
│ ⚠ 引用 %TEMP%\swx32108\IC~~\… —— **临时件,一清理就断链**
|
EndPlate_v9 ×2 ↔ NorthPanel 沿y 82.0 × 27.4
|
||||||
└─ PhoneRail_blade-1 刀片 包围盒 x -34.57~55.40 / y 33.71~101.68 / z -2.35~4.02
|
EndPlate_v9 ×2 ↔ TopPanel 沿z 27.4 × 103.7 ← C 组 4 颗螺丝
|
||||||
变换 = 无旋转 + 平移 (-34.6, 33.7, 2.4) ⇒ **平放,还没竖起来**
|
SouthPanel ↔ TopPanel 沿z 152.8 × 2.3 ← 太窄,不打螺丝
|
||||||
引用 D:\DCDC\新建文件夹\PhoneRail_blade.SLDASM ✅ 实体文件
|
|
||||||
```
|
```
|
||||||
|
|
||||||
⚠ **第一件事不要 `CloseAllDocuments`** —— 会清空临时目录、让底板引用断掉。
|
⚠ 装配里一度混进废版 `Tray_v10`(y −6.00~104.34),已换回 `Tray_v9`。
|
||||||
|
**换件后必须重跑贴合面检查**——干涉数不会因为"该贴的没贴上"而变化。
|
||||||
|
|
||||||
**要做的**:刀片绕 X 轴 **+90°** 竖起 + 平移到槽位
|
#### ⛔ 已作废(被两件式取代,见下面「外壳改两件式」):外壳五件的定稿版本号(2026-09-13)
|
||||||
(底板原点 = 板左下角 ⇒ `dx = SLOT_CX − J1_X = 4.00`、`dy = 槽心 y + 0.8`、`dz = Z0 = 11.1 − d`)。
|
|
||||||
五个槽心 y = 8.36 / 28.68 / 49.00 / 69.32 / 89.64。
|
|
||||||
|
|
||||||
**卡点**:`CreateTransform` 的 pywin32 封送没解决(`GetMathUtility` 要按 dispid 绕行才拿得到,
|
| 件 | 定稿文件 | 关键内容 |
|
||||||
拿到后 `CreateTransform` 又报"找不到成员")。⇒ **在 GUI 里手工拖 + 加配合可能比解封送快**。
|
|---|---|---|
|
||||||
|
| 托盘 | **`Tray_v9.SLDPRT`** (111 KB) | y −1.655~104.345(与侧板内表面齐平);四角 Ø8 柱高 10 + 柱顶 Ø4.2 螺母孔;4 个 Ø3.4 端板锁孔;南边两个 USB-C 缺口。**分风腔那轮没动它** |
|
||||||
|
| 端板 ×2 | **`EndPlate_v13.SLDPRT`** (145 KB) | Ø60 风口 + 4× Ø3.4 风扇孔;**L 脚长 36**(端板外移 11 后够回托盘原锁孔);**4 根角柱** 8(y)×10(x)、通高 z 0~72;y 对称 −1.655~104.345;**全部螺丝孔已成形**:A 组 4 + C 组 2 个 Ø4.2×6 螺母孔 + 2 个 Ø3.4 脚锁孔(每块)。`v10`→`v11`→`v12` 是逐步加孔的中间版,别引用 |
|
||||||
|
| 南板 | **`SouthPanel_v4.SLDPRT`** (109 KB) | **x −38.4~136.4(175 长)**;2 个 13×9 Type-C 开孔 + 7 个 Ø3.4 螺丝过孔 |
|
||||||
|
| 北板 | **`NorthPanel_v3.SLDPRT`** (111 KB) | **175 长**;J33 口 + 风扇出线口 + 7 个 Ø3.4 螺丝过孔 |
|
||||||
|
| 顶盖 | **`TopPanel_v4.SLDPRT`** (124 KB) | **175 长 + y −4.055~106.745**(v3 只到 102,与北板差 2.345 的通长缝);11 条 1.5×60 泄压缝 + 4 个 Ø3.4 螺丝过孔 |
|
||||||
|
|
||||||
⇒ **动手前必读 `.claude/skills/solidworks-assembly/NOTES-probed.md`**(19 节,全是实测坑)。
|
> ⚠ 上一版定稿(`EndPlate_v9` / `SouthPanel_v3` / `NorthPanel_v2` / `TopPanel_v3`)是
|
||||||
|
> **152.8 长的短机版**,已被 15 mm 分风腔那轮取代,别再引用。
|
||||||
|
|
||||||
### 这一会话已经做完的(都已下发 + 落库)
|
⚠ 中间产生的 `Tray_v2~v8/v10~v11`、`EndPlate_v2~v8`、`SouthPanel/_v2`、
|
||||||
|
`NorthPanel`、`TopPanel/_v2` 全是过程废版,**别引用**。
|
||||||
|
|
||||||
|
#### ⛔ 已作废(两件式只用 4 颗从底部往上拧):螺丝固定方案(M3 + Ø4.2×6 热熔螺母,共 12 颗)
|
||||||
|
|
||||||
|
| 组 | 连接 | 方向 | 数量 | 落点(装配坐标)|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| A | 侧板 → 端板**角柱** | 水平沿 y | **8** | x **−31 / 129**,z **10 / 60**(南北板各一套)|
|
||||||
|
| C | 顶盖 → 端板**角柱** | 竖直沿 z | **4** | x **−31 / 129**,y **2.345 / 100.345**(离风口中心 49.0 > 30 ✅)|
|
||||||
|
|
||||||
|
⛔ **上一版这两组坐标(x −13.70 / 111.70)打在空气里**,2026-09-13 查实:
|
||||||
|
端板在 z=72 那一层**只有 2.4 厚的板本体**(x −27.4~−25),L 脚在底部 z 0~2.4,中间是空的。
|
||||||
|
「贴合区 27.4 × 103.7」是**包围盒**口径 —— 与「包围盒对通孔没有分辨力」同一族的假判据。
|
||||||
|
✅ `EndPlate_v10` 加的 **4 根角柱**(截面 8(y)×10(x)、通高 z 0~72,装配 x −36~−26 / 124~134)
|
||||||
|
就是为这两组螺丝供肉:C 组沿 z 从柱顶打、A 组沿 y 从侧板打进柱侧面,两个方向都有 8~10 mm 材料。
|
||||||
|
角柱关于风口中心 51.345 严格对称(y −1.655~6.345 / 96.345~104.345),东端板绕 z 翻转后自动对位;
|
||||||
|
风扇占 y 19.87~82.82,两柱都不碰。
|
||||||
|
|
||||||
|
⛔ **B 组(侧板→托盘 6 颗)已取消**:托盘南北边缘与底板 PCB 之间只剩 1.665 / 6.355 mm,
|
||||||
|
放不下 Ø8 凸台;且盒子刚性由「两端板 + 南北板 + 顶盖」四面围合已足够,
|
||||||
|
托盘另由端板 L 脚的 4 个 Ø3.4 锁孔固定。南北板上已打好的 3 个 B 组孔保留无害。
|
||||||
|
⛔ 南板↔顶盖那条贴合带只有 **y 2.3 宽**,打不下 M3,不在此处固定。
|
||||||
|
|
||||||
|
✅ **这些孔已经用脚本全部做出来了**(2026-09-13,`EndPlate_v13`,不再需要 GUI)。
|
||||||
|
装配内核对:**12/12 螺母孔与相邻板过孔同轴、4/4 脚锁孔与托盘锁孔同轴,横偏全 0**,干涉 360 = 基线。
|
||||||
|
过去「`FeatureCut4` 连续 7 次返回 None」的主因高度疑似是**选错了面**(见 NOTES §36),不是切除本身坏。
|
||||||
|
孔位(存档):
|
||||||
|
|
||||||
|
| 组 | 孔 | 位置(装配坐标)|
|
||||||
|
|---|---|---|
|
||||||
|
| A | 8 × Ø4.2 深 6,轴沿 y | 角柱南/北外侧面(y −1.655 / 104.345),x −31 / 129,z 10 / 60 |
|
||||||
|
| C | 4 × Ø4.2 深 6,轴沿 z | 角柱顶面 z=72,x −31 / 129,y 2.345 / 100.345 |
|
||||||
|
| 脚锁孔 | 2 × Ø3.4 通孔,轴沿 z | 端板 L 脚上,零件本地 x=**36.5**、y 21.345 / 81.345 |
|
||||||
|
|
||||||
|
#### Type-C 开孔优化(2026-09-13)
|
||||||
|
|
||||||
|
原开孔 11.94 × 6.0 —— **高度不够,带护套的线插不进去**。
|
||||||
|
依据:USB-C 插头本体 8.25×2.40(带外壳约 8.4×2.6),业界面板开孔推荐 **12 × 8.4**、每侧 0.2~0.5 余量。
|
||||||
|
⇒ 改为 **13 × 9**(3D 打印再放量),中心对准座子:J1 x=12.50、J23 x=84.00,z=−1.20。
|
||||||
|
零件:`SouthPanel_v2.SLDPRT`。
|
||||||
|
|
||||||
|
#### 三块新板要开的口(全部为回读到的装配坐标)
|
||||||
|
|
||||||
|
| 板 | 位置 | 必须开的口 |
|
||||||
|
|---|---|---|
|
||||||
|
| 南板 | 贴 y=−4 外侧 | `J1` x **8.03~16.97**、`J23` x **79.53~88.47**,高度对准 z −3.25~0.85 |
|
||||||
|
| 北板 | 贴 y=102 外侧 | `J33` x **73.64~86.35**(高到 z 10.21);`J26`/`J27` 风扇出线 x **2.03~17.53**(高到 z 13.17)|
|
||||||
|
| 顶盖 | 内表面 z=72 | 一排 1.5 mm 泄压细缝;内表面离刀片顶 71.34 只 **0.66**,正好兼做导轨(咬边 ≤1 ✅)|
|
||||||
|
|
||||||
|
### ✅✅ 嵌入式底盖:**现行外壳 `TopShell_v10` + `BottomPlate_v6`**(2026-09-13)
|
||||||
|
|
||||||
|
- 顶盖墙向下延长 3.6 包住底盖(墙底 −13.6),角柱仍止于 −10 当限位;底盖 = 顶盖内腔四边各让 0.3、四角 R1。
|
||||||
|
- 拧紧后底盖顶面顶住角柱、底面与墙底齐平;整机外形不变 134.3 × 110.8 × 88.0;脚垫凸出 0.5 着地。
|
||||||
|
- 复验:齐平 −13.600、四边间隙全 0.300、干涉 360、螺丝孔 4/4、风扇孔 8/8。
|
||||||
|
- 首件太紧/太松:改 `make_v10.py` 的 `CLR`(0.3 → 0.4 / 0.2)重跑。
|
||||||
|
- ⚠ 截图:这次 `render_v10.py` 按「视线方向」挑出的仰视图拍成了南面(id↔方向又变、读视线可能早于画面刷新),嵌入关系以几何回读为准。
|
||||||
|
- 脚本:`make_v10.py` → `topshell_v10.py` → `bottomplate_v6.py` → `add_fillets.py BottomPlate_v6.SLDPRT 1.0 z` → `place_v10.py`。
|
||||||
|
- **打印 STL(2026-09-13 已导出)**:`新建文件夹\5blades\print\PhoneRail_TopShell_v10.stl`(倒扣、顶面贴床)/
|
||||||
|
`PhoneRail_BottomPlate_v6.stl`(平放)。毫米、偏差 0.01 mm;包围盒 = 模型、网格封闭、体积差 0.002%。脚本 `export_stl_v10.py`
|
||||||
|
(⚠ 导出前必须清空选择,否则只导出选中部分 —— NOTES §40)。
|
||||||
|
- **切片工程(2026-09-29)**:`新建文件夹blades\print\PhoneRail_shell_v10_PETG.3mf` —— A1 0.4 / Generic PETG 255 °C /
|
||||||
|
纹理 PEI 80 °C / 0.20mm Standard + 3 圈墙,两件同盘、无支撑,**7 h 13 min、190 g**。
|
||||||
|
⚠ Bambu Studio 命令行不展开预设的 `inherits`(不展开就按 PLA 200 °C / Cool Plate 切),先跑 `.claude/r2/shell/bambu_flatten.py <输出目录>` 展开再 `--load-settings`。
|
||||||
|
|
||||||
|
### ✅ 格栅改可打印:`TopShell_v9` + `BottomPlate_v5`(2026-09-13,已被 v10 取代,格栅沿用)
|
||||||
|
|
||||||
|
- v7 格栅筋 1.2×64 高、长细比 > 50,倒扣打印时悬空长高打不出来。
|
||||||
|
- v9:槽宽 6、竖筋 2.0、横筋 2.0(中心距 12),**最长悬空槽段 10**;开孔降到原 Ø60 的 **60.3%** ⇒ ⚠ 首件测刀片温度,不够退回 ①(筋 1.6、65.2%)。
|
||||||
|
- 判据全过(面积差精确相等、半圆端 10 / 平端 58 逐个对上);干涉 360(NOTES §39:复验改为不忽略隐藏实体)。
|
||||||
|
- ⚠ **SolidWorks 里中间刀片的板体 `Board~MDFG.step-1` 当前是隐藏状态**(应是在界面里看内部时隐藏的),我没改它。
|
||||||
|
- 脚本:`make_v9.py`(由 `patch_make_v9.py` 从 `make_v8.py` 派生)→ `topshell_v9.py` → `place_v9.py` → `render_v9.py`。
|
||||||
|
|
||||||
|
### ✅ 外观美化 + 去掉滤网:`TopShell_v7` + `BottomPlate_v5`(2026-09-13,格栅已被 v9 取代)
|
||||||
|
|
||||||
|
- 整机 **134.3 × 110.8 × 88.0**,两件(顶盖一体 + 底盖),**无滤网**。
|
||||||
|
- 美化:顶面 R1.5 圆角、圆头泄压槽、**两端竖槽风扇格栅**(开孔 = 原 Ø60 的 81.2%)、Type-C 旁凹刻闪电/箭头标识、底盖内缩 0.5 阴影缝、底盖加厚 3.6 + 沉头 + 4 个脚垫窝。
|
||||||
|
- 每项都有精确回读判据(面积精确相等 / 点在面内判方向 / 圆柱面计数),详见 R2 §3.3 同名节。
|
||||||
|
- ⚠ 去掉滤网 = 推翻「进风口加滤网」旧决定:灰尘直接进机箱,要定期清灰。`FilterFrame_v*` 全部作废。
|
||||||
|
- 复验:干涉 360、螺丝孔 4/4、风扇孔 8/8、分风腔按实物 10.01;顶层件 10。
|
||||||
|
- 截图 `v7_iso / v7_west.png`(`v7_west` 整张转 90°,竖向是 y)。标识和沉头 / 脚垫窝与表面同色,截图看不出,已用几何回读确认。
|
||||||
|
- ⛔ 截图坑:`ShowNamedView2` 的 id↔方向**每次会话都可能不同**(本次 0=俯视、3=看西墙、6=看南墙),一律先读视线再挑(`render_v7.py`)。
|
||||||
|
- 脚本:`make_v5.py`/`make_v6.py`/`make_v7.py`(派生链)→ `topshell_v7.py`、`bottomplate_v5.py`、`place_v7.py`。
|
||||||
|
|
||||||
|
### ✅ 开口精简:`TopShell_v4`(2026-09-13,已被上面 v7 取代,开口规格沿用)
|
||||||
|
|
||||||
|
- 北墙去掉 J33 调试窗口 + 风扇出线窗口(北墙整块无开口)。⚠ J33 应急调试口现在要开盖才能接。
|
||||||
|
- 南墙 Type-C 开口 = **母座口内侧轮廓 8.34 × 2.60、R0.7**,中心 (12.50/84.00, −1.65)(旧窗口中心偏了 0.45,已修)。
|
||||||
|
- ⚠⚠ **用户知情选择的风险**:母座口缩在墙外表面内 4.26,护套进不了墙,普通 USB-C 线大概率差约 2 mm 插不到底。
|
||||||
|
首件用常用线实插;不行就把开口等距外扩 2.1(→ 12.54 × 6.80),改 `make_v4.py` 里的 `USB_W/USB_H/USB_R` 重跑。
|
||||||
|
- 复验:干涉 360、螺丝孔 4/4、风扇孔 8/8、滤网间隙全过;南/北墙外表面面积与「扣 2 个母座口 / 无开口」理论值**精确相等**。
|
||||||
|
- 新验证通过的 API:面上草图里 `CreateArc`(10 参,方向按草图坐标系叉积取 90° 短弧)。截图 `v4_south / v4_north / v4_iso.png`。
|
||||||
|
- 现行件:**`TopShell_v4` + `BottomPlate_v3` + `FilterFrame_v2`**,脚本 `make_v4.py` → `topshell_v4.py` → `place_v4.py`。
|
||||||
|
|
||||||
|
### ✅✅ 短机版外壳(2026-09-13,顶盖已被上面 v4 取代,其余件仍现行)
|
||||||
|
|
||||||
|
用户要求缩短:**分风腔 15 → 10、风扇换 60×60×10**(用户指定广诚散热薄风扇,孔距 50.2、小 4PIN)。整机长 **180.2 → 140.7**。
|
||||||
|
现行件:**`TopShell_v3` / `BottomPlate_v3` / `FilterFrame_v2`**(v2/v1 作废),风扇模型 `OD6010_m0_frame.SLDPRT`(只查干涉)。
|
||||||
|
复验全过:干涉 360、螺丝孔 4/4、风扇孔 8/8(偏 0.1 = 模型 50.0 vs 实物 50.2)、滤网间隙全等设计值、分风腔按实物 10.01。
|
||||||
|
设计文档 §0.1 决策 #16 与 §22.6 风扇 BOM 已改(**MPN、电压、电流、风量、静压、PWM/TACH 规格待补**);`kicad/FAN_SELECTION.md` 等 KiCad 侧文档**未改**,仍写 9G0612P4S001。
|
||||||
|
⚠ 散热代价:分风腔阻力比 1.26 + 薄风扇 ⇒ 首件必测刀片温度。⚠ 实物核:自攻螺丝螺纹外径(墙孔 Ø5.2)、螺丝头高(≤ 2.8)。
|
||||||
|
⛔ 建模新坑:东墙那刀「选中数 1、草图却建在顶板上」—— 已改为进草图后读 `ModelToSketchTransform` 验平面(NOTES §37)。
|
||||||
|
截图 `v3_iso / v3_west / v3_top.png`。脚本:`make_v3.py`(派生)、`patch_v3_cut.py`、`topshell_v3.py`、`bottomplate_v3.py`、`filterframe_v2.py`、`place_v3.py`、`import_fan6010.py`。
|
||||||
|
|
||||||
|
### ✅ 西端插拔式滤网(2026-09-13,被上面短机版取代的前一版)
|
||||||
|
|
||||||
|
现行三件:**`TopShell_v2`**(加滤网导轨)、**`BottomPlate_v2`**(向西加长 5.4)、**`FilterFrame_v1`**(新,70×90×3 + 格栅)。
|
||||||
|
`TopShell_v1` / `BottomPlate_v1` 作废。滤网从上方插入、底边落在底盖上、露出顶盖 5.6 当把手;滤材外购粘在格栅上。
|
||||||
|
复验:滤网间隙 贴墙 0 / 唇边侧 0.40 / 南北 0.30 / 底 0(全部等于设计值);干涉 360;螺丝孔 4/4、风扇孔 8/8 同轴。
|
||||||
|
整机长 **180.2**;✅ 打印机是**拓竹 A1(256³)**,放得下。材料 **PETG**;顶盖倒扣打,只有两端 Ø60 风口可选加「仅热床支撑」(要点表见 R2 §3.3)。截图 `tf_iso / tf_west / tf_top.png`(⚠ `tf_west` 整张转了 90°:竖向是 y)。
|
||||||
|
脚本:`topshell_v2.py`(由 `make_topshell_v2.py` 从 v1 派生)、`bottomplate_v2.py`、`filterframe_v1.py`、`place_filter.py`。
|
||||||
|
**外壳清单上已无待办**;剩下的是人来定的:螺丝从底部拧是否接受、首件量 1 号手机的 9.18 mm 缝(打印平台已定:拓竹 A1,放得下)。
|
||||||
|
|
||||||
|
### ✅✅ 外壳改**两件式**(2026-09-13,用户拍板,**现行方案**,已下发并复验)
|
||||||
|
|
||||||
|
**顶盖一体打印 + 底盖一整块 + 4 颗 M3 从底部往上拧。** 详细表格见 `刀片式方案规划-R2.md` §3.3。
|
||||||
|
|
||||||
|
| 件 | 文件 | 要点 |
|
||||||
|
|---|---|---|
|
||||||
|
| 一体顶盖 | **`TopShell_v1.SLDPRT`** (209 KB) | 顶板 + 四面墙 + 4 根内角立柱(10×10,柱底 Ø4.2 盲孔深 82),底部敞开;174.8 × 110.8 × 84.4 |
|
||||||
|
| 底盖 | **`BottomPlate_v1.SLDPRT`** (102 KB) | 2.4 平板 + PCB 立柱 Ø8×10(柱顶 Ø4.2 盲孔)+ 四角 Ø3.4 过孔 |
|
||||||
|
|
||||||
|
复验:干涉 360 ✅、分风腔 15.01/15.51 ✅、墙底贴底盖 ✅、**底盖过孔↔顶盖螺母孔 4/4 同轴** ✅、
|
||||||
|
**端墙风扇孔↔风扇安装孔 8/8 同轴** ✅。总装顶层件 14 → 10。
|
||||||
|
|
||||||
|
⛔ **六件式全部作废,别再引用**:`Tray_v9` / `EndPlate_v10~v13` / `SouthPanel_v4` / `NorthPanel_v3` / `TopPanel_v4`
|
||||||
|
(下面「分风腔」那一节里的版本号表、螺丝表都是六件式的,仅作历史)。
|
||||||
|
分风腔的结论(15 mm、阻力比 18.1→0.40)与三条旧错的发现**仍然有效**,两件式照搬了几何。
|
||||||
|
|
||||||
|
**要人决定 / 人眼确认的**:
|
||||||
|
- 打印:✅ 拓竹 A1(256³)放得下(顶盖倒扣打印,高 84.4)。
|
||||||
|
- 拆盖要把机器侧过来拧底部 4 颗螺丝;东端风扇线要跨整机长度插到西北角 J26/J27。
|
||||||
|
- 南墙 Type-C 窗下沿离墙底只有 4.3 mm 细梁。
|
||||||
|
- 截图 `tp_iso / tp_south / tp_bottom.png`。仰视图看不出底盖四角过孔(孔后面正是顶盖角柱底面,同色),**孔的存在靠同轴核对证明,不是靠截图**。
|
||||||
|
- 仍欠:西端进风口滤网槽;1 号刀片手机那条 9.18 mm 缝要首件量。
|
||||||
|
|
||||||
|
建模脚本:`.claude/r2/shell/topshell_v1.py`、`bottomplate_v1.py`、`place_twopiece.py`。
|
||||||
|
|
||||||
|
### ✅ 外壳改 **15 mm 分风腔**(2026-09-13 本会话,已下发并三重复验)
|
||||||
|
|
||||||
|
**起因**:按原计划该画「导流罩」,画之前先量了一遍,方案当场被几何否掉:
|
||||||
|
|
||||||
|
| 量 | 实测 | 含义 |
|
||||||
|
|---|---|---|
|
||||||
|
| 分风腔深 | 西 **4.01** / 东 4.51 | 风扇出口 x=0 ↔ 刀片前缘 x=4.01 |
|
||||||
|
| 无叶扩散段需要的轴向长度 | 7°/10°/15° 半角 → **183 / 128 / 84 mm** | 4 mm 里放什么叶片都没用 |
|
||||||
|
| 逐通道覆盖(迎风面落在 Ø61 内)| edge-S **0%** / C1 **19.9%** / C2 84.9% / C3 84.9% / C4 **19.9%** / edge-N 0% | 比文档记的「61%」(整面积口径)严重得多 |
|
||||||
|
| **4 mm 腔里横向喂风的阻力** | **= 通道本身的 18.1 倍**(等流量 Dh 口径)| 边缘通道被饿死**与叶片无关**,只跟腔深有关 |
|
||||||
|
|
||||||
|
腔深 → 阻力比:4.01 → **18.1**|8 → 2.4|10 → 1.3|12 → 0.75|**15 → 0.40**|20 → 0.18。
|
||||||
|
|
||||||
|
⇒ **用户拍板:两端各外移 11 mm,做 15 mm 分风腔;导流叶片不做**(15 mm 腔本身就是分风器)。
|
||||||
|
|
||||||
|
**改了什么**(`place_v10.py` 一次下发):
|
||||||
|
|
||||||
|
| 件 | 动作 |
|
||||||
|
|---|---|
|
||||||
|
| 两只风扇 | 各外移 11 ⇒ 西 **−36~−11**、东 **109~134**(只改变换矩阵的平移 x 分量,不重算旋转)|
|
||||||
|
| 端板 ×2 | `EndPlate_v9` → **v10**:L 脚 25→**36**(够回托盘原锁孔)+ **4 根角柱** |
|
||||||
|
| 南/北/顶 | → **v4 / v3 / v4**,长度 152.8 → **175.0** |
|
||||||
|
| 托盘 | **没动**(`Tray_v9`,锁孔 x −1.9/99.9 原位)|
|
||||||
|
|
||||||
|
**复验(三条都要,缺一条就是上次「托盘悬空」那种翻车)**:
|
||||||
|
逐件包围盒 9/9 ✅;西腔 **15.01**、东腔 **15.51** ✅;干涉 **360 = 基线** ✅;
|
||||||
|
贴合面 **10 组**(比改动前多一组,因为顶盖终于盖住北板)✅。
|
||||||
|
整机 **174.8 × 110.8 × 86.8**(原 152.8 × 110.7 × 84.4)。
|
||||||
|
|
||||||
|
#### 本轮查出的三处旧错(都不是这次改动引入的)
|
||||||
|
|
||||||
|
1. ⛔ **A/C 两组共 12 颗螺丝原来打在空气里**(x −13.70 / 111.70):端板在 z=72 那层只有
|
||||||
|
2.4 厚的板本体,L 脚在底部 z 0~2.4,中间是空的。「贴合区 27.4 × 103.7」是**包围盒**口径。
|
||||||
|
⇒ v10 加 4 根角柱供肉,坐标改 x −31/129(详见上面的螺丝表)。
|
||||||
|
2. ⛔ **顶盖 y 只到 102,北板内表面在 104.345** ⇒ 沿全长开着一条 **2.345 mm** 的缝。
|
||||||
|
端板改 y 对称那轮顶盖没跟着改,**干涉检查照不出来**(不接触本来就不干涉)。
|
||||||
|
⇒ v4 改成 y −4.055~106.745,盖住南北两板外表面。
|
||||||
|
3. ⚠ **「两条边缘通道都是旁通」记反了一半**:刀片 B 面器件全部从 y=9.20 起、板体 7.53~9.20
|
||||||
|
⇒ **手机在每片刀片的 −y 侧**。南侧 9.18 mm 缝里装的是**1 号刀片的手机**(别的通道有 13.95,
|
||||||
|
这条窄 4.8,**首件要量**);北侧 9.17 mm 才是唯一的纯旁通。
|
||||||
|
⇒ 以后真要加挡风板只该挡北侧,且只能占 y 98.0~104.345(再往南压到底板:J26 到 97.30、J33 到 96.77)。
|
||||||
|
|
||||||
|
#### ⏭ 外壳还欠的
|
||||||
|
|
||||||
|
- ~~GUI 补孔~~ ✅ **已用脚本完成**(`EndPlate_v13`,12 螺母孔 + 4 脚锁孔,同轴核对全过)。
|
||||||
|
- 西端进风口**滤网槽**。
|
||||||
|
- **人眼确认**(几何证明不了「看着对」):`v10_iso/top/west/south.png` 已生成。
|
||||||
|
- 可选:北侧挡风板(挡掉 660 mm² 纯旁通中的 ~69%)。
|
||||||
|
|
||||||
|
> 建模脚本已沉淀到 **`.claude/r2/shell/`**(原来只活在临时目录里)。
|
||||||
|
|
||||||
|
### ✅ 风扇已进装配体(2026-09-13)+ 画外壳要用的数
|
||||||
|
|
||||||
|
装配体 `新建文件夹\5blades\PhoneRail_5blades.SLDASM` = 底板 + 5 刀片 + **2 风扇**,
|
||||||
|
干涉 360 处(全是刀片簧片蹭的基线),**风扇零干涉**。
|
||||||
|
|
||||||
|
**风扇模型**:山洋 `9G0612P4S001` 官网要填表(脚本下不到,链接见对话)⇒ 用同规格的
|
||||||
|
**Orion `OD6025`**:`https://orionfans.com/3d/OD6025_m0_frame.stp`(**无登录直链**,`curl` 直下)。
|
||||||
|
⚠ 这份模型**只有安装接口可信**:孔距实测 **50.00×50.00 / Ø4.30** ✅,
|
||||||
|
但框体外缘量得 **62.95 见方**(比 60 标称每边大 1.48)⇒ **开孔按 60 留隙、螺孔按 50×50**。
|
||||||
|
|
||||||
|
**画外壳的输入(全部为底板局部坐标,mm)**:
|
||||||
|
|
||||||
|
| 项 | 值 |
|
||||||
|
|---|---|
|
||||||
|
| 底板 | 98 × 98;四角 **M3 NPTH Ø3.2**,孔心 (4,4) (94,4) (4,94) (94,94) |
|
||||||
|
| 底板背面 | 最低 **−6.30**(`SRP1265A` 电感)⇒ ~~≥15 mm 铜柱~~ ⛔ **2026-09-13 改为立柱 10**:D15 那句「背面最高 12(C2/C3 直立电解)」的前提已失效——C2/C3 早已挪到顶面(`TOP_EXTRA`)。10 对背面件余量 **3.70**,外壳托盘 `Tray_v3` 按此建 |
|
||||||
|
| 底板顶面 | 最高 **13.17**(J26/J27 立式风扇座)|
|
||||||
|
| 刀片堆叠 | x **4.01~93.49** / y **7.52~95.17** / z **4.36~71.34**(含 B 面器件)|
|
||||||
|
| 相邻刀片净距 | **13.95**(B 面口径)|
|
||||||
|
| 风扇(两只)| 西 x **−25~0**、东 x **98~123**;y **19.87~82.82**、z **6.37~69.33** |
|
||||||
|
| 迎风面覆盖 | **61%**,最上/最下两条通道露在风扇正面外 ⇒ **导流罩是必需件,不是装饰** |
|
||||||
|
| 对外接口 | `J1` USB-C (12.50, 10.63, rot90)、`J23` USB-C (84.00, 5.25) —— **都在南边缘**;`J33` 排针 (80.00, 95.50) 北边缘;`J26`/`J27` 风扇座 (13.50, 94.50/88.00) 西北角 |
|
||||||
|
| 导轨 | 刀片上端要 3D 打印导轨防悬臂晃动,**咬边 ≤ 1 mm**(再多会压到手机主板,§2803)|
|
||||||
|
| 机箱内高 | ≈ **83**(槽体 11 + 刀片 67 + 导轨余量 5)|
|
||||||
|
|
||||||
|
### ⛔⛔ 遇到这两种报告先别慌,都是**已查实的假阳性**
|
||||||
|
|
||||||
|
`board_check` 的「靠铜面成网,但这些脚一根铜都不挨」在两块板上都会误报,根因都是
|
||||||
|
`covered()` 的口径不足(详见 `board_check.py` 文件头,2026-09-12 晚补写):
|
||||||
|
|
||||||
|
| 板 | 报几只 | 真相 |
|
||||||
|
|---|---:|---|
|
||||||
|
| 刀片 | **49** | `covered()` 第一行就是 `if '--base' not in sys.argv: return False` ⇒ **刀片下一只脚都不摘**,凡是「只靠铺铜盖住、不单独拉线」的去耦件地脚全被报成孤立 |
|
||||||
|
| 底板 | **5** | `C3.2`/`J26.1`/`J1.2`/`J1.3` 是**通孔**脚、被 L15/L16 整层 GND 盖住,而 `covered()` 第 119 行 `lay in (1,2)` 只看外层;`U29.3` 的焊盘框跨在 `GND-L4-1`/`GND-L4-4` 两块同网瓦片的接缝 x=1.80 上,铜面其实连续,但它要求单块完全包住 |
|
||||||
|
|
||||||
|
⇒ **判据是跟重铺前的板面快照逐只比对**。本会话就是这么证伪的:刀片重铺前后 `49 == 49`
|
||||||
|
逐只同名、铜段都是 899(铺铜只动填充多边形、不动导线)。
|
||||||
|
⚠ **没有放宽 `covered()`**:放宽会把真漏一起摘掉,代价更大。
|
||||||
|
|
||||||
|
### ✅ 本会话(2026-09-12 深夜)做完的
|
||||||
|
|
||||||
|
| 事 | 结果 |
|
||||||
|
|---|---|
|
||||||
|
| **待办 ④ 翻案** | `board_check --base` 判 121 网 **118 连通**(交接时 113)。`FAN_PWM_L` 已有 10 段铜且落在 J27.4 焊盘 (16.26,94.29),`FAN_EN`/两路 TACH 各 15/15/22 段全通。板上 **2060 段 / 671 孔**,比交接记的 1936/629 多 124 段 42 孔 —— **用户自己布的** |
|
||||||
|
| **刀片 `NOTCH_D` 7.45 → 8.3** | 用户拍板。两份封装副本重画(个人库 + 工程库)、PCB 板框折线重画并读回核到 **缺口顶 y = 8.300**、内层铺铜重铺 31 块填 31/31、**DRC 0 条**、56/57 连通 |
|
||||||
|
| **底板铺铜重铺** | 建 147 块填出 135,载流断面三条全过(`VIN_RAW` 6.60≥3.0 / `VIN_SW` 7.95≥6.5 / `+12V` 13.20≥8.0)。空的 12 块全是窄条碎片(最窄 0.70 宽,夹在 1mm 针排之间),正常 |
|
||||||
|
| 金手指长度 | 维持 **4.3**(用户拍板)。触点接触卡的位置是局部 y **3.63~4.57**、指铜 1.30~5.60 ⇒ 余量 1.03/2.33。缩短只省 ~19% 硬金、**换不来器件面积**(禁布区高 12.0 由插槽塑料体高 11.56 定,与指长无关) |
|
||||||
|
| **封装丝印抬过缺口顶** | 截图才发现:`NOT PCIe - PhoneRail blade` 在 y=7.20、x 28.5~44.1,**横穿缺口竖槽 39.20~40.80**,会被铣掉两三个字。新增 `fp_edge.SILK_Y = NOTCH_D + 0.6 = 8.90`(字带 8.40~9.40)+ 只重画丝印层的 `push_silk()`(不碰 64 个挂网络的焊盘)+ `--silk`。两份副本 `[OK]` |
|
||||||
|
| **J1 位号挪了两次** | ① (38.30, 8.378) → (37.84, 8.378):让开缺口 x(缺口只在 x 38.70~41.30 铣穿,y 本不用动),对左壁余 0.151。② 但抬丝印后字带变成 8.40~9.40,与 J1 框 7.81~8.95 **重叠 x 1.417 / y 0.550**(改动前间隙 0.11、本来不压)⇒ 再抬到 **(37.84, 10.13)**,框 9.56~10.70,离丝印带顶留 **0.159**、离铜面 11.50 余 0.798。三项复核全 `[OK]` |
|
||||||
|
| ⛔ **第三个判据盲区** | 位号 ↔ 封装内丝印的重叠**三方全沉默**:`silk_blade.audit()` 只看文档级 Designator(看不见封装内那行字)、`fp_edge.selfcheck()` 只在封装文档内读(看不见文档级位号)、DRC 不管丝印(非铜)。**又是截图才看出来的**。已写进 `silk_blade.py` 文件头 |
|
||||||
|
| **板框 90×68 → 89.5×67** | 用户要求「从金手指让出来那片裁」。实测那片**不是空板材**:占用带 x 2.195~89.140 / y 3.201~66.400,两侧空白只有西 2.195 / 东 0.860。定为**只裁东 0.5 + 北 1.0**,器件/金手指/舌头一律不动;`J1_X` 由 `BW/2` 解耦成常数 **45.0**(偏心 0.25 = 0.3%,用户拍板接受)。板框读回 74 点、外接 **0~89.5 × 0~67**,重铺 31/31,**DRC 0 条**、56/57 连通。面积 61.20→59.97 cm²(省 2.0%) |
|
||||||
|
| ⛔ **东侧为什么只能裁 0.5** | 卡点是 `VO_P`(4 A 主通道,宽 **1.283**)东沿到 **88.391**。裁到 89.0 时铜面界 88.5,而 88.391+0.15 = 88.541 > 88.5 ⇒ `INA_ALERT` 贴边竖线在 y≈54.1~54.25 **无解,收线宽也救不了**(0.279/0.20/0.15 全试过)。裁到 89.0 必须把那段 12.4 mm 挪进 L15 内层(切一道缝),而只多省 0.6% 面积 ⇒ 不拿地平面换 |
|
||||||
|
| `INA_ALERT` 西移 | 它原本**贴着旧板边 x=89.000 走了 12.4 mm**。改为竖线 x=88.800 / 过孔 x=88.600,6 段 + 2 孔,两端 `U3.3`/`U4.15` 并查集核到仍是同一块铜 |
|
||||||
|
| **位号丝印跟着板框修** | 板框缩小的下游回归:`silk_blade` 改前体检「越框/入禁区」从定版时的 1 涨到 **3**。**只动了 3 个位号**(`J3` 6.03 / `R63` 3.80 / `C69` 2.04),其余 78 个原位不变 ⇒ 上一轮的人眼确认基本保住。`modify 81/81`、读回 81 个全对上,改后回到 1(`J1` 白名单)。三个新位离各自器件焊盘框 0.857/1.513/0.751,都在 `MAXD` 2.2 内 |
|
||||||
|
| ⚠ 越框判据的两套口径 | 我自己按新板框判只有 `J3` 真越框(2 个角在板外),而 `silk_blade` 报 3 个 —— 它更严:越框要求「四角在框内**且到轮廓 ≥ 0.5**」,还把「入金手指禁区」并在同一项里。`R63`/`C69` 属于"离新板边不足 0.5",不是真跑到板外 |
|
||||||
|
| **缺口 1.6 → 1.9(§42.1)** | ⛔ **1.6 那版根本插不进**:厂商键筋根部 **1.78** > 1.6,卡插到 z=9.59 就被撑住、离槽底差 **7.59**。1.9 是 CEM/KiCad 标准值,配合间隙 **−0.090 → +0.060**。2026-09-11 那次改 1.6 是基于错误信息(把 1.6 当成"CEM 值"、代价只估成"余量少 0.15")|
|
||||||
|
| **台阶 12.0 → 9.9(§42.2)** | 「让舌头变短」。⚠ **这一刀让板材变多 115.5 mm²**(`STEP_H` 是切掉的高度,降低=两侧恢复板材),外接 89.5×67 不变。9.9 是下限:桥宽 1.60 / 肩部余量 1.90 / 丝印离肩部 0.50。**先前给过的 8.31 那档不可行**——桥宽只剩 0.01,等于把舌头切断 |
|
||||||
|
| **刀片 DRC 0 → 5 条** | 4 条焊盘(`J1_A11/A12/B11/B12`,0.2,PCIe 固有)+ 1 条过孔(`GND` (41.5,7.0),0.245,**缺口变宽造成,我立基线时漏扫过孔**)。5 条同性质,**下单时统一向嘉立创确认「缺口处铜到板边 0.2 可做」**。连通性仍 56/57、丝印与位号均未被铣掉 |
|
||||||
|
| 设计文档同步 | §6.6 / §40.2 台阶肩部 / §封装表 三处已改;新增 **§42** |
|
||||||
|
|
||||||
|
### ⚠ 本会话我自己犯的两次误报(都已更正,写下来免得重蹈)
|
||||||
|
|
||||||
|
1. **「293 处铜压在插槽针排上」是假的**。插槽焊盘是 `0.701 × 1.999` 的**竖长条**,
|
||||||
|
我拿 `max(w,h)/2 = 1.0` 当**各向同性半径**去减,横向半宽其实只有 0.35,每处少算 0.65。
|
||||||
|
真值如 `+12V(34.00) vs J38.4(35.50)` = 1.50 − 0.10 − 0.35 = **1.05**,被我算成 −0.501。
|
||||||
|
⇒ 教训还是那条:**让 DRC 当裁判**,别拿没验证过的自算口径下结论。
|
||||||
|
2. **「重铺能解决底板 GND 那 5 只脚」的预期本身就错**。那 5 只从来不是真漏(见上表)。
|
||||||
|
|
||||||
|
### ⛔ 改动均未提交
|
||||||
|
|
||||||
|
本会话改了 `.claude/r2/fp_edge.py`(`NOTCH_D` + 出处注释)、`.claude/r2/board_check.py`
|
||||||
|
(两段假阳性说明)、`刀片式方案规划-R2.md`(三处)、`PROGRESS.md`。
|
||||||
|
⚠ 仓库里还有**上一会话起就未提交**的一大批改动 + 448 个未跟踪文件,别一把 `git add -A`。
|
||||||
|
|
||||||
|
### 🔧 环境现状(2026-09-12 晚)
|
||||||
|
|
||||||
|
| | 状态 |
|
||||||
|
|---|---|
|
||||||
|
| EasyEDA 桥 | **通**,端口 49620(`bridge-server.mjs`,PID 15048);`lceda-pro` 6 个进程 |
|
||||||
|
| SolidWorks | PID **26352** 在跑。⚠ 会话中被自愈脚本杀过重启,**当前载入了什么不确定**——不必关心,三维脚本都自带自愈(连不上就自己杀、自己起、自己重导) |
|
||||||
|
| 板上状态 | 刀片 PCB `3b9c4e39c8d164db` 已存盘;DRC 间距 **0 条** |
|
||||||
|
|
||||||
|
### ⛔⛔ 所有改动**均未提交**
|
||||||
|
|
||||||
|
本会话改了 `PROGRESS.md` / `刀片式方案规划-R2.md`(§40.6 §40.7 §6.6)/
|
||||||
|
`.claude/r2/pcb_blade.py` / `pcb_pour.py` / `place_base.py`(仅 13 行注释)/
|
||||||
|
`NOTES-probed.md`;**新增未跟踪**:`.claude/r2/silk_blade.py`、
|
||||||
|
`.claude/skills/solidworks-assembly/scripts/`(6 个脚本)。
|
||||||
|
|
||||||
|
⚠ `place_base.py` 的 `git diff` 看着有 1449/915 整文件改动:那是**它本来就是 CRLF 而 HEAD 是 LF**
|
||||||
|
(会话开始时就已是 M 状态),真实内容差异 583 增/49 删分 48 段,**其中只有 1 段 13 行是本会话加的注释**。
|
||||||
|
别去"归一化"它——会把别人一整批未提交的工作全部重写。
|
||||||
|
|
||||||
|
### ✅ 量出来了:舌头 36.00 比插槽开口 35.08 宽 **0.92 mm**,插不进
|
||||||
|
|
||||||
|
2026-09-12 晚会话的结论。**三维要回答的问题已经回答完**,剩下的是设计决策。
|
||||||
|
|
||||||
|
| | 值 | 出处 |
|
||||||
|
|---|---|---|
|
||||||
|
| 插槽开口长 | **35.08**(part x ±17.540)| 顶面内环,`slot_opening_measure.py` |
|
||||||
|
| 开口宽 | **1.80** | 同上。STEP 板厚 1.67 ⇒ 厚度方向有 0.13 余量,**没问题** |
|
||||||
|
| 防呆键筋中心 | part x −5.00 ⇒ 刀片局部 **x 40.00** | 与 `fp_edge.NOTCH_CX = −5.0` 独立对上 ✅ |
|
||||||
|
| 刀片舌头 | **当时是 36.00**(`TONGUE_X0/X1` = 27.0/63.0)⚠ **本会话已改成 34.5 / 27.75·62.25** | 设计常量 |
|
||||||
|
| **差** | **每侧 0.46、共 0.92** ⇒ 舌头两端压在端壁上,插不下去 | |
|
||||||
|
|
||||||
|
> ⚠ 本表记的是**改之前**的状态,用来论证 36.0 为什么插不进。
|
||||||
|
> 现行常量见下面「舌头已改成 34.5 并下发」一节。
|
||||||
|
|
||||||
|
碰撞法独立印证:dz=12.00(压入 0.33)测得干涉体积 0.466 mm³ ⇒ 接触面积 1.41 mm²;
|
||||||
|
按实测过盈算应为 0.46 × 1.67 × 2 = 1.54 mm²,吻合。
|
||||||
|
|
||||||
|
⛔ **但顺序不能倒**:碰撞法**本身推不出**这个结论 ——「腔比舌头短」与「模型没建腔」
|
||||||
|
现象完全相同(本会话据此错判过一次)。是**先直接量到开口 35.08**,碰撞数据才有解释力。
|
||||||
|
详见 NOTES §27。
|
||||||
|
|
||||||
|
⚠ 35.08 是**厂商 STEP 的标称值,不含公差**;待办 ⭐① 的卡尺实测仍是权威口径。
|
||||||
|
本次的价值是给了一个**具体待验证的数**和明确方向。
|
||||||
|
|
||||||
|
### 插入深度 d 也量了:设计文档的「抬高约 11 mm」错得很远,真值 ≈ **2.7 ~ 3.2 mm**
|
||||||
|
|
||||||
|
零件本地坐标:塑料体顶面 z=**10.000**,**槽底 z=2.000** ⇒ 塑料允许的最大插入 **8.00 mm**。
|
||||||
|
|
||||||
|
| 约束 | 值 | 说明 |
|
||||||
|
|---|---|---|
|
||||||
|
| 槽底 | **8.00** | 通道内最高的朝上平面 z=2.000 |
|
||||||
|
| 防呆键筋高 | **8.00**(z 2.000~10.000)| 竖壁 x −5.890 / −4.110,顶端 0.5 是 45° 导入角 |
|
||||||
|
| 刀片缺口深 `NOTCH_D` | **7.45** | 若键筋通到槽底,**插入被缺口深度限制到 7.45** |
|
||||||
|
|
||||||
|
⛔ **下面这一段是改动之前的状态,2026-09-12 深夜已被取代 —— 现值 d = 8.00 / 离板面 2.66。**
|
||||||
|
保留是因为它论证了**为什么要加深缺口**。
|
||||||
|
|
||||||
|
> ⇒ **d = 7.45**(2026-09-12 晚收紧,原先写的区间 `7.45~8.00` 不成立)。
|
||||||
|
> 键筋是**通到槽底的全高 8.00**,而缺口只有 **7.45** ⇒ 卡往下插时**缺口封闭端先顶在键筋顶上**:
|
||||||
|
> 卡底边停在 `z = 10.000 − 7.45 = 2.55`,离槽底 2.000 还差 **0.55,够不到**。
|
||||||
|
> ⇒ 刀片底边离底板板面 = `(12.33 − 7.45) − 1.67` = **3.21 mm**(区间下限 2.66 那一端**永远达不到**)。
|
||||||
|
>
|
||||||
|
> ⚠ **由此引出的设计问题**:卡是**坐在塑料防呆筋上**,不是坐在槽底。
|
||||||
|
> 触点在 z 6.18~7.12、卡底 2.55 完全盖住 ⇒ **电气无碍**;但受力点从槽底变成一条塑料筋,
|
||||||
|
> 可考虑把 `fp_edge.NOTCH_D` 由 7.45 加深到 **≥ 8.0** 让它坐到底。**未动,待用户定。**
|
||||||
|
|
||||||
|
✅ **2026-09-12 深夜用户拍板加深到 8.3,已下发验证**(封装两份副本 + PCB 板框折线读回
|
||||||
|
缺口顶 y = **8.300**,内层重铺,DRC 0 条)。8.3 > 键筋全高 8.00 ⇒ **缺口让开键筋、卡坐到槽底**:
|
||||||
|
|
||||||
|
| | 旧(`NOTCH_D`=7.45) | **现行(8.3)** |
|
||||||
|
|---|---:|---:|
|
||||||
|
| 谁先顶住 | 缺口封闭端顶在键筋顶 | 缺口让开,**坐到槽底** |
|
||||||
|
| 卡底停在 | z=2.55 | z=**2.000** |
|
||||||
|
| 插入深度 d | 7.45 | **8.00**(改由槽底决定) |
|
||||||
|
| 刀片底边离板面 | 3.21 | **2.66**(原先被判"永远达不到"的那一端) |
|
||||||
|
|
||||||
|
8.3 = 模型槽底 8.00 再留 0.3 余量,防实测键筋高于标称。⚠ 8.00 / 2.000 都是厂商 STEP
|
||||||
|
标称值、不含公差,**卡尺实测仍是权威口径**(待办 ⭐①)。
|
||||||
|
设计文档「插槽把刀片底边抬到底板上方约 **11 mm**」应改 —— 11.56 是**插槽体自己的高度**,
|
||||||
|
不是刀片底边的离板高度,两者被混为一谈了。
|
||||||
|
|
||||||
|
⚠ **模型里有两处不能当真**(都是刚体建模的产物):
|
||||||
|
- 簧片触点在 z 6.181~7.123 把通道夹到 **1.568**(比 1.6 标称卡还窄)。真卡是把簧片**撑开**的,
|
||||||
|
刚体模型撑不开 ⇒ 干涉检查会在此处假报"插不进",**不构成真实限制**。
|
||||||
|
- 键筋宽实测 **1.78**(顶端 0.78),刀片缺口 `NOTCH_W = 1.60`。两个数都不像 CEM 标准值,
|
||||||
|
⇒ **这个 0.18 mm 级的配合,模型精度判不了,只能靠卡尺**。
|
||||||
|
(相比之下开口 35.08 vs 舌头 36.00 差 0.92,比模型误差大一个数量级,那条结论不受影响。)
|
||||||
|
|
||||||
|
### ✅ 舌头已改成 34.5 并下发(2026-09-12 晚,用户拍板)
|
||||||
|
|
||||||
|
`pcb_blade.TONGUE_X0/X1 = 27.75 / 62.25`。连带改动与验证:
|
||||||
|
|
||||||
|
| 事 | 结果 |
|
||||||
|
|---|---|
|
||||||
|
| 板框下发 + 读回对账 | 折线 1 条 / 74 点,外接 0~90 × 0~68,挖槽 2 个,`[OK]` |
|
||||||
|
| **`corner()` 半径 bug**(见 §40.6)| 修掉后舌头**全高等宽 34.50**(原来 y=11 处只有 32.5)|
|
||||||
|
| `J1` 位号挪位 | (28.500, 8.378) → **(38.30, 8.378)**,读回验证;落在过孔空档 35.1~41.5 正中 |
|
||||||
|
| `pcb_pour.V12_ISLAND` | x0 写死 27.0 → 改成跟随 `B.TONGUE_X0`,从此不会再漏改 |
|
||||||
|
| 重铺铜 | 31 块重建、填充 31/31、`{'poured':31,'pour':31}` |
|
||||||
|
| **DRC** | **19 → 0 条** ✅(中途 19 → 4 → 2 → 0,见下)|
|
||||||
|
|
||||||
|
⚠ **`corner()` 那个 bug 是收窄舌头才显形的**:舌头侧边一直是斜的(尖端 34.5、y=11 处 32.5),
|
||||||
|
36.0 时斜边够不着走线所以 DRC 不报。收到 34.5 后才把 `+12V`/`PRSNT#`(x=28.50)切到板外。
|
||||||
|
修好后这 4 条违规不改线即消失,`y=13.00` 的两个 GND 过孔也一并让开。
|
||||||
|
|
||||||
|
### ✅ 最后 4 条 DRC 也清掉了(+5V 走线,用户拍板"现在就挪")
|
||||||
|
|
||||||
|
涉及 x≈61.7 的 **三段共节点** +5V 线(`(60.10,13.75)→(61.72,12.13)→(61.72,6.67)→(61.50,6.46)`)。
|
||||||
|
⚠ 其中 `(61.72,12.13)-(61.72,6.67)` 在**旧板框下就已违规**(旧 d = −0.012),不是本次引入。
|
||||||
|
|
||||||
|
**过程中撞上一个几何死结**(值得记住):
|
||||||
|
|
||||||
|
| 方案 | 到板边(需 ≥0.3)| 到 GND 过孔 (60.83,6.99) |
|
||||||
|
|---|---|---|
|
||||||
|
| 原位 x=61.72 / 宽 0.60 | **0.235** ✗ | 0.28 |
|
||||||
|
| 只平移到 61.60 / 宽 0.60 | 0.35 ✓ | **0.162** ✗(DRC 4 → 2,换了个违规)|
|
||||||
|
| **定稿 x=61.70 / 宽 0.46** | **0.32** ✓ | **0.33** ✓ |
|
||||||
|
|
||||||
|
⇒ **纯平移无解**:板边要求 `x ≤ 61.65`、过孔要求 `x ≥ ~61.71`,窗口为空。
|
||||||
|
必须同时收线宽才能两头满足。
|
||||||
|
|
||||||
|
**载流核过**(按本文档 §6.4 的 IPC-2221 口径):+5V(VBUS)需求 **≤0.5 A**;
|
||||||
|
锚点 1.5 A→1.2 mm、0.30 mm→0.65 A ⇒ **0.46 mm 外层 1 oz ≈ 0.88 A**,余量 1.8 倍。
|
||||||
|
|
||||||
|
⛔ 诊断过程中的一个**工具失效**要记住:`drc_read.py` 对这一类**连续两次**报
|
||||||
|
`读不到明细: leaf not found`(它的分类树 React 点击到不了该叶子),
|
||||||
|
且分类名被截成「`到 导线`」**丢了左操作数**。
|
||||||
|
⇒ 拿不到明细时别硬猜规则表列号(表无表头、值域只有 0.15/0.254/0.3,
|
||||||
|
而"到过孔外径"与"到钻孔"两种口径会给出相反结论),
|
||||||
|
**直接改成一个在任何解释下都合规的值,让 DRC 当裁判**。
|
||||||
|
|
||||||
|
### SolidWorks 现场状态
|
||||||
|
|
||||||
|
⛔ **上一版交接里描述的那个装配体已经不存在了**。重度使用 `IInterferenceDetectionMgr`
|
||||||
|
之后 SolidWorks 会丢掉运行对象表注册,客户端侧无解、只能重启(NOTES §24),
|
||||||
|
期间被杀掉重建过两次。
|
||||||
|
|
||||||
|
**现在**:PID **26352**(会话中又被自愈脚本杀过一次重启,所以**当前载入了什么不要断言**)。
|
||||||
|
盘上 `D:\DCDC\新建文件夹\` 的两份 STEP 与两个 `.SLDASM` 都还在 —— 这才是可靠的起点。
|
||||||
|
|
||||||
|
⇒ 要再做三维,**不要手工重搭**:
|
||||||
|
`python .claude/skills/solidworks-assembly/scripts/rebuild_assembly.py`
|
||||||
|
(导两份 STEP → 建总装 → `AddComponent4` → 把底板变换归单位阵,一条命令到位),
|
||||||
|
再 `place_and_probe.py sweep 2`。脚本**自带自愈**(连不上就自己杀、自己起、自己重导)。
|
||||||
|
|
||||||
|
### ⛔ 上一版交接里被证伪的三条
|
||||||
|
|
||||||
|
| 原来写的 | 实测更正 |
|
||||||
|
|---|---|
|
||||||
|
| 卡点是 `CreateTransform` 封送没解决 | **已解决**:dispid + `VARIANT(VT_ARRAY\|VT_R8)`。⚠ 传 tuple 不报错但**静默返回单位阵** |
|
||||||
|
| 旋转矩阵那 9 个数是**行主序** | 是**列主序**;写成转置会让刀片**倒插**(box z 变成 −47.99~19.99)|
|
||||||
|
| `ToolsCheckInterference2` 可用 | **是死的**:刀片板体穿过底板板体的姿态下仍返回 `None` / 0 条。改用 `IInterferenceDetectionMgr` |
|
||||||
|
|
||||||
|
⇒ **动手前必读 `.claude/skills/solidworks-assembly/NOTES-probed.md`**(已扩到 28 节)。
|
||||||
|
|
||||||
|
⚠ 本会话栽了**五次「静默的 0 / 空」**,NOTES 里都记了判据教训,新会话务必先看:
|
||||||
|
`ToolsCheckInterference2` 恒返回 0(§13)、`GetFaceCount` 返回 0(§25)、
|
||||||
|
连接将死时 1388/1883 个面取值失败却"看着像个干净结论"(§28)、
|
||||||
|
焊盘 `getAll()` 的 `width/height` 全是 `undefined`(`silk_blade.py` 模块头)、
|
||||||
|
`pcb_PrimitiveString.getAll()` 看不见封装内部丝印(同上)。
|
||||||
|
**共同点:返回值看着正常 ≠ 它在工作。遍历类脚本一律加分级计数器。**
|
||||||
|
|
||||||
|
### 上一会话(2026-09-12 白天)做完的(都已下发 + 落库)
|
||||||
|
|
||||||
| 事 | 结果 | 提交 |
|
| 事 | 结果 | 提交 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
@@ -103,13 +857,50 @@
|
|||||||
|
|
||||||
### ⬜ 待用户确认 / 待办
|
### ⬜ 待用户确认 / 待办
|
||||||
|
|
||||||
1. ⭐ **卡尺量两个数**(比 3D 准,STEP 里的插槽是厂商标称模型、不含公差):
|
1. ⭐ **卡尺量三个数**(STEP 是厂商标称模型、不含公差,实测才是权威):
|
||||||
① 插槽塑料体**内腔**长度 → 定死舌头宽度(现在 36.0 按标称 39 推的)
|
① 插槽**开口长度** → 定死舌头宽度。**模型值 = 35.08**(舌头现在 36.00,**过宽 0.92**)
|
||||||
② 塑料体顶面到**卡底边**的深度(`d`)→ 定死刀片底边离底板多高,
|
② **插入深度 `d`** → 定死刀片底边离板面多高。**模型值 = 7.45**(已收紧,不是区间)
|
||||||
顺带修正文档里那个错的「抬高 11 mm」(真值应是 `11.1 − d` ≈ 5~7)
|
键筋全高 **8.00** > 缺口深 `NOTCH_D` **7.45** ⇒ 卡的缺口封闭端**顶在键筋顶上**、
|
||||||
2. 刀片的**位号丝印**至今没重排过(底板做了,刀片没做)
|
够不到槽底(卡底停在 z=2.55,离槽底 2.000 差 0.55)⇒ 离板面 **3.21**。
|
||||||
3. 底板遗留 2 条没布通:`FAN_PWM_L:J27.4`、以及三条到 U20 的窗外段(**拆线前也没通**)
|
⚠ **顺带待你定**:要不要把 `NOTCH_D` 由 7.45 加深到 **≥8.0**,让卡坐到槽底而不是
|
||||||
4. 人眼确认:刀片台阶形状、底板丝印(图都发过了)
|
坐在一条塑料防呆筋上。触点在 z 6.18~7.12、卡底 2.55 完全盖住 ⇒ **电气无碍**,
|
||||||
|
纯粹是受力点的选择。**未动。**
|
||||||
|
③ **防呆键筋宽度** → 模型给 1.78、刀片缺口 `NOTCH_W=1.60`。
|
||||||
|
⚠ **模型精度判不了这个量级**(同一模型里触点把通道夹到 1.568,比 1.6 标称卡还窄),
|
||||||
|
必须实测才能定要不要把缺口放宽。
|
||||||
|
2. ✅ **「抬高约 11 mm」的影响面已查完(2026-09-12 晚):只波及 §6.6 一处,已改。**
|
||||||
|
- **逐件核过底板顶面件 vs 刀片:无碰撞。** `J26`/`J27`(13.17) / `J33`(10.21) /
|
||||||
|
`C2`/`C3`(9.67) 到刀片板面净距 0.56~3.29,全 ≥ `CARD_CLR=0.5`。
|
||||||
|
高度之所以不构成问题:它们最高只够到**刀片局部 y ≤ 8.29**(刀片底边 z=4.88),整段在
|
||||||
|
`ZONES['finger']`(y 0~12)这个**两面禁布区**里 —— 那一段刀片只有 1.67 裸板。
|
||||||
|
(刀片本体下沿最低的 `U4` 在 y=11.75 ⇒ 底板 z=16.63,比 13.17 还高 3.46。)
|
||||||
|
- ⚠ **`J26` 只富余 0.06 mm,以后别动它。**
|
||||||
|
- **派生上限(新增)**:底板顶面件高过 **z=16.88**(板面以上 15.21)就会够到刀片器件带,
|
||||||
|
届时横向判据要从对称的 ±1.300 改成 `槽心 −0.835 ~ +5.535`(器件面朝 +y)。现状最高 13.17。
|
||||||
|
- 其余引用 11 的地方都是**别的量**,不受影响:§3.1「金手指区 11」是刀片自己的禁布区高度;
|
||||||
|
§3.2 / 槽距 20.32 用的是片间距;「机箱内高 ≈ 槽体 11+67+5」用的是槽体自身高度
|
||||||
|
(真值 11.56,偏 0.56,量级无影响)。
|
||||||
|
- 已同步更正 `place_base.py` 里那句同样写着 11 mm 的注释(结论对、理由错)。
|
||||||
|
3. ✅ **刀片位号丝印已重排并下发(2026-09-12 晚,新工具 `silk_blade.py`)**
|
||||||
|
|
||||||
|
| | 改前 | 改后 |
|
||||||
|
|---|---:|---:|
|
||||||
|
| 压焊盘 | 68 | **0** |
|
||||||
|
| 压过孔 | 34 | **1**(`R15`,降级第 1 级)|
|
||||||
|
| 越框 / 入禁区 | 2 | **1**(`J1`,见下,设计例外)|
|
||||||
|
| 互相重叠 | 8 对 | **0** |
|
||||||
|
|
||||||
|
`modify 81/81`、读回核对 81 个全部对上;DRC 仍 **0 条**(丝印非铜,无回归)。
|
||||||
|
- ⚠ **`J1` 是有意的例外**:位号在 (38.30, 8.378)、文字框 y 7.81~8.95,落在
|
||||||
|
`ZONES['finger']`(y<12)里。但手指顶端只到 5.6、缺口顶 7.45,它在两者之上 2.2 mm,
|
||||||
|
与金手指电镀 / 30° 斜边无冲突。位置是 `8ab9b6d` 定的,本次只在 x 方向挪过
|
||||||
|
(舌头收窄到 34.5 后原位 28.50 离板边只剩 0.75)⇒ 列入 `silk_blade.KEEP` 白名单。
|
||||||
|
- `silk_blade.py` 相对 `silk_base.py` 的四处刀片专属改动写在它的模块头。
|
||||||
|
4. ~~底板遗留 2 条没布通:`FAN_PWM_L:J27.4`、以及三条到 U20 的窗外段~~
|
||||||
|
✅ **2026-09-12 深夜已翻案作废**:用户自己在客户端布通了。`board_check --base` 判
|
||||||
|
121 网 **118 连通**,`FAN_PWM_L` 10 段(有一段落在 J27.4 焊盘 (16.26, 94.29))、
|
||||||
|
`FAN_EN`/`FAN_TACH_IN`/`FAN_TACH_OUT` 各 15/15/22 段全通。**不要再照这条去跑布线器。**
|
||||||
|
5. 人眼确认:刀片台阶形状、**刀片位号丝印**、底板丝印(图都发过了)
|
||||||
|
|
||||||
## ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 2026-09-12:刀片金手指两侧开台阶(**插不进插槽**)+ 铺铜补齐(都已下发)
|
## ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 2026-09-12:刀片金手指两侧开台阶(**插不进插槽**)+ 铺铜补齐(都已下发)
|
||||||
|
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ USB 通断」这些原本要人手做的动作全部电气化,交给板上 MCU
|
|||||||
| **SW-2** | 20 ms 周期巡检六路 INA226,电压偏离 >+100 / −250 mV 持续 20 ms 即关路告警(SR-5) |
|
| **SW-2** | 20 ms 周期巡检六路 INA226,电压偏离 >+100 / −250 mV 持续 20 ms 即关路告警(SR-5) |
|
||||||
| **SW-3** | 过流 / 故障事件记录:路号、时刻、电流值 —— 排查排线接触不良的唯一线索 |
|
| **SW-3** | 过流 / 故障事件记录:路号、时刻、电流值 —— 排查排线接触不良的唯一线索 |
|
||||||
| **SW-4** | 单路电压微调接口(跑不稳的手机提到 4.0 V,或反向降压降温),**上限受 SR-13 约束** |
|
| **SW-4** | 单路电压微调接口(跑不稳的手机提到 4.0 V,或反向降压降温),**上限受 SR-13 约束** |
|
||||||
| **SW-5** | 侧键序列:短按 100 ms 唤醒 / 长按 5 s 开机(小米8 实测 2 s 不够,2026-09-28)/ 长按 10 s 强制重启 / VOL−+PWR 进 Fastboot / VOL++PWR 进 Recovery。硬重启末尾的开机键**按完看电流**:松键后 3~5 s 内 < 100 mA 就重按,最多 3 次,仍不开记事件 19「开机重按」并保持供电(固件 0.1.2,起因是电源键弹片接触不良) |
|
| **SW-5** | 侧键序列:短按 100 ms 唤醒 / 长按 5 s 开机(小米8 实测 2 s 不够,2026-09-28;3 s 也不够,2026-09-30)/ 长按 10 s 强制重启 / VOL−+PWR 进 Fastboot / VOL++PWR 进 Recovery。硬重启末尾的开机键**按完看电流**:松键后 3~5 s 内 < 100 mA 就重按,最多 3 次,仍不开记事件 19「开机重按」并保持供电(固件 0.1.2,起因是电源键弹片接触不良) |
|
||||||
| **SW-6** | EDL 时序**固定为** `EDL_EN=1` → `VBUS_EN=1` → 等枚举 → `EDL_EN=0`(先短接再插 USB) |
|
| **SW-6** | EDL 时序**固定为** `EDL_EN=1` → `VBUS_EN=1` → 等枚举 → `EDL_EN=0`(先短接再插 USB) |
|
||||||
| **SW-7** | 开机脚本执行「关充电」(写 `input_suspend` 类节点),路径需在首台机上确认后写死 |
|
| **SW-7** | 开机脚本执行「关充电」(写 `input_suspend` 类节点),路径需在首台机上确认后写死 |
|
||||||
| **SW-8** | USB 反灌保护:检测到该路电流转负或母线上升,**200 ms 内**断开该路 VBUS。刷机模式窗口内「顶高」按绝对值 4.45 V 判(SR-10 的例外),电流转负照断 |
|
| **SW-8** | USB 反灌保护:检测到该路电流转负或母线上升,**200 ms 内**断开该路 VBUS。刷机模式窗口内「顶高」按绝对值 4.45 V 判(SR-10 的例外),电流转负照断 |
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户