Kaynağa Gözat

1、母线电流检测限制为50A;
2、修改NTC故障检测的逻辑;

dail 3 yıl önce
ebeveyn
işleme
b6815c6d9b

+ 1 - 0
Core/Src/adc.c

@@ -460,6 +460,7 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	//¸üĐÂĸĎßľçÁ÷
 	Temp_32 = (ADC1_Result[ADC1_RANK_CURRENT] - uw_current_offset) * 50000 >> 11;
 	Temp_32 = (Temp_32 <= 0) ? 0 : Temp_32;
+	Temp_32 = (Temp_32 >= 50000) ? 50000 : Temp_32;
 	IdcFltSum += ((Temp_32 << 10) - IdcFltSum) >> 9;
 	MC_RunInfo.BusCurrent = IdcFltSum >> 10;
 	

Dosya farkı çok büyük olduğundan ihmal edildi
+ 2103 - 2103
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 37 - 29
User/Src/fault_check.c

@@ -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
 	

+ 1 - 1
User/Src/var.c

@@ -497,7 +497,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.", 7);//长度不超过10
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r2r1_20211202.", 16);//长度不超过10
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r2r1_20220607.", 16);//长度不超过10
 	strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r0.           ", 32);//长度不超过32
 		
 	//电机型号

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor