|
@@ -255,7 +255,8 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
|
|
|
static uint32_t NTC_Check_PeriodTimeCnt = 0; //NTC检测,母线电流采集周期
|
|
|
static uint16_t NTC_Check_Count = 0;
|
|
|
static uint32_t BusCurrentSum = 0;
|
|
|
- uint8_t BusCurrentAvg = 0;
|
|
|
+ uint16_t BusCurrentAvg1 = 0;
|
|
|
+ uint16_t BusCurrentAvg2 = 0;
|
|
|
static uint8_t T_PCB_Old = 0;
|
|
|
static uint8_t T_Coil_Old = 0;
|
|
|
|
|
@@ -276,13 +277,14 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
|
|
|
if(p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor == 0)
|
|
|
{
|
|
|
//PCB上NTC短路或开路检测,判断AD值是否为异常值
|
|
|
- if((T_PCB_Result < 5) || (T_PCB_Result > 180)) //5(-35度):AD为4000,180(140度):AD为80
|
|
|
+ if((T_PCB_Result < 5) || (T_PCB_Result > 190)) //5(-35度):AD为4000,190(150度):AD为60
|
|
|
{
|
|
|
if((HAL_GetTick() - TrigTimeCnt_PCB) > 500)
|
|
|
{
|
|
|
p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
|
|
|
//记录故障日志
|
|
|
MC_ErrorLogSaveInfo.NotesInfo1 = 1;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = T_PCB_Result;
|
|
|
ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
//存储故障次数
|
|
@@ -298,13 +300,14 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
|
|
|
}
|
|
|
|
|
|
//NTC短路或开路检测,判断AD值是否为异常值
|
|
|
- if((T_Coil_Result < 5) || (T_Coil_Result > 180)) //5(-35度):AD为4000,180(140度):AD为80
|
|
|
+ if((T_Coil_Result < 5) || (T_Coil_Result > 190)) //5(-35度):AD为4000,190(150度):AD为60
|
|
|
{
|
|
|
if((HAL_GetTick() - TrigTimeCnt_Coil) > 500)
|
|
|
{
|
|
|
p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
|
|
|
//记录故障日志
|
|
|
MC_ErrorLogSaveInfo.NotesInfo1 = 2;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = T_Coil_Result;
|
|
|
ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
//存储故障次数
|
|
@@ -319,40 +322,45 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
|
|
|
TrigTimeCnt_Coil = HAL_GetTick();
|
|
|
}
|
|
|
|
|
|
- //NTC为固定值的检测,检测3min内母线电流平均值 > 10A 时的前后温差
|
|
|
+ //NTC为固定值的检测,分别计算2个6.8min内母线电流平均值,当两段母线电流平均值不相等时判断NTC是否发生变化
|
|
|
if((HAL_GetTick() - NTC_Check_PeriodTimeCnt) >= 100)
|
|
|
{
|
|
|
NTC_Check_PeriodTimeCnt = HAL_GetTick();
|
|
|
- BusCurrentSum += (uint16_t)(MC_RunInfo.BusCurrent >> 7);//按照mA / 128 判断,约0.1A
|
|
|
+ BusCurrentSum += (uint16_t)((MC_RunInfo.BusCurrent > 20000) ? 156 : MC_RunInfo.BusCurrent >> 7);//按照mA / 128 判断,约0.1A,限幅20A
|
|
|
NTC_Check_Count++;
|
|
|
- //采集100 * 8192 = 819.2s内母线电流平均值
|
|
|
- if(NTC_Check_Count >= 8192)
|
|
|
+ if(NTC_Check_Count == 4096) //计算第1个6.8min平均值
|
|
|
+ {
|
|
|
+ BusCurrentAvg1 = BusCurrentSum >> 12; //avg1 = (x1 + x2 + ... + x4096) / 4096
|
|
|
+ }
|
|
|
+ else if(NTC_Check_Count >= 8192) //计算第2个6.8min平均值
|
|
|
{
|
|
|
NTC_Check_Count = 0;
|
|
|
- BusCurrentAvg = BusCurrentSum >> 13;//8192个值取均值
|
|
|
+ BusCurrentAvg2 = (BusCurrentSum >> 12) - BusCurrentAvg1; //avg2 = (x4097 + x4098 + ... +x8192) / 4096 = 2 * (x1 + x2 + ... + x8192) / 8192 - avg1
|
|
|
BusCurrentSum = 0;
|
|
|
- //平均电流超过10A,判断是否有温升
|
|
|
- if(BusCurrentAvg > 79) // 79 * 1.28 = 101
|
|
|
+ //总平均电流超过10A时,当两段平均电流变化超过3A,判断温度是否发生变化
|
|
|
+ if(((BusCurrentAvg1 + BusCurrentAvg2) >> 1) > 79) //79 * 128 = 10.1A
|
|
|
{
|
|
|
- if((abs(T_PCB_Result - T_PCB_Old) < 1) || //PCB 温升低于2度
|
|
|
- (abs(T_Coil_Result - T_Coil_Old) < 1)) //绕组温升低于2度
|
|
|
+ if(abs(BusCurrentAvg1 - BusCurrentAvg2) >= 25) //25 * 128 = 3.2A
|
|
|
{
|
|
|
- p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
|
|
|
- //记录故障日志
|
|
|
- MC_ErrorLogSaveInfo.NotesInfo1 = 3;
|
|
|
- MC_ErrorLogSaveInfo.NotesInfo2 = BusCurrentAvg;
|
|
|
- MC_ErrorLogSaveInfo.NotesInfo3 = (uint16_t)((abs(T_PCB_Result - T_PCB_Old) << 8) + (abs(T_Coil_Result - T_Coil_Old) < 2));
|
|
|
- ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
- IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
- //存储故障次数
|
|
|
- MC_RunLog1.NTC_FaultCnt++;
|
|
|
- RunLogSaveIndex = 1;
|
|
|
-
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- T_PCB_Old = T_PCB_Result;
|
|
|
- T_Coil_Old = T_Coil_Result;
|
|
|
+ if((abs(T_PCB_Result - T_PCB_Old) < 1) || //PCB 温升低于1度
|
|
|
+ (abs(T_Coil_Result - T_Coil_Old) < 1)) //绕组温升低于1度
|
|
|
+ {
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 3;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = (BusCurrentAvg1 << 8) + (BusCurrentAvg2);
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo3 = (uint16_t)((abs(T_PCB_Result - T_PCB_Old) << 8) + (abs(T_Coil_Result - T_Coil_Old) < 2));
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
+ //存储故障次数
|
|
|
+ MC_RunLog1.NTC_FaultCnt++;
|
|
|
+ RunLogSaveIndex = 1;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ T_PCB_Old = T_PCB_Result;
|
|
|
+ T_Coil_Old = T_Coil_Result;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1008,7 +1016,7 @@ void MC_Fault_Check_Process(void)
|
|
|
MC_Fault_MOS_Process(ADC_3ShuntCurrent_RMSValue, &MC_ErrorCode);
|
|
|
|
|
|
//TE故障检测
|
|
|
- #if 1
|
|
|
+ #if 0
|
|
|
MC_Fault_TE_Process(&MC_TE_SensorStatus, IsComOK_TE.IsOK_Flag, &MC_ErrorCode);
|
|
|
#endif
|
|
|
|