Commit Graph

39 Commits

Author SHA1 Message Date
wangfq
935e11e006 docs: 四文档同步更新至 V2.5
- devlog: 修订记录修正 30s→10s, 新增 V2.5
- release-notes: V1.6→V2.5, 新增 M4 优化特性 + 完整版本历程
- product-manual: V1.5→V2.5, 补充 V1.6~V2.5 版本历史
- technical-spec: V1.5→V2.5, 重写 §§4.2-4.5/5.2/12.1/13:
  - §4.2: 双路 IIR 架构(慢速基线 τ=135ms + 快速检测 τ=28ms)
  - §4.3.2: 进入确认机制(CAPVD_fast + ENTRY_CONFIRM=3)
  - §4.4: 斜率限幅 5% + 基线更新速率 1s (10ms tick)
  - §4.5: 冻结超时恢复演进史 V1.5→V2.5,完整逻辑 + 常量表
  - §5.2: Tick 改为 10ms,新增 FREEZE_TIMEOUT 参数
  - §12.1: 进入延迟 ~530ms,瞬态抑制,温漂 1s 补偿
  - §13: 新增 M4 优化编译选项
2026-06-29 10:57:24 +08:00
wangfq
df8e59803a tune: 冻结超时 30s→10s (FREEZE_TIMEOUT 3000→1000) 2026-06-29 10:48:48 +08:00
wangfq
33baa13b76 docs: devlog — V2.4 冻结超时稳定性检查 2026-06-29 10:30:20 +08:00
wangfq
fec67d6f20 feat: 冻结超时增加稳定性检查 — CAPVD波动超±2%则重置计数
问题: 上次提交仅计数冻结持续时长,若CAPVD在冻结期间大幅波动
(如车辆缓慢驶入过程中CAPVD持续爬升),30s后也会被误认为"环境变化"。

方案:
- 新增 loop1_freeze_ref: 记录进入冻结时的CAPVD值
- 每tick检查 |CAPVD - freeze_ref| > freeze_ref * 2%
- 波动超限 → 重置计数并以当前值重新开始计时
- 只有CAPVD连续30s稳定在±2%窗口内 → 才更新Origin

这确保了"连续稳定的新值"而非"连续偏高但波动的值"才会触发基线更新。
2026-06-29 10:30:01 +08:00
wangfq
22ffdede70 docs: devlog — V2.3 基线冻结超时自动恢复 2026-06-29 10:25:08 +08:00
wangfq
269fa7f4cc feat: 基线冻结超时 — 持续偏高30s后强制更新Origin
问题: 原点保护冻结基线后,若CAPVD因环境变化(温度、器件老化等)
稳定在新的高频值,Origin永远不会更新,导致永久误判有车。

方案:
- 新增 FREEZE_TIMEOUT=3000 (~30s @ 10ms/tick)
- CAPVD偏离时 loop1_freeze_cnt 逐帧递增
- 超时后强制 Origin = CAPVD(当前稳定值),视为新常态
- 中途若CAPVD回归正常范围,计数清零,继续正常跟踪
- 车辆进入时同步清零冻结计数
2026-06-29 10:24:53 +08:00
wangfq
55a6a2e99b docs: devlog — 记录 V2.1 CAPVD_fast 初始化修复 + V2.2 稳定期绕过 IIR/斜率限幅 2026-06-29 09:12:58 +08:00
wangfq
16090a48fa fix: 稳定期内绕过斜率限幅和 IIR,直接用 Value 建立基线
根因: 首测 CAPVD=177406 是瞬态高值 (~38% 偏高),
5% 斜率限幅让 CAPVD 在 128 tick 稳定期内无法充分收敛,
100 窗口滑动平均被前半段高值污染:
  Origin=149755 vs 真实值~128688, 差值 21067 >> dlt_ORG=82

修复: 稳定期内直接将 CAPVD/CAPVD_fast 设为 raw Value,
不做斜率限幅和 IIR, 使基线 100 窗口快速收敛到真实值。
稳定期结束后恢复正常 IIR+斜率限幅用于检测。
2026-06-26 16:23:47 +08:00
wangfq
e0e79db40e fix: CAPVD_fast 初始化条件错误导致始终为 0
根因: TMR3 ISR 首次捕获时直接设置 loop1_CAPVD (不为 0),
导致 vd1_task 的 if(CAPVD==0) 分支永远不执行,
CAPVD_fast 保持 INIT_VD 的 0 值。

修复: CAPVD_fast 判断改为 ==0 时首次锁定为当前 CAPVD 值,
后续正常执行快速 IIR 更新。
2026-06-26 16:17:01 +08:00
wangfq
17e4b07860 feat: M4 核心优化 V2.0 — 双路 IIR + 斜率限幅 + 进入确认
三项改进突破 8051 时代限制:
1. 10ms tick + 双路 IIR
   - CAPVD (慢速): α=18/256, τ=135ms — 基线跟踪,等效原 50ms 设计
   - CAPVD_fast (快速): α=0.5, τ=28ms — 检测判定,比原快 5×

2. 斜率限幅 (MAX_SLOPE_RATE=5%)
   - EMI/闪电瞬态尖峰被截断
   - 真实车辆缓慢频率漂移不受影响

3. 进入确认 (ENTRY_CONFIRM=3)
   - 连续 3 次 CAPVD_fast 低于阈值才判有车
   - 单次干扰无法通过 → 误触发率大幅降低

进入响应 ~530ms (比原 550ms 还快), 基线稳定性不变
2026-06-26 16:05:00 +08:00
wangfq
0abb7f2b21 fix: vTaskDelay 10→50ms 对齐 TMR15 5ms×10 原始设计 2026-06-26 14:40:06 +08:00
wangfq
714e84e065 docs: 记录 vTaskDelay 10→50ms 发现 (V1.7), 已修复于 vd960Loop 2026-06-26 14:30:59 +08:00
wangfq
7ccd26997f docs: §4.4.1 新增基线更新速率分析(DLD154/M1H/TLD-110 对比) 2026-06-24 11:48:53 +08:00
wangfq
c73c9dae2b docs: 添加产品发布说明 (V1.6 release notes) 2026-06-24 10:13:26 +08:00
wangfq
2f6cb54847 fix: 时序参数修正 — OUT/PULSE_DELAY 均为500ms
- OUT_DELAY: 1.9s→500ms (10 tick), SW_4=ON时生效, OFF时为0
- PULSE_DELAY: 950ms→500ms (10 tick), 固定不变
- 删除 OUT_DELAY_FAST/PULSE_DELAY_FAST, 仅保留一组值
- SW_4 语义: 0=无离开延时, 1=500ms离开延时
- 同步更新产品手册、技术规格书、README、devlog
2026-06-24 09:13:46 +08:00
wangfq
fc459c911f docs: devlog 记录 SW4 快速模式 & RS485→TTL Tx 修正 2026-06-24 09:07:23 +08:00
wangfq
034a82f024 fix: SW4 快速模式 — 离开和脉冲延时均缩短为500ms
- TaskLoop.h: 新增 OUT_DELAY_FAST=10, PULSE_DELAY_FAST=10
- TaskLoop.h: SET_DLY 注释从"延时"改为"快速模式"
- TaskLoop.c: FLAG_OUT 不再跳过延时,改为 OUT_DELAY_FAST 计数
- TaskLoop.c: FLAG_PLUSE 改用 PULSE_DELAY_FAST 计数
- 旧行为: SET_DLY=1 时 FLAG_OUT 立即跳到 FLAG_PLUSE
- 新行为: SET_DLY=1 时两者均用 10 tick (500ms) 快速延迟
2026-06-24 09:07:01 +08:00
wangfq
07a80763cd fix: SW4 延时修正为500ms快速模式;RS485→TTL Tx调试口 2026-06-24 09:04:05 +08:00
wangfq
7d15be9783 docs: 添加产品手册和技术规格书 2026-06-24 08:11:01 +08:00
wangfq
d80da7ef50 docs: 开发日志 — Origin污染保护、USE_FLATNESS_EXIT 2026-06-23 18:24:17 +08:00
wangfq
a83674f77b fix: 防止异常上升污染基线 — Origin跟踪冻结保护
- CAPVD异常上升时暂停基线跟踪 (dev > dlt_ORG×4)
- 防止Xn先增大再减小导致Origin被顶到虚高
- 虚高Origin + 有车冻结 → 离开时永远无法释放
- 冻结阈值跟随灵敏度自动缩放
2026-06-23 18:10:29 +08:00
wangfq
86d09eb953 feat: USE_FLATNESS_EXIT 宏开关 — 平坦性/简单防抖可切换
- TaskLoop.h 新增 #define USE_FLATNESS_EXIT 1
- #if USE_FLATNESS_EXIT 包裹所有平坦性状态变量和逻辑
- #else 回退到 cnt_release>=3 简单防抖
- 置 0 即可切回传统离开判定
2026-06-23 17:24:46 +08:00
wangfq
b6ef3c4c4f docs: 开发日志 — 平坦性离开判定 2026-06-23 16:37:53 +08:00
wangfq
aff6aa9a2b feat: 移植 CN200910309382 平坦性离开判定
- 进入: 保持单一阈值法 f-f_b > Δ1
- Phase 1 (g_exit_state=0): 追踪第一上升坡面 max |f'|, |f''|
- Phase 2 (g_exit_state=1): 三条件平坦性
  |f-f_b| < Δ1 (SensTable_1)  &&  |f'| < Δ2  &&  |f''| < Δ3
