|
@@ -11,12 +11,54 @@ FlagStatus MC_Protect_OverCurrentTrig_Flag = RESET;
|
|
|
|
|
|
/******************************局部函数定义******************************/
|
|
/******************************局部函数定义******************************/
|
|
//低压保护检测
|
|
//低压保护检测
|
|
-void MC_Protect_UnderVoltage_Process(uint16_t BusVoltage, uint8_t DesignVoltage, uint16_t UV_TH, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
|
|
|
+void MC_Protect_UnderVoltage_Process(uint16_t BusVoltage, uint8_t DesignVoltage, uint16_t UV_TH, TrueOrFalse_Flag_Struct_t BMS_Com_OK_Flag, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
{
|
|
{
|
|
static uint32_t uvTimeCnt = 0;
|
|
static uint32_t uvTimeCnt = 0;
|
|
static uint32_t uvFaultTimeCnt = 0;
|
|
static uint32_t uvFaultTimeCnt = 0;
|
|
uint16_t UV_Voltage = 0;
|
|
uint16_t UV_Voltage = 0;
|
|
|
|
|
|
|
|
+ //电池通讯正常时,根据剩余容量提示低电量警告,警告延时3s
|
|
|
|
+ if(BMS_Com_OK_Flag == TRUE)
|
|
|
|
+ {
|
|
|
|
+ static uint32_t uvAlarmTimeCnt = 0;
|
|
|
|
+ static FlagStatus AlarmFlag = RESET;
|
|
|
|
+
|
|
|
|
+ if(BMS_RunInfo.Status.Status_Bit.Charge == 1)//充电状态,清除标志
|
|
|
|
+ {
|
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 0;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage == 0)
|
|
|
|
+ {
|
|
|
|
+ if(AlarmFlag == RESET) // 只出现一次警告,3s后自动消失
|
|
|
|
+ {
|
|
|
|
+ if(BMS_RunInfo.SOC < 5)
|
|
|
|
+ {
|
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
|
|
|
|
+ //记录故障日志
|
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 1;
|
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = BMS_RunInfo.SOC;
|
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo3 = BMS_RunInfo.Voltage;
|
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
|
+ //存储故障次数
|
|
|
|
+ MC_RunLog1.UV_ProtectCnt++;
|
|
|
|
+ RunLogSaveIndex = 1;
|
|
|
|
+ uvAlarmTimeCnt = HAL_GetTick();
|
|
|
|
+ AlarmFlag = SET;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ if((HAL_GetTick() - uvAlarmTimeCnt) > 3000)
|
|
|
|
+ {
|
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
//根据额定电压更新保护阈值
|
|
//根据额定电压更新保护阈值
|
|
switch(DesignVoltage)
|
|
switch(DesignVoltage)
|
|
{
|
|
{
|
|
@@ -52,6 +94,7 @@ void MC_Protect_UnderVoltage_Process(uint16_t BusVoltage, uint8_t DesignVoltage,
|
|
{
|
|
{
|
|
p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
|
|
p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
|
|
//记录故障日志
|
|
//记录故障日志
|
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 2;
|
|
ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
//存储故障次数
|
|
//存储故障次数
|
|
@@ -382,7 +425,11 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
|
|
void MC_Protect_Check_Process(void)
|
|
void MC_Protect_Check_Process(void)
|
|
{
|
|
{
|
|
//低压保护检测
|
|
//低压保护检测
|
|
- MC_Protect_UnderVoltage_Process(MC_RunInfo.BusVoltage, MC_MotorParam.Rate_Voltage, ((MC_ConfigParam1.UV_Protect_TH == 0) ? 3100 : MC_ConfigParam1.UV_Protect_TH), &MC_ErrorCode);
|
|
|
|
|
|
+ MC_Protect_UnderVoltage_Process(((IsComOK_BMS.IsOK_Flag == TRUE) ? BMS_RunInfo.Voltage : MC_RunInfo.BusVoltage),
|
|
|
|
+ MC_MotorParam.Rate_Voltage,
|
|
|
|
+ ((MC_ConfigParam1.UV_Protect_TH == 0) ? 3100 : MC_ConfigParam1.UV_Protect_TH),
|
|
|
|
+ IsComOK_BMS.IsOK_Flag,
|
|
|
|
+ &MC_ErrorCode);
|
|
|
|
|
|
//过压保护检测
|
|
//过压保护检测
|
|
MC_Protect_OverVoltage_Process(MC_RunInfo.BusVoltage, MC_MotorParam.Rate_Voltage, &MC_ErrorCode);
|
|
MC_Protect_OverVoltage_Process(MC_RunInfo.BusVoltage, MC_MotorParam.Rate_Voltage, &MC_ErrorCode);
|