Просмотр исходного кода

V7.2.0.0.0_20220705
1 兼容航顺单片机;
2 3s后才能查询电机版本信息;
3 速度传感器故障检测时间延长2.5倍,最短时间为10s;
4 力矩传感器无变化故障检测时间改为15s,传感器断开路故障检测时间由250ms改为1s;
5 相电流检测时间由3s改为5s;
6 NTC故障检测修改;
7 单向器打滑故障检测时间延长为1s;
8 硬件故障检测时间延长为1s;
9 霍尔传感器故障检测时间由5s延长为10s;
10 有电池通信时过压保护检测适用电池电压,无电池通信时过压保护检测用电机采集的母线电压;
11 版本号更新为V7.2.0.0.0_20220705;

white.xu 3 лет назад
Родитель
Сommit
414dcd9dbf

+ 5 - 1
Core/Src/adc.c

@@ -480,7 +480,11 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	//更新母线电压 
 	BusVoltageFltSum += ((ADC1_Result[ADC1_RANK_VIN] << 10) - BusVoltageFltSum) >> 9;
 	MC_RunInfo.BusVoltage = (uint32_t)((BusVoltageFltSum >> 10) * 18382) >> 10;//3300 * 1047 / (4095 * 47)
-	MC_RunInfo.BusVoltage += (MC_RunInfo.BusCurrent >> 7) * 12; //根据母线电流和估算的线阻进行补偿, 补偿电阻 0.2 * 128 = 25.6
+	MC_RunInfo.BusVoltage += (MC_RunInfo.BusCurrent >> 7) * 8; //根据母线电流和估算的线阻进行补偿, 补偿电阻 0.2 * 128 = 25.6
+	if( MCUManufacturer == HK32F103RBT6 )
+	{
+	   MC_RunInfo.BusVoltage = ((MC_RunInfo.BusVoltage - 8100) * 1402) >> 10;
+	}
 	
 	//更新母线电流
 	Temp_32 = (ADC1_Result[ADC1_RANK_CURRENT] - uw_current_offset) * 50000 >> 11;

+ 1 - 1
MDK-ARM/QD007A_CTL_APP.uvprojx

@@ -15,7 +15,7 @@
         <TargetCommonOption>
           <Device>STM32F103RB</Device>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32F1xx_DFP.1.1.0</PackID>
+          <PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
           <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IROM(0x08000000,0x20000) IRAM(0x20000000,0x5000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
           <FlashUtilSpec></FlashUtilSpec>

Разница между файлами не показана из-за своего большого размера
+ 2355 - 2355
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 30 - 21
User/Src/can_process.c

@@ -293,13 +293,16 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				
 				case 0x3900://OBC/ECU查询版本信息
 				{
-				  uint32_t MCU_ID_CRC32;
-					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
-					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
-					MCU_ID_CRC32 = CRC32_Calculate(MC_CheckInfo.MAC_ID, 12);
-					memcpy((uint8_t*)(MC_VerInfo.HW_Version + 12), (uint8_t*)(&MCU_ID_CRC32), 4);
-					SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
-					SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
+					if( HAL_GetTick() > 3000 )
+					{
+						uint32_t MCU_ID_CRC32;
+						ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
+						ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
+						MCU_ID_CRC32 = CRC32_Calculate(MC_CheckInfo.MAC_ID, 12);
+						memcpy((uint8_t*)(MC_VerInfo.HW_Version + 12), (uint8_t*)(&MCU_ID_CRC32), 4);
+						SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
+						SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
+					}
 					break;
 				}
 				
@@ -333,13 +336,16 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				//HMI发送MC的指令
 				case 0x3000://查询电机版本信息
 				{
-				  uint32_t MCU_ID_CRC32;
-					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
-					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
-					MCU_ID_CRC32 = CRC32_Calculate(MC_CheckInfo.MAC_ID, 12);
-					memcpy((uint8_t*)(MC_VerInfo.HW_Version + 12), (uint8_t*)(&MCU_ID_CRC32), 4);
-					SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
-					SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
+					if( HAL_GetTick() > 3000 )
+					{
+						uint32_t MCU_ID_CRC32;
+						ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
+						ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
+						MCU_ID_CRC32 = CRC32_Calculate(MC_CheckInfo.MAC_ID, 12);
+						memcpy((uint8_t*)(MC_VerInfo.HW_Version + 12), (uint8_t*)(&MCU_ID_CRC32), 4);
+						SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
+						SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
+					}
 					break;
 				}
 				case 0x3100://查询电机配置参数
@@ -430,13 +436,16 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				}
 				case 0x1200://查询电机版本信息
 				{
-				  uint32_t MCU_ID_CRC32;
-					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
-					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
-					MCU_ID_CRC32 = CRC32_Calculate(MC_CheckInfo.MAC_ID, 12);
-					memcpy((uint8_t*)(MC_VerInfo.HW_Version + 12), (uint8_t*)(&MCU_ID_CRC32), 4);
-					SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
-					SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
+					if( HAL_GetTick() > 3000 )
+					{
+						uint32_t MCU_ID_CRC32;
+						ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
+						ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
+						MCU_ID_CRC32 = CRC32_Calculate(MC_CheckInfo.MAC_ID, 12);
+						memcpy((uint8_t*)(MC_VerInfo.HW_Version + 12), (uint8_t*)(&MCU_ID_CRC32), 4);
+						SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
+						SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
+					}
 					break;
 				}
 				case 0x1300://查询自定义字符串1

