feat(V4B): V4.36.21 — 电感量下限判定防抖 1s→5s
用户: 电感量下限判定重要, 确保不误检, 判定时间可加长 - COIL_FAULT_HOLD_TICKS 100→500 (1s→5s, TaskLoop.h 宏) - 越界置位/恢复清除均 5s 连续确认 (防起振/瞬态 f 冲高 171k 误报断开级快闪) - 判定线不变 (18~171kHz / L≥20µH); coil_monitor 防抖宏化 - test 全用例同步 5s 语义 (499 不置位/500 置位); 全绿 语法0 error; spec V2.38 / devlog V2.57
This commit is contained in:
+26
-24
@@ -2,9 +2,10 @@
|
||||
* test_coil_range.c — 线圈电感量合理范围监视 gcc 隔离单测 (DLD154V4B V4.26)
|
||||
*
|
||||
* 验证对象: TaskLoop.c coil_monitor() (V4.26 拍板规格)
|
||||
* 默认低频档口径(43nF 三极管板): 空场频率合理窗 20~125kHz, 出界即判定电感量不合理
|
||||
* g_coil_fault: 0=正常 1=L偏大(f<18kHz) 2=L偏小(f>125kHz)
|
||||
* 防抖: 越界/恢复均连续 100tick(=1s) 才置位/清除 (调用点=稳定无车空闲)
|
||||
* 默认低频档口径(43nF 三极管板): 空场频率合理窗 18~171kHz(=L 20µH 下限),
|
||||
* 出界即判定电感量不合理; g_coil_fault: 0=正常 1=L偏大(f<18kHz) 2=L<20µH(f>171kHz)
|
||||
* 防抖: 越界/恢复均连续 COIL_FAULT_HOLD_TICKS(500tick=5s) 才置位/清除
|
||||
* (V4.36.21 加长, 下限判定重要防误检瞬态冲高)
|
||||
*
|
||||
* 镜像宏与固件一致 (改 COIL_* 时同步此处!)
|
||||
*/
|
||||
@@ -15,6 +16,7 @@
|
||||
|
||||
#define COIL_F_OK_MIN_KHZ 18
|
||||
#define COIL_F_OK_MAX_KHZ 171
|
||||
#define COIL_FAULT_HOLD_TICKS 500
|
||||
#define COIL_DEF_C_NF 66
|
||||
|
||||
static uint8_t g_coil_fault = 0;
|
||||
@@ -34,7 +36,7 @@ static void coil_step(uint32_t f_khz)
|
||||
g_coil_bad_cnt = 0;
|
||||
} else {
|
||||
g_coil_bad_cnt++;
|
||||
if (g_coil_bad_cnt >= 100) {
|
||||
if (g_coil_bad_cnt >= COIL_FAULT_HOLD_TICKS) {
|
||||
g_coil_fault = want;
|
||||
g_coil_bad_cnt = 0;
|
||||
}
|
||||
@@ -52,46 +54,46 @@ static void test_too_large(void)
|
||||
{
|
||||
g_coil_fault = 0; g_coil_bad_cnt = 0;
|
||||
|
||||
/* f=16.3kHz(实测超限线圈) 持续 <1s 不置位 */
|
||||
run_ticks(16, 99);
|
||||
/* f=16.3kHz(实测超限线圈) 持续 <5s 不置位 (V4.36.21 防抖加长防误检) */
|
||||
run_ticks(16, 499);
|
||||
assert(g_coil_fault == 0);
|
||||
/* 满 1s → L 偏大 */
|
||||
coil_step(16);
|
||||
/* 满 5s → L 偏大 */
|
||||
run_ticks(16, 1);
|
||||
assert(g_coil_fault == 1);
|
||||
/* 保持 → 状态稳定不抖 */
|
||||
run_ticks(16, 1000);
|
||||
assert(g_coil_fault == 1);
|
||||
printf("1. L偏大 (f=16kHz, 1s 防抖置位, 保持稳定) OK\n");
|
||||
printf("1. L偏大 (f=16kHz, 5s 防抖置位, 保持稳定) OK\n");
|
||||
}
|
||||
|
||||
static void test_too_small(void)
|
||||
{
|
||||
g_coil_fault = 0; g_coil_bad_cnt = 0;
|
||||
run_ticks(200, 100);
|
||||
run_ticks(200, 500);
|
||||
assert(g_coil_fault == 2);
|
||||
printf("2. L偏小 (f=200kHz, 1s 防抖置位) OK\n");
|
||||
printf("2. L偏小 (f=200kHz, 5s 防抖置位) OK\n");
|
||||
}
|
||||
|
||||
static void test_recover(void)
|
||||
{
|
||||
g_coil_fault = 1; g_coil_bad_cnt = 0;
|
||||
run_ticks(62, 99);
|
||||
assert(g_coil_fault == 1); /* 恢复防抖 <1s 不清除 */
|
||||
coil_step(62);
|
||||
assert(g_coil_fault == 0); /* 满 1s 恢复正常 */
|
||||
printf("3. 恢复正常 (1s 防抖清除) OK\n");
|
||||
run_ticks(62, 499);
|
||||
assert(g_coil_fault == 1); /* 恢复防抖 <5s 不清除 */
|
||||
run_ticks(62, 1);
|
||||
assert(g_coil_fault == 0); /* 满 5s 恢复正常 */
|
||||
printf("3. 恢复正常 (5s 防抖清除) OK\n");
|
||||
}
|
||||
|
||||
static void test_boundaries(void)
|
||||
{
|
||||
g_coil_fault = 0; g_coil_bad_cnt = 0;
|
||||
run_ticks(17, 100); assert(g_coil_fault == 1); /* 19 → 偏大 */
|
||||
run_ticks(62, 100); assert(g_coil_fault == 0); /* 20~125 正常 */
|
||||
run_ticks(18, 100); assert(g_coil_fault == 0); /* 边界 20 正常 */
|
||||
run_ticks(125, 100); assert(g_coil_fault == 0); /* 中间 125 正常 (V4.36.20 窗内) */
|
||||
run_ticks(171, 100); assert(g_coil_fault == 0); /* 边界 171 (=L 20.15µH) 正常 */
|
||||
run_ticks(172, 100); assert(g_coil_fault == 2); /* 172 → L<20µH 偏小(断开级) */
|
||||
printf("4. 边界 19/20/171/172 OK\n");
|
||||
run_ticks(17, 500); assert(g_coil_fault == 1); /* 17 → 偏大 */
|
||||
run_ticks(62, 500); assert(g_coil_fault == 0); /* 62 正常(恢复) */
|
||||
run_ticks(18, 500); assert(g_coil_fault == 0); /* 边界 18 正常 */
|
||||
run_ticks(125, 500); assert(g_coil_fault == 0); /* 中间 125 正常 (V4.36.20 窗内) */
|
||||
run_ticks(171, 500); assert(g_coil_fault == 0); /* 边界 171 (=L 20.15µH) 正常 */
|
||||
run_ticks(172, 500); assert(g_coil_fault == 2); /* 172 → L<20µH 偏小(断开级) */
|
||||
printf("4. 边界 17/18/171/172 OK\n");
|
||||
}
|
||||
|
||||
static void test_jitter_no_alarm(void)
|
||||
@@ -112,6 +114,6 @@ int main(void)
|
||||
test_recover();
|
||||
test_boundaries();
|
||||
test_jitter_no_alarm();
|
||||
printf("\nALL PASS (窗口 18~171kHz=L 20µH, 防抖 1s)\n");
|
||||
printf("\nALL PASS (窗口 18~171kHz=L 20µH, 防抖 5s)\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user