- Δ2 = max_slope / 8, Δ3 = max_slope_rate / 8 (动态阈值)
- 连续3次平坦确认后释放, 防大车多峰误触发
- 安全复位时重置平坦性状态
2026-06-23 16:17:19 +08:00
wangfq
afd901842b docs: 更新开发日志 — 指示灯行为、稳定期、重连 2026-06-23 16:02:59 +08:00
wangfq
affc9ad532 fix: 线圈断开期间绿灯灭, 黄灯快闪负责故障指示 2026-06-23 15:56:53 +08:00
wangfq
3b2c4dea87 feat: 线圈重连后保持检测状态
- 断开时不丢 VD_FLAG,保留断开前的检测状态
- 重连时 CAPVD=0 强制 IIR 从首个有效值重新收敛
- vd1_task 首个样本直接锁定 Value,后续 IIR 正常跟踪
- 重连后: 有车→绿灯亮, 无车→绿灯灭, 自动接续
2026-06-23 15:45:45 +08:00
wangfq
69bb28cf58 fix: 上电后稳定期 — 128样本(~128ms)仅跟踪基线不检测
- 新增 g_loop_stable 标志,Origin确立后持续慢闪
- vd1_task 稳定期内只做 IIR + 基线跟踪,跳过进入检测
- 稳定期 128 样本 (~128ms) 后自动启用检测
- 绿灯慢闪延续到稳定期结束
- 安全复位时重置 g_loop_stable
2026-06-23 14:40:38 +08:00
wangfq
8439f2e72b fix: LEDA宏指向绿灯PA9, 删除LEDB宏
- LEDA_ON/LEDA_OFF → 控制绿灯 (PA9, LED_GREEN)
- 删除 LEDB_ON/LEDB_OFF 宏 (无实际IO)
- 红灯(PB1)由TMR14 PWM直接驱动, 不需GPIO宏
- 更新 board_init 注释
2026-06-23 14:29:02 +08:00
wangfq
6dfa9ee831 fix: 黄灯逻辑 — 断开中快闪, 重连后N短闪
- 线圈断开中: 快闪 (200ms), 无论断开多少次
- 线圈重连后: 按断开次数显示 N 短闪 (1/2/3次)
- 无线圈上电后首次接线: 不计入, 黄灯灭
- 判定条件: g_disconnect_active || !g_loop_power_up_state → 快闪
2026-06-23 14:18:07 +08:00
wangfq
c4b514c547 fix: 绿灯自检闪烁改为200ms, 修正LED命名注释
- LEDA=绿灯(PA9), 自检慢闪 200ms亮/200ms灭
- 红灯(PB1)始终PWM呼吸, 不干预
- LEDB宏无实际IO, 仅命名遗留
2026-06-23 14:00:04 +08:00
wangfq
f59baac571 feat: 绿灯行为 — 自检慢闪 + 车辆存在指示
- 自检阶段 (loop1_INI_LOOP 或线圈未稳定): 绿灯慢闪 (500ms)
- 正常工作: 有车亮, 无车灭
- 绿灯统一由 TMR15 ISR poll_green_led() 驱动, 单点控制
- 移除 vd1_task 和 loop_task 中所有手动 LEDB_ON/OFF
- 移除线圈重连时的 6 次绿灯闪烁 (由黄灯故障码替代)
2026-06-23 13:55:53 +08:00
wangfq
f61e2e3cc0 refactor: 重写黄灯故障指示 — 断开次数编码闪烁
- 无线圈上电: 黄灯快闪 (200ms)
- 线圈断开 N 次: N 短闪 (80ms亮/200ms灭 × N, 1.2s间隔)
- 不计入上电前未接线的情况
- 删除旧状态机 (g_led_loop_reconnect 等 4 个变量)
- 新增 g_disconnect_count/active + g_fault_phase/tick
2026-06-23 13:47:27 +08:00
wangfq
6c479b4bd8 docs: 开发日志 — <<6/>>6 精度浪费分析与改进方案 2026-06-23 11:05:37 +08:00
wangfq
eff59c9ba9 perf: 提高测量精度和响应速度
- TIM3 分频 DIV_4→DIV_2(中断率×2,CPU仍<3%)
- 去掉 XNSUM_FOR_ORIGIN_FACTOR (>>6),保留全部采样精度
- LPCNT = MEASUREMENT_BASE(131072)/Xn,替代 (32768<<6)/Xn
- 测量窗口 17.5ms→~1ms(快16倍)
- Origin 范围 32K→131K,灵敏度阈值自动按比例缩放
- 离开增加 cnt_release>=3 防抖,防瞬间噪声误落杆
2026-06-23 11:02:12 +08:00
wangfq
95bf13a5ef refactor: 精简检测算法,对齐 M1H/TLD-110 参考实现
- 删除二阶差分滤波(计算但从未参与判决)
- 删除 FltHistoryManager 死代码(20+ 未用字段)
- 删除 StageRangeConfig(区间约束计算后未引用)
- 删除动态窗口切换,改为 M1H 固定 100 窗口基线
- 修复 LPCNT 计算溢出 (32768/Xn<<6 改为乘除顺序)
- 进入/离开判决对齐 M1H:单次检测 + TMR15 时序防抖
- 时序状态机简化:去掉 PLUSE_IN_F/PLUSE_IN 中间层
- 拨码去抖次数对齐 M1H: 10→5
- 代码量: 1177→706 行 (-40%)
2026-06-23 08:39:48 +08:00
wangfq
1d1e7fbc19 refactor: 对齐 DLD154V4B 规格和 M1H 参考
- 灵敏度表改为 M1H 值: {216,108,36,10} / {108,72,18,9}
- 时序参数对齐: OUT_DELAY 39→38, PULSE_DELAY 10→19
- LED 宏命名对齐 154V4B: LEDA=红(PB1), LEDB=绿(PA9), LEDC=黄(PA10)
- RLY1/RLY2 引脚交换: PA6=RLY1, PA5=RLY2
2026-06-22 19:52:46 +08:00
wangfq
cc61877510 docs: M1H和TLD-110参考代码分析 2026-06-22 18:34:13 +08:00
wangfq
7b95eb1183 init: DLD154V4B 单路车检器项目 2026-06-22 18:20:37 +08:00