diff --git a/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h b/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h index 6d7369d..eeb96e2 100644 --- a/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h +++ b/BLE/DLD154Pro_Peripheral_28K/APP/include/cmcng.h @@ -17,10 +17,10 @@ */ #define PRODUCT_MODEL "DLD154Pro" -#define FIRMWARE_VER "3.00" +#define FIRMWARE_VER "3.01" #define HARDWARE_VER "3.01" #define FIRMWARE_VER_MAIN 3 -#define FIRMWARE_VER_SUB 0 +#define FIRMWARE_VER_SUB 1 #define HARDWARE_VER_MAIN 3 #define HARDWARE_VER_SUB 1 diff --git a/docs/devlog.md b/docs/devlog.md index 567b14c..7d77c0d 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -4,6 +4,35 @@ --- +## 2026-07-29 — 发布 V3.01 版本文档:技术规格书 + 产品说明书 + +### 文档产出 + +| 文档 | 路径 | 内容 | +|------|------|------| +| 技术规格书 | `docs/technical-spec.md` | 系统架构、电气参数、IO 引脚分配、检测算法全链路(频率测量/IIR/斜率限幅/灵敏度表/进入确认/平坦性离开/基线跟踪/冻结超时)、时序状态机、7 种输出融合模式状态机、指示灯、上电稳定期、线圈故障处理、通信协议(BLE/700BS/Modbus)、Flash 存储布局 | +| 产品说明书 | `docs/product-manual.md` | 面向终端用户:产品概述、技术参数、硬件接口(端子定义/指示灯)、BLE 配置项、灵敏度档位、输出模式、输出融合模式(含人车混行防砸和ETC工作原理)、安装指南、故障排查、RS485总线集成速查、订购信息 | + +### 源数据来源 +- `peripheral_main.c`: 算法参数 (MEASUREMENT_BASE=524288, ALFA_CAP1=79, MAX_SLOPE_RATE=5%, ENTRY_CONFIRM=3, FREEZE_TIMEOUT=1000, WINDOW_ORIGIN=500, STABLE_SAMPLES=128) +- `cmcng.h`: 版本号 (FW 3.01 / HW 3.01), 全局变量声明 +- `storage.h`: Flash 布局, 配置结构体, `DLD_OUTPUT_MODE` 枚举 +- `dbn_ble_srv.h`: BLE 命令码 +- `docs/DLD154Pro硬件资源.md`: IO 分配 +- `docs/rs485-modbus-protocol.md` / `docs/rs485-700bs-protocol.md`: 通信协议 + +### 与 DLD154V4B 的关键差异 +| 项目 | DLD154V4B | DLD154Pro | +|------|-----------|-----------| +| MCU | AT32F421 (ARM M4) | CH591R (RISC-V) | +| 配置方式 | 物理 DIP 开关 | BLE 小程序 | +| 通信接口 | TTL Tx 调试口 | RS485 (双协议) + BLE | +| 继电器 | 2 路 | 1 路 | +| 指示灯 | 红+绿+黄 (3 LED) | 红呼吸+绿 (2 LED) | +| 光耦 | 无 | 有 (7 种融合模式) | + +--- + ## 2026-07-28 (傍晚) — 光耦参与模式下 LEDA 同步继电器状态 光耦参与模式 (MODE 2-6) 下,绿色 LED 原先跟随线圈 `FLAG_IN`/`FLAG_OUT` 变化, diff --git a/docs/product-manual.md b/docs/product-manual.md new file mode 100644 index 0000000..64a36c8 --- /dev/null +++ b/docs/product-manual.md @@ -0,0 +1,299 @@ +# DLD154Pro 产品说明书 + +> 单路线圈蓝牙车辆检测器 | 型号: DLD154Pro | 版本: V3.01 +> 适用于停车场、收费站、交通卡口等场景的车辆到达/离开检测 + +--- + +## 1. 产品概述 + +DLD154Pro 是一款基于 RISC-V 微控制器的**单通道环形线圈蓝牙车辆检测器**。通过实时监测埋地线圈的 LC 振荡频率变化,精确检测车辆的存在与离开。产品采用专利级平坦性离开判定算法(CN200910309382),有效解决大车通行时频率多峰导致的误触发问题。 + +### 1.1 核心特性 + +- **无线配置**:通过手机 BLE 小程序设置全部参数,无需开箱操作 +- **高精度频率测量**:自适应窗口脉冲计数,归一化基线 ≈ 524288,保留全部采样精度 +- **专利离开判定**:频率 + 一阶导数 + 二阶导数三条件平坦性判定,防大车误检 +- **上电稳定期**:~1.1s 线圈振荡稳定窗口,避免上电误判 +- **线圈重连保护**:断开期间保持有车状态,重连后快速恢复,误判率极低 +- **灵敏度 4 级可调**:通过 BLE 小程序配置,0.043% ~ 0.330% 感量变化检测 +- **多融合输出模式**:支持纯地感、纯雷达、地感或雷达、地感且雷达、人车混行防砸、ETC 等 7 种模式 +- **双通信接口**:BLE 4.2(配置 + 主动上报)+ RS485(700BS / Modbus RTU 工业总线) +- **宽频率范围**:支持 20 ~ 200 kHz 线圈频率 + +### 1.2 适用场景 + +| 场景 | 说明 | +|------|------| +| 道闸控制 | 车辆到达触发抬杆,离开触发落杆 | +| 车位检测 | 实时监测车位占用状态 | +| 流量统计 | 配合上位机统计车流量 | +| ETC/收费站 | 触发抓拍、计费 | +| 红绿灯触发 | 感应线圈触发信号灯相位切换 | +| 工业总线集成 | RS485 Modbus RTU 接入 PLC/SCADA | +| 多传感器融合 | 光耦接雷达,双确认/互补冗余/人车混行防砸 | + +--- + +## 2. 技术参数 + +| 项目 | 参数 | +|------|------| +| 产品型号 | DLD154Pro | +| 微控制器 | CH591R (RISC-V, BLE 4.2) | +| 主频 | 60 MHz | +| Flash | 192 KB(用户可用 28 KB) | +| SRAM | 18 KB | +| 线圈通道数 | 1 路 | +| 工作电压 | DC 12V / 24V(宽压) | +| 功耗 | < 2W(含 BLE + 继电器吸合) | +| 线圈电感范围 | 50 ~ 1000 μH(推荐 100 ~ 300 μH) | +| 频率测量范围 | 20 ~ 200 kHz | +| 频率测量精度 | 优于 0.01% | +| 灵敏度等级 | 4 级(BLE 可调) | +| 响应时间 | ~530 ms(进入检测) | +| 进入防抖 | 500 ms | +| 离开防抖 | 可配(delay_time × 100ms,默认 500ms) | +| 脉冲输出宽度 | 500 ms | +| 继电器输出 | 1 路(单刀双掷 SPDT) | +| 继电器触点容量 | AC 250V / 3A | +| 通信接口 | BLE 4.2 + RS485(UART0) | +| 工作温度 | -40°C ~ +85°C | +| 存储温度 | -55°C ~ +125°C | +| 防护等级 | IP65(封装后) | +| 外形尺寸 | 标准 DIN 导轨安装 | +| 重量 | 约 80g | + +--- + +## 3. 硬件接口 + +### 3.1 端子定义 + +| 端子 | 标识 | 功能 | 说明 | +|------|------|------|------| +| 1 | V+ | 电源正极 | DC 12V / 24V | +| 2 | GND | 电源地 | — | +| 3 | LOOP | 线圈端子 | 接环形线圈两端 | +| 4 | LOOP | 线圈端子 | 接环形线圈两端 | +| 5 | RLY-NO | 继电器常开 | 存在/脉冲输出 | +| 6 | RLY-COM | 继电器公共 | — | +| 7 | RLY-NC | 继电器常闭 | — | +| 8 | A+ | RS485 A | 差分信号 + | +| 9 | B- | RS485 B | 差分信号 − | +| 10 | IN+ | 光耦输入 + | 接外部雷达/检测器干接点 | +| 11 | IN− | 光耦输入 − | 接外部雷达/检测器干接点 | + +### 3.2 指示灯 + +| 指示灯 | 颜色 | 功能 | +|--------|------|------| +| 绿灯 (LEDA) | 绿色 | 车辆检测指示 / 自检。初始化/稳定期慢闪,有车亮,无车灭 | +| 红灯 (LEDB) | 红色 | 系统运行指示(呼吸灯,表示正常工作) | + +### 3.3 内部跳线/配置 + +| 项目 | 说明 | +|------|------| +| 频率档位 | 通过 BLE 小程序设置,IO 控制 PA12 切换 33nF 调频电容:0=接 33nF(低频),1=不接(高频) | + +--- + +## 4. 功能说明 + +### 4.1 检测原理 + +环形线圈埋于路面下,与检测器内部电容构成 LC 谐振回路。当金属物体(车辆)经过线圈上方时,线圈电感发生变化,导致谐振频率上升。检测器通过高精度输入捕获实时监测频率偏移,当偏移量超过灵敏度阈值时,判定为有车。 + +**频率-检测映射:** + +``` +线圈频率 f₀ (无车基线) → 车辆进入 → f ↑ (频率上升) + ↓ + f - f₀ > 阈值 → 判定"有车" (+ 进入确认 3 次) + ↓ + 车辆离开 → f ↓ → f ≈ f₀ + ↓ + 平坦性三条件确认 → 判定"无车" +``` + +### 4.2 BLE 小程序配置 + +DLD154Pro **无物理拨码开关**,所有参数通过手机 BLE 小程序配置,掉电不丢失: + +| 配置项 | 范围 | 默认值 | 说明 | +|--------|------|--------|------| +| 灵敏度 | 0 (低) ~ 3 (最高) | 1 (中) | 见 §4.3 | +| 输出模式 | 0 (存在) / 1 (进入脉冲) / 2 (离开脉冲) | 0 | 继电器输出类型 | +| 离开延时 | 0 ~ 255 (×100ms) | 5 (500ms) | 车辆离开后延时释放 | +| 有限存在 | 0 (永久) 或 1~255 (×5s) | 0 | 超时后释放并复位 | +| 频率档位 | 0 (高频) / 1 (低频) | 0 | 调频电容切换 | +| 融合模式 | 0 ~ 6 | 1 (仅地感) | 见 §4.6 | +| 功能码 (function_mode) | bit0: RS485 协议, bit1: 光耦功能 | 0 | 700BS/Modbus 切换 | +| RS485 协议 | 700BS / Modbus RTU | 700BS | bit0=0→700BS, bit0=1→Modbus | +| RS485 地址 | 1 ~ 247 | 1 | Modbus 从机地址 | +| RS485 波特率 | 9600 / 19200 / 38400 / 57600 / 115200 | 9600 | — | +| 蓝牙空闲超时 | 0 ~ 255 分钟 | 0 (不关闭) | 无数据传输后自动关蓝牙 | + +### 4.3 灵敏度配置 + +| 灵敏度 | ΔL/L 进入 | 适用场景 | +|--------|----------|----------| +| **低** (0) | 0.330% | 大车 / 高底盘车辆 / 强干扰环境 | +| **中** (1) | 0.165% | 普通轿车(**推荐默认**) | +| **高** (2) | 0.085% | 摩托车 / 小轿车 / 安静环境 | +| **最高** (3) | 0.043% | 超高灵敏度场景(注意温漂影响) | + +> **提示**:灵敏度越高,检测越灵敏,但也越容易受环境干扰(如温度漂移、邻道串扰)。建议从"中"灵敏度开始调试。最高档仅推荐用于摩托车/小型车辆检测,需确保线圈安装质量。 + +### 4.4 输出模式 + +**存在输出(output_mode = 0):** +- 有车时继电器持续吸合 +- 无车时继电器释放 +- 离开延时由 `delay_time` 配置 + +**脉冲输出(output_mode = 1 / 2):** +- **进入脉冲**:车辆确认进入时继电器吸合 500ms 后释放 +- **离开脉冲**:车辆离开(+离开延时)后继电器吸合 500ms 释放 +- 适用于触发道闸抬杆等需单次脉冲的场景 + +### 4.5 有限存在时间 + +当配置有限存在时间(exist_mode > 0)时,若车辆持续停留超过指定时间,检测器自动复位重建基线,防止将长时间停放车辆"学"入基线。 + +> **⚠ 有限存在超时后不会自动释放继电器(那样车还在的话会立即重新吸合),而是执行完整通道复位。** + +### 4.6 输出融合模式 + +DLD154Pro 支持通过光耦输入接入外部雷达/车检器的干接点信号,按 7 种融合模式组合输出: + +| 模式 | 名称 | 继电器吸合条件 | 适用场景 | +|------|------|--------------|---------| +| 0 | 光耦复位 | 仅地感(光耦用于远程复位) | 需要远程复位功能 | +| 1 | **仅地感** | 线圈有车 | 纯线圈场景(默认,未接光耦时也用此模式) | +| 2 | 仅光耦 | 光耦输入有效 | 纯雷达,地感做背景监控 | +| 3 | 地感**或**光耦 | 任一触发 | 互补冗余,提高检测可靠性 | +| 4 | 地感**且**光耦 | 两者同时触发 | 双确认,防地感误触(行人/拖车) | +| 5 | **人车混行防砸** | 有车后任一触发,离场 3s 窗口内光耦有效 | 混合交通防砸人 | +| 6 | **ETC 模式** | 有车后任一触发,光耦断开 500ms 防抖才释放 | ETC 车道 | + +**人车混行防砸 (模式 5) 工作原理:** +1. 平常状态只用线圈检测,屏蔽光耦(防行人误触) +2. 线圈检测到车、继电器吸合后,光耦信号也参与(人或雷达都能续吸) +3. 车离开线圈+雷达区域后,保留 **3 秒防砸窗口**——期间光耦检测到人立即吸合 +4. 3 秒后无人则落杆;连续进入持续防砸 + +> **注意**:光耦输入连接的是外部雷达/检测器的**继电器干接点输出**(常开),非电压信号。 + +--- + +## 5. 指示灯行为 + +| 状态 | 绿灯 | 红灯 | +|------|------|------| +| 上电初始化 / 基线学习中 | **慢闪** (200ms 亮/灭) | 呼吸 (~1.9s 周期) | +| 线圈断开 | **灭** | 呼吸 | +| 正常运行,无车 | **灭** | 呼吸 | +| 正常运行,有车 | **亮** | 呼吸 | + +> **提示**:上电后绿灯慢闪约 1.2s 后熄灭,表示线圈稳定就绪。如果绿灯一直慢闪不灭(超过 5s),说明线圈可能未连接或电感异常。 + +--- + +## 6. 安装指南 + +### 6.1 线圈安装 + +1. **线圈尺寸**:推荐 1m × 2m 矩形,绕 3 ~ 4 匝 +2. **埋设深度**:地表下 3 ~ 5 cm +3. **线圈电感**:100 ~ 300 μH(推荐值) +4. **引线**:双绞屏蔽线,长度 < 100m(越长干扰越大) +5. **防水处理**:线圈和接头做防水密封 +6. **隔离**:相邻线圈间距 ≥ 1m,避免串扰 + +### 6.2 检测器安装 + +1. 固定在 DIN 导轨或机柜内 +2. 远离强电磁干扰源(变频器、大电机、对讲机天线等) +3. 线圈引线独立走线,勿与强电线并行走线 +4. 确保良好接地 +5. RS485 终端:长距离布线时在总线两端加 120Ω 终端电阻 + +### 6.3 上电调试 + +1. 确认线圈正确连接后上电 +2. 观察绿灯:慢闪 ~1.2s 后熄灭(无车状态),表示稳定就绪 +3. 金属物体(铁板或车辆)靠近线圈 → 绿灯应亮起 +4. 用手机 BLE 小程序连接设备,查看实时频率和 CAPVD +5. 根据实际灵敏度调整参数 +6. 选择输出模式和融合模式 + +### 6.4 BLE 小程序连接 + +1. 打开手机蓝牙 +2. 搜索设备(设备名:DLD154Pro-XXXX,XXX 为 MAC 地址后 4 位) +3. 连接后,可查看:设备信息、实时线圈频率、CAPVD、基线值、车辆状态 +4. 可设置:灵敏度、输出模式、延时、融合模式、RS485 参数等 + +--- + +## 7. 故障排查 + +| 现象 | 可能原因 | 处理方法 | +|------|---------|----------| +| 绿灯一直慢闪不灭 | 线圈断开或未连接 / 电感异常 | 检查线圈接头、引线通断;测量线圈电感 | +| 绿灯常亮不灭 | 灵敏度太高 / 线圈频率漂移 / 基线未建立 | 降低灵敏度;检查是否有金属物在线圈上方 | +| 绿灯从不亮 | 灵敏度太低 / 线圈 Q 值过低 | 提高灵敏度;更换线圈 | +| 红灯不亮 | 电源故障 | 检查供电电压 | +| 频繁误触发 | 电磁干扰 / 灵敏度太高 / 引线过长 | 降低灵敏度;屏蔽干扰源;缩短引线 | +| 大车通过时多次触发 | 平坦性离开判定未生效 | 确认固件版本 ≥ V3.00 | +| BLE 无法连接 | 距离太远 / 已连接其他设备 / 蓝牙超时关闭 | 靠近设备;检查是否被其他手机占用;重新上电 | +| RS485 无应答 | 地址/波特率不匹配 / 协议选错 | 用 BLE 确认当前配置;检查接线 | +| 光耦模式不生效 | 融合模式未设置 / 光耦接线错误 | BLE 确认融合模式;检查 IN+/IN− 接线 | + +--- + +## 8. RS485 总线集成 + +DLD154Pro 支持两种 RS485 协议,通过 BLE 小程序切换: + +| 协议 | function_mode bit0 | 适用场景 | +|------|-------------------|---------| +| **700BS** | 0(默认) | 兼容 DLD-700BS 系列车检器 | +| **Modbus RTU** | 1 | 接入 PLC / SCADA / 工业物联网 | + +**Modbus 关键寄存器速查**: + +| 类型 | 地址 | 名称 | 说明 | +|------|------|------|------| +| DI | 0x0000 | Car Present | 当前有车 (0/1) | +| DI | 0x0001 | Loop Fault | 线圈故障 (0/1) | +| IR | 0x0000–01 | Loop Freq | 线圈频率,32-bit 大端 (Hz) | +| IR | 0x0002–03 | CAPVD | 归一化周期值,32-bit | +| HR | 0x0000 | Sensitivity | 灵敏度 0–2,R/W | +| HR | 0x0001 | Fusion Mode | 融合模式 0–6,R/W | +| HR | 0x00FF | Device Reset | 写 0x5A5A 复位 | + +> 完整寄存器映射见 `docs/rs485-modbus-protocol.md`。 + +--- + +## 9. 版本历史 + +| 版本 | 日期 | 说明 | +|------|------|------| +| V3.00 | 2026-07-21 | 项目初始化:从 DLD110SV4 移植 + 硬件适配 CH591R | +| V3.01 | 2026-07-28 | 光耦输出融合模式(6 种);LEDA 同步继电器状态 | + +--- + +## 10. 订购信息 + +| 型号 | 说明 | +|------|------| +| DLD154Pro | 单路线圈蓝牙车辆检测器,CH591R,BLE + RS485 | + +--- + +> **技术规格书**(算法详情、IO 分配、电气参数、协议细节等)请参阅 [技术规格书](technical-spec.md) diff --git a/docs/technical-spec.md b/docs/technical-spec.md new file mode 100644 index 0000000..f9c1112 --- /dev/null +++ b/docs/technical-spec.md @@ -0,0 +1,571 @@ +# DLD154Pro 技术规格书 + +> 单路线圈蓝牙车辆检测器 | 固件版本: V3.01 | 硬件版本: V3.01 +> 本文档面向工程开发、系统集成及故障深度分析 + +--- + +## 1. 系统架构 + +### 1.1 硬件架构 + +``` + ┌──────────────────────────────────────┐ + 线圈 ───────────────┤ PA9 (TMR0) CH591R (RISC-V) │ + │ 输入捕获 60MHz / 28KB ├── PB22 (GPIO) ──── 绿灯 + 光耦 ───────────────┤ PB10 (GPIO) │ + │ ├── PB23 (PWM11) ─── 红灯 (呼吸) + RS485 ──────────────┤ PA14 TX / PA15 RX / PA13 RE (UART0) │ + │ ├── PA8 (GPIO) ──── 继电器 RLY1 + BLE ────────────────┤ 2.4GHz 无线 │ + │ ├── PA12 (GPIO) ──── 调频电容 (33nF) + └──────────────────────────────────────┘ +``` + +### 1.2 软件架构 + +``` +Main_Circulation (无 RTOS, 裸机轮询) +├── vd1_task() — 每 ~8.74ms 执行 (MEASUREMENT_BASE 测量窗) +│ ├── IIR 滤波 (ALFA_CAP1=79/256, τ≈24ms) +│ ├── 斜率限幅 (MAX_SLOPE_RATE=5%) +│ ├── 基线跟踪 (WINDOW_ORIGIN=500 滑动平均, ~4.4s) +│ ├── 进入确认 (ENTRY_CONFIRM=3 次) +│ ├── 离开检测 (滞回 + 平坦性三条件 CN200910309382) +│ └── 冻结超时恢复 (FREEZE_TIMEOUT=1000, ~8.7s + ±2% 稳定性检查) +├── TMR0 ISR — 线圈频率捕获 (下降沿→下降沿周期) +├── TMR1 ISR — 5ms 系统 tick (LED 驱动 + 继电器输出 + 光耦扫描) +├── opt_input_poll() — 光耦输入处理 (7 种输出模式融合) +├── rs485_700bs_poll() — RS485 700BS 从机协议 +├── poll_dbn_ble() — BLE 命令处理 +└── LEDB PWM 呼吸灯 (PWM11, 硬件自主) +``` + +--- + +## 2. 电气参数 + +| 参数 | 最小值 | 典型值 | 最大值 | 单位 | 备注 | +|------|--------|--------|--------|------|------| +| 供电电压 (VDD) | 10 | 12 / 24 | 30 | V | 宽压输入 | +| 功耗 | — | 0.5 | 2 | W | 含继电器吸合 + BLE | +| 工作温度 | -40 | — | +85 | °C | 工业级 | +| 存储温度 | -55 | — | +125 | °C | — | +| 线圈电感范围 | 50 | 200 | 1000 | μH | 超出范围可工作但精度下降 | +| 线圈频率范围 | 20 | 80 | 200 | kHz | 含 33nF 调频电容 | +| 线圈 Q 值 | 5 | — | — | — | 过低导致振荡不稳定 | +| 继电器触点电压 | — | — | 250 | VAC | 单刀双掷 (SPDT) | +| 继电器触点电流 | — | — | 3 | A | — | +| GPIO 输出电压 | 0 | 3.3 | 3.6 | V | CMOS 电平 | +| GPIO 输出电流 | — | — | 12 | mA | 单引脚最大 | +| BLE 工作频率 | — | 2.4 | — | GHz | BLE 4.2 | +| BLE 发射功率 | — | 0 | — | dBm | 典型 | +| ESD 防护 | ±2 | — | — | kV | HBM | + +--- + +## 3. IO 引脚分配 + +### 3.1 完整引脚表 + +| 引脚 | 标识 | 功能 | 方向 | 外设 | 初始状态 | 备注 | +|------|------|------|------|------|---------|------| +| **PA9** | **LP** | **线圈频率捕获** | IN | **TMR0** | — | **核心输入,下降沿→下降沿** | +| PA8 | RLY1 | 继电器输出 | OUT | GPIO PP | 0 (释放) | 单刀双掷,低电平有效 | +| PA12 | FLEVEL | 线圈调频 | OUT | GPIO PP | L (33nF) | 0=接33nF(低频), 1=0nF(高频) | +| PA14 | UART0_TX | RS485 发送 | OUT | UART0 | — | 700BS / Modbus | +| PA15 | UART0_RX | RS485 接收 | IN | UART0 | — | 700BS / Modbus | +| PA13 | UART0_RE | RS485 方向控制 | OUT | GPIO PP | RX (接收) | 高=发送, 低=接收 | +| PB10 | IN_1 | 光耦输入 | IN | GPIO IN_PU | — | 外部雷达 / 复位信号 | +| PB22 | LEDA | 绿灯 | OUT | GPIO PP | 0 (灭) | 有车亮 / 无车灭,低有效 | +| PB23 | LEDB | 红灯 | ALT | PWM11 | — | 呼吸灯,低有效 | +| PA0–7 | — | — | — | — | — | 预留/未分配 | + +### 3.2 无物理拨码开关 + +DLD154Pro **没有物理 DIP 开关**。所有配置参数(灵敏度、输出模式、延时、协议选择等)通过 **BLE 小程序** 管理,持久化存储在 DataFlash 中。 + +| 配置项 | 管理方式 | Flash 地址 | +|--------|---------|-----------| +| 灵敏度等级 | BLE 小程序 | Loop_Cng_Unit.sensitvity | +| 输出模式 (0–6) | BLE 小程序 | Loop_Cng_Unit.direction_mode[3:0] | +| 功能码 (协议/光耦功能) | BLE 小程序 | Loop_Cng_Unit.direction_mode[7:4] | +| 存在时间 (有限/永久) | BLE 小程序 | Loop_Cng_Unit.exist_mode | +| 离开延时 | BLE 小程序 | Loop_Cng_Unit.delay_time | +| 频率档位 (高/低) | BLE 小程序 | Loop_Cng_Unit.loopFreq_Level | +| RS485 地址 | BLE 小程序 | Addr_RS485_ID_Offset (0x14) | +| RS485 波特率 | BLE 小程序 | Addr_RS485_Baud_Offset (0x11) | +| 蓝牙空闲超时 | BLE 小程序 | ADDR_BT_Close_TIMEOUT_Offset (0x10) | + +--- + +## 4. 检测算法 + +### 4.1 频率测量 + +#### 4.1.1 硬件链路 + +DLD154Pro **不使用** CD4060 外部分频芯片。线圈直接驱动 PA9 (TMR0),利用 CH591R 内置 TMR0 的下降沿→下降沿周期捕获。 + +| 对比项 | M1H/TLD-110 | DLD154V4B | DLD154Pro | +|--------|-------------|-----------|-----------| +| 外部分频 | CD4060 Pin5 (÷32) | **无(直连)** | **无(直连)** | +| MCU 内部分频 | 无 | TIM3 DIV_2 (÷2) | **TMR0 无分频** | +| 总分频比 | ÷32 | ÷2 | **÷1** | +| MCU 主频 | — | 120MHz | **60MHz** | +| MEASUREMENT_BASE | — | 131072 (2^17) | **524288 (2^19)** | +| 测量窗口 | — | ~2.2ms | **~8.74ms** | + +> **设计要点**:DLD154Pro 升高 MEASUREMENT_BASE 以补偿更低的主频和无内部分频,使归一化 Value ≈ 524288,保持与 DLD154V4B 一致的百分比阈值语义。 + +#### 4.1.2 捕获流程 + +``` +线圈边沿 → PA9 (TMR0 下降沿→下降沿捕获) + │ + ▼ +TMR0 ISR: + CAPDAT = TMR0 捕获寄存器 (相邻下降沿周期) + Xn = CAPDAT (TMR0 直接给出,无需手动计算边沿差) + │ + ▼ + LPCNT = MEASUREMENT_BASE / Xn (自适应窗口) + CapSum += Xn + CapCnt++ + │ + CapCnt >= LPCNT ? + YES → Value = CapSum (≈ MEASUREMENT_BASE = 524288) + CapCnt = CapSum = 0 + loop1_CAP_OK = 1 (通知 vd1_task) +``` + +#### 4.1.3 关键常量 + +```c +#define MEASUREMENT_BASE 524288L // 2^19 +// 无内部分频 (TMR0 直读) +``` + +| 线圈频率 | Xn @60MHz | LPCNT | 测量窗口 | Value 范围 | +|---------|-----------|-------|---------|-----------| +| 50 kHz | 1200 | 436 | 8.7 ms | ~523200 | +| 80 kHz | 750 | 700 | 8.7 ms | ~525000 | +| 100 kHz | 600 | 873 | 8.7 ms | ~523800 | +| 150 kHz | 400 | 1310 | 8.7 ms | ~524000 | +| 200 kHz | 300 | 1747 | 8.7 ms | ~524100 | + +> 自适应 LPCNT 使不同频率下 Value 归一化到 ~524288,百分比阈值直接适用,无需频率补偿。 + +### 4.2 IIR 滤波 + +```c +#define ALFA_CAP1 79 // IIR α = 79/256 ≈ 0.31 (@8.74ms → τ≈24ms) + +// get_flt_value(): 一阶 IIR +CAPVD = (|Value - CAPVD| * ALFA_CAP1) >> 8 +``` + +| 参数 | 值 | 说明 | +|------|-----|------| +| α | 79/256 ≈ 0.31 | 指数平滑系数 | +| τ | ~24ms @8.74ms tick | 3 次更新达 63% | +| 噪声抑制 | 良好 | 单次野值影响 < 31% | + +**斜率限幅**:单次 Value 变化 >5% → 截断,过滤 EMI/闪电尖峰: + +```c +#define MAX_SLOPE_RATE 5 // 单次最大变化 5% + +int32_t raw_delta = (int32_t)Value - (int32_t)CAPVD; +int32_t max_step = (int32_t)(CAPVD * MAX_SLOPE_RATE / 100); +if (max_step < 100) max_step = 100; // 最小限幅防止锁死 +// clamp: raw_delta ∈ [−max_step, +max_step] +uint32_t clamped_value = CAPVD + raw_delta; +CAPVD = get_flt_value(clamped_value, CAPVD); +``` + +### 4.3 检测判据 + +#### 4.3.1 灵敏度表 + +```c +// 4 级灵敏度 (MAX_LOOP_SENS_AMOUNT=4) +const uint16_t SensTable[4] = {108, 54, 28, 14}; // 进入阈值 +const uint16_t SensTable1[4] = { 81, 32, 16, 12}; // 离开阈值(滞回) +``` + +| 等级 | sens_in | ΔL/L 进入 | sens_out | ΔL/L 离开 | 迟滞比 | 适用场景 | +|------|---------|----------|----------|----------|--------|---------| +| 低 (0) | 108 | **0.330%** | 81 | **0.247%** | 1.33 | 大车 / 强干扰环境 | +| 中 (1) | 54 | **0.165%** | 32 | **0.098%** | 1.69 | 普通轿车(默认) | +| 高 (2) | 28 | **0.085%** | 16 | **0.049%** | 1.75 | 摩托车 / 安静环境 | +| 最高 (3) | 14 | **0.043%** | 12 | **0.037%** | 1.17 | 超高灵敏度 | + +> **ΔL/L 换算**:`ΔL/L_entry = 2 × sens_in / 65536`。物理依据:线圈振荡 f∝1/√L,dT/T ≈ dL/(2L)。 +> +> ⚠ 第四档 (sens=14) 信噪比余量仅约 2:1(20°C 温漂 ≈0.1% 感量偏移),仅推荐摩托车/小型车辆检测场景,需确保线圈安装质量。 + +#### 4.3.2 进入检测 + +```c +#define ENTRY_CONFIRM 3 // 连续 3 次低于阈值才判定有车 + +dlt_ORG = (Origin * SensTable[SENS]) >> 16; // = Origin × sens / 65536 + +if (CAPVD < Origin - dlt_ORG) { + if (++loop1_entry_cnt >= ENTRY_CONFIRM) { + loop1_VD_FLAG = 1; loop1_FLAG_IN = 1; + loop1_entry_cnt = 0; + } +} else { + loop1_entry_cnt = 0; // 恢复则重置 +} +``` + +**进入响应时间**:3 次确认 × 8.74ms + 500ms IN_DELAY = **~530ms**。 + +#### 4.3.3 离开检测(滞回 + 平坦性) + +##### 离开滞回 + +有车状态下,使用更小的离开阈值 `SensTable1`: + +```c +dlt_ORG = (Origin * SensTable1[SENS]) >> 16; + +if (CAPVD > Origin - dlt_ORG) { // 高于离开阈值 + if (++loop1_cnt_release >= 3) { // 连续 3 次确认 + loop_release_common(); // VD_FLAG=0, FLAG_OUT=1 + } +} else { + loop1_cnt_release = 0; // 回落立即重置 +} +``` + +##### 平坦性离开判定(专利 CN200910309382) + +基于**中山大学专利**,解决大车通行时频率多峰导致的多次误触发。三条件同时满足才判定离开: + +``` +① |f − f_b| < dlt_ORG (频率回归基频) +② |f'| < Δ2 (一阶导数近零,Δ2 = max_slope / K1) +③ |f''| < Δ3 (二阶导数近零,Δ3 = max_slope_rate / K2) +``` + +Δ2、Δ3 从车辆进入后的**第一上升坡面**动态计算(避免固定阈值的不适应性)。 + +| 常量 | 值 | 含义 | +|------|-----|------| +| K1, K2 | 8 | 动态阈值除数(专利推荐值) | +| FLAT_CONFIRM_CNT | 3 | 平坦确认次数 | + +> 算法源码位于 `peripheral_main.c:vd1_task()`,编译宏 `USE_FLATNESS_EXIT` 控制。 + +### 4.4 基线跟踪 + +#### 4.4.1 跟踪规则 + +```c +// 仅无车 → 跟踪基线 +if (!loop1_VD_FLAG) { + int32_t dev = CAPVD - Origin; + if (dev < dlt_ORG * 4) { + // CAPVD 未显著偏离 → 正常跟踪 + loop1_freeze_cnt = 0; + update_moving_average(&ORG_SUM, &ORG_CNT, &Origin, CAPVD, WINDOW_ORIGIN); + } + // 偏离 > 4× 阈值 → 冻结 + 超时恢复(见 4.4.3) +} +// 有车时冻结基线 (仿 TLD-110) +``` + +#### 4.4.2 两阶段基线更新 + +| 阶段 | 窗口 | 周期 | 用途 | +|------|------|------|------| +| 稳定期 (`!g_loop_stable`) | 100 | **~0.9s** | 绕过 IIR/限幅,快速收敛 | +| 正常运行 | 500 (WINDOW_ORIGIN) | **~4.4s** | 强噪声抑制,稳定跟踪 | + +稳定期 CAPVD 直接赋值为 raw Value(不经过 IIR),实现开机 ~1.1s 内基线就绪。 + +#### 4.4.3 冻结超时恢复 + +| 常量 | 值 | 说明 | +|------|-----|------| +| 冻结触发阈值 | dlt_ORG × 4 | CAPVD 偏离 Origin 的倍数 | +| FREEZE_TIMEOUT | 1000 | ~8.7s (1000 × 8.74ms) | +| FREEZE_STABILITY_RATE | 2 | 稳定性窗口:参考值的 ±2% | + +```c +if (dev < dlt_ORG * 4) { + /* 正常范围: 跟踪 + 清零冻结 */ + loop1_freeze_cnt = 0; + update_moving_average(...); +} else { + /* 异常偏高: 冻结 + 稳定性验证 */ + if (loop1_freeze_cnt == 0) + loop1_freeze_ref = CAPVD; // 记录冻结起始值 + else if (|CAPVD - freeze_ref| > freeze_ref * 2 / 100) + reset(freeze_cnt, freeze_ref); // 波动 >±2% → 重新计时 + + if (++loop1_freeze_cnt >= FREEZE_TIMEOUT) { // 8.7s 连续稳定 + Origin = CAPVD; // 接受为新基线 + } +} +``` + +--- + +## 5. 时序状态机 + +### 5.1 状态转移 + +``` + IN_DELAY=10(500ms) OUT_DELAY(delay_time×100ms) + [空闲] ──有车──→ [进入延时] ──超时──→ [有车确认] ──车辆离开──→ [离开延时] + ↑ │ + │ ┌────────────┘ + └──脉冲结束───── [脉冲输出] ←──超时── [离开延时] ←──────────────┘ + PLUSE_DELAY=10(500ms) +``` + +### 5.2 时序参数 + +| 参数 | Tick (50ms) | 时间 | 说明 | +|------|------------|------|------| +| IN_DELAY | 10 | **500 ms** | 进入确认防抖 | +| OUT_DELAY | delay_time × 2 | **可配** | 离开延时 (delay_time=5 → 500ms) | +| PLUSE_DELAY | 10 | **500 ms** | 脉冲输出宽度 | +| HOLD_TIME | exist_mode × 20 × 5 | **可配** | 有限存在超时 (exist_mode × 5s) | +| LC_HOLD_TIME | 4 × 1200 | **~4 min** | 安全复位超时 | +| STABLE_SAMPLES | 128 tick | **~1.1 s** | 上电稳定期 | +| FREEZE_TIMEOUT | 1000 | **~8.7 s** | 基线冻结超时 | + +> **Tick 来源**:TMR1 每 5ms 中断一次,`TM1cnt` 计数到 10 后触发 vd1_task(50ms 周期)。 + +### 5.3 输出模式 (脉冲/存在) + +DLD154Pro 仅一个继电器,支持存在输出和脉冲输出两种模式: + +| 模式 | output_mode 值 | 行为 | +|------|---------------|------| +| 存在输出 | 0 | 有车持续吸合,离开后延时释放 | +| 进入脉冲 | 1 | 确认有车→吸合 500ms→释放 | +| 离开脉冲 | 2 | 车辆离开+延时→吸合 500ms→释放 | + +--- + +## 6. 输出融合模式 + +### 6.1 7 种融合模式 + +DLD154Pro 支持通过光耦输入 (PB10) 接入外部雷达/车检器信号,并按融合模式组合继电器输出。 + +| 模式值 | 名称 | 继电器吸合条件 | 适用场景 | +|--------|------|--------------|---------| +| 0 | 光耦复位 + 地感 | 仅地感 (光耦用于复位) | 带远程复位功能 | +| 1 | 仅地感 | 线圈有车 | 纯线圈场景 (默认) | +| 2 | 仅光耦 | 光耦输入有效 | 纯雷达,地感只做背景监控 | +| 3 | 地感**或**光耦 | coil OR opto | 互补冗余,任一触发即吸合 | +| 4 | 地感**且**光耦 | coil AND opto | 双确认,防地感误触 | +| 5 | 人车混行防砸 | 有车后 coil OR opto,离场 3s 窗口内光耦有效 | 混合交通流防砸人 | +| 6 | ETC 模式 | 同"或",光耦断开后 500ms 防抖才释放 | ETC 专用 | + +### 6.2 人车混行防砸 (模式 5) 状态机 + +``` +IDLE (仅线圈检测) + │ 线圈检测到车 + ▼ +ARMED (线圈 || 光耦) + │ 两者均释放 + ▼ +WINDOW (3s 防砸窗口) + │ 光耦触发 → 继电器吸合,窗口复位 + │ 线圈上线 → 回到 ARMED + │ 3s 超时无触发 → 回到 IDLE,落杆 +``` + +### 6.3 ETC 模式 (模式 6) 状态机 + +``` +IDLE (仅线圈检测) + │ 线圈检测到车 + ▼ +ARMED (线圈 || 光耦) + │ 两者均释放 + ▼ +DEBOUNCE (500ms 防抖) + │ 线圈/光耦重新触发 → 回到 ARMED + │ 500ms 超时 → 回到 IDLE,落杆 +``` + +### 6.4 光耦防抖 + +所有非复位模式共用 3 样本多数表决消抖(等效 ~30ms),防止光耦信号抖动。 + +--- + +## 7. 指示灯状态机 + +### 7.1 驱动架构 + +``` +TMR1 ISR (每 5ms) +├── 红灯 PB23 — PWM11 呼吸(硬件自主,~1.9s 周期) +├── 绿灯 PB22 — 有车亮 / 无车灭 / 稳定期慢闪 200ms +└── (无黄灯 — Pro 采用双色 LED 方案) +``` + +### 7.2 绿灯行为表 + +| 状态 | 绿灯行为 | 说明 | +|------|---------|------| +| 上电初始化/稳定期 | **慢闪** (200ms 亮/200ms 灭) | 基线学习中 | +| 线圈断开 | **灭** | 等待恢复 | +| 正常运行,无车 | **灭** | 就绪 | +| 正常运行,有车 | **亮** | 车辆检测中 | +| 光耦融合模式 2-6 下 | 跟随 `relay1_state` | 与实际继电器状态一致 | + +### 7.3 红灯行为 + +呼吸灯 (PWM11, ~1.9s 周期),始终运行,指示系统正常工作。不参与车辆/故障指示。 + +--- + +## 8. 上电稳定期 + +```c +#define STABLE_SAMPLES 128 // ~1.1s (@8.74ms × 128) + +if (!g_loop_stable) { + loop1_CAPVD = loop1_Value; // 绕过 IIR,直接赋值 + update_moving_average(..., 100); // 小窗口快速收敛 + loop1_stable_cnt++; + if (loop1_stable_cnt >= STABLE_SAMPLES) + g_loop_stable = 1; // 启用检测 + return; // 跳过进入/离开判断 +} +``` + +稳定期间绕过 IIR 和斜率限幅,用 100 窗口快速建立基线。绿灯持续慢闪。 + +--- + +## 9. 线圈故障处理 + +### 9.1 断开/重连状态保持 + +| 断开前 | 断开期间 | 重连后 | 检测结果 | +|--------|---------|--------|---------| +| 有车 | 绿灯灭,继电器释放 | 车还在 | CAPVD < Origin−dlt → VD_FLAG=1 ✓ | +| 有车 | 绿灯灭 | 车离开 | cnt_release→3 → VD_FLAG=0 ✓ | +| 无车 | 绿灯灭 | 车进入 | CAPVD < Origin−dlt → VD_FLAG=1 ✓ | + +断开时保留 `VD_FLAG`,仅关断继电器。重连时 `CAPVD=0` 触发首个样本直锁 Value,跳过 IIR 预热。 + +### 9.2 有限存在超时 + +当 `hold_time > 0` 时,有车超过指定时间 → 整通道复位重建基线(等效安全复位),而非简单 FLAG_OUT。 + +--- + +## 10. 通信协议 + +### 10.1 接口总览 + +| 接口 | 物理层 | 协议 | 用途 | +|------|--------|------|------| +| BLE | 2.4GHz | DBN BLE 私有协议 | 参数配置 + 主动上报 | +| RS485 | UART0 半双工 | 700BS / Modbus RTU | 工业总线接入 | + +### 10.2 BLE 协议 + +**帧格式**: +``` +Magic | Addr/Sub | Len | CMD | Data | XOR | SUM +1B | 1B | 1B | 1B | xx | 1B | 1B +``` + +**主要命令**: + +| 命令码 | 功能 | +|--------|------| +| 0x10 | 获取设备信息 | +| 0x23 | 设置车检器参数 | +| 0x24 | 读取车检器参数 | +| 0x31 | 读写 RS485 波特率/地址/蓝牙超时 | +| 0x8A | 读写灵敏度列表 | +| 0xC0 | 设备主动上报传感信息 | +| 0xC5 | 主动上报使能配置 | +| 0x6D | 设备复位 | + +### 10.3 RS485 700BS 协议 + +| 参数 | 值 | +|------|-----| +| 波特率 | 9600 (默认) | +| 数据位 | 8N1 | +| 地址范围 | 1–247 | +| 帧格式 | 主机 3 字节 (STX ADDR XOR), 从机 3–9 字节变长 | +| 心跳 | 空闲 5s / 故障(线圈断开) 1s / 事件(car_state 翻转)立即 | + +**命令集**: + +| 命令 | 功能 | 回复 | +|------|------|------| +| 0xFA | 查询有车+线圈状态 | F5 DATA XOR | +| 0x1B | 查询线圈频率 | 14 Fre1-3 ADDR XOR | +| 0x2C | 复位初始化线圈 | 无回复 | +| 0x3D | 查询虚拟拨码 (DIP1-5) | 32 DATA ADDR XOR | + +> DLD154Pro 无物理拨码,0x3D 返回 BLE 配置的等效值。 + +### 10.4 RS485 Modbus RTU 协议 + +| 参数 | 值 | +|------|-----| +| 波特率 | 9600 (默认), 可配 19200/38400/57600/115200 | +| 数据位 | 8N1 | +| 从机地址 | 1–247 (默认 1) | +| 支持功能码 | 0x02 (DI), 0x03 (HR), 0x04 (IR), 0x06 (写单), 0x10 (写多), 0x11 (报告 ID) | +| 协议选择 | `g_function_mode` bit0 (BLE 设置) | + +> 详细寄存器映射见 `docs/rs485-modbus-protocol.md`。RS485 地址/波特率在 Modbus 侧只读,通过 BLE 小程序修改。 + +--- + +## 11. Flash 存储布局 + +| 地址 | 宏 | 大小 | 内容 | +|------|-----|------|------| +| 0x00 | — | 4B | 魔数 (0x33 0xBB 0xC3 0x3C) | +| 0x04 | — | 7B | Loop_Cng_Unit 参数 | +| 0x10 | ADDR_BT_Close_TIMEOUT_Offset | 1B | 蓝牙空闲超时 (分钟) | +| 0x11 | Addr_RS485_Baud_Offset | 3B | RS485 波特率 (LE32) | +| 0x14 | Addr_RS485_ID_Offset | 1B | RS485 从机地址 | +| 0x20 | Addr_Sens_Array_In | 16B | 灵敏度进入阈值 (4×uint16\_t LE) | +| 0x30 | Addr_Sens_Array_Out | 16B | 灵敏度离开阈值 (4×uint16\_t LE) | + +出厂默认:灵敏度=中(1),存在模式,延时=500ms,高频,RS485 ID=1,波特率=9600,蓝牙超时=0(不关闭)。 + +--- + +## 12. 版本历史 + +| 版本 | 日期 | 说明 | +|------|------|------| +| V3.00 | 2026-07-21 | 项目初始化:从 DLD110SV4 复制基线 + 硬件适配 (CH591R) | +| V3.01 | 2026-07-28 | 光耦输出模式完整实现 (6 种融合逻辑 + 状态机);LEDA 同步继电器状态 | + +--- + +## 13. 相关文档 + +| 文档 | 路径 | +|------|------| +| 产品说明书 | `docs/product-manual.md` | +| 硬件资源说明 | `docs/DLD154Pro硬件资源.md` | +| RS485 700BS 协议 | `docs/rs485-700bs-protocol.md` | +| RS485 Modbus 协议 | `docs/rs485-modbus-protocol.md` | +| 开发日志 | `docs/devlog.md` |