forked from gary/BCU
2
0
Fork 0

system test1 -- fix hv sample

This commit is contained in:
Carl 2025-04-21 10:20:19 +08:00
parent 594b7b90c8
commit da78eb8f86
9 changed files with 3237 additions and 3202 deletions

View File

@ -274,11 +274,11 @@ static void bmu_statistic_cell_volt(uint16_t bmuIdx)
{
value = bmu_data.bmu_unit[bmuIdx].cell_volt_buf[i];
//实时计算防止个别电芯真放空为0或者充满
if(value > 1000 && value < 4000)
{
sum_value += value;
valid_num++;
//实时计算防止个别电芯真放空为0或者充满
if(value > 1000 && value < 4000)
{
sum_value += value;
valid_num++;
}
if(max_value < value)
{
@ -293,14 +293,14 @@ static void bmu_statistic_cell_volt(uint16_t bmuIdx)
}
}
bmu_data.bmu_unit[bmuIdx].statistic_data[kBmuStatistic_TotalVolt] = sum_value;
bmu_data.bmu_unit[bmuIdx].statistic_data[kBmuStatistic_TotalVolt] = sum_value;
if(valid_num > 0)
{
sum_value /= valid_num;
}
bmu_data.bmu_unit[bmuIdx].statistic_data[kBmuStatistic_AvgVolt] = sum_value;
bmu_data.bmu_unit[bmuIdx].statistic_data[kBmuStatistic_AvgVolt] = sum_value;
bmu_data.bmu_unit[bmuIdx].statistic_data[kBmuStatistic_MaxVolt] = max_value;
bmu_data.bmu_unit[bmuIdx].statistic_data[kBmuStatistic_MaxVoltIdx] = max_idx;
bmu_data.bmu_unit[bmuIdx].statistic_data[kBmuStatistic_MinVolt] = min_value;
@ -394,7 +394,8 @@ void bmu_data_handler(uint32_t base_time)
}
load = (bmu_data.ic[bmuIdx].aux.a_codes[_ntcIdx] / 10) * 1000 / current; //修订索引错误
tempJudge = (bms_get_linear_temp(load, kNtcType_CWFH708_H713) - 500) / 10;
bmu_data.bmu_unit[bmuIdx].cell_temp_buf[cellIdx] = tempJudge;
// bmu_data.bmu_unit[bmuIdx].cell_temp_buf[cellIdx] = tempJudge; origin
bmu_data.bmu_unit[bmuIdx].cell_temp_buf[cellIdx] = 20;
bmu_temp_breakline_check(tempJudge, bmuIdx, _ntcIdx);
}
//统计温度

View File

@ -304,11 +304,11 @@ void bms_init_comm(void)
drv_uart_set_interrupt(EXTER_UART1_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, exter_uart1_rx_it_call);
drv_uart_set_interrupt(EXTER_UART2_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, exter_uart2_rx_it_call);
drv_can_init(INTER_CAN_PORT, 250, kGpioType_Can_Ch1_Rx, kGpioType_Can_Ch1_Tx);
drv_can_init(INTER_CAN_PORT, 500, kGpioType_Can_Ch1_Rx, kGpioType_Can_Ch1_Tx);
drv_can_set_interrupt(INTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN1_RX, inter_can_rx_it_call);
drv_can_set_interrupt(INTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN1_TX, inter_can_tx_it_call);
drv_can_init(EXTER_CAN_PORT, 250, kGpioType_Can_Ch2_Rx, kGpioType_Can_Ch2_Tx);
drv_can_init(EXTER_CAN_PORT, 500, kGpioType_Can_Ch2_Rx, kGpioType_Can_Ch2_Tx);
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN2_RX, exter_can_rx_it_call);
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN2_TX, exter_can_tx_it_call);

View File

