Files
vd-analysis/models/PD136HA/analysis.md
T
wangfq 96ba80bcb3 docs: 新增 PD136HA → DLD154V4B 交付对齐分析(替换评估)
- docs/pd136ha-to-dld154v4b-delivery-alignment.md(17.9KB,11 节)
  · 口径前提:两型号同为 Origin×表>>16,BASE 32768 vs 131072 不影响百分比口径
  · 进入灵敏度 4 档对照(现役方案B + PD132T 备选表),偏差非单调(档0 +108%)
  · 释放/滞回对照:V4B 离开/进入比 15~48% vs PD136HA 50~67%
  · 判据强度差异与高速车/短占压风险(100km/h 占压 36ms vs 低Q 50ms 确认)
  · 超时常量同源实证:HOLD 5*1200/6000、LC_HOLD 4*1200/4800(均 300s/240s)
  · 拨码:SA_1/SA_2 语义一致可直接照搬(两型号引脚均上拉,ON=读出 0)
  · 线圈电感四级门为替换最大风险(<24µH 恒判车)
- README: 新增「交付对齐报告」索引 + docs 树补全
- 两份 model analysis 加双向交叉链接
2026-09-11 02:24:10 +08:00

189 lines
9.0 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.
# PD136HA 车检器分析
> 型号: PD136HA | 固件: V3.14 | 日期: 2021-11-16 | 平台: **HC32F005**(华大半导体, Cortex-M0+
> 原始代码: `vd_detector/reference/PD136HA_V3.14-20211116/`(工程名 **PD132L-HD**,含 user/main.c 应用层)
> 血统: **PD132L 同源移植版**(文件头明示"硬件使用 PD132L_V1.02,替换软件版本 PD132LA_V1.06"
> 交付对齐报告: `docs/pd136ha-to-dld154v4b-delivery-alignment.md`PD136HA → DLD154V4B 替换评估,2026-09-11
## 1. 平台与工程
| 项 | 值 |
|----|-----|
| MCU | HC32F005(注释标 HC32F003C4,工程编译目标 startup_hc32f005c6ua.oSDK 板头为 C6PA——**三者不完全一致,待硬件确认**) |
| 时钟 | 外部晶振 XTH8-16MHz 档),CLK_INIT 切 XTH、关内部 RCHDelay_ms 注释 **12MHz** |
| 工具链 | Keil MDKuvprojxJLink |
| 工程名 | **PD132L-HD**(直接沿用 PD132 工程名,Author=YSHE |
| 版本史 | V3.11 (2021-03-03) → V3.12 → V3.13 → V3.14 (2021-11-16) |
| V3.14 变更 | ① 去掉线圈环路小 LED 指示 ② 基线累计次数 99→255 ③ 灵敏度调整 ④ 延时档位 0/0.6/1.6/3s |
| 代码规模 | main.c 832 行(CRLF/ASCII+ 华大 SDK 驱动层 |
## 2. 硬件与 IO
| 引脚 | 功能 |
|------|------|
| P23 (AF3) | TIM4_CHA 捕获输入(**线圈频率入口**) |
| P33 | RLY2 继电器(**存在输出** VD_FLAG |
| P34 | RLY1 继电器(**脉冲输出**PLUS 模式=存在\|离开,非 PLUS=离开脉冲) |
| P15 | LEDA(有车指示/上电自检闪烁) |
| P35/P26/P25/P24 | DIP5-8 拨码(延时 2bit / 脉冲模式 / 存在保持) |
| P03/P32 | DIP9-10 拨码(灵敏度 2bit |
| P01/P02 | 模拟口(XTH 晶振通道) |
**双继电器架构**(存在 + 脉冲分离),比 PD132L 多一路输出。
## 3. 频率测量(周期累积法,与 PD132L 同框架)
- 定时器:**ADTIM4**PCLK0/8 预分频,锯齿波 0xFFFFCHA **上升沿捕获**
- 中断:`loop1_Xn = CapThis - CapLast`(相邻上升沿计数差 = 振荡周期)
- 学习:`CapCnt > 100``loop1_LPCNT = 32768 / loop1_Xn`**归一化基数 32768,与 PD132L/M1H 一致**
- 测量:累积 `LPCNT` 个周期得 `CAPVD = CapSum`(周期域自适应归一化)
```c
// Tim4_IRQHandler 核心
loop1_Xn = Cap.loop1_CapThis - loop1_CapLast; // 周期
loop1_CapCnt++;
if (loop1_INI_LOOP) {
if (loop1_LPCNT == 0) {
if (loop1_CapCnt > 100) {
loop1_LPCNT = 32768 / loop1_Xn; // 基数 32768
if (loop1_LPCNT == 0) loop1_LPCNT = 1;
...
}
} else {
loop1_CapSum += loop1_Xn;
if (loop1_CapCnt >= loop1_LPCNT) {
loop1_CAPVD = loop1_CapSum; // 一次测量窗
loop1_Origin = loop1_CAPVD; // 初始基线
loop1_INI_LOOP = 0;
}
}
}
```
- Xn 有效范围检查(`Xn>400 && Xn<2030`)已被注释——**V3.14 去掉环路指示 LED 时一并禁用**,当前无频率范围过滤
- 时钟假设:PCLK0 = 12MHzDelay_ms 注释)→ 捕获时钟 = **1.5MHz**(待现场验证)
## 4. 滤波(IIR
```c
// VD1_TASK 中:一次指数滤波
loop1_Flt = (loop1_Value - loop1_CAPVD); // 方向取绝对值
loop1_Flt = ((INT32U)loop1_Flt * Flt_Reg) >> 8;
loop1_Flt = loop1_Flt + loop1_CAPVD;
```
- 系数 `Flt_Reg`INIT_VD 置 `ALFA_CAP1=79`,但主循环每次 CAP_OK 强制 `Flt_Reg = ALFA_CAP2 = 64`SET_FLT 分支已注释)
- **实际生效 α = 64/256 = 0.25**79/64 双系数与 PD132L 同源
## 5. 基线
```c
if (!loop1_VD_FLAG) { // 仅无车时更新(有车冻结)
loop1_ORG_SUM += loop1_CAPVD;
if (loop1_ORG_CNT == 255) { // V3.14: 99 -> 255
loop1_Origin = loop1_ORG_SUM >> 8; // 256 次滑动平均(2^8
loop1_ORG_CNT = 0; loop1_ORG_SUM = 0;
} else loop1_ORG_CNT++;
}
```
- **256 次滑动平均**V3.14 从 99 改 255`>>8` 即均值)——比 PD132L 的 100 次窗口更慢更稳
- 有车冻结基线(与 PD132L 一致)
### 5.1 时序速查(12MHz 假设,待现场验证)
| 项 | 值 | 公式 |
|----|-----|------|
| 捕获时钟 | 1.5 MHz | PCLK0/8ADTIM4 Div8 |
| **测量节拍**CAPVD 更新) | **21.8 ms** | 32768 / 1.5MHz |
| **基线更新周期** | **5.59 s** | 256 窗 × 21.8ms |
| **IIR τ** | **87.4 ms** | 21.8ms × 256/64 |
| 时序 tick | 5ms(注释,ARR=0xF159 反推需 12.36MHz 计数时钟,**待验证** | TIM1 PRS=4 |
| 状态机节拍 | 50ms | TM1cnt≥10 |
| 喂狗周期 | 300ms | Delay_300ms_cnt≥60 |
> ⚠ TIM1 ARR=0xF159(61785) 与"5ms"注释矛盾:12MHz/16=750kHz 时 tick=82.4ms。代码逻辑按 5ms 自洽(60 tick=300ms、10 tick=50ms),绝对时间待现场示波器验证。
## 6. 判据与灵敏度
```c
// 进入(无车时):CAPVD 下穿 Origin-dlt_ORG
loop1_dlt_ORG = (Origin * SensTable[SensLevel]) >> 16;
if (CAPVD < Origin - dlt_ORG) { VD_FLAG=1; FLAG_IN=1; ... }
// 离开(有车时):CAPVD 回升越 Origin-dlt_ORG(离开表)
loop1_dlt_ORG = (Origin * SensTable1[SensLevel]) >> 16;
if (Origin - dlt_ORG < CAPVD) { VD_FLAG=0; FLAG_OUT=1; ... }
```
- **单次判定,无进入/离开去抖计数**PD132L 的 IN_DELAY/OUT_DELAY 计数被注释掉)——PD136HA 判定更快但抗扰弱
- 滞回:进入用 SensTable,离开用 SensTable1(离开表更小 → 需恢复更多 → 滞回)
### 灵敏度表(× Origin >> 16,相对阈值 = 表值/65536
| SensLevel | DIP(SENS) | 进入表 SensTable | Δf/f 进入 | 离开表 SensTable1 | Δf/f 离开 |
|-----------|-----------|-----------------|-----------|-------------------|-----------|
| 0 | 0x00 | 162 | 0.247% | 81 | 0.124% |
| 1 | 0x20 | 81 | 0.124% | 54 | 0.082% |
| 2 | 0x10 | 54 | 0.082% | 32 | 0.049% |
| 3(默认) | 0x30 | 28 | 0.043% | 18 | 0.027% |
- 注释历史:`{300,162,81,40}``{216,108,54,26}``{300,162,81,40}/{108,54,32,18}` → 当前 `{162,81,54,28}/{81,54,32,18}`
- 出厂默认 SensLevel=3(最灵敏档,Δf/f 0.043%
- **与 PD132L {300,60,32,21} 量纲相同但数值全新**162 系)——V3.14"灵敏度调整"产物
## 7. 状态机与输出
```
捕获中断(TIM4) → Xn → 累积 LPCNT 个 → CAPVD/CAP_OK
↓ 主循环 CAP_OK
VD1_TASKIIR → 基线(无车) → 进入/离开判据 → VD_FLAG/FLAG_OUT
↓ 50ms 状态机 (TIM1)
FLAG_OUT 延迟 DELAY_TIME[3-SET_DLY] → FLAG_PLUSE(持续 500ms
RLY2 = VD_FLAG(存在)
RLY1 = SET_PLUS ? (VD_FLAG|FLAG_OUT) : FLAG_PLUSE(脉冲)
```
- 延时档位 `DELAY_TIME[4] = {0,12,32,60}` tick(50ms) → **0 / 0.6s / 1.6s / 3s**V3.14 实测校准)
- 脉冲宽度 `PLUSE_DELAY = 10` tick = **500ms**
- 拨码 6 位连续 6 次采样一致才生效(swcnt>5 去抖)
## 8. 异常处理
| 场景 | 处理 |
|------|------|
| 无捕获(线圈断/无振荡) | LOOP_OK=0 → FLAG_CUT=1 → 主循环 `Reset_RstPeripheralAll()` 整机复位 + LED 闪烁 |
| 存在保持超时 | SET_HOLD(DIP8)=1 时进入置 VD_HOLD`HOLD_TIME=6000 tick×50ms=300s` 仍占用 → 整机复位 |
| 环路锁定超时 | SET_DLY≠3 时进入置 LC_HOLD`LC_HOLD_TIME=4800 tick×50ms=240s` → 重新学习基线(INI_LOOP=1 |
| 灵敏度拨码变化 | SENS 变化 → `Reset_RstPeripheralAll()` 复位 |
| 看门狗 | WDT 820ms,主循环 300ms 喂狗 |
| 上电 | 1s 延时(线圈稳定)→ LED 闪 6 次(继电器自检)→ 开始检测 |
## 9. 参数速查
| 参数 | 值 |
|------|-----|
| 归一化基数 | **32768** |
| 测量节拍 | 21.8ms12MHz 假设) |
| 基线窗口 | 256(有车冻结) |
| IIR 系数 | 64(实际)/ 79(初始化) |
| 进入/离开表 | {162,81,54,28} / {81,54,32,18} |
| 档位 Δf/f | 0.247%~0.043%(进入)、0.124%~0.027%(离开) |
| 时序 tick | 5ms 注释(待验证)/ 状态机 50ms |
| 看门狗 | 820ms / 300ms 喂 |
| HOLD / LC_HOLD | 300s / 240s(整机复位 / 重学基线) |
| 输出 | RLY2 存在 + RLY1 脉冲(双继电器) |
## 10. 移植注意 / 血统关系
- **同源判定(PD132L → PD136HA**:工程名 `PD132L-HD`;文件头 V3.11 明示"硬件使用 PD132L_V1.02、替换 PD132LA_V1.06"LPCNT=32768/Xn、IIR 79/64、有车冻结基线、相对阈值 >>16、HOLD=300s 全部继承
- **差异点(PD136HA 相对 PD132L 的独立改动)**
1. 灵敏度表 {162,...} 系 vs {300,...} 系——档位重排且全部重新标定
2. 基线窗口 100 → 256(更慢更稳,抗干扰优先)
3. **进入/离开单次判定**(去掉 PD132L 的 6 次去抖)——响应更快但抗扰弱,配 256 窗基线补偿
4. 双继电器输出(存在+脉冲分离)——PD132L 单路
5. 延时档位 {0,12,32,60} vs PD132L {0,20,40,60} 注释——0.6s 档重定
6. MCUSTM8S003 (8 位) → HC32F005 (M0+)——升级换代,捕获外设 TIM1→ADTIM4
- **与 M1H / DLD 线**:同路不同源(周期累积法范式相同,细节独立)
- **归一化基数保持 32768 未动**——换 MCU 未重定标(与 DLD 线 131072/524288 重定标路线相反),印证"同源移植可保留基数,重写才需重定标"