Commit Graph
21 Commits
Author SHA1 Message Date
wangfq d69f15e5f7 feat(V4B): V4.36.22 — 最低电感量下限 20µH→25µH
用户拍板 COIL_L_MIN_UH=25 (43nF 口径)
- 频率窗上限 171→153kHz (f@25µH=153.5k; 153=L25.16µH 正常/154=L24.84µH 偏小)
- L<25µH(f>153k) → 断开级快闪 (判定/指示/防抖 5s 逻辑不变)
- 提示: 现场 21/23µH 测试线圈(f≈164k>153k)将再入断开快闪区, 需换 ≥30µH
- test 边界 153/154; 4 测试全绿
语法0 error; spec V2.39 / manual / devlog V2.58
2026-09-07 09:14:45 +08:00
wangfq 809c52e40b feat(V4B): V4.36.21 — 电感量下限判定防抖 1s→5s
用户: 电感量下限判定重要, 确保不误检, 判定时间可加长
- COIL_FAULT_HOLD_TICKS 100→500 (1s→5s, TaskLoop.h 宏)
- 越界置位/恢复清除均 5s 连续确认 (防起振/瞬态 f 冲高 171k 误报断开级快闪)
- 判定线不变 (18~171kHz / L≥20µH); coil_monitor 防抖宏化
- test 全用例同步 5s 语义 (499 不置位/500 置位); 全绿
语法0 error; spec V2.38 / devlog V2.57
2026-09-07 09:12:00 +08:00
wangfq 16eed844a6 feat(V4B): V4.36.20 — 最低工作电感量 COIL_L_MIN_UH=20µH, 低于按线圈断开指示
用户需求: 设定最低电感量工作值(默认 20µH, 43nF 低频档口径, 宏定义);
线圈电感量低于该值 → 黄灯快闪以线圈断开状态指示
- TaskLoop.h: 新增 COIL_L_MIN_UH 20; 频率窗上限 125→171kHz (=L 20.06µH,
  43nF: L=2.533e7/(f²×43)) — 20~38µH 小线圈转为可正常工作(含现场 21/23µH)