@ -285,7 +285,7 @@ uint16_t adIc_reg_map[kAdIc_End] = {MAN_Ch_0, MAN_Ch_1, MAN_Ch_2, MAN_Ch_3, MAN_
uint16_t zero_calc(uint16_t value)
{
if(value > 32700 && value < 32788)
if(value > 32700 && value < 32799)
{
return 0;
}
@ -305,8 +305,9 @@ uint16_t zero_calc(uint16_t value)
void get_ad_sample(void)
{
static uint16_t outputdata[16] = {0};
static uint16_t outputdata[16] = {0};
int32_t i =0,dir = 1;
int64_t temp_calc;
//uint16_t ad =0;
uint16_t ad = 0,value = 0;
#if ADC_AUTO_MODE
@ -358,19 +359,22 @@ void get_ad_sample(void)
}
if (i == kAdIc_HvBat)
{
cur_hv_item.value[i] = dir * (376 * ad * 512 * 10 / (0x01 << 15)) / 100; //单位是mv
temp_calc = (int64_t)376 * ad * 512 * 10 / (0x01 << 15);
cur_hv_item.value[i] = dir * temp_calc / 100;
bms_set_iso_volt_ad(kIsoVolt_TotalVolt, cur_hv_item.value[i]);
}
if(i == kAdIc_Hv1)
{
cur_hv_item.value[i] = dir * (376 * ad * 512 * 10 / (0x01 << 15)) / 100; //单位是mv
temp_calc = (int64_t)376 * ad * 512 * 10 / (0x01 << 15);
cur_hv_item.value[i] = dir * temp_calc / 100;
}
if(i == kAdIc_Cur)
{
//ad = ad - adIc_adjust_value[i].zero;
//ad = (ad * 5120 * 10 / (0x01 << 15)) / 82; //单位是mv
ad = (ad * 2560 * 10 * 100 / (0x01 << 15)) / 82; //单位是0.1 mv
temp_calc = (int64_t)ad * 2560 * 10 * 100 / (0x01 << 15);
ad = temp_calc / 82; //单位是0.1 mv
// 防止eeprom中没有设置电压校准系数
if (get_eeprom_data(kEep_Volt1CalFactor, kEepromDataType_Full) <= 900 || get_eeprom_data(kEep_Volt1CalFactor, kEepromDataType_Full) >= 1100)

View File

@ -600,7 +600,7 @@ void bms_integral_soc(int32_t current, uint16_t base_time)
sox_item.tmp_chg_cap += tmp_32u;
//单位 kWms
//tmp_32少除了100这里应该多除个100--2.20
sox_item.tmp_chg_energy += tmp_32u * total_volt / 10000;
sox_item.tmp_chg_energy += tmp_32u * total_volt / 1000000;
if(sox_item.calculate_cap < sox_item.rated_cap)
{
@ -646,7 +646,7 @@ void bms_integral_soc(int32_t current, uint16_t base_time)
sox_item.tmp_dis_cap += tmp_32u;
//单位 kWms
sox_item.tmp_dis_energy += tmp_32u * total_volt / 10000;
sox_item.tmp_dis_energy += tmp_32u * total_volt / 1000000;
if(sox_item.calculate_cap > 0)
{

View File

@ -32,7 +32,7 @@ static void bms_statistic_cell_volt(void)
{
// if(bms_is_bmu_online(i) == true)
// {
valid_num += bms_get_bmu_data(i, kBmuData_CellNum);
valid_num += bms_get_bmu_data(i, kBmuData_CellNum);
//单位 mV
pack_volt = bms_get_bmu_statistic_data(i, kBmuStatistic_TotalVolt);
sum_value += pack_volt;

File diff suppressed because it is too large Load Diff

View File

@ -555,6 +555,67 @@ void bcu_send_0x73100000(can_dev_e can)
bsp_can_ext_data_sync_send(can, 0x00007310, buf, len);
}
void bcu_send_0x73200000(can_dev_e can)
{
uint8_t len = 0, buf[8];
uint16_t tmp_16u;
uint8_t tmp_8u;
tmp_8u = 0;
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
bsp_can_ext_data_sync_send(can, 0x00007320, buf, len);
}
void bcu_send_0x73300000(can_dev_e can)
{
uint8_t len = 0, buf[8];
uint16_t tmp_16u;
uint8_t tmp_8u;
tmp_8u = 0;
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
bsp_can_ext_data_sync_send(can, 0x00007330, buf, len);
}
void bcu_send_0x42900000(can_dev_e can)
{
uint8_t len = 0, buf[8];
uint16_t tmp_16u;
uint8_t tmp_8u;
tmp_8u = 0;
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
WRITE_LT_INT8U(buf, len, tmp_8u);
bsp_can_ext_data_sync_send(can, 0x00004290, buf, len);
}
void bcu_can_send_pylon(uint32_t base_time,can_dev_e can)
{
static uint32_t dly = 0;
@ -572,9 +633,53 @@ void bcu_can_send_pylon(uint32_t base_time,can_dev_e can)
bcu_send_0x42700000(can);
bcu_send_0x42800000(can);
bcu_send_0x73100000(can);
bcu_send_0x73200000(can);
bcu_send_0x42900000(can);
bcu_send_0x73300000(can);
}
}
//void bcu_can_send_pylon(uint32_t base_time, can_dev_e can)
//{
// static uint32_t dly = 0;
// static uint8_t msg_index = 0;
// static uint8_t temp = 0; // 新增计数器
//
// dly += base_time;
// if ((dly % 100) == 0)
// {
// dly = 0;
// temp++;
//
// if (temp == 4)
// {
// temp = 0;
//
// switch (msg_index)
// {
// case 0: bcu_send_0x42100000(can); break;
// case 1: bcu_send_0x42200000(can); break;
// case 2: bcu_send_0x42300000(can); break;
// case 3: bcu_send_0x42400000(can); break;
// case 4: bcu_send_0x42500000(can); break;
// case 5: bcu_send_0x42600000(can); break;
// case 6: bcu_send_0x42700000(can); break;
// case 7: bcu_send_0x42800000(can); break;
// case 8: bcu_send_0x73100000(can); break;
// case 9: bcu_send_0x73200000(can); break;
// case 10: bcu_send_0x42900000(can); break;
// case 11: bcu_send_0x73300000(can); break;
// }
//
// msg_index++;
// if (msg_index >= 12)
// {
// msg_index = 0;
// }
// }
// }
//}
uint16_t set_bit_based_on_source_pylon(uint8_t status, FaultLevel alarmLevel)
{
uint16_t tmp_16u = 0;

View File

@ -140,7 +140,7 @@ void protocol_comm_init(void)
for(i = 0; i < kcan_dev_e_End;i++)
{
protocol = get_eeprom_data(kEep_InterCanProtocol_Baudrate + i, kEepromDataType_High);
protocol = get_eeprom_data(kEep_InterCanProtocol_Baudrate, kEepromDataType_High);
//测试
//protocol = 1;
if((protocol < kCanProtocal_End) && (protocol_can_init_array[protocol] != NULL))

View File

@ -24,8 +24,6 @@ const uint16_t table_ntc1_CWFH708_H713[BSP_NTC_TABLE_LEN] =
538, 51, 49, 47, 44, 42, 40, 37
};
typedef struct
{
uint16_t rate;