|
@@ -105,9 +105,9 @@ void MC_Fault_TorqueSensor_Process_Single(uint16_t ADC_Data, uint8_t Num, Toruqe
|
|
|
|
|
|
p_SensorCheck->DiffStdResult = GetStandardDeviation(p_SensorCheck->TorqueArray, sizeof(p_SensorCheck->TorqueArray) / 2);
|
|
|
//标准差较小
|
|
|
- if(p_SensorCheck->DiffStdResult < 12)
|
|
|
+ if(p_SensorCheck->DiffStdResult < 10)
|
|
|
{
|
|
|
- DelayTime = 60000 / Cadence; //根据踏频计算踩踏1圈的时间,要考虑空踩情况
|
|
|
+ DelayTime = 120000 / Cadence; //根据踏频计算踩踏2圈的时间,要考虑空踩情况
|
|
|
DelayTime = (DelayTime < 250) ? 250 : DelayTime;
|
|
|
if((HAL_GetTick() - p_SensorCheck->TrigTimeCnt_1) > (DelayTime * 2))
|
|
|
{
|
|
@@ -188,7 +188,7 @@ void MC_Fault_TorqueSensor_Process(uint16_t* SensorData,
|
|
|
//综合判断
|
|
|
if(p_MC_ErrorCode->ERROR_Bit.Fault_TorqueSensor == 0)
|
|
|
{
|
|
|
- if((SensorFaultStatus->FaultBit.Sensor1 + SensorFaultStatus->FaultBit.Sensor2 + SensorFaultStatus->FaultBit.Sensor3) > 1)//超过2个传感器异常
|
|
|
+ if((SensorFaultStatus->FaultBit.Sensor1 + SensorFaultStatus->FaultBit.Sensor2 + SensorFaultStatus->FaultBit.Sensor3) > 2)//超过3个传感器异常
|
|
|
{
|
|
|
p_MC_ErrorCode->ERROR_Bit.Fault_TorqueSensor = 1;
|
|
|
//记录故障日志
|
|
@@ -842,6 +842,126 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+//机械故障
|
|
|
+void MC_Fault_Machine_Process(uint16_t MotorSpeed, uint16_t CadenceSpeed, uint16_t TorqueApp, 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)&&(TorqueApp > 200) )
|
|
|
+ {
|
|
|
+ if( speedratio > 1500 )
|
|
|
+ {
|
|
|
+ ClutchFaultCount++;
|
|
|
+ if( ClutchFaultCount>= 50) //速比连续出错50次判断为故障,时间将近1s
|
|
|
+ {
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Fault_Machine = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 1; //单向器打滑故障
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = speedratio;
|
|
|
+ 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)
|
|
|
+{
|
|
|
+ static uint32_t TimeCount_HardwareFault=0;
|
|
|
+ static uint8_t HardwareFaultCount=0, HardwareFaultCount2=0;
|
|
|
+
|
|
|
+ if( HAL_GetTick() < 5000) return;
|
|
|
+
|
|
|
+ if( p_MC_ErrorCode->ERROR_Bit.Fault_Circuit == 0) //单向器没有故障时开始检测,有故障后故障一直存在,故障检测不再执行
|
|
|
+ {
|
|
|
+ if( (HAL_GetTick()-TimeCount_HardwareFault)>=20 ) //20ms执行一次故障判断
|
|
|
+ {
|
|
|
+ TimeCount_HardwareFault = HAL_GetTick();
|
|
|
+ if(*inverterExistFlag == TRUE) //电路板有反相器和TE
|
|
|
+ {
|
|
|
+ if( ((TEComOKFlag == TRUE)||(SyncClockFreqScan>200))&&((Hardware_AD>1986)&&(Hardware_AD<2110)) )
|
|
|
+ {
|
|
|
+ HardwareFaultCount=0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ HardwareFaultCount++;
|
|
|
+ if( HardwareFaultCount>= 50)
|
|
|
+ {
|
|
|
+ HardwareFaultCount = 0;
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 6;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = SyncClockFreqScan;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo3 = Hardware_AD;
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
+ //存储故障次数
|
|
|
+ MC_RunLog2.Circuit_FaultCnt++;
|
|
|
+ RunLogSaveIndex = 2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if( (TEComOKFlag == TRUE)||(SyncClockFreqScan>200) )
|
|
|
+ {
|
|
|
+ *inverterExistFlag = TRUE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if( (Hardware_AD>3723)||(Hardware_AD<372) )
|
|
|
+ {
|
|
|
+ HardwareFaultCount2++;
|
|
|
+ if( HardwareFaultCount2>= 50)
|
|
|
+ {
|
|
|
+ HardwareFaultCount2 = 0;
|
|
|
+ p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
|
|
|
+ //记录故障日志
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 6;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo2 = SyncClockFreqScan;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo3 = Hardware_AD;
|
|
|
+ ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
+ IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
+ //存储故障次数
|
|
|
+ MC_RunLog2.Circuit_FaultCnt++;
|
|
|
+ RunLogSaveIndex = 2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ HardwareFaultCount2 = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/***********************全局函数定义***********************/
|
|
|
//霍尔传感器故障检测
|
|
|
void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
@@ -1057,10 +1177,16 @@ 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
|
|
|
|
|
|
//电路故障检测
|
|
|
MC_Fault_Circuit_Process(&MC_ErrorCode);
|
|
|
+
|
|
|
+ //单向器打滑故障检测
|
|
|
+ MC_Fault_Machine_Process(MC_RunInfo.MotorSpeed, MC_CadenceResult.Cadence_Data, ADC_SensorData.TorqueSensor, 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);
|
|
|
}
|