- poll_yellow_led 模式1: g_coil_fault==2 归入断开级快闪(!LOOP_OK/reconn_stab 同级)
- 一长一短(模式5)仅保留 coil_fault==1 (L 偏大 f<18kHz)
- coil_monitor 防抖 1s 不变; 继电器/判定逻辑不动(仅指示级)
- test: 171 正常/172(L<20µH) 偏小, L 偏大 17; 全绿
语法0 error, 4测试全绿; spec V2.37 / devlog V2.56
2026-09-07 09:08:37 +08:00
wangfq e1b5542296 feat(V4B): V4.36.18 — 频率窗下界 20→18kHz
COIL_F_OK_MIN_KHZ 18: 合理窗 18~125kHz (@43nF ≈ L47µH~1.15mH) 放行更大电感
test 边界 17偏大/18正常 全绿; 镜像同步
顺带修正 spec 参数表历史滞后: MAX 115→125, COIL_CAL_C_NF 68→43
语法0 error; spec V2.34 / manual / devlog V2.53
2026-09-04 17:35:41 +08:00
wangfq c7adcc6397 feat(V4B): V4.36.9 — 频率窗上限 115→125kHz
COIL_F_OK_MAX_KHZ 125 (43nF板口径 ≈38µH 起)
test_coil_range 边界 125/126 全绿; 语法0 error
spec V2.25 / manual 故障表 / devlog V2.43
2026-09-04 10:54:12 +08:00
wangfq 8c35cc0522 feat(V4B): V4.36 — 频率窗上限 108→115kHz (43nF板≈44µH, 放行~48µH小线圈)
test_coil_range 边界 115/116 全绿; 语法 0 error
文档: devlog V2.34 / spec V2.15 / manual V2.12
2026-09-03 17:15:47 +08:00
wangfq f6e2a82935 feat(V4B): V4.35 — 频率窗上限复核 92→108kHz (43nF板口径≈50µH)
V4.33 的 92k 是 0Ω 实验板(68nF)语境; 产品回到三极管板(43nF)后 92k≈70µH 过严,
40~70µH 正常线圈会误报 → 上限 108k = L≈50µH (保留最小合理线圈)
test_coil_range 边界 108/109 全绿; 语法 0 error
文档: devlog V2.33 / spec V2.14 / manual V2.11
2026-09-03 17:13:00 +08:00
wangfq 1c065b280e feat(V4B): V4.33 — 线圈频率窗上限 120→92kHz (COIL_F_OK_MAX_KHZ)
f>92kHz → L偏小告警(一长一短, 原 120kHz); 顺带修正 manual 黄灯表旧时序
(200/100/100/800→300/100/100/700, V4.32 遗留) 与频率窗描述
test_coil_range 边界 92/93 全绿; 语法 0 error
文档: devlog V2.31 / spec V2.12 / manual V2.10
2026-09-03 16:36:17 +08:00
wangfq 7983bfd72d feat(V4B): V4.31 — 故障补偿时序再调: 预判2s + 补偿7s (总恢复 ~15s)
V4.30 基础上现场手感再收紧: ENV_WARN_WAIT 300→200(2s);
ENV_RESYNC_WAIT 800→700(7s); 恢复确认 200(2s) 不变
时序: 2s 黄灯预判锁存 → 7s 进入学习 → 6s 学完原子替换 → 2s 确认灭
test_env_resync.c 同步 → 5 场景 ALL PASS (warn@200, applied@1300, 灭@1500)
文档: devlog V2.29 / spec V2.10 / design doc v0.8
2026-09-03 16:16:37 +08:00
wangfq 4200d96250 feat(V4B): V4.30 — 故障补偿时序: 预判3s + 补偿8s + 恢复2s (总恢复 ~16s)
拍板: 预判 ENV_WARN_WAIT 500→300(3s); 补偿 ENV_RESYNC_WAIT 1000→800(8s);
恢复确认 ENV_RECOVER_WAIT 500→200(2s, 新基线替换后空闲稳定即灭灯)
时序: 3s 黄灯预判锁存 → 8s 进入学习 → 6s(3×200tick)学完原子替换 → 2s 确认灭
test_env_resync.c 重写: 镜像与固件逐分支一致(学习中压线=搁置不退出/学习仅高位段
计数/abort后循环重触发) → 5 场景 ALL PASS (warn@300, applied@1400, 灭@1600)
文档: devlog V2.28 / spec V2.9 / design doc v0.7
2026-09-03 16:08:21 +08:00
wangfq 92f675e2d3 feat(V4B): V4.26 — 线圈电感量告警(一长一短) + 故障补偿 60s→10s (4点拍板)
1. 默认低频档频率合理窗 20~120kHz, 出界即告警(不做档位判定/灰带):
   TaskLoop.c 新增 coil_monitor() — 稳定+无车空闲由无车主路径调用,
   Origin 反推空场 f, f<20kHz→L偏大/f>120kHz→L偏小, 1s 防抖置位/清除
2. 告警形式: 黄灯"一长一短" 200ms亮/100ms灭/100ms亮/800ms灭 循环 (模式5)
3. 黄灯优先级: 断开快闪 > 故障补偿(学习)常亮 > 电感量一长一短 > N短闪 > 灭
4. 故障补偿等待 ENV_RESYNC_WAIT 6000→1000 (60s→10s): 总补偿 ~66s→~21s

验证: tests/test_coil_range.c 5场景(边界19/20/120/121+防抖) ALL PASS;
      test_env_resync.c 适配10s(applied_at=1600tick) 5场景 ALL PASS; 语法 0 error
文档: devlog V2.24/spec V2.5/manual V2.9/design doc v0.3(标记已实现)
修复: 源文件行尾多CR污染(\\r\\r\\r\\r\\n)统一规范化回标准CRLF
2026-09-03 10:50:26 +08:00
wangfq 47cb1d944e fix(V4B): V4.25 黄灯预判改锁存语义 — 触发后回摆保持常亮, 环境空闲稳定5s才灭
原(V4.25首个提交): 黄灯条件 wait_cnt>=5s, 回摆(wait清零)即灭 — 用户反馈应锁存:
一旦5s黄灯常亮, 高位回摆/目标靠近也保持常亮; 只有"新的没有变化的环境"
超过5s 确认恢复, 黄灯才灭。

