Files
DLD154Pro/DEVELOPMENT_LOG.md
T

61 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 定时状态机