|
@@ -11,7 +11,7 @@ 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(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint8_t SOC, uint16_t BusVoltage, uint8_t DesignVoltage, uint16_t UV_TH, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
{
|
|
|
static uint32_t uvTimeCnt = 0;
|
|
|
static uint32_t uvFaultTimeCnt = 0;
|
|
@@ -23,54 +23,95 @@ void MC_Protect_UnderVoltage_Process(uint16_t BusVoltage, uint8_t DesignVoltage,
|
|
|
case 24:
|
|
|
{
|
|
|
UV_Voltage = UV_TH * 7;//低压保护时,电芯电压为3100mV
|
|
|
- break;
|
|
|
+ break;
|
|
|
}
|
|
|
case 36:
|
|
|
{
|
|
|
UV_Voltage = UV_TH * 10;//低压保护时,电芯电压为3100mV
|
|
|
- break;
|
|
|
+ break;
|
|
|
}
|
|
|
case 48:
|
|
|
{
|
|
|
UV_Voltage = UV_TH * 13;//低压保护时,电芯电压为3100mV
|
|
|
- break;
|
|
|
+ break;
|
|
|
}
|
|
|
default:
|
|
|
{
|
|
|
- UV_Voltage = BusVoltage;
|
|
|
+ UV_Voltage = BusVoltage;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- if(p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage == 0)
|
|
|
+
|
|
|
+ if(IsBMS_ComOK == TRUE)//电池通讯正常,根据BMS的SOC作为低压保护
|
|
|
{
|
|
|
- //低压保护判断
|
|
|
- if(BusVoltage >= UV_Voltage)
|
|
|
+ if(p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage == 0)
|
|
|
{
|
|
|
- uvTimeCnt = HAL_GetTick();
|
|
|
+ //低压保护判断
|
|
|
+ if((SOC >= 1) && (BusVoltage >= UV_Voltage))
|
|
|
+ {
|
|
|
+ uvTimeCnt = HAL_GetTick();
|
|
|
+ }
|
|
|
+ if((HAL_GetTick() - uvTimeCnt) > 5000)
|
|
|
+ {
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = BusVoltage;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = (uint16_t)IsBMS_ComOK;
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
+ //存储故障次数
|
|
|
+ MC_RunLog1.UV_ProtectCnt++;
|
|
|
+ RunLogSaveIndex = 1;
|
|
|
+ }
|
|
|
+ uvFaultTimeCnt = HAL_GetTick();
|
|
|
}
|
|
|
- if((HAL_GetTick() - uvTimeCnt) > 5000)
|
|
|
+ else
|
|
|
{
|
|
|
- p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
|
|
|
- //记录故障日志
|
|
|
- MC_ErrorLogSaveInfo.NotesInfo1 = BusVoltage;
|
|
|
- ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
- IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
- //存储故障次数
|
|
|
- MC_RunLog1.UV_ProtectCnt++;
|
|
|
- RunLogSaveIndex = 1;
|
|
|
+ //低压保护恢复
|
|
|
+ if((SOC < 1) && (BusVoltage < (UV_Voltage + 1000)))
|
|
|
+ {
|
|
|
+ uvFaultTimeCnt = HAL_GetTick();
|
|
|
+ }
|
|
|
+ if((HAL_GetTick() - uvFaultTimeCnt) > 5000)
|
|
|
+ {
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 0;
|
|
|
+ }
|
|
|
}
|
|
|
- uvFaultTimeCnt = HAL_GetTick();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- //低压保护恢复
|
|
|
- if(BusVoltage < (UV_Voltage + 500))
|
|
|
+ if(p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage == 0)
|
|
|
{
|
|
|
+ //低压保护判断
|
|
|
+ if(BusVoltage >= UV_Voltage)
|
|
|
+ {
|
|
|
+ uvTimeCnt = HAL_GetTick();
|
|
|
+ }
|
|
|
+ if((HAL_GetTick() - uvTimeCnt) > 5000)
|
|
|
+ {
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = BusVoltage;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = (uint16_t)IsBMS_ComOK;
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
+ //存储故障次数
|
|
|
+ MC_RunLog1.UV_ProtectCnt++;
|
|
|
+ RunLogSaveIndex = 1;
|
|
|
+ }
|
|
|
uvFaultTimeCnt = HAL_GetTick();
|
|
|
- }
|
|
|
- if((HAL_GetTick() - uvFaultTimeCnt) > 5000)
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 0;
|
|
|
+ //低压保护恢复
|
|
|
+ if(BusVoltage < (UV_Voltage + 1000))
|
|
|
+ {
|
|
|
+ uvFaultTimeCnt = HAL_GetTick();
|
|
|
+ }
|
|
|
+ if((HAL_GetTick() - uvFaultTimeCnt) > 5000)
|
|
|
+ {
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 0;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -396,9 +437,8 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
|
|
|
void MC_Protect_Check_Process(void)
|
|
|
{
|
|
|
//低压保护检测
|
|
|
- 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),
|
|
|
+ MC_Protect_UnderVoltage_Process(IsComOK_BMS.IsOK_Flag, MC_RunInfo.SOC, ((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),
|
|
|
&MC_ErrorCode);
|
|
|
|
|
|
//过压保护检测
|