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 |
STC12C5202(8051 内核,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 同源)
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 |
5.1 时序/速率/周期速查(2026-08-27 补)
推导假设晶振 12MHz(STC12C5202 12T 兼容模式),待现场验证;公式:测量节拍 = BASE/捕获时钟。
| 量 |
公式/值 |
数值 |
| 捕获时钟 |
Timer0(253) 溢出/4 = 12M/3/4 |
1.0 MHz |
| 测量节拍(CAPVD 更新) |
32768 / 1.0MHz |
32.8 ms |
| 基线更新周期 |
100 窗 × 32.8ms |
3.28 s |
| IIR 时间常数 τ |
32.8ms × 256/79 |
106 ms |
| 进入响应 |
1 个测量节拍(无确认机制) |
~33 ms |
| 离开响应 |
1 节拍 + OUT_DELAY |
0 / ~1.9 s |
| 上电稳定 |
LED 闪 8 次×500ms + QT 学习 |
~4 s |
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 时代做不到的增量。