DLD154Pro 分析归档:确认 DLD154V4B 同源移植(CH59x RISC-V)
- peripheral_main.c(1528行) 完整拆解:M1H→V4B→154Pro 血统链实锤(文件头明示)
- 关键发现:归一化基数重定标 131072→524288(2^19),60MHz 下测量节拍 8.74ms
- 离开判定降级:平坦性三条件被 USE_FLATNESS_EXIT 编译开关禁用 → 简单滞回 3 次防抖
- 灵敏度表 {108,54,28,14}/{81,32,16,12} 首次运行时可配(BLE 写 Flash)
- 新增:7 种雷达融合模式(人车混行 3s 防砸/ETC 500ms 防抖/光耦复位)、RS485 双协议
- 对比总表升级六型号,同源辨析补 DLD154V4B→DLD154Pro
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
| TLD-110 | P87LPC762 (8051, 汇编) | V2.33 (2006-07) | [models/TLD-110/analysis.md](models/TLD-110/analysis.md) | `reference/TLD-110(410) code`(⚠ 已移出对比总表) |
|
| TLD-110 | P87LPC762 (8051, 汇编) | V2.33 (2006-07) | [models/TLD-110/analysis.md](models/TLD-110/analysis.md) | `reference/TLD-110(410) code`(⚠ 已移出对比总表) |
|
||||||
| PD136HA | HC32F005 (M0+) | V3.14 (2021-11) | [models/PD136HA/analysis.md](models/PD136HA/analysis.md) | `reference/PD136HA_V3.14-20211116`(PD132L 同源移植版) |
|
| PD136HA | HC32F005 (M0+) | V3.14 (2021-11) | [models/PD136HA/analysis.md](models/PD136HA/analysis.md) | `reference/PD136HA_V3.14-20211116`(PD132L 同源移植版) |
|
||||||
| DLD154V4B | AT32F421 (M4, FreeRTOS) | V2.8 (2026) | [models/DLD154V4B/analysis.md](models/DLD154V4B/analysis.md) | `vd_detector/DLD154V4B`(自研) |
|
| DLD154V4B | AT32F421 (M4, FreeRTOS) | V2.8 (2026) | [models/DLD154V4B/analysis.md](models/DLD154V4B/analysis.md) | `vd_detector/DLD154V4B`(自研) |
|
||||||
|
| DLD154Pro | CH591R/CH592 (RISC-V, BLE) | V3.05 (2026) | [models/DLD154Pro/analysis.md](models/DLD154Pro/analysis.md) | `vd_detector/DLD154Pro`(自研,V4B 移植) |
|
||||||
|
|
||||||
## 目录结构
|
## 目录结构
|
||||||
|
|
||||||
|
|||||||
@@ -10,42 +10,44 @@
|
|||||||
| PD132T | MA801AS (8051) | V3.01 | [models/PD132T/analysis.md](../models/PD132T/analysis.md) |
|
| PD132T | MA801AS (8051) | V3.01 | [models/PD132T/analysis.md](../models/PD132T/analysis.md) |
|
||||||
| M1H | STC12C5202 (8051) | V1.00 | [models/M1H/analysis.md](../models/M1H/analysis.md) |
|
| M1H | STC12C5202 (8051) | V1.00 | [models/M1H/analysis.md](../models/M1H/analysis.md) |
|
||||||
| DLD154V4B | AT32F421 (M4) | V2.8 | [models/DLD154V4B/analysis.md](../models/DLD154V4B/analysis.md) |
|
| DLD154V4B | AT32F421 (M4) | V2.8 | [models/DLD154V4B/analysis.md](../models/DLD154V4B/analysis.md) |
|
||||||
|
| DLD154Pro | CH591R/CH592 (RISC-V) | V3.05 | [models/DLD154Pro/analysis.md](../models/DLD154Pro/analysis.md) |
|
||||||
| PD136HA | HC32F005 (M0+) | V3.14 | [models/PD136HA/analysis.md](../models/PD136HA/analysis.md)(PD132L 同源移植版) |
|
| PD136HA | HC32F005 (M0+) | V3.14 | [models/PD136HA/analysis.md](../models/PD136HA/analysis.md)(PD132L 同源移植版) |
|
||||||
|
|
||||||
> TLD-110 分析见 `models/TLD-110/analysis.md`(2006 门控计数法参考,2026-08-27 起**不再纳入对比总表**)。
|
> TLD-110 分析见 `models/TLD-110/analysis.md`(2006 门控计数法参考,2026-08-27 起**不再纳入对比总表**)。
|
||||||
|
|
||||||
## 五型号核心参数对比(2026-08-27)
|
## 六型号核心参数对比(2026-08-27)
|
||||||
|
|
||||||
| 维度 | M1H | PD132L | PD132T | PD136HA | DLD154V4B |
|
| 维度 | M1H | PD132L | PD132T | PD136HA | DLD154V4B | DLD154Pro |
|
||||||
|------|-----|--------|--------|---------|-----------|
|
|------|-----|--------|--------|---------|-----------|-----------|
|
||||||
| 年代 | 2008 | 2020 | 2021 | 2021 | 2026 |
|
| 年代 | 2008 | 2020 | 2021 | 2021 | 2026 | 2026 |
|
||||||
| MCU | STC12C5202 | STM8S003F3 | MA801AS | HC32F005 (M0+) | AT32F421 (M4) |
|
| MCU | STC12C5202 | STM8S003F3 | MA801AS | HC32F005 (M0+) | AT32F421 (M4) | CH591R/CH592 (RISC-V) |
|
||||||
| 语言/系统 | C | C | C | C | C + FreeRTOS |
|
| 语言/系统 | C | C | C | C | C + FreeRTOS | C + BLE(TMOS) |
|
||||||
| 通道 | 1 | 1 | 1 | 1 | 1 |
|
| 通道 | 1 | 1 | 1 | 1 | 1 | 1 |
|
||||||
| 测频方式 | PCA 周期捕获 | TIM1 周期捕获 | PCA 周期捕获 | ADTIM4 周期捕获 | TIM3 周期捕获 |
|
| 测频方式 | PCA 周期捕获 | TIM1 周期捕获 | PCA 周期捕获 | ADTIM4 周期捕获 | TIM3 周期捕获 | TMR0 下降沿捕获 |
|
||||||
| 归一化基数 | 32768 | 32768 | 32768 | 32768 | **131072 (2^17)** |
|
| 归一化基数 | 32768 | 32768 | 32768 | 32768 | 131072 (2^17) | **524288 (2^19)** |
|
||||||
| 测量窗 | 32.8ms | 27.3ms | 43.7ms | 21.8ms | **2.18ms** |
|
| 测量窗 | 32.8ms | 27.3ms | 43.7ms | 21.8ms | 2.18ms(硬)/10ms(软) | **8.74ms** |
|
||||||
| IIR 系数 | 79(固定) | 79/64 | 79/64 | 79/64(实际 64) | 79 + 斜率限幅 |
|
| IIR 系数 | 79(固定) | 79/64 | 79/64 | 79/64(实际 64) | 79 + 斜率限幅 5% | 79 + 斜率限幅 5% |
|
||||||
| 基线 | 100 平均(有车也跟踪) | 100 平均(有车冻结) | 100 平均(有车冻结) | **256 平均(有车冻结)** | **500 平均 + 冻结超时 10s** |
|
| 基线 | 100 平均(有车也跟踪) | 100 平均(有车冻结) | 100 平均(有车冻结) | 256 平均(有车冻结) | 500 平均+冻结超时 10s | **500 平均+冻结超时/稳定性双条件** |
|
||||||
| 灵敏度表 | {216,108,36,10} | {300,60,32,21} | {300,60,32,21} | {162,81,54,28} | {216,108,36,20} |
|
| 灵敏度表 | {216,108,36,10} | {300,60,32,21} | {300,60,32,21} | {162,81,54,28} | {216,108,36,20} | {108,54,28,14} |
|
||||||
| 离开表 | 同表 | {60,32,21,14} | {60,32,21,14} | {81,54,32,18} | {108,72,18,14} |
|
| 离开表 | 同表 | {60,32,21,14} | {60,32,21,14} | {81,54,32,18} | {108,72,18,14} | {81,32,16,12} |
|
||||||
| 阈值换算 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 |
|
| 阈值换算 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 | Origin×表/65536 |
|
||||||
| 档位 Δf/f | 0.33%~0.015% | 0.92%~0.064% | 0.92%~0.064% | 0.247%~0.043% | 0.33%~0.031% |
|
| 档位 Δf/f | 0.33%~0.015% | 0.92%~0.064% | 0.92%~0.064% | 0.247%~0.043% | 0.33%~0.031% | **0.165%~0.021%** |
|
||||||
| 进入确认 | 无 | 无 | 无 | 无(单次,去抖已注释) | **3 次** |
|
| 进入确认 | 无 | 无 | 无 | 无(单次,去抖已注释) | 3 次 | **3 次** |
|
||||||
| 离开判定 | 简单阈值 | 简单阈值 | 简单阈值 | 简单阈值+脉冲延迟 | **平坦性三条件** (CN200910309382) |
|
| 离开判定 | 简单阈值 | 简单阈值 | 简单阈值 | 简单阈值+脉冲延迟 | 平坦性三条件 (CN200910309382) | **简单滞回 3 次防抖**(平坦性 #if 禁用) |
|
||||||
| 时序 tick | 50ms | 50ms | 50ms | 5ms?×10=50ms | **检测 10ms + 时序 50ms(混合)** |
|
| 灵敏度表可配 | 编译期 | 编译期 | 编译期 | 编译期 | 编译期 | **运行时可配(BLE 写 Flash)** |
|
||||||
| 看门狗 | WDT_CONTR | IWDG+WWDG | WDTCR | WDT 820ms | **无** |
|
| 时序 tick | 50ms | 50ms | 50ms | 5ms?×10=50ms | 检测 10ms + 时序 50ms | **检测 8.74ms + 时序 5ms/50ms** |
|
||||||
| **测量节拍**(CAPVD 更新) | **32.8 ms** | **27.3 ms** | **43.7 ms** | **21.8 ms** | **10 ms** |
|
| 看门狗 | WDT_CONTR | IWDG+WWDG | WDTCR | WDT 820ms | 无 | **WWDG 558ms** |
|
||||||
| **基线更新周期** | **3.28 s**(100 窗) | **2.73 s** | **4.37 s** | **5.59 s**(256 窗) | **5 s**(500 窗) |
|
| **测量节拍**(CAPVD 更新) | **32.8 ms** | **27.3 ms** | **43.7 ms** | **21.8 ms** | **10 ms** | **8.74 ms** |
|
||||||
| IIR 时间常数 τ | 106 ms | 88 ms / 109 ms | 142 ms | **87 ms** | **32 ms** |
|
| **基线更新周期** | **3.28 s**(100 窗) | **2.73 s** | **4.37 s** | **5.59 s**(256 窗) | **5 s**(500 窗) | **4.37 s**(500 窗) |
|
||||||
|
| IIR 时间常数 τ | 106 ms | 88 ms / 109 ms | 142 ms | 87 ms | 32 ms | **28 ms** |
|
||||||
|
|
||||||
> ⚠ 时序数值基于 12MHz 晶振假设推导(测量节拍 = BASE/捕获时钟),**待现场验证**;DLD154V4B 为实测/代码确认(10ms tick τ=32ms)。V4B 归一化基数 131072 是参考型号 32768 的 4 倍 → 测量窗 2.18ms 快 15×、精度高 4 倍。
|
> ⚠ 时序数值:DLD154Pro 为 60MHz 实测配置(8.74ms 测量节拍);DLD154V4B 为实测/代码确认(10ms tick τ=32ms);其余基于 12MHz 晶振假设推导(测量节拍 = BASE/捕获时钟),**待现场验证**。归一化基数三代三变(32768→131072→524288):V4B 是参考型号 32768 的 4 倍 → 测量窗 2.18ms 快 15×、精度高 4 倍;154Pro 是 V4B 的 4 倍(60MHz 下 8.74ms 软件测量节拍)。
|
||||||
|
|
||||||
> ⚠ 灵敏度表**数值不可跨型号直接比较**:各型号归一化基数/测量方式不同(32768 基数 ×65536 比例)。统一换算成 Δf/f 后:M1H 最灵敏档 0.015%,PD132 0.064%,V4B 0.031%。
|
> ⚠ 灵敏度表**数值不可跨型号直接比较**:各型号归一化基数/测量方式不同(32768 基数 ×65536 比例)。统一换算成 Δf/f 后:M1H 最灵敏档 0.015%,PD132 0.064%,V4B 0.031%,154Pro 0.021%。
|
||||||
|
|
||||||
## 测频路线(周期累积法为统一范式)
|
## 测频路线(周期累积法为统一范式)
|
||||||
|
|
||||||
纳入对比表的型号(M1H / PD132L / PD132T / PD136HA / DLD154V4B)**全部采用周期累积法**:
|
纳入对比表的型号(M1H / PD132L / PD132T / PD136HA / DLD154V4B / DLD154Pro)**全部采用周期累积法**:
|
||||||
|
|
||||||
```
|
```
|
||||||
累加固定数量周期(周期域,LPCNT=BASE/Xn)→ 受周期抖动影响,LPCNT 自适应归一化
|
累加固定数量周期(周期域,LPCNT=BASE/Xn)→ 受周期抖动影响,LPCNT 自适应归一化
|
||||||
@@ -53,7 +55,7 @@
|
|||||||
|
|
||||||
> TLD-110(2006,门控计数法)是唯一例外,已移出对比表,见 `models/TLD-110/analysis.md`。
|
> TLD-110(2006,门控计数法)是唯一例外,已移出对比表,见 `models/TLD-110/analysis.md`。
|
||||||
|
|
||||||
DLD 产品线(154V4B/960Loop/110S/154Pro)继承 M1H→V4B 的血统;PD132 系(L/T/136HA)独立同路,其中 PD136HA 是 PD132L 的 HC32 同源移植。
|
DLD 产品线(154V4B/154Pro/960Loop/110S)继承 M1H 血统,且 154Pro 是 V4B 的直接移植(同源);PD132 系(L/T/136HA)独立同路,其中 PD136HA 是 PD132L 的 HC32 同源移植。
|
||||||
|
|
||||||
### 同源 / 同路 / 不同路(辨析)
|
### 同源 / 同路 / 不同路(辨析)
|
||||||
|
|
||||||
@@ -61,7 +63,7 @@ DLD 产品线(154V4B/960Loop/110S/154Pro)继承 M1H→V4B 的血统;PD132
|
|||||||
|
|
||||||
| 关系 | 含义 | 例 |
|
| 关系 | 含义 | 例 |
|
||||||
|------|------|-----|
|
|------|------|-----|
|
||||||
| **同源** | 明确继承/移植关系,细节连续 | M1H → DLD154V4B(灵敏度表/映射/IIR 全继承);PD132L → PD132T(文件头明示"实现与 L 一样");**PD132L → PD136HA**(工程名 PD132L-HD、文件头明示"硬件用 PD132L_V1.02/替换 PD132LA_V1.06",LPCNT/IIR/基线/滞回全继承,但灵敏度表与基线窗口独立改动) |
|
| **同源** | 明确继承/移植关系,细节连续 | M1H → DLD154V4B(灵敏度表/映射/IIR 全继承);**DLD154V4B → DLD154Pro**(文件头明示"算法移植自 V4B TaskLoop V2.0",IIR/斜率限幅/稳定期/500 窗基线/冻结/进入 3 次全继承,但基数重定标 131072→524288、离开降级简单滞回、灵敏度表改运行时可配);PD132L → PD132T(文件头明示"实现与 L 一样");**PD132L → PD136HA**(工程名 PD132L-HD、文件头明示"硬件用 PD132L_V1.02/替换 PD132LA_V1.06",LPCNT/IIR/基线/滞回全继承,但灵敏度表与基线窗口独立改动) |
|
||||||
| **同路不同源** | 独立开发撞出相似算法框架(周期累积+IIR+滑动平均+相对阈值是行业主流范式),但细节各取 | M1H vs PD132:灵敏度表 {216,...} vs {300,...}、基线有车也跟踪 vs 有车冻结、离开始终当前档 vs 可固定最高档 |
|
| **同路不同源** | 独立开发撞出相似算法框架(周期累积+IIR+滑动平均+相对阈值是行业主流范式),但细节各取 | M1H vs PD132:灵敏度表 {216,...} vs {300,...}、基线有车也跟踪 vs 有车冻结、离开始终当前档 vs 可固定最高档 |
|
||||||
| **不同路** | 测频原理根本不同 | TLD-110 门控计数 vs 周期累积(已移出对比表) |
|
| **不同路** | 测频原理根本不同 | TLD-110 门控计数 vs 周期累积(已移出对比表) |
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,228 @@
|
|||||||
|
# DLD154Pro 车检器分析
|
||||||
|
|
||||||
|
> 型号: DLD154Pro | 固件: V3.05 | 硬件: V3.01 | 平台: **CH591R/CH592**(沁恒 CH59x, RISC-V, BLE SoC @60MHz)
|
||||||
|
> 原始代码: `vd_detector/DLD154Pro/`(BLE/DLD154Pro_Peripheral_28K/APP/peripheral_main.c 等,自研)
|
||||||
|
> 血统: **DLD154V4B TaskLoop V2.0 移植(M1H 精简系)**——文件头明示,M1H→V4B→154Pro 链条
|
||||||
|
|
||||||
|
## 1. 平台与工程
|
||||||
|
|
||||||
|
| 项 | 值 |
|
||||||
|
|----|-----|
|
||||||
|
| MCU | CH591R/CH592(CH59x 系,RISC-V;注释标 CH591R @60MHz,SDK 头为 CH592SFR——待硬件确认) |
|
||||||
|
| 时钟 | `SetSysClock(CLK_SOURCE_PLL_60MHz)` → **60MHz**(实测可用,非假设) |
|
||||||
|
| 工具链 | MounRiver(.wvproj) |
|
||||||
|
| BLE | 单芯片 SoC(28K 固件分区),TMOS 任务调度 |
|
||||||
|
| 版本 | FW V3.05 / HW V3.01(cmcng.h) |
|
||||||
|
| 代码规模 | peripheral_main.c 1528 行 + dbn_ble_srv.c 898 行 + rs485_modbus.c 854 行 + rs485_700bs.c 302 行 |
|
||||||
|
| 算法来源 | **移植自 DLD154V4B TaskLoop V2.0**(M1H 精简系),2026-07-18 |
|
||||||
|
|
||||||
|
## 2. 硬件与 IO
|
||||||
|
|
||||||
|
| 引脚 | 功能 |
|
||||||
|
|------|------|
|
||||||
|
| PA9 | TMR0 捕获输入(**线圈频率入口**,浮空输入) |
|
||||||
|
| PA8 | RLY1 存在继电器(单刀双掷,**高电平有效**——注意与宏"低有效"注释相反,实测 RLY1_ON=PA8 置 1) |
|
||||||
|
| PB22 | LEDA 绿色(有车亮,低有效) |
|
||||||
|
| PB23 | LEDB 红色呼吸灯(PWM11,5.86kHz,心跳/光耦指示) |
|
||||||
|
| PA12 | FLEVEL 线圈调频(**一级**:0=66nF 低频默认 / 1=33nF 高频) |
|
||||||
|
| PA14/15/13 | RS485 UART0 TX/RX/RE(700BS 协议,Modbus 可选) |
|
||||||
|
| PB10 | 光耦输入 IN_1(雷达融合/复位,上拉输入,低有效) |
|
||||||
|
|
||||||
|
单继电器架构(V4B 双路 → 154Pro 单路),光耦输入做**雷达融合**而非第二线圈。
|
||||||
|
|
||||||
|
## 3. 频率测量(周期累积法,V4B 血统 + 2^19 基数)
|
||||||
|
|
||||||
|
- 定时器:**TMR0 输入捕获** `FallEdge_To_FallEdge`(下降沿到下降沿),`TMR0_CAPGetData()` 直接给出相邻下降沿周期 Xn
|
||||||
|
- 学习:`CapCnt > 200`(上电/换频后等振荡稳定)→ `LPCNT = MEASUREMENT_BASE / Xn`,异常保护 `lpcnt==0 || >65535 → 100`
|
||||||
|
- 测量:累积 LPCNT 个周期 → `Value = CapSum`(≈ MEASUREMENT_BASE),`CAP_OK=1`
|
||||||
|
- 第一个测量窗**直接作为基线 Origin**(不等 IIR)
|
||||||
|
|
||||||
|
```c
|
||||||
|
// TMR0_IRQHandler 核心
|
||||||
|
loop1_Xn = (uint16_t)TMR0_CAPGetData(); // 相邻下降沿周期
|
||||||
|
if (loop1_INI_LOOP) {
|
||||||
|
if (loop1_LPCNT == 0) {
|
||||||
|
if (loop1_CapCnt > 200) { // 振荡稳定等待
|
||||||
|
uint32_t lpcnt = (uint32_t)MEASUREMENT_BASE / loop1_Xn;
|
||||||
|
if (lpcnt == 0 || lpcnt > 65535) lpcnt = 100; // 异常保护
|
||||||
|
loop1_LPCNT = (uint16_t)lpcnt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
loop1_CapSum += loop1_Xn;
|
||||||
|
if (loop1_CapCnt >= loop1_LPCNT) {
|
||||||
|
loop1_CAPVD = loop1_CapSum; // 一次测量窗
|
||||||
|
loop1_Origin = loop1_CAPVD; // 首个窗直接基线
|
||||||
|
loop1_INI_LOOP = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
loop1_CapSum += loop1_Xn;
|
||||||
|
if (loop1_CapCnt >= loop1_LPCNT) {
|
||||||
|
loop1_Value = loop1_CapSum; // 正常运行
|
||||||
|
loop1_CAP_OK = 1;
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- **归一化基数 524288 (2^19)**:60MHz → 测量窗 **8.74ms**(代码注释明确)
|
||||||
|
- 相对 DLD154V4B:基数 131072→524288(×4),是**跨芯片重写重定标**的又一实例(M1H 系 32768 → V4B 131072 → 154Pro 524288 三代三基数)
|
||||||
|
|
||||||
|
## 4. 滤波(IIR + 斜率限幅)
|
||||||
|
|
||||||
|
```c
|
||||||
|
// vd1_task 第 1 步:斜率限幅后一阶 IIR
|
||||||
|
raw_delta = loop1_Value - loop1_CAPVD;
|
||||||
|
max_step = loop1_CAPVD * MAX_SLOPE_RATE / 100; // 5% 单次最大变化
|
||||||
|
if (max_step < 100) max_step = 100; // 下限保护
|
||||||
|
clamped_value = loop1_CAPVD + clamp(raw_delta);
|
||||||
|
loop1_CAPVD = get_flt_value(clamped_value, loop1_CAPVD); // IIR a=Flt_Reg/256=79/256
|
||||||
|
```
|
||||||
|
|
||||||
|
- `Flt_Reg = ALFA_CAP1 = 79`(固定,无 64 档),α ≈ 0.31
|
||||||
|
- **斜率限幅 5%**(MAX_SLOPE_RATE=5,拒绝 EMI 瞬态尖峰)——与 V4B 同源
|
||||||
|
|
||||||
|
### 稳定期快速收敛
|
||||||
|
|
||||||
|
```c
|
||||||
|
if (!g_loop_stable) {
|
||||||
|
loop1_CAPVD = loop1_Value; // 绕过 IIR/斜率限幅
|
||||||
|
update_moving_average(..., 100); // 100 窗滑动平均基线
|
||||||
|
if (++loop1_stable_cnt >= STABLE_SAMPLES) // 128 窗 (~1.1s)
|
||||||
|
g_loop_stable = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. 基线(500 窗滑动平均 + 冻结保护双条件)
|
||||||
|
|
||||||
|
```c
|
||||||
|
if (!loop1_VD_FLAG) { // 无车才跟踪(有车冻结)
|
||||||
|
loop1_dlt_ORG = (Origin * sens_in) >> 16;
|
||||||
|
dev = CAPVD - Origin;
|
||||||
|
if (dev < dlt_ORG * 4) {
|
||||||
|
update_moving_average(&Origin, CAPVD, WINDOW_ORIGIN); // 500 窗
|
||||||
|
} else {
|
||||||
|
// CAPVD 异常偏高: 冻结, 超时 + 稳定性双条件强制更新
|
||||||
|
if (drift > freeze_ref * FREEZE_STABILITY_RATE / 100) { // ±2% 漂移则重置计时
|
||||||
|
loop1_freeze_cnt = 0; loop1_freeze_ref = CAPVD;
|
||||||
|
}
|
||||||
|
loop1_freeze_cnt++;
|
||||||
|
if (loop1_freeze_cnt >= FREEZE_TIMEOUT) { // 1000 窗 ~8.7s
|
||||||
|
loop1_Origin = loop1_CAPVD; // 确认稳定的新常态
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- 窗口 **500**(WINDOW_ORIGIN,uint16_t——注释明确警示 uint8_t 会截断 500>255)
|
||||||
|
- 冻结保护:dev ≥ 4×dlt_ORG 暂停跟踪;**超时(8.7s)+ 稳定性(±2%)双条件**才强制更新基线(与 V4B 同源)
|
||||||
|
|
||||||
|
### 5.1 时序速查(60MHz 实测配置,非假设)
|
||||||
|
|
||||||
|
| 项 | 值 | 公式 |
|
||||||
|
|----|-----|------|
|
||||||
|
| 捕获方式 | 下降沿到下降沿 | TMR0_CapInit(FallEdge) |
|
||||||
|
| **测量节拍**(CAPVD 更新) | **8.74 ms** | 524288 / 60MHz |
|
||||||
|
| **基线更新周期** | **4.37 s** | 500 窗 × 8.74ms |
|
||||||
|
| **IIR τ** | **28.3 ms**(注释 ~24ms) | 8.74ms × 256/79 |
|
||||||
|
| 稳定期 | 1.12 s | 128 窗 × 8.74ms |
|
||||||
|
| 冻结超时 | 8.74 s | 1000 窗 |
|
||||||
|
| 进入确认 | 26.2 ms | 3 窗 |
|
||||||
|
| 时序 tick / 状态机节拍 | 5ms / 50ms | TMR1=FREQ_SYS/200,TM1cnt≥10 |
|
||||||
|
| 脉冲宽度 | 500 ms | IN_DELAY/PLUSE_DELAY=10 × 50ms |
|
||||||
|
| 看门狗 | 558ms 超时 / 500ms 喂 | WWDG,g_wdg_counter≥100 |
|
||||||
|
|
||||||
|
## 6. 判据与灵敏度
|
||||||
|
|
||||||
|
```c
|
||||||
|
// 无车: 进入确认 ENTRY_CONFIRM=3 次连续低于阈值
|
||||||
|
loop1_dlt_ORG = (Origin * sens[g_freq_sens].sens_in) >> 16;
|
||||||
|
if (CAPVD < Origin - dlt_ORG) {
|
||||||
|
loop1_entry_cnt++;
|
||||||
|
if (loop1_entry_cnt >= ENTRY_CONFIRM) { loop1_VD_FLAG=1; ... }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 有车: USE_FLATNESS_EXIT=1 时平坦性三条件 (V4B 同款, K1=K2=8, 下限 18/7, 确认 3)
|
||||||
|
// 当前 V3.05: #define USE_FLATNESS_EXIT 被注释 → 走 #else 简单滞回
|
||||||
|
loop1_dlt_ORG = (Origin * sens[g_freq_sens].sens_out) >> 16;
|
||||||
|
if (Origin - dlt_ORG < CAPVD) {
|
||||||
|
if (++loop1_cnt_release >= 3) loop_release_common(); // 3 次防抖
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> ⚠ **重要:V3.05 实际走"简单滞回 + 3 次防抖离开"**。平坦性三条件(专利 CN200910309382)代码完整保留但被 `// #define USE_FLATNESS_EXIT` 编译开关禁用——与 DLD154V4B 的离开算法**不一致**,别想当然认为移植就全继承。
|
||||||
|
|
||||||
|
### 灵敏度表(出厂默认,运行时以 g_loop_sens_list 为准,BLE 可改)
|
||||||
|
|
||||||
|
| 档位 index | 进入表 SensTable | Δf/f 进入 | 离开表 SensTable1 | Δf/f 离开 |
|
||||||
|
|-----------|-----------------|-----------|-------------------|-----------|
|
||||||
|
| 0 | 108 | 0.165% | 81 | 0.124% |
|
||||||
|
| 1(出厂默认) | 54 | 0.082% | 32 | 0.049% |
|
||||||
|
| 2 | 28 | 0.043% | 16 | 0.024% |
|
||||||
|
| 3 | 14 | 0.021% | 12 | 0.018% |
|
||||||
|
|
||||||
|
- 出厂默认 `loop_cng_default[7]={2,1,0,0x00,4,0,0}` → sensitvity=2 → g_freq_sens=1(表值 54/32)
|
||||||
|
- **最灵敏档 0.021% 比 V4B (0.031%) 更灵敏**——154Pro 定位高灵敏度场景
|
||||||
|
- 灵敏度表可经 BLE 0x24 改写(g_loop_sens_list 存 Flash),V4B 是编译期常量——**154Pro 首次引入运行时可配灵敏度表**
|
||||||
|
|
||||||
|
## 7. 状态机与输出
|
||||||
|
|
||||||
|
```
|
||||||
|
捕获中断(TMR0) → Xn → 累积 LPCNT 个 → Value/CAP_OK
|
||||||
|
↓ 主循环 CAP_OK(8.74ms)
|
||||||
|
vd1_task:斜率限幅 → IIR → 稳定期/基线 → 进入确认/离开 → VD_FLAG/FLAG_OUT
|
||||||
|
↓ 5ms 时序中断 (TMR1) / 50ms 节拍
|
||||||
|
FLAG_OUT 延迟 g_loop_out_delay(=delay_time×2×50ms) → FLAG_PLUSE(500ms)
|
||||||
|
FLAG_IN → FLAG_PLUSE_IN(500ms 进入脉冲, output_mode=1 时)
|
||||||
|
RLY1 = 存在输出(7 种融合模式) / 进入脉冲 / 离开脉冲
|
||||||
|
```
|
||||||
|
|
||||||
|
- **输出融合 7 模式**(direction_mode 低 4 位,skill 有记录勿与 110S 混用):
|
||||||
|
0=地感∨雷达 / 1=人车混行(3s 防砸窗口)/ 2=ETC(500ms 防抖)/ 3=地感∧雷达 / 4=纯地感 / 5=纯雷达(3 样本多数表决)/ 6=光耦复位(≥400ms 低+上升沿复位)
|
||||||
|
- 光耦防抖:3 样本多数表决(6 次注释为遗留)
|
||||||
|
- 输出方式 output_mode:0=存在(融合)/ 1=进入脉冲 / 2=离开脉冲
|
||||||
|
- RS485 双协议:g_fm_700bs_disable=0 → 700BS;=1 → Modbus RTU(MB_MAX_READ_REGS=40 已修)
|
||||||
|
|
||||||
|
## 8. 异常处理
|
||||||
|
|
||||||
|
| 场景 | 处理 |
|
||||||
|
|------|------|
|
||||||
|
| 线圈断开 | LOOP_OK=0 → FLAG_CUT=1、断开计数 `g_loop_cut_amount++`(g_loop_cut_last 边沿记忆)、继电器释放、**不丢 VD_FLAG**(重连恢复有车态) |
|
||||||
|
| 断开重连 | 200ms 等待起振 → CAPVD=0 直锁首个样本快速收敛 → 丢弃断开期间过期数据 → Origin 丢失防御全复位 |
|
||||||
|
| 有限存在超时 | exist_mode>0 时进入置 VD_HOLD;`g_hold_time=exist_mode×5s` 超时 → FLAG_HOLD_TIMEOUT → 主循环 INIT_VD 全复位重建基线 |
|
||||||
|
| 安全复位 | loopSafe_Timeout>0 时进入置 LC_HOLD;`g_safe_max_cnt=loopSafe_Timeout×1s` 超时 → 重新初始化测量重建基线(对齐 M1H) |
|
||||||
|
| 看门狗 | WWDG 558ms,主循环 500ms 喂(poll_wdg) |
|
||||||
|
| 参数存储 | para_store_init 读 Flash;魔数 0x33BB C33C 不符 → 恢复出厂 + 复位(factory_dev 写入出厂参数) |
|
||||||
|
| 上电 | 稳定期 128 窗(LEDA 200ms 慢闪自检)→ 稳定后检测 |
|
||||||
|
|
||||||
|
## 9. 参数速查
|
||||||
|
|
||||||
|
| 参数 | 值 |
|
||||||
|
|------|-----|
|
||||||
|
| 归一化基数 | **524288 (2^19)** |
|
||||||
|
| 测量节拍 | **8.74 ms**(60MHz 实测配置) |
|
||||||
|
| 基线窗口 | 500(有车冻结 + 超时/稳定性双条件) |
|
||||||
|
| IIR 系数 | 79(+ 斜率限幅 5%) |
|
||||||
|
| 进入/离开表 | {108,54,28,14} / {81,32,16,12}(运行时可配) |
|
||||||
|
| 档位 Δf/f | 0.165%~0.021%(进入)、0.124%~0.018%(离开) |
|
||||||
|
| 时序 tick | 5ms / 状态机 50ms |
|
||||||
|
| 看门狗 | WWDG 558ms / 500ms 喂 |
|
||||||
|
| 有限存在 / 安全复位 | exist_mode×5s / loopSafe_Timeout×1s |
|
||||||
|
| 输出 | RLY1 单继电器(7 模式融合)+ 呼吸灯 |
|
||||||
|
| BLE | 0x24 查询响应 8B + 3B LE LOOP_MEASURE_BASE(偏移 8-10) |
|
||||||
|
|
||||||
|
## 10. 移植注意 / 血统关系
|
||||||
|
|
||||||
|
- **同源判定(DLD154V4B → DLD154Pro)**:文件头明示"算法移植自 DLD154V4B TaskLoop V2.0";IIR 79/斜率限幅 5%/稳定期 128 窗/500 窗基线/冻结双条件/进入 3 次确认全部继承
|
||||||
|
- **差异点(154Pro 相对 V4B 的独立改动)**:
|
||||||
|
1. **归一化基数 131072→524288**(×4)——跨芯片重写重定标,60MHz 下测量窗 8.74ms(与 V4B 10ms 任务节拍同量级)
|
||||||
|
2. **离开判定降级**:平坦性三条件被 `USE_FLATNESS_EXIT` 编译开关禁用 → 简单滞回 3 次防抖(V4B 用专利三条件)——**移植≠全继承,务必看编译开关**
|
||||||
|
3. 灵敏度表运行时可配(BLE 写 Flash)vs V4B 编译期常量;档位全重标且最灵敏档提升到 0.021%
|
||||||
|
4. 双继电器 → 单继电器 + 光耦输入(7 种雷达融合模式,含人车混行 3s 防砸/ETC 500ms 防抖/光耦复位)
|
||||||
|
5. 新增 RS485 双协议(700BS + Modbus RTU)、BLE 上报(variation/LOOP_MEASURE_BASE 3B LE)
|
||||||
|
6. 有限存在/安全复位改为参数可配(V4B 编译期常量)
|
||||||
|
7. MCU:AT32F421 (M4, FreeRTOS) → CH59x (RISC-V, TMOS) —— 从带 RTOS 变成裸机+BLE 协议栈
|
||||||
|
- **与 M1H**:同源链 M1H → V4B → 154Pro,但基数三代三变(32768/131072/524288),**任何跨型号换算必须先按各自 BASE 归一化**
|
||||||
|
- **与 PD132 系**:同路不同源(周期累积法范式相同,细节独立)
|
||||||
Reference in New Issue
Block a user