169 lines
5.7 KiB
Markdown
169 lines
5.7 KiB
Markdown
# DLD154Pro 开发日志
|
||
|
||
> MCU: CH591R (RISC-V, BLE) @60MHz | 线圈通道: 1路 | 调试口: RS485 / BLE
|
||
|
||
---
|
||
|
||
## 2026-07-21 — 灵敏度等级与 ΔL/L 的物理关系分析
|
||
|
||
### 参数表
|
||
|
||
```c
|
||
// sens_in: 进入阈值, sens_out: 离开阈值 (0=低, 2=高)
|
||
SensTable = { 108, 54, 28 }; // 进入
|
||
SensTable1 = { 81, 32, 16 }; // 离开
|
||
```
|
||
|
||
### 计算链路
|
||
|
||
**Step 1:阈值差值**
|
||
```c
|
||
loop1_dlt_ORG = (Origin * sens) >> 16; // = Origin × sens / 65536
|
||
```
|
||
|
||
**Step 2:进入判定**
|
||
```c
|
||
if (CAPVD < Origin - dlt_ORG) // ← ΔCAPVD / Origin > sens / 65536
|
||
```
|
||
|
||
**Step 3:CAPVD → 电感**
|
||
|
||
线圈振荡频率 `f ∝ 1/√L`,周期 `T ∝ √L`。测量窗 CAPVD 正比于平均周期:
|
||
|
||
```
|
||
ΔCAPVD / Origin = ΔT / T₀ = (√L - √L₀) / √L₀
|
||
```
|
||
|
||
对微小变化泰勒展开:`dT/T ≈ dL/(2L)`,即:
|
||
|
||
```
|
||
ΔL / L ≈ 2 × ΔCAPVD / Origin
|
||
```
|
||
|
||
**Step 4:最终 ΔL/L 公式**
|
||
|
||
```
|
||
ΔL/L_entry = 2 × sens_in / 65536
|
||
ΔL/L_exit = 2 × sens_out / 65536
|
||
```
|
||
|
||
### 灵敏度等级对应 ΔL/L
|
||
|
||
| 等级 | 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 |
|
||
|
||
### 物理验证
|
||
|
||
典型 100μH 线圈:
|
||
- 现代轿车经过:ΔL/L ≈ 5%–15%,任一灵敏度均能可靠触发
|
||
- 高灵敏度 0.085%:足够敏感,需注意温漂(~20°C 引起约 0.1% 的感量偏移)和邻道串扰
|
||
- 迟滞比 1.33–1.75:防止车辆边界状态反复跳变,低灵敏度迟滞最小
|
||
|
||
### 快速换算
|
||
|
||
`sens` 值直接对应 **千分之 2×sens 的感量变化百分比**——除以 1000 就是 ΔL/L(%)。
|
||
|
||
---
|
||
|
||
## 2026-07-21 (午后) — 修复灵敏度 bug + 有限存在时间 + 版本号
|
||
|
||
### BLE 灵敏度无法修改
|
||
|
||
**根因:** 硬件适配时删了 `poll_sens_key()`,在 `INIT_VD()` 中硬编码了 `g_freq_sens = 2`,
|
||
但未在 BLE 参数解包 `unpack_pkg_set_cjq_param()` 中同步更新,导致小程序修改灵敏度无效。
|
||
|
||
**修复:**
|
||
- `peripheral_main.c`: `g_freq_sens` 从 `INIT_VD()` 移到 `para_store_init()`,
|
||
从存储的 `g_loop_cng_unit.sensitvity` 读取:`(sensitvity > 0) ? (sensitvity - 1) : 0`
|
||
- `dbn_ble_srv.c`: `unpack_pkg_set_cjq_param()` 中同样增加 `g_freq_sens` 同步更新,
|
||
确保 BLE 小程序实时修改后立即生效
|
||
|
||
### 有限存在时间公式对齐
|
||
|
||
`dbn_ble_srv.c` 中 `g_hold_time` 计算写的是 `exist_mode * 30 * 20`,
|
||
但 `para_store_init()` 中用的是 `exist_mode * 20 * 5`(50ms tick)。
|
||
统一为 `20 * 5`(对应参数值 × 100ms × 5s 基础周期)。
|
||
|
||
### 版本号
|
||
|
||
- 固件: `4.01` → `3.00`
|
||
- 硬件: `1.00` → `3.01`
|
||
|
||
---
|
||
|
||
## 2026-07-21 — 项目初始化:从 DLD110SV4 复制基线 + 按硬件资源文档调整 IO
|
||
|
||
### 背景
|
||
|
||
DLD154Pro 是 DLD110SV4 的硬件升级版(同 MCU CH591R),核心变更:
|
||
- 继电器 双路→单路(删 RLY2)
|
||
- 删除拨码开关(灵敏度改由小程序设置)
|
||
- 线圈调频 两级→一级(删 PA13 FLEVEL_L)
|
||
- 新增 RS485 接口(PA14/PA15/PA13,协议待定)
|
||
- 新增光耦输入(PB10,逻辑待定)
|
||
- 指示灯从单色→双色(LEDA 绿 + LEDB 红呼吸灯)
|
||
- DEBUG UART0 被 RS485 占用,删除全部
|
||
|
||
### 仓库
|
||
|
||
- 远程: http://118.178.252.17:3000/wangfq/DLD154Pro
|
||
- 本地: `/home/wfq/projects/vd_detector/DLD154Pro`
|
||
- commit `5f5f697`: init 基线
|
||
- commit `91ba844`: feat 硬件适配
|
||
|
||
### IO 宏重定义
|
||
|
||
| 引脚 | 旧(DLD110SV4) | 新(DLD154Pro) |
|
||
|------|--------------|---------------|
|
||
| PA8 | RLY1 (存在) | RLY1 (存在,不变) |
|
||
| PB23 | RLY2 (功能/脉冲) | **LEDB (红色呼吸灯)** |
|
||
| PA12 | FLEVEL_H (33nF) | FLEVEL (33nF,一级) |
|
||
| PA13 | FLEVEL_L (10nF) | **UART0_RE (RS485 方向)** |
|
||
| PA14 | KEY_SA1 / DEBUG_TX | **UART0_TX (RS485)** |
|
||
| PA15 | KEY_SA2 / DEBUG_RX | **UART0_RX (RS485)** |
|
||
| PB10 | - | **IN_1 (光耦输入)** |
|
||
| PB22 | LEDA (绿色) | LEDA (绿色,不变) |
|
||
|
||
### 删除项
|
||
|
||
- `RLY2_ON/OFF` 宏及全部 RLY2 输出逻辑
|
||
- `KEY_SA1/KEY_SA2` 宏及 `poll_sens_key()` 函数
|
||
- `FLEVEL_L_LOW/HIGH`, `FLEVEL_H_LOW/HIGH` → 改为 `FLEVEL_LOW/HIGH`
|
||
- `g_flag_output`, `g_xn_counter` 全局变量
|
||
- DEBUG UART0 初始化 (`gpio_uart_init` 中 `#ifdef DEBUG` 块)
|
||
- `Main_Circulation` 中 `#ifdef DEBUG` PRINT 块
|
||
- TMR1_ISR 中 `_cnt` / `g_flag_output` DEBUG 定时器
|
||
- TMR0_ISR 中 `g_xn_counter` DEBUG 计数器
|
||
- `para_store_init()` 中频率四档 switch → 双档 if/else
|
||
|
||
### 新增/预留
|
||
|
||
- RS485 引脚宏: `RS485_TX_PIN`, `RS485_RX_PIN`, `RS485_RE_PIN`, `RS485_RE_TX()`, `RS485_RE_RX()`(仅初始化引脚,协议待定)
|
||
- 光耦输入宏: `OPT_IN1`(仅初始化 PB10 输入上拉,逻辑待定)
|
||
- LEDB 宏: `LEDB_ON/OFF`(PB23,低电平有效)
|
||
- `g_freq_sens = 2` 默认最高灵敏度(取代 poll_sens_key 拨码逻辑)
|
||
|
||
### 继电器输出简化
|
||
|
||
| 模式 | 旧 (双继电器) | 新 (单继电器) |
|
||
|------|-------------|---------------|
|
||
| case 0: 存在输出 | RLY1 跟随 VD, RLY2 跟随 VD | RLY1 跟随 VD |
|
||
| case 1: 进入脉冲 | RLY2=存在, RLY1=进入脉冲 | RLY1=进入脉冲 |
|
||
| case 2: 离开脉冲 | RLY2=存在, RLY1=离开脉冲 | RLY1=离开脉冲 |
|
||
| default | RLY2=存在 | RLY1=存在 |
|
||
|
||
### 保留(协议兼容)
|
||
|
||
- `storage.h` 的 `Loop_ACS_Info.relay2_cng/relay2_state` 字段保留,默认值=0
|
||
- `dbn_ble_srv.c:468` 上报字节 relay2 位自动为 0(字段初始化为 0 后无写入)
|
||
|
||
### 待办
|
||
|
||
- [ ] RS485 通信协议定义 + UART0 中断/收发实现
|
||
- [ ] 光耦输入逻辑(与其他检测器联动 / 综合判断)
|
||
- [ ] IAP/OTA 项目文件中的 DLD110S 引用更新(`592OnlyUpdateApp_*`)
|
||
- [ ] `.mrs/` 工作区文件清理(大量 DLD110S 历史快照)
|