Files
vd-analysis/models/M1H/analysis.md
T
wangfq a2e271f2ac feat(vd-analysis): 归档 M1H + TLD-110 参考分析 (四型号对比总表)
- models/M1H/analysis.md: STC12C5202 V1.00 (2008) — DLD154V4B 算法血统源头
  (灵敏度表 {216,108,36,10} / SENS=3-(sw&0x03) / ALFA_CAP1=79 与 V4B 同源)
- models/TLD-110/analysis.md: P87LPC762 V2.33 (2006) 汇编 — 门控计数法
  (TAB_SENS {70,55,40,20}, 阈值=QT×表/40960, 滞回=相邻档, 单文件宏切三型号)
- docs/cross-model-comparison.md: 升级为四型号总表 + 测频路线两派
  (门控计数法 vs 周期累积法) + 灵敏度表跨型号换算警告
- README: 索引更新

勘误: skill 早期记录 TLD-110 '{70,55,40,20}×QT/100000' 不精确,
实际换算 QT×表值/40960 (70→0.171%…20→0.0488%)
2026-08-27 17:58:52 +08:00

110 lines
4.2 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=1.9s) → FLAG_PLUSE
- 脉冲:PLUSECNT > PLUSE_DELAY(19=950ms)
- 有限存在:HOLD_TIME=5×1100=5500 tick=275s → 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=1.9s 延时) |
| 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 | 5ms → 50ms |
| 进入延时 | 500ms (IN_DELAY=10) |
| 离开延时 | 0 / 1.9s (SET_DLY/OUT_DELAY=38) |
| 脉冲宽 | 950ms (PLUSE_DELAY=19) |
| 有限存在 | 275s (HOLD_TIME=5500) |
| 看门狗 | WDT_CONTR 1.05s + ISP_CONTR |
## 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 窗(有车冻结) |
| 进入确认 | 无(单次越线) | 3 次确认 |
| 斜率限幅 | 无 | 5% |
| 平台 | STC12C5202 (8051, ~12MHz) | AT32F421 (M4, 120MHz) |
| 归一化 | 32768 | 131072 (2^17) |
**M1H 是整个 DLD 产品线算法血统的源头**:V4B 保留了灵敏度表/映射/IIR 系数,M4 优化(更快 tick、确认机制、斜率限幅)是 8051 时代做不到的增量。