Explorar el Código

1.修改NTC表格,将硬件上NTC上拉电阻由100K修改为20K
2.同步white 2022/7/5提交代码

leechard.li hace 3 años
padre
commit
f804542fd5

+ 5 - 1
Core/Src/adc.c

@@ -455,7 +455,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
Core/Src/can.c

@@ -64,7 +64,7 @@ void MX_CAN_Init(void)
 {
 
   hcan.Instance = CAN1;
-  hcan.Init.Prescaler = 24;
+  hcan.Init.Prescaler = 48;
   hcan.Init.Mode = CAN_MODE_NORMAL;
   hcan.Init.SJW = CAN_SJW_1TQ;
   hcan.Init.BS1 = CAN_BS1_4TQ;

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 2304 - 2304
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

@@ -294,13 +294,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;
 				}
 				
@@ -334,13 +337,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

+ 64 - 50
User/Src/fault_check.c

@@ -26,12 +26,12 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
 			TrigTimeCnt_2 = HAL_GetTick();
 		}
 		//推行助力模式下,检测速度传感器是否产生信号变化
-		else if( (AssistRunMode == MC_AssistRunMode_WALK) || (AssistRunMode == MC_AssistRunMode_GAS) )
+		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;
@@ -175,7 +175,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;
 					//记录故障日志
@@ -197,7 +197,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;
 					//记录故障日志
@@ -219,7 +219,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;
 					//记录故障日志
@@ -256,12 +256,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();
@@ -277,13 +277,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;
 				//存储故障次数
@@ -299,13 +301,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;
 				//存储故障次数
@@ -320,40 +324,49 @@ 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
+			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 温升低于2度
-						 (abs(T_Coil_Result - T_Coil_Old) < 1))  //绕组温升低于2度
+					//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;
 			}
 		}		
 	}
@@ -811,7 +824,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;
@@ -864,7 +877,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;
@@ -891,7 +904,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;
@@ -921,7 +934,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;//用于单个霍尔故障次数计数
@@ -938,7 +951,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;
 				//记录故障日志
@@ -973,8 +986,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;
 					//记录故障日志
@@ -1036,7 +1050,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/gas_sensor.c

@@ -3,9 +3,9 @@
 #include "log_save.h"
 
 uint16_t GasSensor_OffSet = 0;
-TrueOrFalse_Flag_Struct_t IsGasSensorConnectedFlag = FALSE;
 
 #define ZeroOffSetData 100
+TrueOrFalse_Flag_Struct_t IsGasSensorConnectedFlag = FALSE;
 
 //Ö¸²¦ÁãµãÖµ³õʼ»¯
 void GasSensorOffSet_Init(uint16_t* OffSet, uint16_t AdcData)

+ 3 - 3
User/Src/hall_sensor.c

@@ -163,7 +163,7 @@ int16_t MotorSpeedCal(uint16_t SVM_Angle, TrueOrFalse_Flag_Struct_t IsStopFlag)
 	static int16_t Result = 0;
 	
 	PreCnt++;
-	if(PreCnt >=8 )
+	if(PreCnt >=15 )
 	{
 	  PreCnt = 0;
 		AngleStep = (int32_t)(MC_HallSensorData.SVM_Angle - SVM_Angle_Old);
@@ -176,9 +176,9 @@ int16_t MotorSpeedCal(uint16_t SVM_Angle, TrueOrFalse_Flag_Struct_t IsStopFlag)
 		  AngleStep = 0;
 		}
 		SVM_Angle_Old = MC_HallSensorData.SVM_Angle;
-		AngleStep = AngleStep * 15000;//f = [Angle(k-1)-Angle(k)]/Tc
+		AngleStep = AngleStep * 1000;//f = [Angle(k-1)-Angle(k)]/Tc
 		FreqMotorFlt += (AngleStep - FreqMotorFlt) >> 8;
-		FreqMotor = FreqMotorFlt >> 19;
+		FreqMotor = FreqMotorFlt >> 16;
 		Result = 60 * FreqMotor >> 3;// 8n=60*f/p
 	}
 	

+ 28 - 2
User/Src/ntc_sensor.c

@@ -204,13 +204,39 @@ const uint16_t NTC_Table[200] =
 	48
 };
 
+const uint16_t NTC_Table_20K[191] = 
+{
+	4073,4072,4070,4068,4066,4064,4062,4060,4058,4056,	//-40~-31
+	4053,4050,4047,4044,4041,4038,4034,4030,4026,4022,	//-30~-21
+	4018,4013,4008,4003,3998,3992,3986,3980,3973,3966,	//-20~-11
+	3959,3952,3944,3935,3927,3918,3909,3899,3889,3878,	//-10~-1
+	3865,																								//0
+	3855,3843,3831,3818,3804,3790,3776,3761,3745,3729,	//1~10
+	3712,3695,3677,3658,3639,3619,3599,3578,3556,3534,	//11~20
+	3511,3487,3463,3438,3413,3386,3359,3331,3303,3274,	//21~30
+	3244,3214,3183,3151,3119,3087,3053,3019,2985,2950,	//31~40
+	2914,2878,2842,2805,2768,2730,2692,2653,2615,2576,	//41~50
+	2536,2497,2457,2417,2377,2337,2297,2257,2216,2176,	//51~60
+	2136,2096,2056,2016,1977,1937,1898,1859,1821,1783,	//61~70
+	1745,1707,1670,1633,1597,1561,1526,1491,1456,1422,	//71~80
+	1389,1356,1324,1292,1261,1230,1200,1170,1141,1113,	//81~90
+	1085,1058,1031,1005,979,954,930,906,883,860,				//91~100
+	838,816,795,774,754,735,716,697,679,661,						//101~110
+	644,627,611,595,580,565,550,536,522,509,						//111~120
+	495,483,470,458,447,435,424,414,403,393,						//121~130
+	384,374,365,356,347,338,330,322,315,307,						//131~140
+	300,293,286,279,272,266,260,254,248,243							//141~150
+};
+
+
 uint8_t GetNTCTempera(uint16_t ADC_Result)
 {
   uint8_t Count;
 	
-	for(Count=0; Count<200; Count++)
+	for(Count=0; Count<191; Count++)
 	{
-		if(ADC_Result >= NTC_Table[Count])
+		//if(ADC_Result >= NTC_Table[Count])
+		if(ADC_Result >= NTC_Table_20K[Count])
 		{
 			return Count;
 		}

+ 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);

+ 40 - 37
User/Src/tasks.c

@@ -596,53 +596,56 @@ void PowerOff_Process(TrueOrFalse_Flag_Struct_t ReturnEnable)
 //CAN设备PBU、HMI、BMS通信状态检测处理
 void MC_CanRxCheck_Process(MC_SupportFlag_Struct_t NoPBU_Flag, MC_SupportFlag_Struct_t NoHMI_Flag, MC_WorkMode_Struct_t WorkMode, MC_GearSt_Struct_t* GearSt)
 {
-  if((WorkMode == MC_WorkMode_Run) && (NoPBU_Flag == MC_SUPPORT_DISABLE)) //不支持无PBU,且正常运行模式
+  if(WorkMode == MC_WorkMode_Run) //不支持无PBU,且正常运行模式
 	{
-		//PBU通信状态检测
-		if(IsComOK_PBU.IsOK_Flag == TRUE)
+		if( NoPBU_Flag == MC_SUPPORT_DISABLE )
 		{
-			if((HAL_GetTick() - IsComOK_PBU.OK_TrigTime) > 1000)  
-			{  
-				IsComOK_PBU.IsOK_Flag = FALSE;
+			//PBU通信状态检测
+			if(IsComOK_PBU.IsOK_Flag == TRUE)
+			{
+				if((HAL_GetTick() - IsComOK_PBU.OK_TrigTime) > 1000)  
+				{  
+					IsComOK_PBU.IsOK_Flag = FALSE;
+					*GearSt = MC_GearSt_OFF;
+					Update_MC_ControlCode_Back();
+					DeviceOnLine_Status.Status_Bit.PBU_OffLine = 1;
+				}
+				else
+				{
+					DeviceOnLine_Status.Status_Bit.PBU_OffLine = 0;
+				}
+			}		
+			else
+			{
 				*GearSt = MC_GearSt_OFF;
-        Update_MC_ControlCode_Back();
+				Update_MC_ControlCode_Back();
 				DeviceOnLine_Status.Status_Bit.PBU_OffLine = 1;
 			}
-			else
+			
+			//HMI通信状态检测
+			if(NoHMI_Flag == MC_SUPPORT_ENABLE)
 			{
-			  DeviceOnLine_Status.Status_Bit.PBU_OffLine = 0;
+				DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
 			}
-		}		
-		else
-		{
-		  *GearSt = MC_GearSt_OFF;
-      Update_MC_ControlCode_Back();
-			DeviceOnLine_Status.Status_Bit.PBU_OffLine = 1;
-		}
-		
-		//HMI通信状态检测
-		if(NoHMI_Flag == MC_SUPPORT_ENABLE)
-		{
-		  DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
-		}
-		else
-		{
-		  if(IsComOK_HMI.IsOK_Flag == TRUE)
+			else
 			{
-			  if((HAL_GetTick() - IsComOK_HMI.OK_TrigTime) > 1000)  
-			  {  
-			  	IsComOK_HMI.IsOK_Flag = FALSE;
-					DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
-			  }
+				if(IsComOK_HMI.IsOK_Flag == TRUE)
+				{
+					if((HAL_GetTick() - IsComOK_HMI.OK_TrigTime) > 1000)  
+					{  
+						IsComOK_HMI.IsOK_Flag = FALSE;
+						DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
+					}
+					else
+					{
+						DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
+					}
+				}
 				else
 				{
-				  DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
+					DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
 				}
 			}
-			else
-			{
-			  DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
-			}
 		}
 		
 		//BMS通信状态检测
@@ -877,8 +880,8 @@ void MC_TemperatureLogProcess(void)
 	static uint16_t SavePeriodCnt = 0;
 	static TrueOrFalse_Flag_Struct_t DataChangeFlag = FALSE;
 	
-	if((IsSendDataToTE_Step == SENDUPDATA) || (IsComOK_TE.IsOK_Flag == FALSE))  //TE升级状态,或TE通讯失败状态下,不存储历史温度,TE无APP时对主控采集AD有影响
-	{
+	if(HAL_GetTick() < 10000)  //开机前10s不处理
+  {
 	  PeriodTimeCnt = HAL_GetTick();
 		return;
 	}

+ 2 - 2
User/Src/var.c

@@ -501,8 +501,8 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
 	strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.       ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V6r3r0_20220616.", 16);
-	strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r0.           ", 32);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V6r3r0_20220714.", 16);
+	strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r1.           ", 32);
 	if(MCUManufacturer == NoName) MC_VerInfo.HW_Version[10] = '0';
 	else if(MCUManufacturer == STM32F103RBT6) MC_VerInfo.HW_Version[10] = '1';
 	else if(MCUManufacturer == APM32F103RBT6) MC_VerInfo.HW_Version[10] = '2';

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio