feat(V4B): V4.36.37 — 电感分级降级 (方案A 用户拍板)
低于下限拆两级, COIL_UNDER_MIN_AS_OPEN 作用域 156k→171k: - fault=2: 156~171k (L 20~24µH) 可用级 → 黄灯疾闪 100ms(与断开200ms区分), 判定恒照常 - fault=3: f>171k (L<20µH) 短路级 → 断开级快闪 200ms; 宏=1 等同断开(判车停+RLY释放+绿灯灭) - coil_monitor_recover: 回窗≤171k(非156k) + 恢复实时置档(原清0有5s黄灯空档) - tests 镜像四分: 157/171→2, 172→3; 文案同步 - spec V2.55 / manual V2.14 / devlog V2.73 语法0 error, 4测试全绿
This commit is contained in:
@@ -2151,6 +2151,7 @@ if (dev >= dlt_ORG × 4) {
|
||||
|
||||
| 版本 | 时间 | 说明 |
|
||||
|------|------|------|
|
||||
| V2.73 | 2026-09-08 | V4.36.37 电感分级降级(方案A): fault2=156~171k疾闪100ms恒判车 / fault3=f>171k短路级断开快闪(宏作用域移171k), recover 实时置档 |
|
||||
| V2.72 | 2026-09-08 | spec 6.3/10.1 黄灯行为表补 V4.36.25 三分+低于下限宏解耦说明 (文档) |
|
||||
| V2.71 | 2026-09-08 | V4.36.36 就绪巩固期 Q 分级(高5s/中7s/低10s): 低Q 上电首压防卡 |
|
||||
| V2.70 | 2026-09-08 | V4.36.35 EMA cast 根治(有符号先除): (uint32)负差/128=+3355万爆炸源; ADR 条件修复 |
|
||||
|
||||
@@ -186,8 +186,10 @@ SW_5 = ON 时:车辆(金属)持续压线超过 **4 分钟**(LC_HOLD_TIME
|
||||
|
||||
| 故障类型 | 红灯 | 绿灯 | 黄灯 | 说明 |
|
||||
|---------|------|------|------|------|
|
||||
| 线圈断开(当前)或 **L<24µH**(V4.36.25:f>156kHz 低于最低工作电感 24µH) | 呼吸 | 灭 | **快闪** (200ms) | 宏 COIL_UNDER_MIN_AS_OPEN:0=仅黄灯快闪(判定/继电器/绿灯照常);1=视为断开完全态(继电器保持释放+绿灯不亮+判定停)。检查线圈连接。**断开前有车:继电器保持 RELAY_HOLD_MS=1000ms 后仍断才释放**(防瞬时断开误释放,宏可调)。**重连后无车判稳门控**:值稳定(600ms 无漂移)且回带内才放行检测,判稳期黄灯保持快闪,Origin 自动对齐新空场 |
|
||||
| 线圈电感量不合理(V4.26/V4.36.25) | 呼吸 | 灭(无车) | **一长一短** (900ms亮/300ms灭/100ms亮/700ms灭 循环) | 空场频率出合理窗 18~125kHz(43nF):f<18k → L 偏大(>1.15mH);125k<f≤156k → L 偏小(24~38µH,出窗但高于下限);检查线圈匝数/尺寸。**L<24µH(f>156k) 为下限以下→快闪,见上行** |
|
||||
| 线圈断开(当前) | 呼吸 | 灭 | **快闪** (200ms) | 检查线圈连接。**断开前有车:继电器保持 RELAY_HOLD_MS=1000ms 后仍断才释放**(防瞬时断开误释放,宏可调)。**重连后无车判稳门控**:值稳定(600ms 无漂移)且回带内才放行检测,判稳期黄灯保持快闪,Origin 自动对齐新空场 |
|
||||
| 电感量短路级(**L<20µH,f>171kHz**,V4.36.37) | 呼吸 | 灭(宏=1 时) | **快闪** (200ms,与断开同款) | 匝间短路/线圈损坏级。宏 COIL_UNDER_MIN_AS_OPEN:0=仅快闪(判定/继电器/绿灯照常);1=视为断开完全态(继电器保持释放+绿灯不亮+判定停,恢复=f 回窗≤171k 连续 5s)。检查线圈是否短路、核对匝数(43nF 档真短路阈 20µH) |
|
||||
| 电感量可用级(**L 20~24µH,156<f≤171k**,V4.36.37) | 呼吸 | 灭(无车) | **疾闪 100ms**(与断开 200ms 区分) | 低于下限但可用:判定/继电器照常,仅提示电感偏低。现场可见"电感偏低但可用"与真断开/短路区分 |
|
||||
| 线圈电感量出合理窗(V4.26/V4.36.25) | 呼吸 | 灭(无车) | **一长一短** (900ms亮/300ms灭/100ms亮/700ms灭 循环) | 空场频率出合理窗 18~125kHz(43nF):f<18k → L 偏大(>1.15mH);125k<f≤156k → L 偏小(24~38µH,出窗但高于下限);检查线圈匝数/尺寸。**f>156k 为下限以下(分级),见上行两行** |
|
||||
| 线圈重连,断开 1 次 | 呼吸 | 正常 | **1 短闪** + 1.2s 灭 | 发生过 1 次断开,已恢复 |
|
||||
| 线圈重连,断开 2 次 | 呼吸 | 正常 | **2 短闪** + 1.2s 灭 | 发生过 2 次断开,已恢复 |
|
||||
| 线圈重连,断开 3+ 次 | 呼吸 | 正常 | **3 短闪** + 1.2s 灭 | 多次断开,建议检查接头 |
|
||||
@@ -243,7 +245,8 @@ SW_5 = ON 时:车辆(金属)持续压线超过 **4 分钟**(LC_HOLD_TIME
|
||||
|
||||
| 现象 | 可能原因 | 处理方法 |
|
||||
|------|---------|----------|
|
||||
| 黄灯快闪,绿灯灭 | 线圈断开/未连接,或电感量 <24µH(f>156kHz) | 检查线圈接头、引线通断;小线圈核对匝数(43nF 档最低 24µH) |
|
||||
| 黄灯快闪(200ms),绿灯灭 | 线圈断开/未连接,或电感量 <20µH(f>171kHz 短路级,宏=1 时绿灯灭) | 检查线圈接头、引线通断;小线圈核对匝数(43nF 档真短路阈 20µH) |
|
||||
| 黄灯疾闪(100ms) | 电感量 20~24µH(156~171kHz 可用级)——线圈偏低但可用 | 可继续使用;如需消除提示核对匝数(43nF 档可用下限 20µH) |
|
||||
| 绿灯常亮不灭 | 灵敏度太高 / 线圈频率漂移 | 降低灵敏度 / 检查线圈 |
|
||||
| 绿灯从不亮 | 灵敏度太低 / 线圈 Q 值过低 | 提高灵敏度 / 更换线圈 |
|
||||
| 红灯不亮 | 电源故障 | 检查供电电压 |
|
||||
@@ -275,6 +278,7 @@ SW_5 = ON 时:车辆(金属)持续压线超过 **4 分钟**(LC_HOLD_TIME
|
||||
| V2.11 | 2026-08-28 | 灵敏度 0/1 档对齐 PD132T(216/108→300/60),客户现场替换平滑交付 |
|
||||
| V2.12 | 2026-09-02 | 指示灯/自检描述更新(固件 V4.23:红灯呼吸≈2.6s、绿灯自检闪烁至基准稳定) |
|
||||
| V2.13 | 2026-09-04 | 黄灯行为全面同步 V4.30~36:一长一短 300/100/100/700ms、频率窗 20~115kHz(f>115k 告警)、环境校准 2s/7s/2s(总~15s)、铁块 7s+ 学入 |
|
||||
| V2.14 | 2026-09-08 | 电感分级降级(固件 V4.36.37 方案A):f>156k 拆分——156~171k 可用级疾闪100ms(恒判车)、f>171k 短路级快闪200ms(宏=1 等同断开);真短路阈 20µH |
|
||||
|
||||
---
|
||||
|
||||
|
||||
+11
-8
@@ -1,6 +1,6 @@
|
||||
# DLD154V4B 技术规格书
|
||||
|
||||
> 单路线圈车辆检测器 | 固件版本: V4.36.36 | 文档版本: V2.54
|
||||
> 单路线圈车辆检测器 | 固件版本: V4.36.37 | 文档版本: V2.55
|
||||
> 本文档面向工程开发、系统集成及故障深度分析
|
||||
|
||||
---
|
||||
@@ -527,19 +527,20 @@ void poll_green_led(void) {
|
||||
| 优先级 | 条件 | 行为 | 参数 | 诊断含义 |
|
||||
|--------|------|------|------|---------|
|
||||
| 1 | `g_disconnect_active == 1` 或 `!g_loop_power_up_state` | **快闪** | 200ms 亮 / 200ms 灭 | 线圈当前断开中 / 从无线圈上电 |
|
||||
| 1 | **`g_coil_fault == 2`(V4.36.20/25)** | **快闪**(同断开级) | 200ms 亮 / 200ms 灭 | **电感量低于下限 L<24µH(43nF,f>156kHz)**——断开级指示(匝间短路/线圈损坏级) |
|
||||
| 1 | **`g_coil_fault == 3`(V4.36.37 短路级)** | **快闪**(同断开级) | 200ms 亮 / 200ms 灭 | **电感量 <20µH(f>171kHz,真短路级)**——断开级指示;功能随 `COIL_UNDER_MIN_AS_OPEN` |
|
||||
| 4 | `g_env_warn` 或 `g_env_resync` | **常亮** | — | 环境异常预判/重校准学习(V4.24/25/31;预判 2s 锁存、累计 7s 触发学习、替换后空闲 2s 灭) |
|
||||
| 6 | **`g_coil_fault == 2`(V4.36.37 可用级)** | **疾闪**(独立节奏) | 100ms 亮 / 100ms 灭 | **电感量 20~24µH(156<f≤171k,低于下限但可用)**——判定恒照常,与真断开可区分 |
|
||||
| 5 | `g_coil_fault == 1`(V4.36.25 三分) | **一长一短** | 长亮 900ms / 灭 300ms / 短亮 100ms / 灭 700ms 循环 | 电感量出合理窗(仍继续判车):f<18kHz=L偏大(>1.15mH) **或** 125k<f≤156k=L偏小(24~38µH) |
|
||||
| 3 | `g_disconnect_count == 1` | **1 短闪** | 80ms 亮 / 200ms 灭 → 1.2s 灭(循环) | 断开 1 次,已恢复 |
|
||||
| 3 | `g_disconnect_count == 2` | **2 短闪** | 同上 | 断开 2 次 |
|
||||
| 3 | `g_disconnect_count >= 3` | **3 短闪** | 同上 | 断开 3+ 次 |
|
||||
| 2 | 正常 | **灭** | — | 一切正常 |
|
||||
|
||||
> **V2.54 注:L<24µH(f>156kHz,`g_coil_fault==2`)的指示与功能解耦(宏 `COIL_UNDER_MIN_AS_OPEN`,V4.36.24):**
|
||||
> - 指示:无论宏值,黄灯一律**快闪**(与断开同显示,见上表第 2 行)
|
||||
> - 功能(判定/继电器/绿灯):
|
||||
> - `COIL_UNDER_MIN_AS_OPEN=0`(默认):**仍正常判车**(车来触发继电器+绿灯亮、车走释放)——快闪仅作"电感异常"提示,防误杀可用线圈
|
||||
> - `COIL_UNDER_MIN_AS_OPEN=1`:**等同线圈断开完全态**——判车暂停(vd1_task 挂起)+ 继电器保持释放 + 绿灯不亮;恢复=coil_monitor_recover 无条件监测,f 回窗 18~156k 连续 5s → 重连确认+判稳
|
||||
> **V2.55 注:电感低于下限的分级(V4.36.37 方案A,用户拍板)——指示与功能解耦:**
|
||||
> - **可用级 fault==2(156~171k,L 20~24µH)**:黄灯**疾闪 100ms**(独立节奏,与真断开可区分);判定/继电器/绿灯**恒照常**(不随宏)——23µH 类"低但可用"线圈不误杀
|
||||
> - **短路级 fault==3(f>171k,L<20µH)**:黄灯**快闪 200ms**(与断开同款)——功能随 `COIL_UNDER_MIN_AS_OPEN`(宏作用域 V4.36.37 从 156k 移到 171k):
|
||||
> - =0(默认):仍正常判车,快闪仅作"真短路/损坏"提示
|
||||
> - =1:等同线圈断开完全态——判车暂停(vd1_task 挂起)+ 继电器保持释放 + 绿灯不亮;恢复=coil_monitor_recover 无条件监测,f 回窗 ≤171k 连续 5s → 按当前 f 实时置档+重连确认+判稳
|
||||
> - 防抖:越界/恢复均 COIL_FAULT_HOLD_TICKS=500(5s,V4.36.21)
|
||||
|
||||
```c
|
||||
@@ -663,7 +664,8 @@ LC_Reset 在下次 Car_In 清除;V4.36.4 绿灯=RLY2 镜像 → 复位期间
|
||||
| 线圈短路 | Xn 持续为 0 或极小 | 黄灯快闪 / 继电器释放 |
|
||||
| 电感量出窗(偏大) | 空场 f 持续 < 18 kHz(L>1.15mH,V4.36.25) | 黄灯**一长一短**(g_coil_fault=1)/ 防抖 5s |
|
||||
| 电感量出窗(偏小) | 空场 125k < f ≤ 156k(L 24~38µH,V4.36.25) | 黄灯**一长一短**(g_coil_fault=1)/ 防抖 5s,仍判车 |
|
||||
| **电感量低于下限** | 空场 f > 156 kHz(L<24µH,V4.36.20~25) | 黄灯**快闪(断开级)**(g_coil_fault=2);功能随 `COIL_UNDER_MIN_AS_OPEN`:0=仍判车 / 1=等同断开(判车停+继电器释放+绿灯灭);防抖 5s |
|
||||
| **电感量低于下限·可用级** | 空场 156 < f ≤ 171 kHz(L 20~24µH,V4.36.37) | 黄灯**疾闪 100ms**(g_coil_fault=2,独立节奏与断开区分);判定/继电器恒照常(不随宏);防抖 5s |
|
||||
| **电感量短路级** | 空场 f > 171 kHz(L<20µH,V4.36.37) | 黄灯**快闪 200ms(断开同款)**(g_coil_fault=3);功能随 `COIL_UNDER_MIN_AS_OPEN`:0=仍判车 / 1=等同断开(判车停+继电器释放+绿灯灭);恢复回窗≤171k 连续 5s 实时置档;防抖 5s |
|
||||
|
||||
### 10.2 黄灯编码设计
|
||||
|
||||
@@ -856,3 +858,4 @@ DLD154V4B V1.4 起实现该专利的整数化版本,用于大车通行时的
|
||||
| V2.52 | 2026-09-08 | **V4.36.35 EMA cast 顺序根治**:(uint32_t)负差/128 = +3355万/样本(C 语义: 负 cast uint32 后无符号除法)——V4.36.31 引入的 EMA 爆炸源, V4.36.34 自愈每样本兜住(炸+重置净零)掩盖; 修: 有符号先除 (uint32_t)(_ema_d/128)。35µH V4.36.34 全绿: 13+ cycle 正常+band_timeout 兜底 2 次实战; ADR 条件修复(_t_ms 恒 2000 原永不触发) |
|
||||
| V2.53 | 2026-09-08 | **V4.36.36 就绪巩固期 Q 分级**:低Q 上电判稳完(绿灯灭)即压板 → 绿灯常亮(系统未收敛完)。判稳完成后再按 Q 档绿灯继续慢闪: 高Q 5s(READY_HOLD_HI=1000)/中Q 7s(MID=1400)/低Q 10s(LO=2000, 5ms tick)——期间 Origin/EMA/滤波继续收敛, 绿灯灭才允许操作。Loop stable 打印带 ready:Ns |
|
||||
| V2.54 | 2026-09-08 | 文档补全:6.3 黄灯行为表更新 V4.36.25 三分语义——fault==2(L<24µH f>156k) 与断开同快闪(行 2);fault==1 一长一短含 125~156k;新增 COIL_UNDER_MIN_AS_OPEN 宏指示/功能解耦说明;10.1 故障表同步 18k/156k 三分 + 宏 + 防抖 5s |
|
||||
| V2.55 | 2026-09-08 | **V4.36.37 电感分级降级(方案A, 用户拍板)**:低于下限拆两级——156~171k(L20~24µH)=fault2 疾闪100ms(恒判车, 与断开区分);f>171k(L<20µH)=fault3 短路级断开快闪(COIL_UNDER_MIN_AS_OPEN 作用域 156k→171k);recover 回窗≤171k 且恢复实时置档(原清0有5s黄灯空档) |
|
||||
|
||||
+13
-7
@@ -2,8 +2,9 @@
|
||||
* test_coil_range.c — 线圈电感量合理范围监视 gcc 隔离单测 (DLD154V4B V4.26)
|
||||
*
|
||||
* 验证对象: TaskLoop.c coil_monitor() (V4.26 拍板规格)
|
||||
* 默认低频档口径(43nF 三极管板): 空场频率合理窗 18~171kHz(=L 20µH 下限),
|
||||
* 出界即判定电感量不合理; g_coil_fault: 0=正常 1=L偏大(f<18kHz) 2=L<20µH(f>171kHz)
|
||||
* 默认低频档口径(43nF 三极管板, V4.36.37 方案A 分级):
|
||||
* g_coil_fault: 0=正常 1=出窗一长一短(f<18k 或 125<f≤156k) 2=156~171k 疾闪(L20~24µH, 恒判车)
|
||||
* 3=f>171k 短路级 L<20µH → 断开级快闪(宏 COIL_UNDER_MIN_AS_OPEN 功能随动)
|
||||
* 防抖: 越界/恢复均连续 COIL_FAULT_HOLD_TICKS(500tick=5s) 才置位/清除
|
||||
* (V4.36.21 加长, 下限判定重要防误检瞬态冲高)
|
||||
*
|
||||
@@ -17,6 +18,7 @@
|
||||
#define COIL_F_OK_MIN_KHZ 18
|
||||
#define COIL_F_OK_MAX_KHZ 125
|
||||
#define COIL_L_MIN_F_KHZ 156
|
||||
#define COIL_L_SHORT_F_KHZ 171
|
||||
#define COIL_FAULT_HOLD_TICKS 500
|
||||
#define COIL_DEF_C_NF 66
|
||||
|
||||
@@ -30,6 +32,8 @@ static void coil_step(uint32_t f_khz)
|
||||
|
||||
if (f_khz < COIL_F_OK_MIN_KHZ)
|
||||
want = 1;
|
||||
else if (f_khz > COIL_L_SHORT_F_KHZ)
|
||||
want = 3;
|
||||
else if (f_khz > COIL_L_MIN_F_KHZ)
|
||||
want = 2;
|
||||
else if (f_khz > COIL_F_OK_MAX_KHZ)
|
||||
@@ -73,8 +77,8 @@ static void test_too_small(void)
|
||||
{
|
||||
g_coil_fault = 0; g_coil_bad_cnt = 0;
|
||||
run_ticks(200, 500);
|
||||
assert(g_coil_fault == 2);
|
||||
printf("2. L偏小 (f=200kHz, 5s 防抖置位) OK\n");
|
||||
assert(g_coil_fault == 3);
|
||||
printf("2. 短路级 (f=200kHz, 5s 防抖置位 fault=3) OK\n");
|
||||
}
|
||||
|
||||
static void test_recover(void)
|
||||
@@ -96,8 +100,10 @@ static void test_boundaries(void)
|
||||
run_ticks(125, 500); assert(g_coil_fault == 0); /* 边界 125 正常(窗内) */
|
||||
run_ticks(126, 500); assert(g_coil_fault == 1); /* 126 → L偏小出窗, 一长一短级 */
|
||||
run_ticks(156, 500); assert(g_coil_fault == 1); /* 156 → 出窗但仍≥24µH, 一长一短级 */
|
||||
run_ticks(157, 500); assert(g_coil_fault == 2); /* 157 → L<24µH 下限, 快闪(断开级) */
|
||||
printf("4. 边界 17/18/125/126/156/157 OK\n");
|
||||
run_ticks(157, 500); assert(g_coil_fault == 2); /* 157 → 156~171k 可用级, 疾闪 */
|
||||
run_ticks(171, 500); assert(g_coil_fault == 2); /* 171 → 边界仍可用级疾闪 (f@20µH=171.6k) */
|
||||
run_ticks(172, 500); assert(g_coil_fault == 3); /* 172 → L<20µH 短路级, 断开级快闪 */
|
||||
printf("4. 边界 17/18/125/126/156/157/171/172 OK\n");
|
||||
}
|
||||
|
||||
static void test_jitter_no_alarm(void)
|
||||
@@ -118,6 +124,6 @@ int main(void)
|
||||
test_recover();
|
||||
test_boundaries();
|
||||
test_jitter_no_alarm();
|
||||
printf("\nALL PASS (合理窗18~125kHz=L≥38µH; 126~156=一长一短; >156k=L<24µH快闪; 防抖 5s)\n");
|
||||
printf("\nALL PASS (合理窗18~125kHz; 126~156=一长一短; 157~171=疾闪L20~24µH恒判车; >171=L<20µH短路级快闪; 防抖 5s)\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -81,9 +81,13 @@
|
||||
#define ENV_WARN_WAIT 200 // 环境预判 (V4.31): dev>+4dlt 高位连续 ~2s → 黄灯预判锁存(回摆保持)
|
||||
#define ENV_RECOVER_WAIT 200 // 恢复确认 (V4.31): 新基线替换后 环境空闲连续 ~2s 才解除预判, 黄灯灭
|
||||
#define COIL_F_OK_MIN_KHZ 18 // 线圈频率合理窗 (V4.36.18): 默认低频档口径, <18kHz → L偏大 (≈双 250µH+ 大线圈放行)
|
||||
#define COIL_L_MIN_UH 24 // V4.36.23/25: 最低工作电感量 µH (43nF 口径, 对应 COIL_L_MIN_F_KHZ=156): L<此值 → 黄灯快闪(断开级), 可 COIL_UNDER_MIN_AS_OPEN 切完全断开
|
||||
#define COIL_UNDER_MIN_AS_OPEN 0 // V4.36.24: L<下限 是否视为线圈断开完全状态: 1=黄灯快闪+继电器保持释放+绿灯不亮(同真正断开, 判定停);
|
||||
// 0=仅黄灯快闪(断开级指示), 绿灯/继电器/判定照常工作
|
||||
#define COIL_L_MIN_UH 24 // V4.36.23/25: 出窗偏小指示阈值 µH (对应 COIL_L_MIN_F_KHZ=156): L<此值 → 黄灯疾闪 100ms(独立节奏), 判定恒照常
|
||||
#define COIL_L_SHORT_UH 20 // V4.36.37: 真短路级阈值 µH (方案A 分级): L<20µH(f>171k) → 断开级快闪(200ms, 与真断开同款), COIL_UNDER_MIN_AS_OPEN 作用于此级
|
||||
#define COIL_L_SHORT_F_KHZ 171 // V4.36.37: f@20µH=171.6k 取 171: f>此值 → L<20µH 短路级
|
||||
#define COIL_UNDER_MIN_AS_OPEN 0 // V4.36.24/37: L<20µH(f>171k, 短路级) 是否视为线圈断开完全状态(方案A 作用域从 156k 移到 171k):
|
||||
// 1=黄灯快闪+继电器保持释放+绿灯不亮(同真正断开, 判定停)+专职恢复监测;
|
||||
// 0=仅黄灯快闪(断开级指示), 绿灯/继电器/判定照常
|
||||
// 156~171k(L 20~24µH) 恒判车照常+疾闪, 不随此宏
|
||||
#define COIL_FAULT_HOLD_TICKS 500 // V4.36.21: 电感量越界/恢复防抖 500tick=5s (原100=1s; 下限判定重要, 加长防误检瞬态冲高)
|
||||
#define COIL_F_OK_MAX_KHZ 125 // 线圈频率合理窗上限 (V4.36.25 恢复): >125kHz(43nF≈38µH) → L偏小不合理 → 黄灯一长一短 (V4.36.9 口径不变)
|
||||
#define COIL_L_MIN_F_KHZ 156 // V4.36.25: 低于下限频率 (43nF: L=2.533e7/(f²×43), f@24µH=156.7k): f>此值 → L<COIL_L_MIN_UH → 黄灯快闪(断开级)
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
#define __CMCNG_H__
|
||||
|
||||
#define PRODUCT_MODEL "DLD154"
|
||||
#define FIRMWARE_VER "4.36.36" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define FIRMWARE_VER "4.36.37" // 主.子.修订 (2026-09-03 起: 小改动只增 REV; MAIN/SUB 由产品定)
|
||||
#define HARDWARE_VER "3.00"
|
||||
#define FIRMWARE_VER_MAIN 4
|
||||
#define FIRMWARE_VER_SUB 36
|
||||
#define FIRMWARE_VER_REV 36
|
||||
#define FIRMWARE_VER_REV 37
|
||||
#define HARDWARE_VER_MAIN 3
|
||||
#define HARDWARE_VER_SUB 0
|
||||
|
||||
|
||||
@@ -177,7 +177,7 @@ uint32_t g_stab_base = 0; // V4.36.15: 步进比较基准 CAPVD
|
||||
uint8_t g_release_need = 3; // V4.36.8: 释放确认样本数 (按Q档, 高3/中4/低5)
|
||||
uint8_t g_fault_phase = 0;
|
||||
uint16_t g_fault_tick = 0;
|
||||
uint8_t g_coil_fault = 0; // V4.26/25: 电感量异常 0=正常 1=出合理窗18~125kHz→一长一短(f<18k L偏大 / 125k<f≤156k L偏小) 2=L<24µH(f>156kHz, COIL_L_MIN_F_KHZ)→断开级快闪
|
||||
uint8_t g_coil_fault = 0; // V4.26/25/37: 电感量异常 0=正常 1=出合理窗→一长一短(f<18k L偏大 / 125k<f≤156k L偏小) 2=156<f≤171k L20~24µH→疾闪100ms(恒判车) 3=f>171k L<20µH短路级→断开级快闪(宏=1 等同断开)
|
||||
uint16_t g_coil_bad_cnt = 0; // V4.26: 电感异常防抖计数 (V4.36.21: 500tick=5s 置位/清除, 宏 COIL_FAULT_HOLD_TICKS)
|
||||
|
||||
/*===========================================================================
|
||||
@@ -419,9 +419,9 @@ void poll_yellow_led(void)
|
||||
* !loop1_LOOP_OK: 上电无线圈 + 运行中断开 (5ms 实时, 不等 loop_task 150ms 慢拍
|
||||
* 置 disconnect_active; 上电 phase power_up=0 时不置位, 由本条件兜底)
|
||||
* g_reconn_stab: 运行中无车重连判稳门控
|
||||
* g_coil_fault==2: 电感量 < COIL_L_MIN_UH(24µH, f>156kHz) → 按线圈断开状态指示
|
||||
* g_coil_fault==3: 电感量 < COIL_L_SHORT_UH(20µH, f>171kHz, V4.36.37 短路级) → 按线圈断开状态指示
|
||||
* 上电有线圈/判稳中: LOOP_OK=1 → 黄灯不闪, 自检指示归绿灯慢闪 ---*/
|
||||
if (!loop1_LOOP_OK || g_reconn_stab || g_coil_fault == 2) {
|
||||
if (!loop1_LOOP_OK || g_reconn_stab || g_coil_fault == 3) {
|
||||
if (g_fault_tick >= FLT_FAST_HALF) {
|
||||
g_fault_tick = 0;
|
||||
LED_YELLOW_GPIO->odt ^= LED_YELLOW_PIN; // toggle
|
||||
@@ -441,11 +441,22 @@ void poll_yellow_led(void)
|
||||
return;
|
||||
}
|
||||
|
||||
/*--- V4.36.37 模式6: 电感量低于下限可用级(156~171k, L 20~24µH) → 疾闪 100ms
|
||||
* 与断开/短路级快闪(200ms) 区分 — 现场可见"电感偏低但可用", 判定恒照常 ---*/
|
||||
if (g_coil_fault == 2) {
|
||||
if (g_fault_tick >= 20) { // 100ms (20 × 5ms)
|
||||
g_fault_tick = 0;
|
||||
LED_YELLOW_GPIO->odt ^= LED_YELLOW_PIN; // toggle
|
||||
}
|
||||
g_fault_phase = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/*--- V4.26/25 模式5: 线圈电感量出合理窗(18~125kHz) → 一长一短
|
||||
* 长亮900ms(180tick) → 灭300ms(60) → 短亮100ms(20) → 灭700ms(140), 循环
|
||||
* g_coil_fault: 1=f<18k L偏大 或 125k<f≤156k L偏小(均一长一短);
|
||||
* 2=L<24µH(f>156k) 已在模式1 断开级快闪(V4.36.20/25)
|
||||
* 优先级: 断开(1) > 环境(4) > 电感量(5) > N短闪(3) > 灭 ---*/
|
||||
* 2=156~171k 疾闪(V4.36.37); 3=L<20µH 短路级已在模式1 断开级快闪
|
||||
* 优先级: 断开(1) > 环境(4) > 疾闪(6) > 电感量(5) > N短闪(3) > 灭 ---*/
|
||||
if (g_coil_fault == 1) {
|
||||
static const uint16_t dur[4] = { 180, 60, 20, 140 }; // 900/300/100/700ms (V4.36.13: 灭 100→300ms)
|
||||
if (g_fault_phase > 3) g_fault_phase = 0;
|
||||
@@ -827,10 +838,10 @@ void TMR15_GLOBAL_IRQHandler(void)
|
||||
|
||||
/* V4.36.24: L<下限视为断开完全态(宏=1) — 载波强制为断:
|
||||
* 主循环走断开路径(vd1_task 停/黄灯快闪), RLY 刷新短路保持释放, 绿灯镜像灭 */
|
||||
if (COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2)
|
||||
if (COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 3)
|
||||
loop1_LOOP_OK = 0;
|
||||
|
||||
if (loop1_LC_Reset == 0 && !(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2)) {
|
||||
if (loop1_LC_Reset == 0 && !(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 3)) {
|
||||
/* 继电器 2(辅助/方向) */
|
||||
if (loop1_VD_FLAG)
|
||||
RLY2_ON;
|
||||
@@ -864,7 +875,7 @@ void TMR15_GLOBAL_IRQHandler(void)
|
||||
* - 超时仍断开 → 强制释放(防真故障无限保持)
|
||||
* 无车断开(VD_FLAG=0)不受影响, 仍立即释放 */
|
||||
if (!loop1_LOOP_OK && loop1_VD_FLAG && g_loop_power_up_state && !g_relay_hold_done
|
||||
&& !(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2)) { /* V4.36.24: 强制期不保持(保持释放) */
|
||||
&& !(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 3)) { /* V4.36.24: 强制期不保持(保持释放) */
|
||||
RLY1_ON; /* 保持: 防止瞬时断开继电器抖落 */
|
||||
RLY2_ON;
|
||||
g_relay_hold_cnt += 5;
|
||||
@@ -963,7 +974,7 @@ static uint32_t coil_l_uH(uint32_t f_khz)
|
||||
* 拍板规格: 默认低频档口径, 空场频率合理窗 20~120kHz, 出界即判定电感量不合理
|
||||
* (黄灯"一长一短"告警, 见 poll_yellow_led 模式5)
|
||||
* 调用点保证: 仅稳定 + 无车空闲 + 未断开时执行 (车压/自检/断开不判)
|
||||
* g_coil_fault: 0=正常 1=L偏大(f<20kHz) 2=L偏小(f>120kHz)
|
||||
* g_coil_fault: 0=正常 1=出窗一长一短 2=156~171k疾闪(可用级) 3=f>171k短路级(断开级快闪)
|
||||
* 防抖: 越界/恢复均连续 COIL_FAULT_HOLD_TICKS(500tick=5s, V4.36.21) 才置位/清除 — 下限判定重要, 加长防误检
|
||||
*===========================================================================*/
|
||||
static void coil_monitor(void)
|
||||
@@ -974,14 +985,17 @@ static void coil_monitor(void)
|
||||
if (loop1_Origin == 0 || f_khz == 0)
|
||||
return; /* 无有效基准 → 维持原状 */
|
||||
|
||||
/* V4.36.25 三分语义 (43nF):
|
||||
* f<18k → want=1 L偏大(>合理窗) → 一长一短
|
||||
* f>156k → want=2 L<24µH 下限以下 → 快闪(断开级)
|
||||
* 125k<f≤156k → want=1 L偏小(出合理窗但不低于下限) → 一长一短 */
|
||||
/* V4.36.25/37 四分语义 (43nF, 方案A 分级):
|
||||
* f<18k → want=1 L偏大 → 一长一短
|
||||
* 125k<f≤156k → want=1 L偏小(出窗) → 一长一短
|
||||
* 156k<f≤171k → want=2 L 20~24µH 低于下限可用级 → 疾闪100ms(与断开区分), 判定恒照常
|
||||
* f>171k → want=3 L<20µH 短路级 → 断开级快闪(200ms), COIL_UNDER_MIN_AS_OPEN 决定功能 */
|
||||
if (f_khz < COIL_F_OK_MIN_KHZ)
|
||||
want = 1; /* L 偏大 */
|
||||
else if (f_khz > COIL_L_SHORT_F_KHZ)
|
||||
want = 3; /* L<20µH 短路级 → 断开级快闪 */
|
||||
else if (f_khz > COIL_L_MIN_F_KHZ)
|
||||
want = 2; /* L<下限 → 断开级快闪 */
|
||||
want = 2; /* 156~171k L20~24µH → 疾闪(可用级) */
|
||||
else if (f_khz > COIL_F_OK_MAX_KHZ)
|
||||
want = 1; /* L 偏小(出合理窗, 不低于下限) → 一长一短 */
|
||||
|
||||
@@ -993,7 +1007,8 @@ static void coil_monitor(void)
|
||||
if (g_coil_fault == 0)
|
||||
PRINT("EVT|coil_fault f:%d kHz L~%lu uH Xn:%d %s\n",
|
||||
f_khz, coil_l_uH(f_khz), loop1_Xn,
|
||||
(want == 2) ? "below_l_min" :
|
||||
(want == 3) ? "below_l_short" :
|
||||
(want == 2) ? "below_l_min_20_24u" :
|
||||
(f_khz < COIL_F_OK_MIN_KHZ) ? "too_large" : "too_small");
|
||||
else
|
||||
PRINT("EVT|coil_ok f:%d kHz\n", f_khz);
|
||||
@@ -1011,18 +1026,23 @@ static void coil_monitor_recover(void)
|
||||
{
|
||||
uint32_t f_khz;
|
||||
|
||||
if (!(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 2))
|
||||
if (!(COIL_UNDER_MIN_AS_OPEN && g_coil_fault == 3))
|
||||
return; /* 非强制断开期 → 原 coil_monitor 负责 */
|
||||
|
||||
f_khz = calc_freq_khz(loop1_Origin, loop1_LPCNT);
|
||||
if (f_khz == 0 || f_khz < COIL_F_OK_MIN_KHZ || f_khz > COIL_L_MIN_F_KHZ) {
|
||||
g_coil_bad_cnt = 0; /* 仍低于下限/载波无效 → 继续等 */
|
||||
if (f_khz == 0 || f_khz < COIL_F_OK_MIN_KHZ || f_khz > COIL_L_SHORT_F_KHZ) {
|
||||
g_coil_bad_cnt = 0; /* 仍短路级/载波无效 → 继续等 (V4.36.37: 回窗改为 ≤171k) */
|
||||
return;
|
||||
}
|
||||
g_coil_bad_cnt++;
|
||||
if (g_coil_bad_cnt >= COIL_FAULT_HOLD_TICKS) {
|
||||
PRINT("EVT|coil_ok f:%d kHz (recover from L<min as-open)\n", f_khz);
|
||||
g_coil_fault = 0;
|
||||
/* V4.36.37: 按当前 f 实时置档(非清 0) — 避免回 156~171k 可用级/125~156k 出窗区
|
||||
* 后黄灯空档 5s (原清 0 等 coil_monitor 重判有小瑕疵) */
|
||||
g_coil_fault = (f_khz < COIL_F_OK_MIN_KHZ) ? 1 :
|
||||
(f_khz > COIL_L_SHORT_F_KHZ) ? 3 :
|
||||
(f_khz > COIL_L_MIN_F_KHZ) ? 2 :
|
||||
(f_khz > COIL_F_OK_MAX_KHZ) ? 1 : 0;
|
||||
g_coil_bad_cnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user