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)
- 归一化基数 524288 (2^19):60MHz → 测量窗 8.74ms(代码注释明确)
- 相对 DLD154V4B:基数 131072→524288(×4),是跨芯片重写重定标的又一实例(M1H 系 32768 → V4B 131072 → 154Pro 524288 三代三基数)
4. 滤波(IIR + 斜率限幅)
Flt_Reg = ALFA_CAP1 = 79(固定,无 64 档),α ≈ 0.31
- 斜率限幅 5%(MAX_SLOPE_RATE=5,拒绝 EMI 瞬态尖峰)——与 V4B 同源
稳定期快速收敛
5. 基线(500 窗滑动平均 + 冻结保护双条件)
- 窗口 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. 判据与灵敏度
⚠ 重要: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. 状态机与输出
- 输出融合 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 的独立改动):
- 归一化基数 131072→524288(×4)——跨芯片重写重定标,60MHz 下测量窗 8.74ms(与 V4B 10ms 任务节拍同量级)
- 离开判定降级:平坦性三条件被
USE_FLATNESS_EXIT 编译开关禁用 → 简单滞回 3 次防抖(V4B 用专利三条件)——移植≠全继承,务必看编译开关
- 灵敏度表运行时可配(BLE 写 Flash)vs V4B 编译期常量;档位全重标且最灵敏档提升到 0.021%
- 双继电器 → 单继电器 + 光耦输入(7 种雷达融合模式,含人车混行 3s 防砸/ETC 500ms 防抖/光耦复位)
- 新增 RS485 双协议(700BS + Modbus RTU)、BLE 上报(variation/LOOP_MEASURE_BASE 3B LE)
- 有限存在/安全复位改为参数可配(V4B 编译期常量)
- MCU:AT32F421 (M4, FreeRTOS) → CH59x (RISC-V, TMOS) —— 从带 RTOS 变成裸机+BLE 协议栈
- 与 M1H:同源链 M1H → V4B → 154Pro,但基数三代三变(32768/131072/524288),任何跨型号换算必须先按各自 BASE 归一化
- 与 PD132 系:同路不同源(周期累积法范式相同,细节独立)