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:
@@ -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 — 查询有车状态 + 线圈好坏 */
|
||||
|
||||
Reference in New Issue
Block a user