From 2f6cb54847a00aa25397fe142ce0eb53d0ffc8c9 Mon Sep 17 00:00:00 2001 From: wangfq Date: Wed, 24 Jun 2026 09:13:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=97=B6=E5=BA=8F=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20=E2=80=94=20OUT/PULSE=5FDELAY=20=E5=9D=87?= =?UTF-8?q?=E4=B8=BA500ms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OUT_DELAY: 1.9s→500ms (10 tick), SW_4=ON时生效, OFF时为0 - PULSE_DELAY: 950ms→500ms (10 tick), 固定不变 - 删除 OUT_DELAY_FAST/PULSE_DELAY_FAST, 仅保留一组值 - SW_4 语义: 0=无离开延时, 1=500ms离开延时 - 同步更新产品手册、技术规格书、README、devlog --- README.md | 8 ++-- docs/devlog.md | 40 ++++++++++--------- docs/product-manual.md | 18 ++++----- docs/technical-spec.md | 26 ++++++------ .../at32f421_freertos_demo/inc/TaskLoop.h | 10 ++--- .../at32f421_freertos_demo/src/TaskLoop.c | 21 ++++++---- 6 files changed, 63 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 1ff9078..a0e073f 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ | PA0 | SA_1 | 灵敏度 bit0 | 与 SA_2 组合,4 级灵敏度 | | PA1 | SA_2 | 灵敏度 bit1 | | | PA2 | SW_3 | 存在/脉冲 | 0=存在输出,1=脉冲输出 | -| PA3 | SW_4 | 快速模式 | 0=正常, 1=快速 500ms | +| PA3 | SW_4 | 离开延时 | 0=无, 1=500ms | | PA4 | SW_5 | 安全复位 | 0=正常,1=安全复位 | ### 继电器输出 @@ -53,7 +53,7 @@ | PA0 | SA_1 (灵敏度) | IN | GPIO | | PA1 | SA_2 (灵敏度) | IN | GPIO | | PA2 | SW_3 (存在/脉冲) | IN | GPIO | -| PA3 | SW_4 (快速模式) | IN | GPIO | +| PA3 | SW_4 (离开延时) | IN | GPIO | | PA4 | SW_5 (安全复位) | IN | GPIO | | PA5 | RLY2 (继电器2) | OUT | GPIO | | PA6 | RLY1 (继电器1) | OUT | GPIO | @@ -74,7 +74,7 @@ | 1 | 1 | 最高 | - **SW_3**:0 = 存在输出(继电器保持),1 = 脉冲输出(继电器吸合后释放) -- **SW_4**:0 = 正常,1 = 快速 500ms(缩短离开防抖和脉冲宽度为 500ms) +- **SW_4**:0 = 无离开延时(直接输出脉冲),1 = 离开延时 500ms - **SW_5**:拨到 ON 触发安全复位(所有输出关闭,频率重新学习) ### 指示灯 @@ -89,7 +89,7 @@ ### 继电器输出模式 **存在输出(SW_3=0):** 有车时 RLY1 吸合,无车释放。 -**脉冲输出(SW_3=1):** 车辆进入时 RLY1 吸合 200ms 后释放。 +**脉冲输出(SW_3=1):** 车辆进入时 RLY1 吸合 500ms 后释放。 ## 目录结构 diff --git a/docs/devlog.md b/docs/devlog.md index 9ce2adf..8abea4b 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -262,42 +262,44 @@ else --- -## 2026-06-24 — SW4 快速模式 & 接口修正 +## 2026-06-24 — 时序参数修正 & 接口更正 -### SW4 行为修正 +### 时序参数修正 -**旧行为**:SW_4=ON 时 FLAG_OUT 立即跳到 FLAG_PLUSE(跳过离开延时),FLAG_PLUSE 仍用正常 PULSE_DELAY(950ms)。语义混乱——名字叫"延时"实际是跳过延时。 +OUT_DELAY 和 PULSE_DELAY 之前沿用 M1H 的值(1.9s / 950ms),现修正为 500ms: -**新行为**:SW_4 重定义为**快速模式**。ON 时 OUT_DELAY 和 PULSE_DELAY 均缩短为 10 tick(500ms),OFF 时维持原值(1.9s/950ms)。 +| 参数 | M1H 旧值 | DLD154V4B 新值 | +|------|---------|---------------| +| OUT_DELAY | 1.9s (38 tick) | **500ms (10 tick)**,SW_4 控制开关 | +| PULSE_DELAY | 950ms (19 tick) | **500ms (10 tick)**,固定 | + +SW_4 语义:0 = 无离开延时(立即脉冲),1 = 离开延时 500ms。删除 OUT_DELAY_FAST / PULSE_DELAY_FAST 宏,因只有一组值。 ```c -// TaskLoop.h 新增 -#define OUT_DELAY_FAST 10 // 500ms -#define PULSE_DELAY_FAST 10 // 500ms +// TaskLoop.h +#define OUT_DELAY 10 // 离开防抖 500ms(仅 SW_4=ON 时生效) +#define PULSE_DELAY 10 // 脉冲宽度 500ms -// TaskLoop.c 运行时选择 -uint16_t out_delay = SET_DLY ? OUT_DELAY_FAST : OUT_DELAY; -uint16_t pulse_delay = SET_DLY ? PULSE_DELAY_FAST : PULSE_DELAY; +// TaskLoop.c +if (SET_DLY) { + loop1_OUTCNT++; + if (loop1_OUTCNT > OUT_DELAY) { ... } // 500ms 延时 +} else { + // 无离开延时:立即 FLAG_PLUSE +} ``` -适用范围:ETC 收费站等需要快速落杆的场景。 - ### 接口修正 -- 去除所有 RS485 相关描述:本产品只有 TTL 电平 UART Tx 调试口,无 RS485 通信能力 +- 去除所有 RS485 相关描述:本产品只有 TTL 电平 UART Tx 调试口 - 产品手册端子定义:RS485-A/B → Tx TTL 调试输出 - 技术规格书 §9:整节从 RS485 协议改为 TTL Tx 调试接口说明 -### 文档同步 - -- 产品手册 + 技术规格书同步更新:SW4 描述、端子定义、时序参数表 -- README.md 同步更新 - ## 修订记录 | 版本 | 时间 | 说明 | |------|------|------| -| V1.6 | 2026-06-24 | SW4 快速模式修正,RS485→TTL Tx 接口更正 | +| V1.6 | 2026-06-24 | 时序修正:OUT_DELAY/PULSE_DELAY→500ms;RS485→TTL Tx | | V1.5 | 2026-06-23 | Origin 污染保护、USE_FLATNESS_EXIT 开关 | | V1.4 | 2026-06-23 | 移植 CN200910309382 平坦性离开判定 | | V1.3 | 2026-06-23 | 指示灯行为、稳定期、重连状态保持 | diff --git a/docs/product-manual.md b/docs/product-manual.md index 2b68769..6703518 100644 --- a/docs/product-manual.md +++ b/docs/product-manual.md @@ -50,8 +50,8 @@ DLD154V4B 是一款基于 ARM Cortex-M4 微控制器的**单通道环形线圈 | 灵敏度等级 | 4 级(拨码可调) | | 响应时间 | < 10 ms(进入检测) | | 进入防抖 | 500 ms | -| 离开防抖 | 1.9 s + 平坦性三条件确认(SW_4=ON 时 500 ms) | -| 脉冲输出宽度 | 950 ms(SW_4=ON 时 500 ms) | +| 离开防抖 | 500 ms(SW_4=ON)或 0(SW_4=OFF) | +| 脉冲输出宽度 | 500 ms | | 继电器输出 | 2 路(主输出 + 辅助输出) | | 继电器触点容量 | AC 250V / 3A | | 调试接口 | TTL 电平 Tx | @@ -128,7 +128,7 @@ DLD154V4B 是一款基于 ARM Cortex-M4 微控制器的**单通道环形线圈 | PA0 | SA_1 | 灵敏度 bit0 | — | — | | PA1 | SA_2 | 灵敏度 bit1 | — | — | | PA2 | SW_3 | 输出模式 | 脉冲输出 | 存在输出 | -| PA3 | SW_4 | 快速模式 | 500ms 快速 | 正常 | +| PA3 | SW_4 | 离开延时 | 500ms | 无 | | PA4 | SW_5 | 安全复位 | 触发复位 | 正常运行 | ### 4.4 输出模式 @@ -136,16 +136,16 @@ DLD154V4B 是一款基于 ARM Cortex-M4 微控制器的**单通道环形线圈 **存在输出(SW_3 = OFF):** - 有车时 RLY1 持续吸合 - 无车时 RLY1 释放 -- 配合 OUT_DELAY 1.9s 离开延时 +- 配合 OUT_DELAY 离开延时(SW_4 控制) **脉冲输出(SW_3 = ON):** -- 车辆确认进入时 RLY1 吸合 950ms 后释放 +- 车辆确认进入时 RLY1 吸合 500ms 后释放 - 适用于触发道闸抬杆等需要单次脉冲的场景 -**快速模式(SW_4 = ON):** -- 离开防抖缩短为 500 ms(替代默认 1.9 s) -- 脉冲输出宽度缩短为 500 ms(替代默认 950 ms) -- 适用于需要快速落杆的场景(如高速收费站 ETC) +**离开延时(SW_4 = ON):** +- 车辆离开后等待 500ms 再触发脉冲 +- 适用于需要延时落杆的场景 +- SW_4 = OFF 时不延时,离开立即输出 ### 4.5 安全复位 diff --git a/docs/technical-spec.md b/docs/technical-spec.md index 464d0f7..410ccd3 100644 --- a/docs/technical-spec.md +++ b/docs/technical-spec.md @@ -74,7 +74,7 @@ FreeRTOS Kernel (CMSIS-RTOS v2) | PA0 | SA_1 | 灵敏度 bit0 | IN | GPIO, 上拉 | — | DIP 开关 | | PA1 | SA_2 | 灵敏度 bit1 | IN | GPIO, 上拉 | — | DIP 开关 | | PA2 | SW_3 | 存在/脉冲选择 | IN | GPIO, 上拉 | — | 0=存在, 1=脉冲 | -| PA3 | SW_4 | 快速模式 | IN | GPIO, 上拉 | — | 0=正常, 1=500ms快速 | +| PA3 | SW_4 | 离开延时 | IN | GPIO, 上拉 | — | 0=无, 1=500ms | | PA4 | SW_5 | 安全复位 | IN | GPIO, 上拉 | — | 1=复位 | | PA5 | RLY2 | 继电器 2 | OUT | GPIO PP | 0 (开路) | 辅助输出 | | PA6 | RLY1 | 继电器 1 | OUT | GPIO PP | 0 (开路) | 主输出 | @@ -323,27 +323,27 @@ else ### 5.1 状态转移 ``` - IN_DELAY=10 OUT_DELAY=38 + IN_DELAY=10 OUT_DELAY=10 [空闲] ──有车──→ [进入延时] ──超时──→ [有车确认] ↑ │ - │ 车辆离开 + │ 车辆离开 (+ SW_4离开延时) │ ↓ └──脉冲结束───── [脉冲输出] ←──超时── [离开延时] - PULSE_DELAY=19 + PULSE_DELAY=10 ``` ### 5.2 时序参数 -| 参数 | Tick (50ms) | 时间 (SW_4=OFF) | 时间 (SW_4=ON 快速) | 说明 | -|------|------------|-----------------|--------------------|------| -| IN_DELAY | 10 | **500 ms** | 500 ms(不变) | 进入确认防抖 | -| OUT_DELAY | 38 / 10 | **1.9 s** | **500 ms** | 离开确认防抖 | -| PULSE_DELAY | 19 / 10 | **950 ms** | **500 ms** | 脉冲输出宽度 | -| HOLD_TIME | 5×1200 | **~5 min** | ~5 min(不变) | 有限存在超时 | -| LC_HOLD_TIME | 4×1200 | **~4 min** | ~4 min(不变) | 安全复位超时 | -| STABLE_SAMPLES | 128 tick | **~128 ms** | 128 ms(不变) | 上电稳定期 | +| 参数 | Tick (50ms) | 时间 | 说明 | +|------|------------|------|------| +| IN_DELAY | 10 | **500 ms** | 进入确认防抖 | +| OUT_DELAY | 10 | **500 ms** | 离开防抖(仅 SW_4=ON 时生效,OFF 时为 0) | +| PULSE_DELAY | 10 | **500 ms** | 脉冲输出宽度 | +| HOLD_TIME | 5×1200 | **~5 min** | 有限存在超时 | +| LC_HOLD_TIME | 4×1200 | **~4 min** | 安全复位超时 | +| STABLE_SAMPLES | 128 tick | **~128 ms** | 上电稳定期 | -> **SW_4 快速模式**:当 SW_4=ON 时,OUT_DELAY 和 PULSE_DELAY 均缩短为 10 tick(500 ms),用于快速落杆场景。IN_DELAY 和其他参数不受影响。 +> **SW_4 离开延时**:SW_4=ON 时,OUT_DELAY=500ms;SW_4=OFF 时,离开延时为 0,FLAG_OUT 立即切换到 FLAG_PLUSE。PULSE_DELAY 固定 500ms,不受 SW_4 影响。 ### 5.3 系统 Tick 来源 diff --git a/utilities/at32f421_freertos_demo/inc/TaskLoop.h b/utilities/at32f421_freertos_demo/inc/TaskLoop.h index 3bad010..8c57c56 100644 --- a/utilities/at32f421_freertos_demo/inc/TaskLoop.h +++ b/utilities/at32f421_freertos_demo/inc/TaskLoop.h @@ -23,12 +23,8 @@ #define HOLD_TIME (5 * 1200) // 有限存在保持(约 5 分钟) #define LC_HOLD_TIME (4 * 1200) // 安全复位时间(约 4 分钟) #define IN_DELAY 10 // 进入防抖 500ms -#define OUT_DELAY 38 // 离开防抖 1.9s -#define PULSE_DELAY 19 // 脉冲宽度 950ms - -/* SW_4 快速模式:缩短离开防抖和脉冲宽度为 500ms */ -#define OUT_DELAY_FAST 10 // 离开防抖快速 500ms -#define PULSE_DELAY_FAST 10 // 脉冲宽度快速 500ms +#define OUT_DELAY 10 // 离开防抖 500ms(仅 SW_4=ON 时生效) +#define PULSE_DELAY 10 // 脉冲宽度 500ms /*=========================================================================== * 滤波参数 — 对齐 M1H @@ -119,7 +115,7 @@ extern uint8_t TM1cnt; // 50ms tick 分频计数 * 拨码开关状态 *===========================================================================*/ extern uint8_t SET_PLUS; // 0=存在输出, 1=脉冲输出 -extern uint8_t SET_DLY; // 0=正常, 1=快速模式(500ms) +extern uint8_t SET_DLY; // 离开延时: 0=无, 1=500ms extern uint8_t SET_SAFE; // 1=安全复位拨下 /*=========================================================================== diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index b319add..92f1935 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -76,7 +76,7 @@ uint8_t TM1cnt = 0; * 拨码开关状态 *===========================================================================*/ uint8_t SET_PLUS = 0; -uint8_t SET_DLY = 0; // 0=正常, 1=快速模式(500ms) +uint8_t SET_DLY = 0; // 离开延时: 0=无, 1=500ms uint8_t SET_SAFE = 0; /*=========================================================================== @@ -508,22 +508,27 @@ void TMR15_GLOBAL_IRQHandler(void) } } - /* FLAG_OUT: 离开延时(正常 1.9s,快速模式 500ms) */ + /* FLAG_OUT: 离开延时(SW_4=ON 时 500ms,OFF 时 0) */ if (loop1_FLAG_OUT) { - uint16_t out_delay = SET_DLY ? OUT_DELAY_FAST : OUT_DELAY; - loop1_OUTCNT++; - if (loop1_OUTCNT > out_delay) { + if (SET_DLY) { + loop1_OUTCNT++; + if (loop1_OUTCNT > OUT_DELAY) { + loop1_FLAG_OUT = 0; + loop1_FLAG_PLUSE = 1; + loop1_OUTCNT = 0; + } + } else { + /* 无离开延时:立即触发脉冲 */ loop1_FLAG_OUT = 0; loop1_FLAG_PLUSE = 1; loop1_OUTCNT = 0; } } - /* FLAG_PLUSE: 脉冲宽度(正常 950ms,快速模式 500ms) */ + /* FLAG_PLUSE: 脉冲宽度 500ms */ if (loop1_FLAG_PLUSE) { - uint16_t pulse_delay = SET_DLY ? PULSE_DELAY_FAST : PULSE_DELAY; loop1_OUTCNT++; - if (loop1_OUTCNT > pulse_delay) { + if (loop1_OUTCNT > PULSE_DELAY) { loop1_FLAG_PLUSE = 0; loop1_OUTCNT = 0; }