|
@@ -80,6 +80,16 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+//力矩传感器故障检测
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ uint32_t TrigTimeCnt_1;
|
|
|
+ uint32_t TrigTimeCnt_2;
|
|
|
+ uint16_t TorqueArray[25];
|
|
|
+ uint16_t FaultType;
|
|
|
+ uint32_t DiffStdResult;
|
|
|
+}ToruqeSensorFaultCheck_Struct_t;
|
|
|
+
|
|
|
//力矩传感器故障检测
|
|
|
void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt, MC_CadenceResult_Struct_t CadenceData, MC_AssistRunMode_Struct_t AstMode, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
{
|
|
@@ -160,6 +170,7 @@ void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
//缺相检测
|
|
|
void MC_Fault_PhaseLine_Process(FlagStatus Foc_Flag, uint16_t BusCurrent, uint16_t MotorSpeed, ADC_3ShuntCurrent_Struct_t Phase_Current, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
{
|
|
@@ -712,7 +723,7 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
|
|
|
if((IqFdbFlt >> 10) > 200) //250时,相电流为9.6A;330时,相电流为12.4A;350时,相电流为13.6A。得到,相电流 = 0.038 * IqFdb
|
|
|
{
|
|
|
- if(((BusCurrent_Flt >> 5) - uw_current_offset) < 50) //50对应的母线电流约1.2A, DATA / 2048 * 50A
|
|
|
+ if(((BusCurrent_Flt >> 5) - uw_current_offset) < 25) //25对应的母线电流约0.6A, DATA / 2048 * 50A
|
|
|
{
|
|
|
CurrentFaultCount++;
|
|
|
if(CurrentFaultCount > 10)
|
|
@@ -793,6 +804,54 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+//机械故障
|
|
|
+void MC_Fault_Machine_Process(uint16_t MotorSpeed, uint16_t CadenceSpeed, ADC_SensorData_Struct_t SensorData, uint16_t speedratio, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
+{
|
|
|
+ static uint32_t TimeCount_ClutchFault=0;
|
|
|
+ static uint16_t ClutchFaultCount=0;
|
|
|
+
|
|
|
+ if( p_MC_ErrorCode->ERROR_Bit.Fault_Machine == 0) //单向器没有故障时开始检测,有故障后故障一直存在,故障检测不再执行
|
|
|
+ {
|
|
|
+ if( (HAL_GetTick()-TimeCount_ClutchFault)>=20 ) //20ms执行一次故障判断
|
|
|
+ {
|
|
|
+ TimeCount_ClutchFault = HAL_GetTick();
|
|
|
+ if( (MotorSpeed > 500)&&(CadenceSpeed >= 15)&&(SensorData.TorqueSensor > 200)&&(SensorData.GasSensor < 50) )
|
|
|
+ {
|
|
|
+ if( speedratio > 1500 )
|
|
|
+ {
|
|
|
+ ClutchFaultCount++;
|
|
|
+ if( ClutchFaultCount>= 50) //速比连续出错50次判断为故障,时间将近1s
|
|
|
+ {
|
|
|
+ ClutchFaultCount=0;
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Fault_Machine = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 1; //单向器打滑故障
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = SensorData.TorqueSensor;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo3 = SensorData.GasSensor;
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
+ //存储故障次数
|
|
|
+ MC_RunLog1.MachineFaultCnt++;
|
|
|
+ RunLogSaveIndex = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ClutchFaultCount=0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ClutchFaultCount=0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//硬件识别故障
|
|
|
void MC_Fault_Hardware_Identify(TrueOrFalse_Flag_Struct_t TEComOKFlag, uint16_t SyncClockFreqScan, uint16_t Hardware_AD, TrueOrFalse_Flag_Struct_t *inverterExistFlag, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
{
|
|
@@ -1088,4 +1147,10 @@ void MC_Fault_Check_Process(void)
|
|
|
|
|
|
//电路故障检测
|
|
|
MC_Fault_Circuit_Process(&MC_ErrorCode);
|
|
|
+
|
|
|
+ //单向器打滑故障检测
|
|
|
+ MC_Fault_Machine_Process(MC_RunInfo.MotorSpeed, MC_CadenceResult.Cadence_Data, ADC_SensorData, SpeedRatio, &MC_ErrorCode);
|
|
|
+
|
|
|
+ //硬件识别故障
|
|
|
+ MC_Fault_Hardware_Identify(IsComOK_TE.IsOK_Flag, MC_TE_SyncClockFreqScan, ADC1_Result_Filt[ADC1_RANK_HARDWARE_VER], &MC_HallSensorData.InverterExistFlag, &MC_ErrorCode);
|
|
|
}
|