ソースを参照

1、调整母线电压补偿系数;
2、修改部分故障检测的判断条件;
3、修改踏频停机时间,根据踏频线性变化;
4、低压保护时不提示故障码,仅关闭电机助力;
5、优化电量计算方法。

dail 3 年 前
コミット
e73a3160e9

+ 1 - 1
Core/Src/adc.c

@@ -455,7 +455,7 @@ 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) * 26; //根据母线电流和估算的线阻进行补偿, 补偿电阻 0.2 * 128 = 25.6
+	MC_RunInfo.BusVoltage += (MC_RunInfo.BusCurrent >> 7) * 8; //根据母线电流和估算的线阻进行补偿, 补偿电阻 0.06 * 128 = 7.3
 	
 	//更新母线电流
 	Temp_32 = (ADC1_Result[ADC1_RANK_CURRENT] - uw_current_offset) * 50000 >> 11;

ファイルの差分が大きいため隠しています
+ 2351 - 2351
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 1 - 0
User/Inc/var.h

@@ -491,6 +491,7 @@ extern MC_AttitudeAngle_Struct_t MC_AttitudeAngle;
 extern MC_RideLog_Struct_t MC_RideLog;
 extern MC_AvgPower_Struct_t MC_AvgPower;
 extern MCU_Manufacturter_Struct_t MCUManufacturer;
+extern FlagStatus UnderVoltageFlag;
 
 /**************************È«¾Ö±äÁ¿ÉùÃ÷End***************************/
 

+ 16 - 4
User/Src/cadence_sensor.c

@@ -147,10 +147,22 @@ void CadenceSensor_Process(MC_CadenceResult_Struct_t* p_MC_CadenceResult, uint16
 	}
 	
 	//停机判断
-	if(p_MC_CadenceResult->Cadence_Data < (1500 / StopDelayTime))
-	{
-	  StopDelayTime *= 3;
-	}
+	#if 0 //踏频低于15rpm时,停机时间为设定值3倍
+  if(p_MC_CadenceResult->Cadence_Data < (1500 / StopDelayTime))
+  {
+    StopDelayTime *= 3;
+  }
+  #elif 1 //由于踏频低于10rpm时,两个信号间隔时间大于100ms,按照下列条件设定停机时间系数:
+  /*
+  n < 20rpm, k = 3
+  n > 40rpm, k = 1
+  20rpm <= n <= 40rpm, k = -0.1 * n + 5,计算是k放大100倍
+  */  
+  uint16_t Temp = 0, k = 100;
+  Temp = 1000 / (HAL_GetTick() - CadenceCalTimeCnt);//踏频实时值,单位rpm
+  k = (Temp < 20) ? 300 : ((Temp > 40) ? 100 : (500 - Temp * 10));
+  StopDelayTime = k * StopDelayTime / 100;
+  #endif
 	if((HAL_GetTick() - CadenceStopJudgeTimeCnt) > StopDelayTime)
 	{
 		p_MC_CadenceResult->IsStopFlag = TRUE;

+ 60 - 46
User/Src/fault_check.c

@@ -30,8 +30,8 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
 		{
 		  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, 延长2圈时间
+				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, 延长2圈时间
+				DelayTime = DelayTime < 10000 ? 10000 : DelayTime;
 				if((HAL_GetTick() - TrigTimeCnt_2) > DelayTime)
 				{
 					p_MC_ErrorCode->ERROR_Bit.Fault_SpeedSensor = 1;
@@ -88,7 +88,7 @@ void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt,
 	static uint16_t TorqueArray[25] = {0};
 	static uint32_t DiffSqrtResult = 0;
 	uint16_t i;
-	uint16_t DelayTime;
+	//uint16_t DelayTime;
 	static uint32_t PeriodTimeCnt = 0;
 	
 	if(HAL_GetTick() < 5000)
@@ -113,9 +113,9 @@ void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt,
 			//传感器感应失效检测,进入力矩助力模式、踏频正转大于10rpm、标准差较小
 			if(((GearSt != 0x22) && ((GearSt & 0x0F) != 0)) && (CadenceData.Cadence_Data > 30) && (CadenceData.Cadence_Dir == MC_Cadence_Forward) && (AstMode == MC_AssistRunMode_TORQUE) && (DiffSqrtResult < 10))
 			{
-				DelayTime = 60000 / CadenceData.Cadence_Data;  //根据踏频计算踩踏1/4圈的时间,要考虑空踩情况
-				DelayTime = (DelayTime < 250) ? 250 : DelayTime;
-				if((HAL_GetTick() - TrigTimeCnt_1) > (DelayTime * 2))
+				//DelayTime = 60000 / CadenceData.Cadence_Data;  //根据踏频计算踩踏1/4圈的时间,要考虑空踩情况
+				//DelayTime = (DelayTime < 250) ? 250 : DelayTime;
+				if((HAL_GetTick() - TrigTimeCnt_1) > 15000)
 				{
 					p_MC_ErrorCode->ERROR_Bit.Fault_TorqueSensor = 1;
 					//记录故障日志
@@ -137,7 +137,7 @@ void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt,
 			//传感器短路或开路检测
 			if((ADC_Data < 50) || (ADC_Data > 4050))
 			{
-				if((HAL_GetTick() - TrigTimeCnt_2) > 200)
+				if((HAL_GetTick() - TrigTimeCnt_2) > 1000)
 				{
 					p_MC_ErrorCode->ERROR_Bit.Fault_TorqueSensor = 1;
 					//记录故障日志
@@ -174,7 +174,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;
 					//记录故障日志
@@ -196,7 +196,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;
 					//记录故障日志
@@ -218,7 +218,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;
 					//记录故障日志
@@ -255,12 +255,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();
@@ -276,13 +276,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;
 				//存储故障次数
@@ -298,13 +300,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;
 				//存储故障次数
@@ -319,36 +323,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)
 		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) //计算第一个6.8min平均值
 			{
-			  NTC_Check_Count = 0;
-				BusCurrentAvg = BusCurrentSum >> 13;//8192个值取均值
+				//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,判断是否有温升
-				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;
+						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;
@@ -798,7 +811,7 @@ void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 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;//用于单个霍尔故障次数计数
@@ -815,7 +828,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;
 				//记录故障日志
@@ -850,8 +863,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;
 					//记录故障日志
@@ -913,7 +927,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;
 					//记录故障日志
@@ -934,7 +948,7 @@ void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_Erro
 			//判断霍尔2
 			if(Hall_2_Trg == 0)
 			{
-			  if((HAL_GetTick() - Hall_2_Fault_TrigTimeCnt) > 5000)
+			  if((HAL_GetTick() - Hall_2_Fault_TrigTimeCnt) > 10000)
 				{
 				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
 					//记录故障日志
@@ -955,7 +969,7 @@ void MC_Fault_CadenceSensor_Process(uint16_t Torque, uint16_t BikeSpeed, MC_Erro
       //判断霍尔1和霍尔2黏连
       if(Hall_1_2_EQA_Flag == 0) 
 			{
-			  if((HAL_GetTick() - Hall_1_2_EQA_TrigTimeCnt) > 5000)
+			  if((HAL_GetTick() - Hall_1_2_EQA_TrigTimeCnt) > 10000)
 				{
 				  p_MC_ErrorCode->ERROR_Bit.Fault_CadenceSensor = 1;
 					//记录故障日志

+ 1 - 1
User/Src/motor_control.c

@@ -157,7 +157,7 @@ MC_AssistRunMode_Struct_t MC_JudgeAsistRunMode_Process(MC_SupportFlag_Struct_t G
 	
 	if(MC_ErrorCode.Code == 0)  // ÎÞ¹ÊÕÏ
 	{
-	  if((GearSt != MC_GearSt_OFF) && (StopFlag == FALSE))
+	  if((GearSt != MC_GearSt_OFF) && (StopFlag == FALSE) && (UnderVoltageFlag == RESET))
 		{
 		  //½øÈëÖ¸²¦Ä£Ê½
 			if((GasSensorData > 100) && (GasCtrlMode == MC_SUPPORT_ENABLE)) 

+ 10 - 10
User/Src/protect_check.c

@@ -11,7 +11,7 @@ FlagStatus MC_Protect_OverCurrentTrig_Flag = RESET;
 
 /******************************局部函数定义******************************/
 //低压保护检测
-void MC_Protect_UnderVoltage_Process(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint8_t SOC, uint16_t BusVoltage, uint8_t DesignVoltage, uint16_t UV_TH, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
+void MC_Protect_UnderVoltage_Process(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint8_t SOC, uint16_t BusVoltage, uint8_t DesignVoltage, uint16_t UV_TH, FlagStatus* p_UnderVoltageFlag)
 {
   static uint32_t uvTimeCnt = 0;
 	static uint32_t uvFaultTimeCnt = 0;
@@ -44,7 +44,7 @@ void MC_Protect_UnderVoltage_Process(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint
 	
 	if(IsBMS_ComOK == TRUE)//电池通讯正常,根据BMS的SOC作为低压保护
 	{
-	  if(p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage == 0)
+	  if(*p_UnderVoltageFlag == RESET)
 		{
 			//低压保护判断
 			if((SOC >= 1) && (BusVoltage >= UV_Voltage))
@@ -53,7 +53,7 @@ void MC_Protect_UnderVoltage_Process(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint
 			}
 			if((HAL_GetTick() - uvTimeCnt) > 5000)
 			{
-				p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
+				*p_UnderVoltageFlag = SET;
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = BusVoltage;
 				MC_ErrorLogSaveInfo.NotesInfo2 = (uint16_t)IsBMS_ComOK;
@@ -74,13 +74,13 @@ void MC_Protect_UnderVoltage_Process(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint
 			}	
 			if((HAL_GetTick() - uvFaultTimeCnt) > 5000)
 			{
-				p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 0;
+				*p_UnderVoltageFlag = RESET;
 			}
 		}
 	}
 	else
 	{
-		if(p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage == 0)
+		if(*p_UnderVoltageFlag == RESET)
 		{
 			//低压保护判断
 			if(BusVoltage >= UV_Voltage)
@@ -89,7 +89,7 @@ void MC_Protect_UnderVoltage_Process(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint
 			}
 			if((HAL_GetTick() - uvTimeCnt) > 5000)
 			{
-				p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
+				*p_UnderVoltageFlag = SET;
 				//记录故障日志
 				MC_ErrorLogSaveInfo.NotesInfo1 = BusVoltage;
 				MC_ErrorLogSaveInfo.NotesInfo2 = (uint16_t)IsBMS_ComOK;
@@ -110,7 +110,7 @@ void MC_Protect_UnderVoltage_Process(TrueOrFalse_Flag_Struct_t IsBMS_ComOK, uint
 			}	
 			if((HAL_GetTick() - uvFaultTimeCnt) > 5000)
 			{
-				p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 0;
+				*p_UnderVoltageFlag = RESET;
 			}
 		}
 	}
@@ -436,11 +436,11 @@ void MC_Protect_Check_Process(void)
 	//低压保护检测
   MC_Protect_UnderVoltage_Process(IsComOK_BMS.IsOK_Flag, MC_RunInfo.SOC, ((IsComOK_BMS.IsOK_Flag == TRUE) ? BMS_RunInfo.Voltage : MC_RunInfo.BusVoltage), 
 	                                MC_MotorParam.Rate_Voltage, ((MC_ConfigParam1.UV_Protect_TH == 0) ? 3000 : MC_ConfigParam1.UV_Protect_TH), 
-	                                &MC_ErrorCode);
+	                                &UnderVoltageFlag);
 	
 	//过压保护检测
-	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);
 

+ 7 - 7
User/Src/remain_distance.c

@@ -70,7 +70,7 @@ static void RD_getQRemainRecord(uint16_t Volgate)
 		}
 	}
 	
-	MC_RunInfo.SOC = batteryRemainQ * 100 / batteryTotalQ;
+	//MC_RunInfo.SOC = batteryRemainQ * 100 / batteryTotalQ;
 	
 	Battery_Info.Q_remain_real = Battery_Info.Q_remain_record;
 }
@@ -481,12 +481,12 @@ uint8_t Battery_SocCal(uint16_t Voltage_mV)
 	
 	TimeDelayCnt++;
 	//初始化电压上升较慢,开机时动态效果
-	if(TimeDelayCnt <= 10) return 0;
-	else if(TimeDelayCnt <= 15) return 10;
-	else if(TimeDelayCnt <= 20) return 25;
-	else if(TimeDelayCnt <= 25) return 45;
-	else if(TimeDelayCnt <= 30) return 65;
-	else if(TimeDelayCnt <= 35) return 85;
+	if(TimeDelayCnt <= 12) return 0;
+	else if(TimeDelayCnt <= 14) return 10;
+	else if(TimeDelayCnt <= 16) return 25;
+	else if(TimeDelayCnt <= 18) return 45;
+	else if(TimeDelayCnt <= 20) return 65;
+	else if(TimeDelayCnt <= 22) return 85;
 	else	
 	{
 	  if(InitFlag == FALSE)//等待约5s后,计算一次初始值

+ 3 - 2
User/Src/var.c

@@ -39,6 +39,7 @@ MC_AttitudeAngle_Struct_t MC_AttitudeAngle;               //
 MC_RideLog_Struct_t MC_RideLog;                           //骑行历史
 MC_AvgPower_Struct_t MC_AvgPower;                         //助力平均功耗
 MCU_Manufacturter_Struct_t MCUManufacturer;               //MCU生厂商
+FlagStatus UnderVoltageFlag = RESET;                      //低压保护标志
 
 //BMS默认设计信息
 const BMS_DesignInfo_Struct_t BMS_DesignInfo_Default =
@@ -497,8 +498,8 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.", 7);//长度不超过10
-	strncpy(MC_VerInfo.FW_Version, (char*)"V6r1r0_20211202.", 16);
-	strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r0.           ", 32);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V6r1r0_20220803.", 16);
+	strncpy(Firmware_Special, (char*)"TC013050-MBR2113-V0r1.          ", 32);
 		
 	//电机型号
 	strncpy(MC_VerInfo.Mode, (char*)"VL65XX & VS75XX.", 16);

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません