Procházet zdrojové kódy

V2.0.2_20200413 Dail
1、对故障历史次数的记录,调整为在main.c中,MC_CalParam.Foc_Flag == RESET的时候执行,相关函数为RunLogSave_Process(uint8_t* RunLogIndex);
2、调整温度传感器故障检测的判断值,降低误报概率;
3、过流检测修复BUG,增加ocTimeCnt = HAL_GetTick();
4、版本号:V2r0r2_20200413

dail.zhou před 5 roky
rodič
revize
94bacbeebe

+ 2 - 1
Core/Src/main.c

@@ -281,7 +281,8 @@ int main(void)
 			//¹ÊÕÏÈÕÖ¾´æ´¢¸üд¦Àí
 			if(MC_CalParam.Foc_Flag == RESET)
 			{
-			  RunlogSave_Process(&MC_ErrorLogSaveInfo, &IsErrorLogSaveInfoUpdateFlag);
+			  ErrorLogSave_Process(&MC_ErrorLogSaveInfo, &IsErrorLogSaveInfoUpdateFlag);
+				RunLogSave_Process(&RunLogSaveIndex);
 			}
 			
 			#if 1

binární
MDK-ARM/bin/QD007A_CTL_APP.bin


binární
MDK-ARM/bin/QD007A_CTL_APP_CRC.bin


+ 1 - 0
User/Inc/eeprom_24c02.h

@@ -43,5 +43,6 @@ void EEPROM_24C02_ClearData(I2C_Handle_Struct_t* I2C_Handle, uint8_t AddrBegin,
 int8_t SavePowerOffBakData(I2C_Handle_Struct_t* I2C_Handle, TrueOrFalse_Flag_Struct_t IsSaveFlag);//µôµçÊý¾Ý×ªÒÆµ½24C02
 void EEPROM_24C02_ParamReset(I2C_Handle_Struct_t* I2C_Handle);
 void EEPROM_24C02_LogReset(I2C_Handle_Struct_t* I2C_Handle);
+int8_t RunLogSave_Process(uint8_t* RunLogIndex);
 
 #endif

+ 2 - 2
User/Inc/log_save.h

@@ -25,7 +25,7 @@ typedef struct
 extern MC_ErrorLogSaveInfo_Struct_t MC_ErrorLogSaveInfo;       //故障发生时刻日志信息
 extern TrueOrFalse_Flag_Struct_t IsErrorLogSaveInfoUpdateFlag; //故障日志更新标志
 
-extern void RunLogSave_Update(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo);
-extern void RunlogSave_Process(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo, TrueOrFalse_Flag_Struct_t* IsUpdate);
+extern void ErrorLogSave_Update(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo);
+extern void ErrorLogSave_Process(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo, TrueOrFalse_Flag_Struct_t* IsUpdate);
 
 #endif

+ 0 - 1
User/Inc/remain_distance.h

@@ -47,7 +47,6 @@ typedef struct
 	uint8_t SOC;
 }Battery_Info_t;
 
-extern MC_AvgPower_Struct_t MC_AvgPower;
 extern Remain_Dis_t RemainDis;
 
 extern void RD_RemainDis_Init(uint16_t uwWheelLength, uint16_t BusVoltage, uint8_t DesignVol);

+ 1 - 0
User/Inc/var.h

@@ -429,6 +429,7 @@ extern MC_TorqueCorrectParam_Struct_t MC_TorqueCorrectParam;
 extern MC_MotorParam_Struct_t MC_MotorParam;
 extern MC_RunLog1_Struct_t MC_RunLog1;
 extern MC_RunLog2_Struct_t MC_RunLog2;
+extern uint8_t RunLogSaveIndex;
 extern uint8_t Secret_Key[8];
 extern MC_MacInfo_Struct_t MC_MacInfo;
 extern uint8_t UserString1[16];

+ 16 - 0
User/Src/eeprom_24c02.c

@@ -444,3 +444,19 @@ int8_t SavePowerOffBakData(I2C_Handle_Struct_t* I2C_Handle, TrueOrFalse_Flag_Str
 	
 	return 0;
 }
