fix: 上报频率字段从raw CAPVD改为实际线圈频率
uart_report_packet_loop_acs 和 CMD_DBN_GET_MCJQ_PARAM 两处, loop_CAPVD 需经公式转换为实际频率后再上报: freq = sclk_freq * input_div * LPCNT / CAPVD 使用 uint64_t 先乘后除避免整数截断
This commit is contained in:
@@ -445,9 +445,14 @@ void uart_report_packet_loop_acs(uint8_t flag)
|
||||
|
||||
g_pkg_uart_report.pkg[i++] = (g_loop_cng_info.loop_cng[j].loopFreq_Level << 6) | (1 << 4) | (unit->loop_SensLevel & 0x03);
|
||||
g_pkg_uart_report.pkg[i++] = 0 | ((!unit->loop_LOOP_OK) << 3) | (unit->loop_VD_FLAG << 2) | (_misc);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)(unit->loop_CAPVD & 0xFF);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((unit->loop_CAPVD >> 8) & 0xFF);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((unit->loop_CAPVD >> 16) & 0xFF);
|
||||
// 上报频率 = sclk_freq * input_div * LPCNT / CAPVD (先乘后除避免精度损失)
|
||||
uint32_t _frequent = 0;
|
||||
if (unit->loop_LPCNT > 0 && unit->loop_CAPVD > 0) {
|
||||
_frequent = (uint32_t)((uint64_t)g_crm_clocks_freq_struct.sclk_freq * g_input_div * unit->loop_LPCNT / unit->loop_CAPVD);
|
||||
}
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)(_frequent & 0xFF);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((_frequent >> 8) & 0xFF);
|
||||
g_pkg_uart_report.pkg[i++] = (uint8_t)((_frequent >> 16) & 0xFF);
|
||||
|
||||
uint32_t variation = (unit->loop_Origin > unit->loop_CAPVD) ?
|
||||
(unit->loop_Origin - unit->loop_CAPVD) : (unit->loop_CAPVD - unit->loop_Origin);
|
||||
@@ -759,9 +764,15 @@ void manage_dbn_ble_default(uint8_t *pkg, uint8_t len)
|
||||
tmp_ble_buf[i++] = (_cng->output_mode) | (_cng->loopSafe_Timeout << 3);
|
||||
tmp_ble_buf[i++] = _cng->exist_mode;
|
||||
tmp_ble_buf[i++] = _cng->direction_mode;
|
||||
tmp_ble_buf[i++] = (uint8_t)(g_loop_states.loop_unit[j].loop_CAPVD & 0xFF);
|
||||
tmp_ble_buf[i++] = (uint8_t)((g_loop_states.loop_unit[j].loop_CAPVD >> 8) & 0xFF);
|
||||
tmp_ble_buf[i++] = (uint8_t)((g_loop_states.loop_unit[j].loop_CAPVD >> 16) & 0xFF);
|
||||
// 上报频率 = sclk_freq * input_div * LPCNT / CAPVD (先乘后除避免精度损失)
|
||||
uint32_t _freq = 0;
|
||||
if (g_loop_states.loop_unit[j].loop_LPCNT > 0 && g_loop_states.loop_unit[j].loop_CAPVD > 0) {
|
||||
_freq = (uint32_t)((uint64_t)g_crm_clocks_freq_struct.sclk_freq * g_input_div
|
||||
* g_loop_states.loop_unit[j].loop_LPCNT / g_loop_states.loop_unit[j].loop_CAPVD);
|
||||
}
|
||||
tmp_ble_buf[i++] = (uint8_t)(_freq & 0xFF);
|
||||
tmp_ble_buf[i++] = (uint8_t)((_freq >> 8) & 0xFF);
|
||||
tmp_ble_buf[i++] = (uint8_t)((_freq >> 16) & 0xFF);
|
||||
_cng++;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user