fix(rs485): 频率改用 loop1_CAPVD,绕过 flag_change 冻结

g_loop_acs_info.loop_capvd 被 flag_change 门控:
  INIT_VD() / 车辆进出事件 → flag_change=1 → loop_capvd 冻结
  flag_change 仅在 usart_packet_processing_acs_loop 清零
  BLE 断开时 flag_change 永远不清零 → loop_capvd 永远不更新

改用 loop1_CAPVD (vd1_task 每次实时更新,不受 flag_change 影响)
This commit is contained in:
wangfq
2026-07-24 10:04:02 +08:00
parent c8d1bfa4e8
commit 2d7a5d7366
@@ -90,10 +90,10 @@ static void rs485_send(const uint8_t *data, uint8_t len)
/* 直接从原始测量值计算线圈频率 (Hz),不依赖 BLE 报告通道 */
static uint32_t rs485_get_freq(void)
{
uint32_t capvd = g_loop_acs_info.loop_capvd; // TMR0 捕获累加
if (capvd == 0 || loop1_LPCNT == 0) return 0;
/* freq = FREQ_SYS / (capvd / LPCNT) + 360 (补偿值) */
return (uint32_t)((uint64_t)FREQ_SYS * loop1_LPCNT / capvd) + 360;
extern uint32_t loop1_CAPVD; // vd1_task() 实时更新的 IIR 滤波
if (loop1_CAPVD == 0 || loop1_LPCNT == 0) return 0;
/* freq = FREQ_SYS / (CAPVD / LPCNT) + 360 (补偿值) */
return (uint32_t)((uint64_t)FREQ_SYS * loop1_LPCNT / loop1_CAPVD) + 360;
}
/* 0xFA — 查询有车状态 + 线圈好坏 */