+
+//´æ´¢ÀúÊ·Êý¾Ý
+int8_t RunLogSave_Process(uint8_t* RunLogIndex)
+{
+  if(*RunLogIndex == 1)
+	{
+	  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+		*RunLogIndex = 0;
+	}
+	else if(*RunLogIndex == 2)
+	{
+	  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+		*RunLogIndex = 0;
+	}
+	return 0;
+}

+ 61 - 61
User/Src/fault_check.c

@@ -37,11 +37,11 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
 				  p_MC_ErrorCode->ERROR_Bit.Fault_SpeedSensor = 1;
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 1;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog1.SPS_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+					RunLogSaveIndex = 1;
 							
 					return;
 				}
@@ -63,11 +63,11 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
 					p_MC_ErrorCode->ERROR_Bit.Fault_SpeedSensor = 1;
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 2;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog1.SPS_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+					RunLogSaveIndex = 1;
 					
 					return;
 				}
@@ -121,11 +121,11 @@ void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt,
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 1;
 					MC_ErrorLogSaveInfo.NotesInfo2 = (uint16_t)(DiffSqrtResult);
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;	
 					//存储故障次数
 					MC_RunLog1.TQS_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+					RunLogSaveIndex = 1;
 					
 					return;
 				}
@@ -143,11 +143,11 @@ void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt,
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 2;
 					MC_ErrorLogSaveInfo.NotesInfo2 = ADC_Data;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog1.TQS_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+					RunLogSaveIndex = 1;
 					
 					return;
 				}
@@ -180,11 +180,11 @@ void MC_Fault_PhaseLine_Process(FlagStatus Foc_Flag, uint16_t BusCurrent, uint16
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 1;
 					MC_ErrorLogSaveInfo.NotesInfo2 = abs(Phase_Current.uw_phase_a);
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog1.PhaseLine_FaultCnt++;
-			  	SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);	
+			  	RunLogSaveIndex = 1;
 					
 					return;
 				}
@@ -202,11 +202,11 @@ void MC_Fault_PhaseLine_Process(FlagStatus Foc_Flag, uint16_t BusCurrent, uint16
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 2;
 					MC_ErrorLogSaveInfo.NotesInfo2 = abs(Phase_Current.uw_phase_b);
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog1.PhaseLine_FaultCnt++;
-			  	SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);				
+			  	RunLogSaveIndex = 1;		
 					
 					return;
 				}
@@ -224,11 +224,11 @@ void MC_Fault_PhaseLine_Process(FlagStatus Foc_Flag, uint16_t BusCurrent, uint16
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 3;
 					MC_ErrorLogSaveInfo.NotesInfo2 = abs(Phase_Current.uw_phase_c);
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog1.PhaseLine_FaultCnt++;
-			  	SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+			  	RunLogSaveIndex = 1;
 					
 					return;
 				}
@@ -276,18 +276,18 @@ 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 < 10) || (T_PCB_Result > 180))           //10(-30度):AD为3940,180(140度):AD为80
+	  if((T_PCB_Result < 5) || (T_PCB_Result > 180))           //5(-35度):AD为4000,180(140度):AD为80
 		{
-			if((HAL_GetTick() - TrigTimeCnt_PCB) > 200)
+			if((HAL_GetTick() - TrigTimeCnt_PCB) > 500)
 			{
 				p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 1;
-				RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
 				MC_RunLog1.NTC_FaultCnt++;
-			  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);			
+			  RunLogSaveIndex = 1;	
 				
 				return;
 			}
@@ -298,18 +298,18 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
 		}
 		
 	  //NTC短路或开路检测,判断AD值是否为异常值
