|
@@ -304,9 +304,48 @@ void MC_Protect_VoltageChange_Process(uint16_t Voltage, uint16_t Current, MC_Err
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//软件过流保护检测
|
|
|
+void MC_OverCurrent_SoftProtect_Process(uint16_t BusCurrent, uint16_t MaxCurrent, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
+{
|
|
|
+ static uint32_t Protect_TimeCnt = 0;
|
|
|
+ static uint32_t Fault_TimeCnt = 0;
|
|
|
+ uint16_t Current_Th;
|
|
|
+
|
|
|
+ Current_Th = (MaxCurrent * 3) >> 1;//1.5倍
|
|
|
+
|
|
|
+ if(p_MC_ErrorCode->ERROR_Bit.Protect_OverCurrent == 0)
|
|
|
+ {
|
|
|
+ if(BusCurrent < Current_Th)
|
|
|
+ {
|
|
|
+ Protect_TimeCnt = HAL_GetTick();
|
|
|
+ }
|
|
|
+ if((HAL_GetTick() - Protect_TimeCnt) > 5000)
|
|
|
+ {
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Protect_OverCurrent = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 2;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = Current_Th;
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
+ //存储故障次数
|
|
|
+ MC_RunLog1.OC_ProtectCnt++;
|
|
|
+ RunLogSaveIndex = 1;
|
|
|
+ Fault_TimeCnt = HAL_GetTick();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //过流保护恢复
|
|
|
+ if((HAL_GetTick() - Fault_TimeCnt) > 5000)
|
|
|
+ {
|
|
|
+ MC_ErrorCode.ERROR_Bit.Protect_OverCurrent = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/******************************全局函数定义******************************/
|
|
|
#define OC_CLEARFLAG_DELAYTIME 15 //过流标志间隔清零延时,单位ms
|
|
|
-#define OC_COUNTER_TH 100 //过流保护计数判断阈值
|
|
|
+#define OC_COUNTER_TH 1000 //过流保护计数判断阈值
|
|
|
//过流保护检测
|
|
|
/*
|
|
|
检测原理:
|
|
@@ -368,6 +407,7 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
|
|
|
p_MC_ErrorCode->ERROR_Bit.Protect_OverCurrent = 1;
|
|
|
ocFaultTimeCnt = HAL_GetTick();
|
|
|
//记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 1;
|
|
|
ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
//存储故障次数
|
|
@@ -411,4 +451,6 @@ void MC_Protect_Check_Process(void)
|
|
|
//电压波动异常保护检测
|
|
|
MC_Protect_VoltageChange_Process(MC_RunInfo.BusVoltage, MC_RunInfo.BusCurrent, &MC_ErrorCode);
|
|
|
|
|
|
+ //软件过流保护检测
|
|
|
+ MC_OverCurrent_SoftProtect_Process(MC_RunInfo.BusCurrent, MC_ConfigParam1.CurrentLimit * 1000, &MC_ErrorCode);
|
|
|
}
|