Files
vd-analysis/models/M1H/analysis.md
T
wangfq 0c05726699 docs(cross-model): 总表审计复核 —— M1H 捕获时钟勘误(1.0MHz→4MHz/8.19ms)+ 新增捕获沿/捕获时钟/判据常数三行
- 新增 3 行(关键):**捕获沿 / 周期口径** · **捕获时钟 f_cap** · **判据常数 C = 32·f_cap/边沿系数**
-  判据常数揭示:PD132T(3MHz 双沿)与 PD136HA(1.5MHz 单沿)的 C 同为 4.8×10⁷
  ⇒ 两者覆盖同一线圈频段 23.4~118kHz;PD132L(1.2MHz 单沿)C=3.84×10⁷ ⇒ 窗口 0.8× 自洽
- ⚠ M1H 勘误(同类错误):原 1.0MHz/32.8ms 沿用了与 PD132T 同源、**已被 MA801 官方手册证伪**的
  「T0 走 SYSCLK/4」捷径 ⇒ 正确 = **4MHz / 8.19ms**(基线 0.82s、τ 22~27ms、主节拍 60ms)
  三条自洽反证:① AUXR=0xC0 无其他解释 ② HOLD 5500×60ms=330s(≈PD132T 300s;12T 读法 66min 不合理)
  ③ IN_DELAY=10 ≈0.6s 进入确认(12T 读法 7.2s 不合理)。**仍待 STC12C5202 手册 AUXR 位定义落锤**(已入「待补证」)
- ⚠ M1H 记录纠错:「进入确认 无」有误 —— 代码有 `IN_DELAY=10` / `OUT_DELAY=38`(≈0.6s / 2.28s,SET_DLY 可跳过)
- 其他更新:PD136HA 21.8→21.85ms、基线 +LC_HOLD 240s 重学、PD132T 双系数 τ 35.4/43.7ms、SENUP 离开阈值特例、
  PD132T tick 升级为官方手册直证、同源行补「PD132T↔PD136HA 前端同构(÷32)」、
  结论#3 改为按 `f_cap/边沿系数` 缩放、新增结论 #6(先算判据常数)/#7(异常策略差异)
- 同步修订 models/M1H/analysis.md(数值 + 时间常量 + 前后矛盾两处)
- 表格校验 0 异常(14 文件)
2026-09-11 09:13:44 +08:00