-		if((T_Coil_Result < 10) || (T_Coil_Result > 180))    //10:AD为3940,180:AD为80
+		if((T_Coil_Result < 5) || (T_Coil_Result > 180))    //5(-35度):AD为4000,180(140度):AD为80
 		{
-			if((HAL_GetTick() - TrigTimeCnt_Coil) > 200)
+			if((HAL_GetTick() - TrigTimeCnt_Coil) > 500)
 			{
 				p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 2;
-				RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
 				MC_RunLog1.NTC_FaultCnt++;
-			  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+			  RunLogSaveIndex = 1;
 				
 				return;
 			}
@@ -325,11 +325,11 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
 		  NTC_Check_PeriodTimeCnt = HAL_GetTick();
 			BusCurrentSum += MC_RunInfo.BusCurrent >> 7;//按照mA / 128 判断,约0.1A
 			NTC_Check_Count++;
-			//采集100 * 2048 = 204.8s内母线电流平均值
-			if(NTC_Check_Count >= 2048)
+			//采集100 * 8192 = 819.2s内母线电流平均值
+			if(NTC_Check_Count >= 8192)
 			{
 			  NTC_Check_Count = 0;
-				BusCurrentAvg = BusCurrentSum >> 11;
+				BusCurrentAvg = BusCurrentSum >> 13;//8192个值取均值
 				BusCurrentSum = 0;
 				//平均电流超过10A,判断是否有温升
 				if(BusCurrentAvg > 79) // 79  * 1.28 = 101
@@ -342,11 +342,11 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
 				  	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));
-						RunLogSave_Update(&MC_ErrorLogSaveInfo);
+						ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				  	IsErrorLogSaveInfoUpdateFlag = TRUE;
 						//存储故障次数
 						MC_RunLog1.NTC_FaultCnt++;
-			      SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);    
+			      RunLogSaveIndex = 1;    
 						
 						return;
 					}
@@ -394,11 +394,11 @@ void MC_Fault_MOS_Process(ADC_3ShuntCurrent_Struct_t ShuntCurrent, MC_ErrorCode_
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 1;
 				MC_ErrorLogSaveInfo.NotesInfo2 = abs(ShuntCurrent.uw_phase_a);
-				RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
 				MC_RunLog2.MOS_ShortCircuit_FaultCnt++;
-				SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+				RunLogSaveIndex = 2;
 				
 				return;
 			}
@@ -416,11 +416,11 @@ void MC_Fault_MOS_Process(ADC_3ShuntCurrent_Struct_t ShuntCurrent, MC_ErrorCode_
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 2;
 				MC_ErrorLogSaveInfo.NotesInfo2 = abs(ShuntCurrent.uw_phase_b);
-				RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
 				MC_RunLog2.MOS_ShortCircuit_FaultCnt++;
-				SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+				RunLogSaveIndex = 2;
 				
 				return;
 			}
@@ -438,11 +438,11 @@ void MC_Fault_MOS_Process(ADC_3ShuntCurrent_Struct_t ShuntCurrent, MC_ErrorCode_
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 3;
 				MC_ErrorLogSaveInfo.NotesInfo2 = abs(ShuntCurrent.uw_phase_c);
-				RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
 				MC_RunLog2.MOS_ShortCircuit_FaultCnt++;
-				SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+				RunLogSaveIndex = 2;
 				
 				return;
 			}
@@ -478,11 +478,11 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, True
 		{
 			//记录故障日志
 			MC_ErrorLogSaveInfo.NotesInfo1 = 1;
-			RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			IsErrorLogSaveInfoUpdateFlag = TRUE;
 			//存储故障次数
 			MC_RunLog2.TE_MCU_FaultCnt++;
-		  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+		  RunLogSaveIndex = 2;
 			
 			SaveFlag1 = SET;
 			Fault_TE_MCU_Com_Flag = SET;
@@ -511,11 +511,11 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, True
 				  MC_ErrorLogSaveInfo.NotesInfo1 = 2;
 					MC_ErrorLogSaveInfo.NotesInfo2 = p_MC_TE_SensorStatus->TE_ErrorCode.Code;
 					MC_ErrorLogSaveInfo.NotesInfo3 = p_MC_TE_SensorStatus->MCU_Voltage;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				  IsErrorLogSaveInfoUpdateFlag = TRUE;	
 					//存储故障次数
 					MC_RunLog2.TE_Circuit_FaultCnt++;
-				  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+				  RunLogSaveIndex = 2;
           
 					SaveFlag2 = SET;				
 				}				
@@ -543,11 +543,11 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, True
 					//记录故障日志
 			  	MC_ErrorLogSaveInfo.NotesInfo1 = 3;
 					MC_ErrorLogSaveInfo.NotesInfo2 = p_MC_TE_SensorStatus->TE_ErrorCode.Code;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			  	IsErrorLogSaveInfoUpdateFlag = TRUE;	
 					//存储故障次数
 					MC_RunLog2.MCU_FaultCnt++;
-				  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+				  RunLogSaveIndex = 2;
           
 					SaveFlag3 = SET;			
 				}
@@ -578,11 +578,11 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, True
 			  	MC_ErrorLogSaveInfo.NotesInfo1 = 4;
 					MC_ErrorLogSaveInfo.NotesInfo2 = p_MC_TE_SensorStatus->TE_ErrorCode.Code;
 					MC_ErrorLogSaveInfo.NotesInfo3 = MC_TE_SyncClockFreqScan;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				  IsErrorLogSaveInfoUpdateFlag = TRUE;	
 					//存储故障次数
 					MC_RunLog2.TE_MCU_FaultCnt++;
-			  	SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+			  	RunLogSaveIndex = 2;
           
 					SaveFlag4 = SET;		
           Fault_TE_MCU_Soft_Flag = SET;					
@@ -631,11 +631,11 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 				p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 1;
-				RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
 				MC_RunLog2.Circuit_FaultCnt++;
-				SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+				RunLogSaveIndex = 2;
 			}
 		}
 		else
@@ -659,11 +659,11 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 2;
 					MC_ErrorLogSaveInfo.NotesInfo2 = MC_TE_SensorStatus.TE_ErrorCode.Code;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog2.Circuit_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+					RunLogSaveIndex = 2;
 				}
 			}
 			else
@@ -703,11 +703,11 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 					p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 3;
-					RunLogSave_Update(&MC_ErrorLogSaveInfo);
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 					IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog2.Circuit_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);			
+					RunLogSaveIndex = 2;			
 				}
 				
 				if((IqFdbFlt >> 10) > 200) //250时,相电流为9.6A;330时,相电流为12.4A;350时,相电流为13.6A。得到,相电流 = 0.038 * IqFdb
@@ -721,11 +721,11 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 							//记录故障日志
 							MC_ErrorLogSaveInfo.NotesInfo1 = 4;
 							MC_ErrorLogSaveInfo.NotesInfo2 = (BusCurrent_Flt >> 5);
-							RunLogSave_Update(&MC_ErrorLogSaveInfo);
+							ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 							IsErrorLogSaveInfoUpdateFlag = TRUE;
 							//存储故障次数
 							MC_RunLog2.Circuit_FaultCnt++;
-							SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+							RunLogSaveIndex = 2;
 							CurrentFaultCount = 0;
 						}
 					}
@@ -775,11 +775,11 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 							//记录故障日志
 							MC_ErrorLogSaveInfo.NotesInfo1 = 5;
 							MC_ErrorLogSaveInfo.NotesInfo2 = DiffSqrtResult_BusCurrent;
-							RunLogSave_Update(&MC_ErrorLogSaveInfo);
+							ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 							IsErrorLogSaveInfoUpdateFlag = TRUE;
 							//存储故障次数
 							MC_RunLog2.Circuit_FaultCnt++;
-							SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);		
+							RunLogSaveIndex = 2;	
 						}
 					}
 				}
@@ -821,11 +821,11 @@ void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus,
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 1;
 				MC_ErrorLogSaveInfo.NotesInfo2 = (uint16_t)HallSensorStatus.HallGropuStatus;
-				RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
 				MC_RunLog1.Hall_FaultCnt++;
-			  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);			
+			  RunLogSaveIndex = 1;			
 				
 				return;
 			}
@@ -858,11 +858,11 @@ void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus,
 					MC_ErrorLogSaveInfo.NotesInfo1 = 2;
 					MC_ErrorLogSaveInfo.NotesInfo2 = ((uint16_t)HallGroupOldBak[0] << 8) + ((uint16_t)HallGroupOldBak[1] << 4) + ((uint16_t)HallGroupOldBak[2]);	
 					MC_ErrorLogSaveInfo.NotesInfo3 = ((uint16_t)HallGroupOldBak[3] << 8) + ((uint16_t)HallGroupOldBak[4] << 4) + ((uint16_t)HallGroupOldBak[5]);
-			  	RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			  	ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			  	IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog1.Hall_FaultCnt++;
-			    SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);			
+			    RunLogSaveIndex = 1;			
 					
 					return;
 				}
@@ -918,11 +918,11 @@ void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_Erro
 				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 1;
-			  	RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			  	ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			  	IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
           MC_RunLog2.CadenceSensor_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+					RunLogSaveIndex = 2;
 					
 					return;
 				}
@@ -939,11 +939,11 @@ void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_Erro
 				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 2;
-		  		RunLogSave_Update(&MC_ErrorLogSaveInfo);
+		  		ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			  	IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
           MC_RunLog2.CadenceSensor_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+					RunLogSaveIndex = 2;
 					
 					return;
 				}
@@ -960,11 +960,11 @@ void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_Erro
 				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
 					//记录故障日志
 					MC_ErrorLogSaveInfo.NotesInfo1 = 3;
-				  RunLogSave_Update(&MC_ErrorLogSaveInfo);
+				  ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				  IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
           MC_RunLog2.CadenceSensor_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
+					RunLogSaveIndex = 2;
 					
 					return;
 				}

+ 2 - 2
User/Src/log_save.c

@@ -52,7 +52,7 @@ static int16_t ErrorLog_GetSaveIndex(uint16_t* ErrorIndex)
 }
 
 //故障日志信息更新
-void RunLogSave_Update(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo)
+void ErrorLogSave_Update(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo)
 {
   p_ErrorLogSaveInfo->ErrorCode = MC_ErrorCode.Code;
 	p_ErrorLogSaveInfo->RunTime = MC_RunLog1.RunTime;
@@ -62,7 +62,7 @@ void RunLogSave_Update(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo)
 }
 
 //故障日志存储处理
-void RunlogSave_Process(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo, TrueOrFalse_Flag_Struct_t* IsUpdate)
+void ErrorLogSave_Process(MC_ErrorLogSaveInfo_Struct_t* p_ErrorLogSaveInfo, TrueOrFalse_Flag_Struct_t* IsUpdate)
 {
 	uint32_t Address_Begin;
 	int8_t SaveIndex;

+ 0 - 1
User/Src/motor_control.c

@@ -1089,7 +1089,6 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_compensation(uint16_t SenorData, MC
 {
 	MC_CalParam_Struct_t p_MC_CalParam = {MC_AssistRunMode_INVALID, 0,	0, RESET};
 	uint16_t TorqueStartData, TorqueStopData;//力矩启动值,力矩停机值
-	int16_t Torque_Temp;
 	int32_t Torque_Ref_Temp;
 	static uint32_t TorqueStopDelayTimeCnt = 0;//低力矩停机计时
 	uint16_t TorqueStopDelayTime;

+ 23 - 21
User/Src/protect_check.c

@@ -52,11 +52,11 @@ void MC_Protect_UnderVoltage_Process(uint16_t BusVoltage, uint8_t DesignVoltage,
 		{
 			p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
 			//记录故障日志
-			RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			IsErrorLogSaveInfoUpdateFlag = TRUE;
 			//存储故障次数
 			MC_RunLog1.UV_ProtectCnt++;
-			SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+			RunLogSaveIndex = 1;
 		}
 		uvFaultTimeCnt = HAL_GetTick();
 	}
@@ -116,11 +116,11 @@ void MC_Protect_OverVoltage_Process(uint16_t BusVoltage, uint16_t DesignVoltage,
 		{
 			p_MC_ErrorCode->ERROR_Bit.Protect_OverVoltage = 1;
 			//记录故障日志
-			RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			IsErrorLogSaveInfoUpdateFlag = TRUE;
 			//存储故障次数
 			MC_RunLog1.OV_ProtectCnt++;
-			SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+			RunLogSaveIndex = 1;
 		}
 		ovFaultTimeCnt = HAL_GetTick();
 	}
@@ -172,11 +172,11 @@ void MC_Protect_RotorLock_Process(uint16_t BusCurrent, TrueOrFalse_Flag_Struct_t
 		{
 			p_MC_ErrorCode->ERROR_Bit.Protect_LockRotor = 1;
 			//记录故障日志
-			RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			IsErrorLogSaveInfoUpdateFlag = TRUE;
 			//存储故障次数
 			MC_RunLog1.LockRotor_ProtectCnt++;
-			SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);	
+			RunLogSaveIndex = 1;	
 			
 			FaultTimeCnt = HAL_GetTick();
 		}
@@ -233,11 +233,11 @@ void MC_Protect_OverHeat_Process(uint8_t T_MCU, uint8_t T_PCB, uint8_t T_Coil, u
 			OT_Reset_TimeCnt = HAL_GetTick();
 			p_MC_ErrorCode->ERROR_Bit.Protect_OverTemp = 1;
 			//记录故障日志
-			RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			IsErrorLogSaveInfoUpdateFlag = TRUE;
 			//存储故障次数
 			MC_RunLog1.OT_ProtectCnt++;
-			SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+			RunLogSaveIndex = 1;
 		}
 	}
 	else
@@ -280,11 +280,11 @@ void MC_Protect_VoltageChange_Process(uint16_t Voltage, uint16_t Current, MC_Err
 					MC_ErrorLogSaveInfo.NotesInfo1 = DiffSqrtResult / 256;
 					MC_ErrorLogSaveInfo.NotesInfo2 = GetMaxData(Array, sizeof(Array) >> 1);
 					MC_ErrorLogSaveInfo.NotesInfo3 = GetMinData(Array, sizeof(Array) >> 1);
-		    	RunLogSave_Update(&MC_ErrorLogSaveInfo);
+		    	ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			    IsErrorLogSaveInfoUpdateFlag = TRUE;
 					//存储故障次数
 					MC_RunLog2.VoltageChange_FaultCnt++;
-					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);	
+					RunLogSaveIndex = 2;
 				}
 			}
 			else
@@ -304,11 +304,13 @@ void MC_Protect_VoltageChange_Process(uint16_t Voltage, uint16_t Current, MC_Err
 }
 
 /******************************全局函数定义******************************/
