diff --git a/docs/devlog.md b/docs/devlog.md index 4112272..acc17e2 100644 --- a/docs/devlog.md +++ b/docs/devlog.md @@ -29,6 +29,8 @@ DLD154V4 线圈振荡两级频率(33/66nF 拨码,拨码不引 IO)。现场 - ENV_RESYNC_WAIT 6000→1000(5s 预判 → 10s 学习 → ~16s 替换 → 空闲 5s 确认灭,总 ~21s) - TaskLoop.h:COIL_F_OK_MIN_KHZ=20 / COIL_F_OK_MAX_KHZ=120 / COIL_DEF_C_NF=66 - 行尾修复:V4.24~25 编辑期间源文件行尾被写成多 CR(\r\r\r\r\n),本次统一规范化回标准 CRLF +- DBG 周期打印(2s)增加 **L 粗估字段**(coil_l_uH(): Xn 精确反推,默认 66nF 档;拨 33nF 档结果 ×2): + `DBG|t=2000ms f=16kHz L=1445uH Xn=3681 ...`;EVT|coil_fault 同步改用 Xn 算法(精度优于 f 整数反推) ### 验证 diff --git a/utilities/at32f421_freertos_demo/src/TaskLoop.c b/utilities/at32f421_freertos_demo/src/TaskLoop.c index 6cedfbc..e20348b 100644 --- a/utilities/at32f421_freertos_demo/src/TaskLoop.c +++ b/utilities/at32f421_freertos_demo/src/TaskLoop.c @@ -800,6 +800,16 @@ static void env_resync_apply(uint32_t new_origin) #endif env_resync_abort(); } +/*=========================================================================== + * V4.26: 线圈电感量粗估 (默认低频档 C=66nF; 拨码 33nF 档结果 ×2) + * f = 60MHz/Xn → L_uH = Xn^2 / (4π^2 × 60MHz^2×1e-9... 化简为 Xn^2/(142×C_nF) + * 例: Xn=3681(f=16.3k) → L≈1445µH; Xn=685(f=87.6k) → L≈50µH + *===========================================================================*/ +static uint32_t coil_l_uH(uint32_t xn) +{ + return (uint32_t)(((uint64_t)xn * xn) / ((uint64_t)COIL_DEF_C_NF * 142u)); +} + /*=========================================================================== * V4.26: 线圈电感量合理范围监视 * 拍板规格: 默认低频档口径, 空场频率合理窗 20~120kHz, 出界即判定电感量不合理 @@ -827,8 +837,8 @@ static void coil_monitor(void) g_coil_bad_cnt++; if (g_coil_bad_cnt >= 100) { if (g_coil_fault == 0) - PRINT("EVT|coil_fault f:%d kHz L~%lu uH(C66/×2C33) %s\n", - f_khz, 25330000UL / (uint32_t)(f_khz * f_khz * COIL_DEF_C_NF), + PRINT("EVT|coil_fault f:%d kHz L~%lu uH(C66/×2C33) Xn:%d %s\n", + f_khz, coil_l_uH(loop1_Xn), loop1_Xn, want == 1 ? "too_large" : "too_small"); else PRINT("EVT|coil_ok f:%d kHz\n", f_khz); @@ -1296,10 +1306,11 @@ void loop_task_function(void *pvParameters) if (_dbg_cnt >= 200) { // 200 × 10ms = 2s uint32_t _t_ms = _dbg_cnt * 10; // V4.20: 先取时间再归零 _dbg_cnt = 0; - PRINT("DBG|t=%ums f=%dkHz Xn=%d LPCNT=%d Value=%d CAPVD=%d slow=%d " + PRINT("DBG|t=%ums f=%dkHz L=%luuH Xn=%d LPCNT=%d Value=%d CAPVD=%d slow=%d " "Origin=%d dlt=%d SENS=%d VD=%d FRZ=%d/%d LIM=%d LOOP=%d STBL=%d\n", _t_ms, calc_freq_khz(loop1_CAPVD, loop1_LPCNT), + coil_l_uH(loop1_Xn), loop1_Xn, loop1_LPCNT, loop1_Value, loop1_CAPVD, loop1_CAPVD_slow, loop1_Origin, loop1_dlt_ORG, loop1_SensLevel, loop1_VD_FLAG, loop1_freeze_cnt, loop1_freeze_ref, g_slope_limit_cnt,