高压堆叠产品单独程序,支持最多8个pack包
This commit is contained in:
parent
1be9fc25f7
commit
ea635ee7b6
|
@ -445,7 +445,7 @@ void bms_poll_bmu(uint32_t base_time)
|
|||
|
||||
//温感检测是否脱落,加上了防抖,需要两次大于6000,才设置温感排线错误,温感排线错误显示的有点慢
|
||||
//温感的值最开始全是大于6000的,第二次才是采集值
|
||||
memset(tempJudge_cnt, 0, sizeof(tempJudge_cnt));
|
||||
//memset(tempJudge_cnt, 0, sizeof(tempJudge_cnt));
|
||||
//2-5 @wangk add this line bcu statistic data is show
|
||||
// bms_poll_statistic(0);
|
||||
// //2-6 @wangk
|
||||
|
|
|
@ -58,6 +58,22 @@ uint8_t bms_get_bmu_num(void)
|
|||
return bmu_data.bmu_num;
|
||||
}
|
||||
|
||||
void bms_set_bmu_num(uint8_t number)
|
||||
{
|
||||
bmu_data.bmu_num = number;
|
||||
bmu_data.total_ic_num = number;
|
||||
}
|
||||
|
||||
void bms_set_bmu_volt_num(uint8_t number)
|
||||
{
|
||||
bmu_data.total_cell_num = number * 16;
|
||||
}
|
||||
|
||||
void bms_set_bmu_temp_num(uint8_t number)
|
||||
{
|
||||
bmu_data.total_temp_num = number * 4;
|
||||
}
|
||||
|
||||
uint8_t bms_get_bmu_online_num(void)
|
||||
{
|
||||
return bmu_data.bmu_online_num;
|
||||
|
|
|
@ -78,7 +78,11 @@ uint16_t bms_get_pole_temp_by_bmu(uint8_t bmu_idx, uint16_t idx);
|
|||
uint16_t bms_get_balance_temp_by_bmu(uint8_t bmu_idx, uint16_t idx);
|
||||
uint32_t bms_get_balance_status(uint8_t bmu_idx, uint8_t idx);
|
||||
|
||||
void bms_set_bmu_fault_bit(BmuFaultBit idx,uint8_t value);
|
||||
void bms_set_bmu_num(uint8_t number);
|
||||
|
||||
void bms_set_bmu_num(uint8_t number);
|
||||
void bms_set_bmu_volt_num(uint8_t number);
|
||||
void bms_set_bmu_temp_num(uint8_t number);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -384,6 +384,7 @@ const FaultLevel alarm_level_map[8] =
|
|||
kFaultLevel_Normal, kFaultLevel_First, kFaultLevel_Second, kFaultLevel_Second,
|
||||
kFaultLevel_Third, kFaultLevel_Third, kFaultLevel_Third, kFaultLevel_Third,
|
||||
};
|
||||
|
||||
void bms_analyse_fault(RunStatus status, FaultArray *fault_array)
|
||||
{
|
||||
uint32_t i, j;
|
||||
|
@ -412,15 +413,29 @@ void bms_analyse_fault(RunStatus status, FaultArray *fault_array)
|
|||
handler = get_eeprom_data(FAULT_ALARM_HANDLER_ADDR(tmp), kEepromDataType_Full);
|
||||
alarm_handle = handler & 0x0003;
|
||||
cur_rate[j + kFaultLevel_End - level] = handler >> 8;
|
||||
if(alarm_handle == kFaultHandle_ForbidIdx)//禁用
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(alarm_handle == kFaultHandle_ForbidIdx)//禁用
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if(alarm_handle != kFaultHandle_ForbidIdx)
|
||||
{
|
||||
data = fault_item.fault_data[prop_array[i].data_idx];
|
||||
threshold[kCondType_Alarm] = get_eeprom_data(FAULT_ARARM_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
||||
threshold[kCondType_Release] = get_eeprom_data(FAULT_RELEASE_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
||||
|
||||
if (i == 10 || i == 11)
|
||||
{
|
||||
uint16_t cell_threshold_idx = (i == 10) ? prop_array[12].threshold_idx : prop_array[13].threshold_idx;
|
||||
uint16_t cell_threshold = get_eeprom_data(FAULT_ARARM_THRESHOLD_ADDR(cell_threshold_idx + j * 5), kEepromDataType_Full);
|
||||
threshold[kCondType_Alarm] = (cell_threshold * bms_get_cell_num()) / 100;
|
||||
|
||||
cell_threshold = get_eeprom_data(FAULT_RELEASE_THRESHOLD_ADDR(cell_threshold_idx + j * 5), kEepromDataType_Full);
|
||||
threshold[kCondType_Release] = (cell_threshold * bms_get_cell_num()) / 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
threshold[kCondType_Alarm] = get_eeprom_data(FAULT_ARARM_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
||||
threshold[kCondType_Release] = get_eeprom_data(FAULT_RELEASE_THRESHOLD_ADDR(tmp), kEepromDataType_Full);
|
||||
}
|
||||
|
||||
if(prop_array[i].other_cond == NULL) //如果没有其他故障判断策略,默认模版策略
|
||||
{
|
||||
check_type = prop_array[i].check_type & 0x03;
|
||||
|
|
|
@ -48,10 +48,10 @@ const FaultProp dis_fault_array[] =
|
|||
{kFaultCode_MSComm, 1, kFaultData_MScomm, kEep_MSCommAlarm1, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||
{kFaultCode_CmdTimeout, 1, kFaultData_CmdHeart, kEep_CmdTimeoutAlarm, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||
|
||||
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call},
|
||||
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call},
|
||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call},
|
||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call},
|
||||
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call}, //10
|
||||
{kFaultCode_LowTotalVolt, 3, kFaultData_TotalVolt, kEep_DisLTVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call}, //11
|
||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltHTAlarm1, kCheckType_LessThan, bms_dis_low_volt_ht_call}, //12
|
||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_DisLCVoltLTAlarm1, kCheckType_LessThan, bms_dis_low_volt_lt_call}, //13
|
||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_DisHCVoltAlarm1, kCheckType_MoreThan, NULL},
|
||||
{kFaultCode_HighCur, 3, kFaultData_Current, kEep_DisOverCurAlarm1, kCheckType_MoreThan, bms_dis_high_cur_call},
|
||||
{kFaultCode_HighCellTemp, 3, kFaultData_MaxTemp, kEep_DisHighTempAlarm1, kCheckType_MoreThan, NULL},
|
||||
|
@ -104,10 +104,10 @@ const FaultProp chg_fault_array[] =
|
|||
{kFaultCode_MSComm, 1, kFaultData_MScomm, kEep_MSCommAlarm1, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||
{kFaultCode_CmdTimeout, 1, kFaultData_CmdHeart, kEep_CmdTimeoutAlarm, kCheckType_MoreThan | FAULT_RELAY_BOTH_OFF, NULL},
|
||||
|
||||
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call},
|
||||
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call},
|
||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call},
|
||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call},
|
||||
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call}, //10
|
||||
{kFaultCode_HighTotalVolt, 3, kFaultData_TotalVolt, kEep_ChgHTVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call}, //11
|
||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltHTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_ht_call}, //12
|
||||
{kFaultCode_HighCellVolt, 3, kFaultData_MaxVolt, kEep_ChgHCVoltLTAlarm1, kCheckType_MoreThan, bms_chg_high_volt_lt_call}, //13
|
||||
{kFaultCode_LowCellVolt, 3, kFaultData_MinVolt, kEep_ChgLCVoltAlarm1, kCheckType_LessThan, NULL},
|
||||
{kFaultCode_HighCur, 3, kFaultData_Current, kEep_ChgOverCurAlarm1, kCheckType_MoreThan, bms_chg_high_cur_call},
|
||||
{kFaultCode_HighCellTemp, 3, kFaultData_MaxTemp, kEep_ChgHighTempAlarm1, kCheckType_MoreThan, NULL},
|
||||
|
|
|
@ -5,9 +5,27 @@
|
|||
#include "statistic_manager.h"
|
||||
#include "table_comm.h"
|
||||
#include "kit_time.h"
|
||||
#include "hv_adc_manager.h"
|
||||
|
||||
uint32_t statistic_data[kStatisticData_End];
|
||||
|
||||
typedef struct {
|
||||
uint8_t bmu_num;
|
||||
uint16_t min_voltage;
|
||||
uint16_t max_voltage;
|
||||
} voltage_range_t;
|
||||
|
||||
// 高压堆叠范围对照表(所有电压值已×10)
|
||||
const voltage_range_t voltage_ranges[] = {
|
||||
{1, 490, 550},
|
||||
{2, 980, 1100},
|
||||
{3, 1470, 1650},
|
||||
{4, 1960, 2200},
|
||||
{5, 2450, 2750},
|
||||
{6, 2940, 3300},
|
||||
{7, 3430, 3850},
|
||||
{8, 3920, 4400}
|
||||
};
|
||||
|
||||
uint32_t bms_get_statistic_data(StatisticData idx)
|
||||
{
|
||||
|
@ -220,10 +238,34 @@ static void bms_statistic_cell_temp(void)
|
|||
kit_time_dly_ms(2);
|
||||
}
|
||||
|
||||
void update_bmu_number()
|
||||
{
|
||||
if (bms_get_bmu_num() <= 8)
|
||||
{
|
||||
uint16_t acc_volt = bms_get_high_volt(kHvType_Bat);
|
||||
|
||||
for (uint8_t i = 0; i < sizeof(voltage_ranges)/sizeof(voltage_ranges[0]); i++)
|
||||
{
|
||||
if (acc_volt >= voltage_ranges[i].min_voltage && acc_volt <= voltage_ranges[i].max_voltage)
|
||||
{
|
||||
if (bms_get_bmu_num() != voltage_ranges[i].bmu_num)
|
||||
{
|
||||
bms_set_bmu_num(voltage_ranges[i].bmu_num);
|
||||
bms_set_bmu_volt_num(voltage_ranges[i].bmu_num);
|
||||
bms_set_bmu_temp_num(voltage_ranges[i].bmu_num);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void bms_poll_statistic(uint32_t base_time)
|
||||
{
|
||||
bms_statistic_cell_volt();
|
||||
bms_statistic_cell_temp();
|
||||
update_bmu_number();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -10,15 +10,15 @@
|
|||
<TargetName>stm32f407</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pArmCC>
|
||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pCCUsed>
|
||||
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F407ZGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
@ -1145,8 +1145,8 @@
|
|||
<TargetCommonOption>
|
||||
<Device>STM32F407VGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -127,11 +127,13 @@ uint16_t bcu_total_msg_fill(uint16_t start_addr, uint8_t reg_num, uint8_t *buf)
|
|||
//12 在线从机总数
|
||||
READ_FC03_F04_ITEM(12, bms_get_bmu_online_num());
|
||||
//13 电池总数
|
||||
READ_FC03_F04_ITEM(13, get_eeprom_data(kEep_CellNum, kEepromDataType_Full));
|
||||
//READ_FC03_F04_ITEM(13, get_eeprom_data(kEep_CellNum, kEepromDataType_Full));
|
||||
READ_FC03_F04_ITEM(13, bms_get_cell_num());
|
||||
//14 在线电池总数
|
||||
READ_FC03_F04_ITEM(14, bms_get_statistic_data(kStatisticData_OnlineCellNum));
|
||||
//15 温感总数
|
||||
READ_FC03_F04_ITEM(15, get_eeprom_data(kEep_TempNum, kEepromDataType_Full));
|
||||
//READ_FC03_F04_ITEM(15, get_eeprom_data(kEep_TempNum, kEepromDataType_Full));
|
||||
READ_FC03_F04_ITEM(15, bms_get_temp_num());
|
||||
//16 在线温感总数
|
||||
READ_FC03_F04_ITEM(16, bms_get_statistic_data(kStatisticData_OnlineTempNum));
|
||||
//17 最大允许放电电流
|
||||
|
|
|
@ -10,15 +10,15 @@
|
|||
<TargetName>stm32f407</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pArmCC>
|
||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pCCUsed>
|
||||
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F407ZGTx</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
|
@ -81,7 +81,7 @@
|
|||
<nStopB2X>0</nStopB2X>
|
||||
</BeforeMake>
|
||||
<AfterMake>
|
||||
<RunUserProg1>1</RunUserProg1>
|
||||
<RunUserProg1>0</RunUserProg1>
|
||||
<RunUserProg2>0</RunUserProg2>
|
||||
<UserProg1Name>fromelf --m32combined --output=BxE1C_BOOT.s19 .\Objects\BxE1C_BOOT.axf</UserProg1Name>
|
||||
<UserProg2Name></UserProg2Name>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,39 +1,45 @@
|
|||
[BREAKPOINTS]
|
||||
ForceImpTypeAny = 0
|
||||
ShowInfoWin = 1
|
||||
EnableFlashBP = 2
|
||||
BPDuringExecution = 0
|
||||
FForceImpTypeAny = 0
|
||||
ShowInfoWin = 1
|
||||
EnableFlashBP = 2
|
||||
BPDuringExecution = 0
|
||||
orceImpTypeAny = 0
|
||||
[CFI]
|
||||
CFISize = 0x00
|
||||
CFIAddr = 0x00
|
||||
CCFISize = 0x00
|
||||
CFIAddr = 0x00
|
||||
FISize = 0x00
|
||||
[CPU]
|
||||
MonModeVTableAddr = 0xFFFFFFFF
|
||||
MOverrideMemMap = 0
|
||||
AllowSimulation = 1
|
||||
ScriptFile=""
|
||||
onModeVTableAddr = 0xFFFFFFFF
|
||||
MonModeDebug = 0
|
||||
MaxNumAPs = 0
|
||||
LowPowerHandlingMode = 0
|
||||
OverrideMemMap = 0
|
||||
AllowSimulation = 1
|
||||
ScriptFile=""
|
||||
[FLASH]
|
||||
CacheExcludeSize = 0x00
|
||||
CacheExcludeAddr = 0x00
|
||||
MinNumBytesFlashDL = 0
|
||||
SkipProgOnCRCMatch = 1
|
||||
VerifyDownload = 1
|
||||
AllowCaching = 1
|
||||
EnableFlashDL = 2
|
||||
Override = 0
|
||||
Device="ARM7"
|
||||
CCacheExcludeSize = 0x00
|
||||
CacheExcludeAddr = 0x00
|
||||
MinNumBytesFlashDL = 0
|
||||
SkipProgOnCRCMatch = 1
|
||||
VerifyDownload = 1
|
||||
AllowCaching = 1
|
||||
EnableFlashDL = 2
|
||||
Override = 1
|
||||
Device="Unspecified"
|
||||
acheExcludeSize = 0x00
|
||||
[GENERAL]
|
||||
WorkRAMSize = 0x00
|
||||
WorkRAMAddr = 0x00
|
||||
RAMUsageLimit = 0x00
|
||||
WWorkRAMSize = 0x00
|
||||
WorkRAMAddr = 0x00
|
||||
RAMUsageLimit = 0x00
|
||||
orkRAMSize = 0x00
|
||||
[SWO]
|
||||
SWOLogFile=""
|
||||
SSWOLogFile=""
|
||||
WOLogFile=""
|
||||
[MEM]
|
||||
RdOverrideOrMask = 0x00
|
||||
RdOverrideAndMask = 0xFFFFFFFF
|
||||
RdOverrideAddr = 0xFFFFFFFF
|
||||
WrOverrideOrMask = 0x00
|
||||
WrOverrideAndMask = 0xFFFFFFFF
|
||||
WrOverrideAddr = 0xFFFFFFFF
|
||||
RRdOverrideOrMask = 0x00
|
||||
RdOverrideAndMask = 0xFFFFFFFF
|
||||
RdOverrideAddr = 0xFFFFFFFF
|
||||
WrOverrideOrMask = 0x00
|
||||
WrOverrideAndMask = 0xFFFFFFFF
|
||||
WrOverrideAddr = 0xFFFFFFFF
|
||||
dOverrideOrMask = 0x00
|
||||
|
|
Loading…
Reference in New Issue