+#define OC_CLEARFLAG_DELAYTIME 15 //过流标志清零延时,单位ms
+#define OC_COUNTER_TH 200         //过流保护计数判断阈值
 //过流保护检测
 void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 {
   static uint8_t OffPwmCnt = 0;        //过流信号触发后,关闭PWM延时计数
-	static uint8_t StarPwmCnt = 0;       //关闭PWM后启动PWM延时技术
+	static uint8_t StarPwmCnt = 0;       //关闭PWM后启动PWM延时计数
   static uint16_t ocCnt = 0;           //过流信号触发计数
   static uint32_t ocTimeCnt = 0;       //过流信号触发计时
 	static uint32_t ocFaultTimeCnt = 0;  //过流保护后计时
@@ -319,10 +321,10 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
 		{
 			//关闭PWM计数清零
 			OffPwmCnt = 0;
-			//超时15ms过流次数未达到200次,过流计数清零
-			if(ocCnt < 199)
+			//超时OC_CLEARFLAG_DELAYTIME ms过流次数未达到OC_COUNTER_TH 次,过流计数清零
+			if(ocCnt < OC_COUNTER_TH)
 			{
-				if((HAL_GetTick() - ocTimeCnt) >= 15)
+				if((HAL_GetTick() - ocTimeCnt) >= OC_CLEARFLAG_DELAYTIME)
 				{
 					ocTimeCnt = HAL_GetTick();
 					ocCnt = 0;
@@ -347,25 +349,25 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
 				*OverCurrentTrigFlag = RESET;
 			}
 			//过流次数计数
-			if(ocCnt < 199)
+			if(ocCnt < OC_COUNTER_TH)
 			{
 				ocCnt++;
 			}
-			//15ms内过流次数达到200次,启动过流保护
+			//过流标志计数次数达到OC_COUNTER_TH 次,启动过流保护
 			else
 			{
 				ocCnt = 0;
 				p_MC_ErrorCode->ERROR_Bit.Protect_OverCurrent = 1;
+				ocFaultTimeCnt = HAL_GetTick();
 				//记录故障日志
-			  RunLogSave_Update(&MC_ErrorLogSaveInfo);
+			  ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 		  	IsErrorLogSaveInfoUpdateFlag = TRUE;
-				//存储故障次数
+				//存储故障次数,此处在TIM中断中进行存储,可能存在问题
 				MC_RunLog1.OC_ProtectCnt++;
-				SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
-				
-				ocFaultTimeCnt = HAL_GetTick();
+				RunLogSaveIndex = 1;	
 			}
 			OffPwmCnt++;
+			ocTimeCnt = HAL_GetTick();
 		}
 	}
 	else

+ 2 - 2
User/Src/torque_sensor.c

@@ -119,11 +119,11 @@ void TorqueOffSetData_Present_Update(uint16_t* PresentData, uint16_t AdcData, ui
 		//记录故障日志
 		MC_ErrorLogSaveInfo.NotesInfo1 = 3;
 		MC_ErrorLogSaveInfo.NotesInfo2 = *PresentData;
-		RunLogSave_Update(&MC_ErrorLogSaveInfo);
+		ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 		IsErrorLogSaveInfoUpdateFlag = TRUE;
 		//存储故障次数
 		MC_RunLog1.TQS_FaultCnt++;
-		SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG1, sizeof(MC_RunLog1_Struct_t), (uint8_t*)&MC_RunLog1.PowerOnCnt);
+		RunLogSaveIndex = 1;
 	}
 	
 }

+ 2 - 1
User/Src/var.c

@@ -16,6 +16,7 @@ MC_TorqueCorrectParam_Struct_t MC_TorqueCorrectParam;     //
 MC_MotorParam_Struct_t MC_MotorParam;                     //马达参数
 MC_RunLog1_Struct_t MC_RunLog1;                           //MC历史信息1
 MC_RunLog2_Struct_t MC_RunLog2;                           //MC历史信息2
+uint8_t RunLogSaveIndex = 0;                              //MC历史信息存储序号,0:不存储,1:存储MC_RunLog1,2:存储MC_RunLog2
 uint8_t Secret_Key[8];                                    //授权验证密钥
 MC_MacInfo_Struct_t MC_MacInfo;                           //MC生产信息
 uint8_t UserString1[16];                                  //MC自定义字符串1
@@ -484,7 +485,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007E.         ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r0r1_20200115.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r0r2_20200413.", 16);
 		
 	//电机型号
 	strncpy(MC_VerInfo.Mode, (char*)"MOTINOVA VOLANS.", 16);

+ 5 - 3
修改说明.txt

@@ -245,9 +245,11 @@ V2.0.1_20200115 Dail
 4、修改查询力矩传感器零偏时,更新为当前值,否则启动动态更新时发送的是存储的值;
 5、版本号:V2r0r1_20200115。
 
-
-
-
+V2.0.2_20200413 Dail
+1、对故障历史次数的记录,调整为在main.c中,MC_CalParam.Foc_Flag == RESET的时候执行,相关函数为RunLogSave_Process(uint8_t* RunLogIndex);
+2、调整温度传感器故障检测的判断值,降低误报概率;
+3、过流检测修复BUG,增加ocTimeCnt = HAL_GetTick();
+4、版本号:V2r0r2_20200413