loop_task_function 主循环周期修正: - 原值 10ms 是 FreeRTOS 移植时的疏忽 - 改为 50ms 对齐原始 TMR15 5ms×10 设计 - 基线更新: 100×10ms=1s → 100×50ms=5s (Origin 更稳定) - CPU 占用降低 5× 创建 docs/devlog.md 记录 V2.0~V2.2 全部改动。
2.3 KiB
2.3 KiB
vd960Loop 开发日志
MCU: AT32F421 (Cortex-M4, 120MHz) | 线圈通道: 4路 | 调试口: TTL Tx (3.3V 9600 8N1)
2026-06-26 — 多项可配置化改造
1. 上报频率从 raw CAPVD 改为实际线圈频率
uart_report_packet_loop_acs 和 CMD_DBN_GET_MCJQ_PARAM 中,频率字段原来直接上报 loop_CAPVD(IIR 累加值),现改为经过公式转换的实际频率:
freq = (sclk_freq × input_div × LPCNT) / CAPVD
使用 uint64_t 先乘后除避免整数截断,LPCNT>0 && CAPVD>0 防除零。
2. 有限存在时长可配置 (hold_time)
Loop154_Unit新增uint16_t hold_time字段storage.c从exist_mode计算:hold_time = exist_mode × 20 × 5(tick 数,每 tick 50ms)vd1_task_per_channel判定有车时: 若hold_time > 0则loop_VD_HOLD = 1,启用有限存在计时TMR15_GLOBAL_IRQHandler:Hold_CNT > unit->hold_time替代固定HOLD_TIME- 超时后执行通道完整重启(
LC_Reset=1, loop_INI_LOOP=1),相当于线圈重启重建基线,避免继电器释放后立即重新吸合 exist_mode=0时不启用有限存在,兼容无限制存在场景
3. 离开延时可配置 (relay_delay)
Loop154_Unit新增uint16_t relay_delay字段storage.c从delay_time计算:relay_delay = delay_time × 2(tick 数)TMR15_GLOBAL_IRQHandler:OUTCNT > unit->relay_delay替代固定OUT_DELAY
4. vTaskDelay 修正: 10ms → 50ms
loop_task_function 的主循环 vTaskDelay 从 10ms 改为 50ms,对齐 DLD154V4B 原始设计(TMR15 5ms×10)。
影响:
- 基线更新周期: 100×10ms=1s → 100×50ms=5s(对齐原始设计,Origin 更稳定)
- CPU 占用: 主循环轮询频率降低 5×,节省 CPU
原因: TMR3 ISR ~1ms 产出一个 CAP_OK 样本,50ms 内有 ~50 个样本。vd1_task_per_channel 每个 tick 只取最新一个做 IIR,10ms 轮询时 CAP_OK 总是 ready,改为 50ms 不影响有效测量速率——采集由 TMR3 ISR 硬件驱动,基线更新速率受 vd1_task tick 限制。
修订记录
| 版本 | 时间 | 说明 |
|---|---|---|
| V2.2 | 2026-06-26 | vTaskDelay 10→50ms 对齐原始设计 |
| V2.1 | 2026-06-26 | hold_time/relay_delay 可配置,有限存在完整重启 |
| V2.0 | 2026-06-26 | 频率上报 CAPVD→实际频率转换 |