+ 67 - 53
User/Src/fault_check.c

@@ -29,9 +29,9 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
 		else if( (AssistRunMode == MC_AssistRunMode_WALK)||(AssistRunMode == MC_AssistRunMode_GAS) )
 		{
 		  if((MotorSpeed > 50) && (IsStopFlag == TRUE))
-			{
-			  DelayTime = 1650000 / MotorSpeed;//考虑前后齿比为0.8的情况下,轮子转一圈的时间为:60 / (电机转速 / (4.55 * 2.4) * 0.8) s, 延长2圈时间
-				DelayTime = DelayTime < 2000 ? 2000 : DelayTime;
+			{ 
+			  DelayTime = 4125000 / MotorSpeed;//考虑前后齿比为0.8的情况下,轮子转一圈的时间为:60 / (电机转速 / (4.55 * 2.4) * 0.8) s, 延长5圈时间
+				DelayTime = DelayTime < 10000 ? 10000 : DelayTime;
 				if((HAL_GetTick() - TrigTimeCnt_1) > DelayTime)
 				{
 				  p_MC_ErrorCode->ERROR_Bit.Fault_SpeedSensor = 1;
@@ -56,8 +56,8 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
 		{
 			if((CadenceSensor.Cadence_Data >= 5) && (CadenceSensor.Cadence_Dir == MC_Cadence_Forward) && (IsStopFlag == TRUE))
 			{
-				DelayTime = 150000 / CadenceSensor.Cadence_Data;//考虑前后齿比为0.8的情况下,轮子转一圈的时间为:60 / (踏频 * 0.8) s, 延长2圈时间
-				DelayTime = DelayTime < 2000 ? 2000 : DelayTime;
+				DelayTime = 375000 / CadenceSensor.Cadence_Data;//考虑前后齿比为0.8的情况下,轮子转一圈的时间为:60 / (踏频 * 0.8) s, 延长5圈时间
+				DelayTime = DelayTime < 10000 ? 10000 : DelayTime;
 				if((HAL_GetTick() - TrigTimeCnt_2) > DelayTime)
 				{
 					p_MC_ErrorCode->ERROR_Bit.Fault_SpeedSensor = 1;
@@ -107,9 +107,9 @@ void MC_Fault_TorqueSensor_Process_Single(uint16_t ADC_Data, uint8_t Num, Toruqe
 	//标准差较小
 	if(p_SensorCheck->DiffStdResult < 10)
 	{
-		DelayTime = 120000 / Cadence;  //根据踏频计算踩踏2圈的时间,要考虑空踩情况
-		DelayTime = (DelayTime < 250) ? 250 : DelayTime;
-		if((HAL_GetTick() - p_SensorCheck->TrigTimeCnt_1) > (DelayTime * 2))
+//		DelayTime = 120000 / Cadence;  //根据踏频计算踩踏2圈的时间,要考虑空踩情况
+//		DelayTime = (DelayTime < 250) ? 250 : DelayTime;
+		if((HAL_GetTick() - p_SensorCheck->TrigTimeCnt_1) > 15000)
 		{
 			SensorFaultStatus->FaultStatusCode |= 1 << (Num - 1);
 			p_SensorCheck->FaultType = 1;
@@ -124,7 +124,7 @@ void MC_Fault_TorqueSensor_Process_Single(uint16_t ADC_Data, uint8_t Num, Toruqe
 	//传感器短路或开路检测
 	if((ADC_Data < 50) || (ADC_Data > 4050))
 	{
-		if((HAL_GetTick() - p_SensorCheck->TrigTimeCnt_2) > 250)
+		if((HAL_GetTick() - p_SensorCheck->TrigTimeCnt_2) > 1000)
 		{
 			SensorFaultStatus->FaultStatusCode |= 1 << (Num - 1);
 			p_SensorCheck->FaultType = 2;
@@ -223,7 +223,7 @@ void MC_Fault_PhaseLine_Process(FlagStatus Foc_Flag, uint16_t BusCurrent, uint16
 		  //A相电流
 			if(abs(Phase_Current.uw_phase_a) < 300)
 			{
-			  if((HAL_GetTick() - TrigTimeCnt_PhaseA) > 3000)
+			  if((HAL_GetTick() - TrigTimeCnt_PhaseA) > 5000)
 				{
 		  		p_MC_ErrorCode->ERROR_Bit.Fault_PhaseLine = 1;
 					//记录故障日志
@@ -245,7 +245,7 @@ void MC_Fault_PhaseLine_Process(FlagStatus Foc_Flag, uint16_t BusCurrent, uint16
 			//B相电流
 			if(abs(Phase_Current.uw_phase_b) < 300)
 			{
-			  if((HAL_GetTick() - TrigTimeCnt_PhaseB) > 3000)
+			  if((HAL_GetTick() - TrigTimeCnt_PhaseB) > 5000)
 				{
 		  		p_MC_ErrorCode->ERROR_Bit.Fault_PhaseLine = 1;
 					//记录故障日志
@@ -267,7 +267,7 @@ void MC_Fault_PhaseLine_Process(FlagStatus Foc_Flag, uint16_t BusCurrent, uint16
 			//C相电流
 			if(abs(Phase_Current.uw_phase_c) < 300)
 			{
-			  if((HAL_GetTick() - TrigTimeCnt_PhaseC) > 3000)
+			  if((HAL_GetTick() - TrigTimeCnt_PhaseC) > 5000)
 				{
 		  		p_MC_ErrorCode->ERROR_Bit.Fault_PhaseLine = 1;
 					//记录故障日志
@@ -304,12 +304,12 @@ 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;
+	static uint16_t BusCurrentAvg1 = 0, BusCurrentAvg2 = 0;
 	static uint8_t T_PCB_Old = 0;
 	static uint8_t T_Coil_Old = 0;
 		
 	//初始化5s,且50度以上,不检测NTC故障
-	if((HAL_GetTick() < 5000) || (MC_RunInfo.T_MCU > 90))
+	if((HAL_GetTick() < 5000) || (T_PCB_Result > 90))
 	{
 	  TrigTimeCnt_PCB = HAL_GetTick();
 		TrigTimeCnt_PCB = HAL_GetTick();
@@ -325,13 +325,15 @@ 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,180(140度):AD为80
 		{
-			if((HAL_GetTick() - TrigTimeCnt_PCB) > 500)
+			if((HAL_GetTick() - TrigTimeCnt_PCB) > 5000)
 			{
 				p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 1;
+				MC_ErrorLogSaveInfo.NotesInfo2 = T_PCB_Result;
+				MC_ErrorLogSaveInfo.NotesInfo3 = T_Coil_Result;
 				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
@@ -347,13 +349,15 @@ 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,180(140度):AD为80
 		{
-			if((HAL_GetTick() - TrigTimeCnt_Coil) > 500)
+			if((HAL_GetTick() - TrigTimeCnt_Coil) > 5000)
 			{
 				p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = 2;
+				MC_ErrorLogSaveInfo.NotesInfo2 = T_PCB_Result;
+				MC_ErrorLogSaveInfo.NotesInfo3 = T_Coil_Result;				
 				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 				IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
@@ -368,40 +372,49 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
 		  TrigTimeCnt_Coil = HAL_GetTick();
 		}
 		
-		//NTC为固定值的检测,检测设定时间内内母线电流平均值 > 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
+			NTC_Check_PeriodTimeCnt = HAL_GetTick();
+			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) //计算第一个6.8min平均值
 			{
-			  NTC_Check_Count = 0;
-				BusCurrentAvg = BusCurrentSum >> 13;//8192个值取均值
-				BusCurrentSum = 0;
-				//平均电流超过10A,判断是否有温升
-				if(BusCurrentAvg > 79) // 79  * 1.28 = 101
-				{
-				  if((abs(T_PCB_Result - T_PCB_Old) < 1) ||  //PCB 温升低于1度
-						 (abs(T_Coil_Result - T_Coil_Old) < 1))  //绕组温升低于1度
+					//avg1 = (x1 + x2 + ... + x4096) / 4096
+					BusCurrentAvg1 = BusCurrentSum >> 12; 
+			}
+			else if(NTC_Check_Count >= 8192) //第二个6.8min
+			{
+					NTC_Check_Count = 0;
+					//avg2 = (x4097 + x4098 + ... +x8192) / 4096 = 2 * (x1 + x2 + ... + x8192) / 8192 - avg1
+					BusCurrentAvg2 = (BusCurrentSum >> 12) - BusCurrentAvg1; 
+					BusCurrentSum = 0;
+					//总平均电流超过10A时,当两段平均电流变化超过3A,判断温度是否发生变化
+					if(((BusCurrentAvg1 + BusCurrentAvg2) >> 1) > 79) //79 * 128 = 10.1A
 					{
-					  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;
+							if(abs(BusCurrentAvg1 - BusCurrentAvg2) >= 25)  //25 * 128 = 3.2A
+							{
+									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;
+					T_PCB_Old = T_PCB_Result;
+					T_Coil_Old = T_Coil_Result;
 			}
 		}		
 	}
@@ -859,7 +872,7 @@ void MC_Fault_Machine_Process(uint16_t MotorSpeed, uint16_t CadenceSpeed, ADC_Se
 				if( speedratio > 1500 ) 
 				{
 					ClutchFaultCount++;
-					if( ClutchFaultCount>= 50)                  //速比连续出错50次判断为故障,时间将近1s
+					if( ClutchFaultCount>= 250)                  //速比连续出错50次判断为故障,时间将近5s
 					{
 						ClutchFaultCount=0;
 						p_MC_ErrorCode->ERROR_Bit.Fault_Machine = 1;
@@ -912,7 +925,7 @@ void MC_Fault_Hardware_Identify(TrueOrFalse_Flag_Struct_t TEComOKFlag, uint16_t
 				else 
 				{
 					HardwareFaultCount++;
-					if( HardwareFaultCount>= 50)                  
+					if( HardwareFaultCount>= 250)                  
 					{
 						HardwareFaultCount = 0;
 						p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
@@ -939,7 +952,7 @@ void MC_Fault_Hardware_Identify(TrueOrFalse_Flag_Struct_t TEComOKFlag, uint16_t
 					if( (Hardware_AD>3723)||(Hardware_AD<372) )
 					{
 						HardwareFaultCount2++;
-						if( HardwareFaultCount2>= 50)                  
+						if( HardwareFaultCount2>= 250)                  
 						{
 							HardwareFaultCount2 = 0;
 							p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
@@ -969,7 +982,7 @@ void MC_Fault_Hardware_Identify(TrueOrFalse_Flag_Struct_t TEComOKFlag, uint16_t
 void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 {
 	static TrueOrFalse_Flag_Struct_t IsFirstEnterFlag = TRUE;
-	static uint32_t TrigTimeCnt_1 = 0;//用于检测霍尔全部短路或开路检测 延时判断
+	static uint32_t TrigTimeCnt_1 = 0, TrigTimeCnt_2 = 0;//用于检测霍尔全部短路或开路检测 延时判断
 	static uint8_t HallGroupOldBak[6];//用于单个霍尔故障判断霍尔状态缓存
 	static uint8_t Count = 0;
 	static uint32_t TrigCnt_2 = 0;//用于单个霍尔故障次数计数
@@ -986,7 +999,7 @@ void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus,
 	  //霍尔传感器全部短路或开路检测
 		if((HallSensorStatus.HallGropuStatus == 0x00) || (HallSensorStatus.HallGropuStatus == 0x07))
 		{
-		  if((HAL_GetTick() - TrigTimeCnt_1) > 250)
+		  if((HAL_GetTick() - TrigTimeCnt_1) > 1000)
 			{
 			  p_MC_ErrorCode->ERROR_Bit.Fault_HallSensor = 1;
 				//记录故障日志
@@ -1021,8 +1034,9 @@ void MC_Fault_HallSensor_Process(MC_HallSensorStatus_Struct_t HallSensorStatus,
 				else
 				{
 				  TrigCnt_2 = 0;
+					TrigTimeCnt_2 = HAL_GetTick();
 				}
-				if(TrigCnt_2 > 50)
+				if( (TrigCnt_2 > 50) && (HAL_GetTick()>(TrigTimeCnt_2+500)) )
 				{
 					p_MC_ErrorCode->ERROR_Bit.Fault_HallSensor = 1;
 					//记录故障日志
@@ -1084,7 +1098,7 @@ void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_Erro
 		  //判断霍尔1
 			if(Hall_1_Trg == 0)
 			{
-			  if((HAL_GetTick() - Hall_1_Fault_TrigTimeCnt) > 5000)
+			  if((HAL_GetTick() - Hall_1_Fault_TrigTimeCnt) > 10000)
 				{
 				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
 					//记录故障日志

+ 1 - 1
User/Src/protect_check.c

@@ -433,7 +433,7 @@ void MC_Protect_Check_Process(void)
 	                                &MC_ErrorCode);
 	
 	//법箕괏빱쇱꿎
-	MC_Protect_OverVoltage_Process(MC_RunInfo.BusVoltage, MC_MotorParam.Rate_Voltage, &MC_ErrorCode);
+	MC_Protect_OverVoltage_Process(((IsComOK_BMS.IsOK_Flag == TRUE) ? BMS_RunInfo.Voltage : MC_RunInfo.BusVoltage), MC_MotorParam.Rate_Voltage, &MC_ErrorCode);
 
 	//뗏瘻괏빱쇱꿎
 	MC_Protect_RotorLock_Process(MC_RunInfo.BusCurrent, MC_HallSensorData.IsStopFlag, &MC_ErrorCode);

+ 1 - 1
User/Src/var.c

@@ -499,7 +499,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
 	strncpy(MC_VerInfo.HW_Version, (char*)"TTKZ010D.       ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V7r1r2_20220608C", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V7r2r0_20220704C", 16);
   #if NormalWork
 	MC_VerInfo.FW_Version[15] = '.';
   #endif

Некоторые файлы не были показаны из-за большого количества измененных файлов