Files
vd-analysis/models/PD136HA/analysis.md
T
wangfq f876c36d05 docs: 新增 PD132T ↔ PD136HA 同血统两代对比分析(8051 → Cortex-M0+)
- 新文件 docs/pd132t-vs-pd136ha-comparison.md(12 节 + 2 附录,~29KB / 376 行)
-  关键发现:两型号覆盖同一线圈频段 ≈23.4~118kHz
  · PD132T = 3MHz 双沿捕获(Xn = 半周期);PD136HA = 1.5MHz 单沿(Xn = 整周期)
  · 判据常数 C = 32·f_cap/边沿系数,两者同为 4.8×10^7 ⇒ 窗口常量几乎逐字相同(406~2050 vs 400~2030)
- 灵敏度重标定量化:档位一一映射偏差 −46%~+69% ⇒ 跨代不可按档位号照搬;
  给出双向换算表(PD132T 档1 → PD136HA 档2:进入 −10% / 离开 0%,为最佳匹配)
- 时间维对比:节拍 10.92→21.85ms、IIR τ 29.6~38→76~87ms、基线 100→256(1.09→5.59s)
  ⇒ 设计取向由「响应优先」转为「抗扰优先」(代价:进出响应与最小可检占压约慢 2×)
- 异常策略对比:PD132T「降级维持」(断继电器+闪灯,不复位)vs PD136HA「主动自愈」(整机复位 + LC_HOLD 240s 重学基线)
- 修正旧口径:front-end §8 与对齐报告 §2.3 的「两型号线圈频段差 2×」改为「同一频段」
  (早前把 PD132T 的半周期口径与 PD136HA 的整周期口径直接相比所致)
- README 索引 + 两份 models/analysis.md 交叉链接;表格校验 0 异常(14 文件)
2026-09-11 08:54:18 +08:00

9.7 KiB
Raw Blame History

PD136HA 车检器分析

型号: PD136HA | 固件: V3.14 | 日期: 2021-11-16 | 平台: HC32F003C4(小华半导体 HDSC, Cortex-M0+用户确认 2026-09-11。此前文档记 HC32F005,系按 SDK 头文件名推断) 原始代码: 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.mdPD136HA → DLD154V4B 替换评估,2026-09-11 双型号对比: docs/pd132t-vs-pd136ha-comparison.md(与 PD132T 同血统两代对比,2026-09-11

1. 平台与工程

MCU HC32F003C4用户确认 2026-09-11)。⚠ 工程档位仍为 HC32F005C6PA<Device>/ startup hc32f005c6ua / SDK 板头 C6PA —— 三者与实际器件不一致,重编译前须在 Keil 改正器件档位;实测固件 Code=11148 RO=268 RW=88 ZI=608 ⇒ ROM≈11.1KB、RAM≈696BF003(16KB/2KB) 与 F005(32KB/4KB) 均可容纳 ✓
时钟 外部晶振 12MHz(用户确认 2026-09-11CLK_INIT() 配 XTHXTH_CR |= 0x07 注释「8-16MHZ」)→ 直取 XTH、无 PLL / 无 HCLK_PRS·PCLK_PRS 分频 ⇒ PCLK0 = 12MHz,并关内部 RCH。⚠ board_stkhc32f005.hSYSTEM_XTH = 32MHzSTK demo 板常量,本产品不用
工具链 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 同框架)

  • 定时器:ADTIM4PCLK0/8 预分频,锯齿波 0xFFFFCHA 上升沿捕获
  • 中断:loop1_Xn = CapThis - CapLast(相邻上升沿计数差 = 振荡周期)
  • 学习:CapCnt > 100loop1_LPCNT = 32768 / loop1_Xn归一化基数 32768,与 PD132L/M1H 一致
  • 测量:累积 LPCNT 个周期得 CAPVD = CapSum(周期域自适应归一化)
// 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 = XTH = 12MHz(用户确认,已落定) → 捕获时钟 = AdtClkPClk0Div8 = 1.5MHz (原先的 Delay_ms 注释 //12MHZ???? 问号已消除)

4. 滤波(IIR

// VD1_TASK 中:一次指数滤波
loop1_Flt = (loop1_Value - loop1_CAPVD);          // 方向取绝对值
loop1_Flt = ((INT32U)loop1_Flt * Flt_Reg) >> 8;
loop1_Flt = loop1_Flt + loop1_CAPVD;
  • 系数 Flt_RegINIT_VD 置 ALFA_CAP1=79,但主循环每次 CAP_OK 强制 Flt_Reg = ALFA_CAP2 = 64SET_FLT 分支已注释)
  • 实际生效 α = 64/256 = 0.2579/64 双系数与 PD132L 同源

5. 基线

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. 判据与灵敏度

// 进入(无车时):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 / 3sV3.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_HOLDHOLD_TIME=6000 tick×50ms=300s 仍占用 → 整机复位
环路锁定超时 SET_DLY≠3 时进入置 LC_HOLDLC_HOLD_TIME=4800 tick×50ms=240s → 重新学习基线(INI_LOOP=1
灵敏度拨码变化 SENS 变化 → Reset_RstPeripheralAll() 复位
看门狗 WDT 820ms,主循环 300ms 喂狗
上电 1s 延时(线圈稳定)→ LED 闪 6 次(继电器自检)→ 开始检测

9. 参数速查

参数
归一化基数 32768
测量节拍 21.85ms12MHz 晶振已确认)
基线窗口 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 位) → HC32F003C4 (M0+)——升级换代,捕获外设 TIM1→ADTIM4
  • 与 M1H / DLD 线:同路不同源(周期累积法范式相同,细节独立)
  • 归一化基数保持 32768 未动——换 MCU 未重定标(与 DLD 线 131072/524288 重定标路线相反),印证"同源移植可保留基数,重写才需重定标"