Files
vd-analysis/models/PD132L/analysis.md
T
wangfq 694c86ba48 feat(vd-analysis): 车检器分析仓库初始化 + PD132L/PD132T 分析
- README: 仓库说明 + 型号索引 + 新增型号流程
- docs/methodology.md: 参考代码分析方法论模板 (10 节)
- docs/cross-model-comparison.md: PD132L vs PD132T 对比总表
- models/PD132L/analysis.md: STM8S003F3 V1.09 完整分析
- models/PD132T/analysis.md: MA801AS V3.01 完整分析 (L 的 8051 移植版)

核心结论: 两型号检测算法逐行对应 (32768 基数/79·64 IIR/100 基线/
{300,60,32,21} 灵敏度表), 差异在平台(PCA vs TIM1)/Xn窗口(1.27×)/
拨码编码(组合位 vs 直接)/看门狗(WDTCR vs IWDG+WWDG)
2026-08-27 17:55:28 +08:00

107 lines
3.9 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.
# PD132L 车检器分析
> 型号: PD132L | 固件: V1.09 | 日期: 2020-04-22 | 平台: **STM8S003F3P6** (IAR EWSTM8)
> 原始代码: `vd_detector/reference/PD132L_V1.09-STM8_20200422/`MAIN.c 579 行 + uart.c
## 1. 平台与工程
| 项 | 值 |
|----|-----|
| MCU | STM8S003F3P68 位, 16KB Flash |
| 工具链 | IAR EWSTM8`.ewp`/`.eww`/`.ewd` |
| 时钟 | 外部晶振(`CLK_SWR=0xB4`,注释 12MHz),无分频 |
| 看门狗 | **IWDG**PR=6, RLR=0xFF → ~1.02s+ **WWDG**(窗口,事件触发软复位) |
| 调试 | UART1 输出代码存在(`INIT_UART()` 被注释,未启用) |
## 2. 硬件资源
| 引脚 | 功能 |
|------|------|
| PC3 | LP 线圈捕获(TIM1_CC3 输入,下降沿) |
| PD4 | RLY1 存在继电器(低有效) |
| PD3 | RLY2 脉冲继电器(低有效) |
| PB5 | LEDA 存在指示灯(低有效点亮) |
| PA3 / PD2 | SA1 / SA2 灵敏度拨码 |
| PC4 / PC5 / PC6 | SW3 / SW2 / SW1 功能拨码 |
| PD5 | SW0 功能拨码 |
| PB4 / PD6 | 扩展/预留输出 |
## 3. 检测算法
### 3.1 频率测量
- TIM1 输入捕获(CCR3),下降沿→下降沿测周期;PSC=0x0009 → 捕获时钟 ÷10
- 每周期得 `Xn`;有效性窗口 **320 < Xn < 1620**(超出判线圈断开/异常)
- 归一化:`LPCNT = 32768 / Xn`**BASE = 2^15**),累加 LPCNT 个周期得 `Value/CAPVD ≈ 32768`
### 3.2 滤波
- IIR`Flt_Reg = 79`(增强滤波拨码开)/ `64`(关),`Δ×Flt_Reg>>8` 双向(升/降分支)
- 滤波作用于 CAPVD(每 CAP_OK 节拍)
### 3.3 基线
- 无车时 100 次滑动平均:`ORG_CNT==99 → Origin = ORG_SUM/100`
- 有车冻结(`!VD_FLAG` 才更新)
### 3.4 进入/离开
- 进入:`CAPVD < Origin dlt_ORG``dlt_ORG = Origin×SensTable[SensLevel]>>16`;置 `VD_FLAG/FLAG_IN`
- 离开:`CAPVD > Origin dlt_ORG``dlt_ORG = Origin×SensTable1[...]>>16`SET_ASB=1 用当前档,否则**固定最高档 SensTable1[3]**
### 3.5 灵敏度表
```
SensTable[4] = {300, 60, 32, 21} // 进入
SensTable1[4] = { 60, 32, 21, 14} // 离开(滞回)
```
- 归一化基数 32768 → 进入阈值 Δf/f = 300/32768≈**0.92%** … 21/32768≈**0.064%**
- 档位:SENS=0~3(拨码 SA1/SA2 组合 0x00/0x04/0x08/0x0C 映射)
### 3.6 状态机/时序
- TIM2 5ms tick → 50ms 主节拍(TM1cnt≥10
- FLAG_IN → FLAG_IN_PLUSE(进入脉冲 500ms = 10 tick)→ FLAG_OUT → FLAG_PLUSE(离开脉冲 500ms
- 有限存在:`HOLD_TIME = 5×1200 = 6000 tick = 300s` 超时 → WWDG 复位继电器
- 线圈断开:RF_FLAG 检测失败 → LOOP_OK=0 → 继电器断开 + LED 快闪(6 次×200ms
## 4. 拨码与配置
| 位 | 开关 | 含义 |
|----|------|------|
| swok&0x80 | SET_ASB | 离开阈值自动(用当前档)/手动(固定最高档) |
| swok&0x40 | SET_FLT | 增强滤波(79/64 |
| swok&0x20 | SET_PLUS | 脉冲输出模式(继电器2=进入脉冲) |
| swok&0x10 | SET_HOLD | 有限存在 |
| swok&0x0C | SA1/SA2 | 灵敏度 0~3 |
去抖:连续 6 次读取一致才生效;灵敏度变化 → WWDG 复位("灵敏档拨开重新改档位")
## 5. 参数速查表
| 参数 | 值 |
|------|-----|
| 归一化基数 | 32768 (2^15) |
| Xn 有效窗口 | 320 ~ 1620 |
| IIR 系数 | 79 / 64 |
| 基线窗口 | 100 |
| 灵敏度表 | {300,60,32,21} / {60,32,21,14} |
| tick | 5ms → 主逻辑 50ms |
| 脉冲宽 | 500ms |
| 有限存在 | 300s |
| 看门狗 | IWDG 1.02s + WWDG |
| 上电延时 | 800ms |
## 6. 版本特性
- V1.01: STM8 移植,"功能与 132T 一样"
- V1.03: 微调,"无存在改为 5 分钟"
- V1.09: 线圈断开时线圈上电继电器断开
## 7. 移植注意事项
1. BASE=2^15=32768 → 灵敏度表量纲与 131072/524288 基数的产品不同,**照搬数值会错 4~16 倍**
2. Xn 窗口随捕获时钟定标,换 MCU 必须重算
3. 离开阈值"固定最高档"语义(SET_ASB 关)与 DLD 系"当前档滞回"不同