0=或 1=混行 2=ETC 3=且 4=仅地感 5=仅光耦 6=复位 - storage.h: AND_RADAR 从位置 2 移至位置 4 - peripheral_main.c: 注释块 MODE 标签及内联模式号同步 - 全部 4 份文档表格/节号/版本号对齐
572 lines
21 KiB
Markdown
572 lines
21 KiB
Markdown
# 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 | 地感**或**光耦 | coil OR opto | 互补冗余,任一触发即吸合(默认) |
|
||
| 1 | 人车混行防砸 | 有车后 coil OR opto,离场 3s 窗口内光耦有效 | 混合交通流防砸人 |
|
||
| 2 | ETC 模式 | 有车后 coil OR opto,光耦断开 500ms 防抖才释放 | ETC 专用 |
|
||
| 3 | 地感**且**光耦 | coil AND opto | 双确认,防地感误触 |
|
||
| 4 | 仅地感 | 线圈有车 | 纯线圈场景 |
|
||
| 5 | 仅光耦 | 光耦输入有效 | 纯雷达,地感只做背景监控 |
|
||
| 6 | 光耦复位 | 仅地感(光耦用于远程复位) | 带远程复位功能 |
|
||
|
||
### 6.2 人车混行防砸 (模式 1) 状态机
|
||
|
||
```
|
||
IDLE (仅线圈检测)
|
||
│ 线圈检测到车
|
||
▼
|
||
ARMED (线圈 || 光耦)
|
||
│ 两者均释放
|
||
▼
|
||
WINDOW (3s 防砸窗口)
|
||
│ 光耦触发 → 继电器吸合,窗口复位
|
||
│ 线圈上线 → 回到 ARMED
|
||
│ 3s 超时无触发 → 回到 IDLE,落杆
|
||
```
|
||
|
||
### 6.3 ETC 模式 (模式 2) 状态机
|
||
|
||
```
|
||
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 灭) | 基线学习中 |
|
||
| 线圈断开 | **灭** | 等待恢复 |
|
||
| 正常运行,无车 | **灭** | 就绪 |
|
||
| 正常运行,有车 | **亮** | 车辆检测中 |
|
||
| 光耦参与模式 (非 LOOP_ONLY/LOOP_X_RESET) | 跟随 `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` |
|