docs: 发布 V3.01 技术规格书 + 产品说明书

- 新增 docs/technical-spec.md: 系统架构、电气参数、IO引脚、检测算法全链路、时序状态机、7种输出融合模式、通信协议、Flash存储布局
- 新增 docs/product-manual.md: 产品概述、技术参数、硬件接口、BLE配置项、灵敏度、融合模式(含人车混行防砸/ETC)、安装指南、故障排查、RS485集成速查
- 更新 docs/devlog.md: 置顶文档发布条目
- cmcng.h: 固件版本 3.00→3.01
This commit is contained in:
wangfq
2026-07-29 09:50:46 +08:00
parent 5c10f64183
commit 67de020351
4 changed files with 901 additions and 2 deletions
+29
View File
@@ -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` 变化,
+299
View File
@@ -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(配置 + 主动上报)+ RS485700BS / 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 + RS485UART0 |
| 工作温度 | -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-XXXXXXX 为 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 | 0x000001 | Loop Freq | 线圈频率,32-bit 大端 (Hz) |
| IR | 0x000203 | CAPVD | 归一化周期值,32-bit |
| HR | 0x0000 | Sensitivity | 灵敏度 02R/W |
| HR | 0x0001 | Fusion Mode | 融合模式 06R/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 | 单路线圈蓝牙车辆检测器,CH591RBLE + RS485 |
---
> **技术规格书**(算法详情、IO 分配、电气参数、协议细节等)请参阅 [技术规格书](technical-spec.md)
+571
View File
@@ -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 | — | 呼吸灯,低有效 |
| PA07 | — | — | — | — | — | 预留/未分配 |
### 3.2 无物理拨码开关
DLD154Pro **没有物理 DIP 开关**。所有配置参数(灵敏度、输出模式、延时、协议选择等)通过 **BLE 小程序** 管理,持久化存储在 DataFlash 中。
| 配置项 | 管理方式 | Flash 地址 |
|--------|---------|-----------|
| 灵敏度等级 | BLE 小程序 | Loop_Cng_Unit.sensitvity |
| 输出模式 (06) | 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/√LdT/T ≈ dL/(2L)。
>
> ⚠ 第四档 (sens=14) 信噪比余量仅约 2:120°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_task50ms 周期)。
### 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 < Origindlt → VD_FLAG=1 ✓ |
| 有车 | 绿灯灭 | 车离开 | cnt_release→3 → VD_FLAG=0 ✓ |
| 无车 | 绿灯灭 | 车进入 | CAPVD < Origindlt → 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 |
| 地址范围 | 1247 |
| 帧格式 | 主机 3 字节 (STX ADDR XOR), 从机 39 字节变长 |
| 心跳 | 空闲 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 |
| 从机地址 | 1247 (默认 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` |