diff --git a/DEVELOPMENT_LOG.md b/DEVELOPMENT_LOG.md deleted file mode 100644 index 58af897..0000000 --- a/DEVELOPMENT_LOG.md +++ /dev/null @@ -1,60 +0,0 @@ -# DLD154Pro 开发日志 - -## 2026-07-24 — RS485 700BS 协议 & 四级灵敏度 - -### RS485 700BS 从机协议 (Commit: ab46931 → 2d7a5d7) - -**协议概述** - -| 项目 | 说明 | -|------|------| -| 物理层 | RS485 半双工, 9600 8N1, PA14=TX PA15=RX PA13=RE | -| 帧格式 | 主机 3 字节 (STX ADDR XOR), 从机 3~9 字节变长 | -| 心跳 | 空闲 5s / 故障(线圈断开) 1s / 事件(car_state翻转)立即 | -| 命令 | 0xFA 查询状态, 0x1B 查询频率, 0x2C 复位线圈, 0x3D 查询DIP | - -**踩坑记录** - -1. **UART0 API 不兼容** — CH592 SDK 中 `UART0_GetITFlag()` 是无参宏,`UART0_ClearITFlag()` 不存在。改用 `switch(UART0_GetITFlag())` 标准模式。 -2. **`while(R8_UART0_TFC == 0)` 死循环** — TX FIFO 空时 `TFC==0` 条件永真,主循环卡死,地感不工作。改为 `!= 0`(等 FIFO 空)。 -3. **`rs485_init()` 从未被调用** — `gpio_uart_init()` 只写了注释没调用,UART0/GPIO 未初始化。 -4. **频率为 0** — `g_loop_acs_info.frequent` 只在 BLE 报告路径 `usart_packet_processing_acs_loop` 中更新,BLE 断开时永不更新。 -5. **频率非实时** — 改用 `g_loop_acs_info.loop_capvd` 仍有问题:该值被 `flag_change` 门控冻结(上电/车辆进出时 `flag_change=1`→capvd 不更新)。最终改用 `loop1_CAPVD`(`vd1_task()` 每次实时 IIR 滤波值)。 - -**最终频率计算** - -```c -freq = (uint64_t)FREQ_SYS * loop1_LPCNT / loop1_CAPVD + 360 -``` - -直接从 TMR0 捕获值 + IIR 滤波值实时计算,不经过 BLE 通道,不受 `flag_change` 冻结影响。 - -### 四级灵敏度 (Commit: 4964e0d) - -`MAX_LOOP_SENS_AMOUNT`: 3 → 4 - -| 档位 | 进入阈值 (sens_in) | 离开阈值 (sens_out) | -|------|--------------------|--------------------| -| 1 | 108 | 81 | -| 2 | 54 | 32 | -| 3 | 28 | 16 | -| 4 | 14 | 12 | - -阈值 = `Origin * sens_in / 65536`(进入)、`Origin * sens_out / 65536`(离开)。 - ---- - -## 历史记录 - -### BLE RS485 配置 (Commit: 441a3e6) -- BLE 新增 RS485 地址/波特率读写特征值 -- 空闲关蓝牙超时机制 -- 功能码细分(区分读写操作) - -### 呼吸灯 (Commit: f89457c) -- PB23 PWM11 呼吸灯从 ~3.8s 加速至 ~1.9s 周期 -- ISP 烧录时需关闭外部复位 `RB_CFG_RESET_EN=0`(运行时 RO 不可改) - -### 算法移植 (基线) -- 移植 DLD154V4B V2.0 检测算法:IIR τ≈32ms, WINDOW_ORIGIN=5s, 斜率限幅 5% -- TMR0 输入捕获测频, TMR1 5ms 定时状态机 diff --git a/docs/devlog.md b/docs/devlog.md index 84a40d6..17045d4 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -66,9 +66,9 @@ ### 参数表 ```c -// sens_in: 进入阈值, sens_out: 离开阈值 (0=低, 2=高) -SensTable = { 108, 54, 28 }; // 进入 -SensTable1 = { 81, 32, 16 }; // 离开 +// sens_in: 进入阈值, sens_out: 离开阈值 (0=最低, 3=最高) +SensTable = { 108, 54, 28, 14 }; // 进入 +SensTable1 = { 81, 32, 16, 12 }; // 离开 ``` ### 计算链路 @@ -111,6 +111,7 @@ if (CAPVD < Origin - dlt_ORG) // ← ΔCAPVD / Origin > sens / 65536 | 低 (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 | ### 物理验证 @@ -219,7 +220,45 @@ DLD154Pro 是 DLD110SV4 的硬件升级版(同 MCU CH591R),核心变更: ### 待办 -- [ ] RS485 通信协议定义 + UART0 中断/收发实现 +- [x] RS485 通信协议定义 + UART0 中断/收发实现 ~~(2026-07-24 完成)~~ - [ ] 光耦输入逻辑(与其他检测器联动 / 综合判断) - [ ] IAP/OTA 项目文件中的 DLD110S 引用更新(`592OnlyUpdateApp_*`) - [ ] `.mrs/` 工作区文件清理(大量 DLD110S 历史快照) + +--- + +## 2026-07-23~24 — RS485 700BS 协议实现 & 四级灵敏度 + +### RS485 700BS 从机协议 + +| 项目 | 说明 | +|------|------| +| 物理层 | RS485 半双工, 9600 8N1, PA14=TX PA15=RX PA13=RE | +| 帧格式 | 主机 3 字节 (STX ADDR XOR), 从机 3~9 字节变长 | +| 心跳 | 空闲 5s / 故障(线圈断开) 1s / 事件(car_state翻转)立即 | +| 命令 | 0xFA 查询状态, 0x1B 查询频率, 0x2C 复位线圈, 0x3D 查询DIP | + +**文件:** `APP/rs485_700bs.c` (新增), `APP/include/rs485_700bs.h` (新增) + +### 踩坑记录 + +1. **UART0 API 不兼容** — CH592 SDK 中 `UART0_GetITFlag()` 是无参宏(非函数),`UART0_ClearITFlag()` 不存在。改用 `switch(UART0_GetITFlag())` 标准模式,参考 UART1 例程。 + +2. **`while(R8_UART0_TFC == 0)` 死循环** — TX FIFO 空时条件永真,主循环卡死导致地感不工作。修正为 `!= 0`(等 FIFO 空再写下一字节)。 + +3. **`rs485_init()` 从未被调用** — `gpio_uart_init()` 只写了注释 `/* 由 rs485_init() 统一初始化 */` 但未实际调用,UART0/GPIO 未配置。修复:替换注释为函数调用。 + +4. **频率始终为 0** — `g_loop_acs_info.frequent` 只在 BLE 报告路径 `usart_packet_processing_acs_loop` 中更新,BLE 断开时永不执行 → freq=0。 + +5. **频率非实时** — 改用 `g_loop_acs_info.loop_capvd` 仍有问题:该值被 `flag_change` 门控冻结(上电/车辆进出时 `flag_change=1`→capvd 不更新,清零只在 BLE 报告路径)。最终方案:直接使用 `loop1_CAPVD`(`vd1_task()` 每次实时 IIR 滤波值),不经过 BLE 通道。 + +**最终频率计算:** +```c +freq = (uint64_t)FREQ_SYS * loop1_LPCNT / loop1_CAPVD + 360 +``` + +### 四级灵敏度 + +`MAX_LOOP_SENS_AMOUNT`: 3 → 4 + +新增第四档:进入阈值 14, 离开阈值 12 (ΔL/L≈0.04%),适用于极高灵敏度场景(如摩托车/小型车辆检测)。需注意温漂影响——20°C 温度变化可引起约 0.1% 感量偏移,第四档信噪比余量仅约 2:1。