128 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# M1H 车检器分析
> 型号: M1H | 固件: V1.00 | 日期: 2008-12-02 | 平台: **STC12C5202**8051 内核, Keil C51
> 原始代码: `vd_detector/reference/M1H code/`M1H.c 379 行 + STARTUP.A51
> **血缘:DLD154V4B 的直接祖先**——灵敏度表 {216,108,36,10}、`SENS=3-(sw&0x03)`、ALFA_CAP1=79 与 V4B 完全同源。
## 1. 平台与工程
| 项 | 值 |
|----|-----|
| MCU | STC12C52028051 内核,1T |
| 工具链 | Keil C51`.lnp`/`.M51`/`STARTUP.A51` |
| 时钟 | `AUXR=0xC0`(内部时钟相关) |
| 看门狗 | **WDT_CONTR**0x3C → ~1.05s);复位 `ISP_CONTR=0x20`ISP 软复位) |
| 通信 | 无 |
## 2. 硬件资源
| 引脚 | 功能 |
|------|------|
| PCA CEX0 | 线圈捕获(CCAPM0=0x31 下降沿 + 中断) |
| P1.7 / P1.6 | SOLA / SOLB 双继电器 |
| P3.4 / P3.3 | LED_GREEN / LED_RED |
| P1.0 / P1.1 | SENS0 / SENS1 灵敏度拨码 |
| P1.2 | HOLD 有限存在拨码 |
| P1.5 | RELAY/PLUS 脉冲模式拨码 |
| P3.1 | DLY 延时拨码(TXD 复用) |
## 3. 检测算法
### 3.1 频率测量
- PCA 捕获(CCAPM0 下降沿→下降沿测周期);Timer0 8bit 自动重装 253 作 PCA 时钟源(CMOD=0x04
- 每周期得 `Xn`;归一化 `LPCNT = 32768/Xn`**BASE=2^15**),累加 LPCNT 个周期得 CAPVD≈32768
### 3.2 滤波
- IIR`Flt_Reg = ALFA_CAP1(79)` **固定**ALFA_CAP2=64 定义了但 main 恒用 79,无增强滤波开关)
- `Δ×Flt_Reg>>8` 双向
### 3.3 基线
- 无车 100 次滑动平均:`ORG_CNT==100 → Origin = ORG_SUM/100`
- **有车也跟踪**VD1_TASK 里 ORG 更新在 !VD_FLAG 分支,但注意 M1H 的 !VD_FLAG 分支是"无车"——与 PD132 一致)
### 3.4 进入/离开
- 进入:`CAPVD < Origin dlt_ORG``dlt = Origin×SensTable[SensLevel]>>16`
- 离开:`CAPVD > Origin dlt_ORG``dlt = Origin×SensTable1[SensLevel]>>16`(**始终用当前档**,无"固定最高档"逻辑)
### 3.5 灵敏度表(DLD154V4B 同源)
```
SensTable[4] = {216, 108, 36, 10} // 进入 (Δf/f: 0.33%…0.015%)
SensTable1[4] = {108, 72, 18, 9} // 离开(滞回)
```
- `SENS = 3-(swok&0x03)`:拨码**反码**——00→3(最高)11→0(最低)
- 与 DLD154V4B 的 `SENS = 3-(sw&0x03)``SensTable {216,108,36,10}` **逐字一致**
### 3.6 状态机/时序
- Timer1 5ms tick → 50ms 主节拍(TM1cnt>10
- 进入:FLAG_IN → INCNT > IN_DELAY(10=500ms) → 结束
- 离开:FLAG_OUT → SET_DLY ? 立即转 PLUSE : OUTCNT > OUT_DELAY(38=2.28s;⚠勘误) → FLAG_PLUSE
- 脉冲:PLUSECNT > PLUSE_DELAY(19=1.14s;⚠勘误)
- 有限存在:HOLD_TIME=5×1100=5500 tick=**330s**(×60ms)→ ISP 复位
- 继电器:SOLA = VD_FLAG|FLAG_OUT(存在);SOLB = SET_PLUS ? (VD_FLAG|FLAG_OUT) : FLAG_PLUSE
## 4. 拨码与配置
| 位 | 开关 | 含义 |
|----|------|------|
| swok bit7 (P3.1/TXD) | SET_DLY | 离开延时开关(ON=立即脉冲,OFF=2.28s 延时) |
| swok bit5 (P1.5) | SET_PLUS | 脉冲输出模式 |
| swok bit2 (P1.2) | SET_HOLD | 有限存在 |
| swok bit0-1 | SENS0/1 | 灵敏度(反码 3-(sw&0x03) |
去抖:连续 6 次一致(swcnt>5)生效;上电 LED_GREEN 闪 8 次×500ms
## 5. 参数速查表
| 参数 | 值 |
|------|-----|
| 归一化基数 | 32768 (2^15) |
| IIR 系数 | 79(固定) |
| 基线窗口 | 100 |
| 灵敏度表 | {216,108,36,10} / {108,72,18,9} |
| tick | 5.46ms → **60ms**T1 重装 0=65536 计数 ×11;⚠ 2026-09-11 勘误) |
| 进入延时 | **600ms**IN_DELAY=10 × 60ms;⚠ 勘误) |
| 离开延时 | 0 / **2.28s**OUT_DELAY=38 × 60ms;⚠ 勘误) |
| 脉冲宽 | **1.14s**PLUSE_DELAY=19 × 60ms;⚠ 勘误) |
| 有限存在 | **330s**HOLD_TIME=5500 × 60ms;⚠ 勘误) |
| 看门狗 | WDT_CONTR 1.05s + ISP_CONTR |
## 5.1 时序/速率/周期速查(2026-08-27 补)
> **2026-09-11 勘误**:原推导沿用「T0 走 SYSCLK/4」捷径(与 PD132T 同源、**已被 MA801 官方手册证伪**)⇒ 旧值 1.0MHz / 32.8ms **作废**。正确链条:`AUXR=0xC0`b7/b6 = T0X12/T1X12 ⇒ 定时器按 **1 个时钟周期**计数;STC 1T 系列同构)⇒ T0 = SYSCLK = 12MHz`TH0=TL0=253`8bit 自动重装,每 **3** 个时钟溢出)⇒ PCA 时钟 = **4 MHz**。三条自洽反证:① `AUXR=0xC0` 无其他解释;② T1 重装 0(65536 计数)⇒ 主节拍 5.46ms×11 = 60ms ⇒ HOLD 5500 tick = **330s**(≈PD132T 的 300s 同设计目标;按 12T 读法为 66min,不合理);③ `IN_DELAY=10` ⇒ **≈0.6s 进入确认**12T 读法 7.2s,不合理)。⚠ **最终待 STC12C5202 手册 `AUXR` 位定义落锤**(见 `docs/cross-model-comparison.md` 待补证)。
>
> 晶振仍按 12MHz(与同族 PD132T / PD136HA 一致;本机无直接证据);公式:测量节拍 = BASE / 捕获时钟。
>
> ⚠ 另:本稿**未记录前端(振荡级 / 整形 / 分频比)取证** ⇒ 判据常数 `C=32·f_cap/边沿系数` 与线圈频段换算暂缺(若同 ÷32 则 C = 6.4×10⁷)。
| 量 | 公式/值 | 数值 |
|----|---------|------|
| 捕获时钟 | Timer0(253) 溢出 = 12M/3**1T**,见勘误) | **4 MHz**(⚠ 勘误) |
| **测量节拍**CAPVD 更新) | 32768 / 4MHz | **8.19 ms**(⚠ 勘误) |
| **基线更新周期** | 100 窗 × 8.19ms | **0.82 s**(⚠ 勘误) |
| IIR 时间常数 τ | 8.19ms × 256/79 | **26.5 ms**(精确 22.3;⚠ 勘误) |
| 进入响应 | 1 个测量节拍 + IN_DELAY 确认 | ~8.2 ms + 600 ms |
| 离开响应 | 1 节拍 + OUT_DELAY | ~8.2 ms / ~2.28 s |
| 上电稳定 | LED 闪 8 次×500ms + QT 学习 | ~4 s(⚠ 依赖 `Delay_ms` 实际粒度,待实测) |
## 6. 与 DLD154V4B 的血缘关系
| 特征 | M1H | DLD154V4B |
|------|-----|-----------|
| 灵敏度表 | {216,108,36,10}/{108,72,18,9} | **同**V2.8 起 SENS=3 改 20/14 |
| 灵敏度映射 | SENS=3-(sw&0x03) | **同** |
| IIR | ALFA_CAP1=79 | **同**@10ms τ≈32ms |
| 基线 | 100 次平均(有车也跟踪) | 500 窗(有车冻结) |
| 进入确认 | **有:IN_DELAY=10(≈0.6s**;离开确认 OUT_DELAY=38(≈2.28s`SET_DLY` 可跳过) | 3 次确认 |
| 斜率限幅 | 无 | 5% |
| 平台 | STC12C5202 (8051, ~12MHz) | AT32F421 (M4, 120MHz) |
| 归一化 | 32768 | 131072 (2^17) |
**M1H 是整个 DLD 产品线算法血统的源头**:V4B 保留了灵敏度表/映射/IIR 系数。⚠ **勘误**M1H **本身就有进入/离开确认机制**`IN_DELAY=10`≈600ms / `OUT_DELAY=38`≈2.28s`SET_DLY` 可跳过),旧稿"进入确认 无"记录有误;V4B 侧的真正增量是**更快 tick10ms vs 60ms+ 斜率限幅 5% + 500 窗有车冻结基线**。