改动:
- 新增 g_env_warn 预判锁存标志(只增不清): dev>+4dlt 高位累计满
  ENV_WARN_WAIT=500tick(~5s) → g_env_warn=1, 黄灯常亮
- 新增 g_env_recover_cnt 恢复确认: 环境回窗口内且 dev 未进进入线(>-dlt)
  连续 ENV_RECOVER_WAIT=500tick(~5s) → 解除锁存, 黄灯灭
  - 目标进确认区(dev<-dlt)/深压(dev<-4dlt) → 恢复计时清零
  - 高位重现 → 恢复计时清零, 黄灯保持
- abort/apply 均不清 g_env_warn (替换后也需恢复确认5s才灭)
- 黄灯模式4条件 = g_env_resync || g_env_warn
tests 5 场景: 回摆保持常亮→稳定5s灭→高位重现再锁存; 学习打断/放弃后锁存保持
docs: devlog V2.23 + spec V2.4 + 手册 V2.8 同步锁存语义
2026-09-02 19:03:49 +08:00
wangfq 7fd120fdf3 feat(V4B): V4.25 — 环境异常黄灯预判: 高位持续5s即常亮(将进入重学)
背景: V4.24 黄灯只在60s进入学习后才亮, 前60s操作员无可视反馈
改动: poll_yellow_led 模式4条件放宽 = g_env_resync || g_env_wait_cnt>=ENV_WARN_WAIT
  - ENV_WARN_WAIT=500tick(~5s) 放 TaskLoop.h 文件级(poll_yellow_led 可见)
  - dev>+4dlt 高位连续5s未回摆 → 黄灯预判常亮; 累计60s才真正学习(黄灯保持)
  - 预判≠学习: 回摆/目标靠近(wait清零) → 黄灯即灭, 不触发学习
tests/test_env_resync.c 扩展: 预判点亮时刻=500tick / 瞬态4000tick预判亮但不学
  / 打断回摆后预判灭; 5场景ALL PASS + 语法0 error
docs: devlog V2.23 + spec V2.4(ENV_WARN_WAIT行) + 产品手册 V2.8 同步
2026-09-02 18:40:39 +08:00
wangfq 672f143e99 feat(V4B): V4.24 — 环境重校准:永久环境变化自动恢复基线(金属板A拿走场景)
现场(2026-09-02实测): 线圈旁金属板A上电把Origin学低(128096),A拿走CAPVD弹回
真空场(128856) dev=+761(0.59%),被36321a1双向保护"dev>0永不更新"永久冻结
→ B触发需809cnt(正常54cnt) 灵敏度假性降低且不恢复(V4.20分钟级可自愈)

修复: dev>+4dlt高位两段式受控重校准
  ① 60s(ENV_RESYNC_WAIT)高位连续未回摆 → 判定永久环境变化(瞬态铁块类不污染)
  ② 学习基线B: 连续空闲窗200tick均值 + settle判稳(连续2窗漂移≤0.1%)
  ③ 空闲原子替换Origin, 清freeze/ORG/entry残留, slow snap, 黄灯恢复
- 学习期打断(回窗/dev<0/断线重连)→重算; 30s预算超时放弃保留旧Origin
- 黄灯模式4: 环境学习中常亮(优先级: 断开快闪>学习常亮>N短闪>灭)
- tests/test_env_resync.c 5场景ALL PASS(恢复66s/瞬态不学/打断重算/放弃/不震荡)
- docs: devlog V2.22 + spec V2.3 + 产品手册 V2.7 同步
2026-09-02 18:10:28 +08:00
wangfq cd0fd90770 feat(V4B): V4.23 — 红灯呼吸对齐vd960Loop(≈2.6s) + 上电自检基准判稳
现场测试 DLD154V4 反馈两问题修复:

1. 红灯呼吸太快 → 借鉴 vd960Loop 效果 (main.c poll_red_pwm)
   - 参数按 665/6800 缩放取整: 大步 100→39(≈5.9%), 近顶 20→10(≈1.5%),
     分界 585(88%), 峰值保持 660×3 步
   - 周期 ≈1.6s → ≈2.6s (仿真 42 步×60ms=2520ms)

2. 绿灯上电自检闪到"稳定基准值"才停 (TaskLoop.c 稳定期判稳)
   - 根因: 固定 128 样本即判稳, 与基准是否稳定无关; static 计数不清零,
     二次稳定期(安全复位)1 样本瞬间判稳
   - 修复: 全局 g_stable_cnt/g_settle_cnt, 每窗(100样本≈1s)Origin 均值
     漂移 ≤0.1% → settle++, 连续 2 窗 + 最少 128 样本判稳; 硬兜底 500
     样本(5s); 计数判稳退出/INIT_VD 清零

验证: tests/test_power_on_stable.c (200/300/500/200 样本 PASS),
      tests/test_red_breath.c (周期 2520ms/峰值保持/写值≤ARR PASS),
      gcc -fsyntax-only 两文件 0 error (借 vd960Loop AT32F421 库头)
文档: devlog 置顶 + 修订表回填 V2.12~V2.20 + V2.21; product-manual §5.1/
      核心特性; technical-spec V2.2 (§5.2 参数表/§7 判稳语义/§15 修订记录)

待现场验证: 呼吸观感、绿灯自检时长 (无车 2~3s / 首窗尖峰 3s / 5s 兜底)
2026-09-02 16:26:03 +08:00
wangfq 36321a171f fix(V4B): 负variation铁块锁死修复 — 基线跟踪双向对称保护 (V4.20)
现场: 特殊铁块(磁导率主导)靠近 → variation负 → Origin被污染 → 离开时假进入 → 锁死不释放
根因: 基线跟踪单边保护(只挡dev>+4×dlt), 负偏差(CAPVD>Origin)照常更新Origin
      FREEZE_TIMEOUT=10s后直接跳污染值更彻底
修复:
1. 偏差窗口对称 [-4×dlt, +4×dlt] — 负偏差也冻结基线
2. 负偏差只冻结、永不超时更新Origin(铁块停留多久不污染)
3. 正偏差保留FREEZE_TIMEOUT兜底(车辆长时间信号不丢)
4. 新增 EVT|neg_var_freeze 事件打印
单测: tests/test_neg_variation.c 6项全过(决策/超时/场景仿真)
文档: devlog V2.19
2026-09-02 10:26:41 +08:00
wangfq 3d8f412f33 feat(V4B): V4.07 SENS=0 触发回调 357→337 — 最终表 {337,71,38,25}/{51,27,18,12}
现场反馈: 等比值偏低档触发过深, SENS=0 回调至 337(300~357 折中)
- 进入表: {357,71,38,25} → {337,71,38,25}
- 释放表: {51,27,18,12} 不变
单测: test_planb_release.c 断言更新(V4.07), 全部通过
文档: devlog V2.16 + technical-spec §4.3.3
2026-09-01 15:31:05 +08:00
wangfq 778664067e feat(V4B): 方案B现场调校定稿 V4.06 — 进入加深+释放调浅双表, 全档等比
现场实测: SENS=3 进入21→25 + 释放14→12 接近PD132T最高灵敏手感(用户调校)
- 关键认知: 释放方向是CAPVD向Origin恢复, 释放线调浅(dlt小)→更晚释放
  (V4.05加深方向失败已记录, 现场实测确认调小有效)
- 全档等比: 进入×25/21 {300,60,32,21}→{357,71,38,25}
          释放×12/14 {60,32,21,14}→{51,27,18,12}
- 滞回 66%→47%, 触发更严+释放更晚, 行为等效PD132T(表值不再一致)
- 废弃 ReleaseTable_B 独立表(方向错误, 并入 SensTable_1 调校)

单测: test_planb_release.c 更新(滞回正/表值/调浅释放≥原始4档×4速/释放时刻) ✓
      test_release_slow_filter.c(方案A)仍通过
