feat(opt): 光耦输出模式完整实现 — 6种融合逻辑 + 人车混行/ETC 状态机

- 新增 g_opt_trigger 全局变量:opt_input_poll() 产出, TMR1 ISR 消费
- MODE 1/2/3/4: 纯地感/纯雷达/或/与 — g_opt_trigger 直出光耦信号
- MODE 5 (HUMAN_VD_MIX): 3态机 IDLE→ARMED→WINDOW, 3s防砸窗口
- MODE 6 (ETC): 3态机 IDLE→ARMED→DEBOUNCE, 500ms防抖释放
- TMR1 ISR case 0: 6模式融合判决 (coil || opt_trigger / coil && opt_trigger等)
- 光耦防抖: 3样本多数表决, ~30ms消抖
- MODE 0 复位逻辑不变
- docs: 更新开发日志 (状态机图 + 各模式对照表)
This commit is contained in:
wangfq
2026-07-28 09:34:18 +08:00
parent f5edab43c2
commit 978cce4af8
3 changed files with 257 additions and 20 deletions
+74
View File
@@ -4,6 +4,80 @@
---
## 2026-07-28 (午后) — 光耦输出模式完整实现:6 种融合逻辑 + 状态机
### 架构
`opt_input_poll()` 处理光耦输入 → 产出 `g_opt_trigger` (1=有效) → TMR1 ISR 继电器输出段 `case 0` 根据 `g_output_radar_mode` 做融合判决。
```
光耦 PB10 → 3样本多数表决防抖 → opt_input_poll() → g_opt_trigger
线圈 VD_FLAG/FLAG_OUT → coil_sig ──────────→ 融合判决 → RLY1
g_output_radar_mode
```
### 各模式实现
| 模式 | 值 | `opt_input_poll()` | 继电器 `case 0` 融合公式 |
|------|-----|-------------------|--------------------------|
| LOOP_X_RESET | 0 | 光耦复位 (400ms低→上升沿→SYS_ResetExecute) | `coil_sig` |
| LOOP_ONLY | 1 | return, g_opt_trigger=0 | `coil_sig` |
| RADAR_ONLY | 2 | g_opt_trigger = 光耦信号 | `g_opt_trigger` |
| LOOP_OR_RADAR | 3 | g_opt_trigger = 光耦信号 | `coil_sig \|\| g_opt_trigger` |
| LOOP_AND_RADAR | 4 | g_opt_trigger = 光耦信号 | `coil_sig && g_opt_trigger` |
| HUMAN_VD_MIX | 5 | 状态机 (见下) | `coil_sig \|\| g_opt_trigger` |
| ETC | 6 | 状态机 (见下) | `coil_sig \|\| g_opt_trigger` |
> 注: `coil_sig = (loop1_VD_FLAG | loop1_FLAG_OUT)` — 含离开脉冲保持
### HUMAN_VD_MIX 状态机 (人车混行防砸)
```
IDLE (雷达屏蔽, 仅线圈)
│ 线圈检测到车
ARMED (雷达解禁, 线圈||雷达)
│ 两者均释放
WINDOW (3s 防砸窗口)
│ 雷达触发 → g_opt_trigger=1 → 继电器吸合, 窗口复位
│ 线圈上线 → 回到 ARMED
│ 3s 超时无触发 → 回到 IDLE, 落杆
```
定时参数: `OPT_VM_WINDOW_TICK = 600` (600×5ms = 3s)
### ETC 状态机
```
IDLE (雷达屏蔽, 仅线圈)
│ 线圈检测到车
ARMED (雷达解禁, 线圈||雷达)
│ 两者均释放
DEBOUNCE (500ms 防抖)
│ 线圈/雷达重新触发 → 回到 ARMED
│ 500ms 超时 → 回到 IDLE, 落杆
```
定时参数: `OPT_ETC_DEBOUNCE_TICK = 100` (100×5ms = 500ms)
### 光耦防抖
所有非复位模式共用 3 样本多数表决 (`OPT_DEBOUNCE_CNT=6`): 最近 3 次采样中 ≥2 票即判定有效,等效 ~30ms 消抖。
### 文件变更
| 文件 | 变更 |
|------|------|
| `peripheral_main.c` | +`g_opt_trigger` 全局变量, `opt_input_poll()` 重写 (120→180行), TMR1 ISR `case 0` 融合判决 |
| `cmcng.h` | +`extern uint8_t g_opt_trigger` |
---
## 2026-07-28 — 光耦输出模式升级:`DLD_OUTPUT_MODE` 枚举 + `direction_mode` 低四位取值
### 背景