文档: devlog V2.15 + technical-spec §4.3.3 V4.06段
⚠ SENS=0 进入300→357变化大, 现场低档漏检可单独回调
2026-09-01 14:38:52 +08:00
wangfq 60413be73f feat(V4B): 方案B实验 V4.05 — USE_SLOW_RELEASE=0 + 调深释放阈值表 ReleaseTable_B
对比路线(与V4.04方案A A/B): 释放走快滤波(无慢滤波状态, 消除悬停风险),
手感对齐改由调深释放表 {80,42,27,18}(原始{60,32,21,14}加深30%)承担。

⚠关键认知(仿真+单测双确认): 释放方向是CAPVD向Origin恢复,
dlt增大(调深)→释放线降低→释放更早(与'调深=更严格'直觉相反)。
仿真预测: 深信号(≥0.2%)原始表更接近PD132T; 浅信号(0.1%)加深表更接近。

单测: tests/test_planb_release.c 新增(滞回为正✓/加深表释放≤原始表✓/释放时刻合理✓)
     test_release_slow_filter.c(方案A)仍通过, 两方案可回归
文档: devlog V2.14 + technical-spec §4.3.3 方案B段
2026-09-01 13:48:22 +08:00
wangfq 97a7fb2dba fix(V4B): 方案A现场复核修正 V4.04 — RELEASE_ALFA 18→21(精确τ117ms对齐PD132T) + 进入snap消除HR0/2假释放
现场金属板复测两现象:
1. 慢速抬板释放高度 V4B 仍比 PD132T 高一点(跟手速有关) — 根因: τ对齐用了近似口径
   (α18 精确τ≈137ms vs PD132T α79@43.7ms 精确τ≈118ms, α=79时 T×256/α 高估19.6%)
   + V4B 3次确认30ms。修正: RELEASE_ALFA 18→21 (精确τ≈117ms)。
2. 定在HR0/2(释放高度一半)保持~1s V4B释放、PD132T不释放 — 根因: 双滤波进入瞬态假释放
   (快滤波30ms确认进入, 慢滤波还悬在基线附近, 残余信号0.032%~0.044%时释放条件瞬时为真)。
   修正: 进入确认瞬间 snap loop1_CAPVD_slow = loop1_CAPVD (进入线恒深于离开线, 释放条件结构性为假)。

验证: gcc单测 τ fast=30ms/slow=120ms, 释放时机差 200ms ✓
仿真: 3s抬升高度差 +9mm→+3mm; 0.10%板HR0/2假释放消除 ✓
文档: devlog V2.13 + technical-spec §4.3.3
2026-09-01 09:46:55 +08:00
wangfq 9391e1b808 feat(V4B): 释放手感对齐 PD132T — 释放慢滤波(方案A, 固件 V4.03)
现场金属板测试: 灵敏度表已对齐, 但释放高度 V4B 比 PD132T 低
(刚离开触发位置即释放 vs 需离更远)。根因: IIR 滤波时间常数差异
(V4B 10ms+α79→τ32ms vs PD132T 43.7ms+α79/64→τ142~175ms),
释放阈值浅(进入20%)放大差异。

修复(USE_SLOW_RELEASE 开关, 默认 1):
- 新增独立慢滤波 loop1_CAPVD_slow(α=18/256 @10ms→τ≈142ms),
  吃原始 Value 不经斜率限幅, 复刻 PD132T 恢复速度
- 离开判定改用慢滤波值, 进入路径不变
- RELEASE_ALFA=18 可调(PD132T SET_FLT=ON 时用 15≈τ170ms)
- 同步: INIT_VD/稳定期/线圈重连
- 版本 V4.03(顺带修正 cmcng.h 字符串"4.00"与数字 4/2 不一致)

验证: gcc 单测 tests/test_release_slow_filter.c
τ fast=30ms/slow=140ms; 释放时机差 260ms ✓
文档: technical-spec §4.3.3 + devlog V2.12
待板级: 真机金属板测试 + MRS 编译
2026-08-31 16:52:45 +08:00