Procházet zdrojové kódy

V2.0.1_20200102
1、针对TE的故障检测,TE串口通信和TE的时钟频率判断结果都会直接改变ERROR_Bit.Fault_TE_MCU的结果,存在故障置位后被马上复位的情况,修改为置位到复位时,要同时满足两个条件;
2、修改停机时的减速值为7,可以消掉停机的滴答声;
3、启动模式(柔和、强劲、标准)用于控制启动时,加速斜率递增的时间;
4、针对每个档位的助力增益和加速度增益,调整相应的助力系数和加速曲线;
5、版本号:V2.0.1_20200102

dail.zhou před 5 roky
rodič
revize
27c96c88bc

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


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


+ 13 - 3
User/Src/fault_check.c

@@ -460,6 +460,8 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, True
 	static uint8_t ErrorCount_TE_Circuit = 0;
 	static uint8_t ErrorCount_MCU = 0;
 	static uint8_t ErrorCount_TE_MCU = 0;
+	static FlagStatus Fault_TE_MCU_Com_Flag = RESET;
+  static FlagStatus Fault_TE_MCU_Soft_Flag = RESET;	
 	
 	//开机前5s不检测
 	if(HAL_GetTick() < 5000)
@@ -483,11 +485,12 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, True
 		  SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RUN_LOG2, sizeof(MC_RunLog2_Struct_t), (uint8_t*)&MC_RunLog2.MCU_FaultCnt);
 			
 			SaveFlag1 = SET;
+			Fault_TE_MCU_Com_Flag = SET;
 		}
 	}
 	else
 	{
-	  p_MC_ErrorCode->ERROR_Bit.Fault_TE_MCU = 0;
+	  Fault_TE_MCU_Com_Flag = RESET;
 		SaveFlag1 = RESET;
 	}
 	
@@ -581,19 +584,26 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, 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);
           
-					SaveFlag4 = SET;				
+					SaveFlag4 = SET;		
+          Fault_TE_MCU_Soft_Flag = SET;					
 				}
 			}
 		}
 		else
 		{
-			p_MC_ErrorCode->ERROR_Bit.Fault_TE_MCU = 0;
+			Fault_TE_MCU_Soft_Flag = RESET;
 			ErrorCount_TE_MCU = 0;
 			SaveFlag4 = RESET;
 		}
 
 		TE_MCU_DataRefreshFlag = FALSE;
 	}
+	
+	//Fault_TE_MCU故障恢复判断
+	if((Fault_TE_MCU_Com_Flag == RESET) && (Fault_TE_MCU_Soft_Flag == RESET))//通信正常,且时钟频率正常、TE的MCU微故障检测正常
+	{
+	  p_MC_ErrorCode->ERROR_Bit.Fault_TE_MCU = 0;
+	}
 }
 
 void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)

+ 109 - 80
User/Src/motor_control.c

@@ -583,8 +583,10 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 	uint16_t CurrentLimitSet;                //限流设置值,不同助力档位更新
 	
 	static uint8_t TorqueRefEndUpdateCount = 0;
-	static FlagStatus SoftStarFlag = SET;
-	static uint16_t SoftStarDelayTimeCount = 0;
+	static FlagStatus SoftStartFlag = SET;
+	static uint16_t SoftStartDelayTimeCount = 0;
+	uint16_t SoftStartDelayTime = 0;
+	uint16_t SoftStartAcc = 0;
 
 	#if 1
 	
@@ -698,18 +700,18 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 	//停机状态,延时处理
 	if(MC_TorqueProcess_Param.MotorStopLock_Flag == SET)
 	{
-	  if(MC_TorqueProcess_Param.TorqueRefEnd <= 14)
+	  if(MC_TorqueProcess_Param.TorqueRefEnd <= 7)
 		{
 		  MC_TorqueProcess_Param.TorqueRefEnd = 0;
 			//停机处理
 			MC_MotorStop(&MC_StarFlag);
 			//缓启动标志置位
-			SoftStarFlag = SET;
-			SoftStarDelayTimeCount = 0;
+			SoftStartFlag = SET;
+			SoftStartDelayTimeCount = 0;
 		}
 		else
 		{
-		  MC_TorqueProcess_Param.TorqueRefEnd -= 14;  //这里影响到停止踩踏后的断电时间
+		  MC_TorqueProcess_Param.TorqueRefEnd -= 7;  //这里影响到停止踩踏后的断电时间
 			MC_MotorStar(&MC_StarFlag);
 		}
 	}
@@ -722,25 +724,29 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			case MC_GearSt_Torque_ECO:
 			{
 				//控制输入给定加速斜率
-				TorqueAccStep = MC_AssisParam.Gear_ECO.AccCnt;
-				//控制输入给定减速斜率
-				TorqueDecStep = MC_AssisParam.Gear_ECO.DecCnt;
-				//随力矩输入调节助力比
-				if(MC_ConfigParam1.StarModel == MC_StarMode_DYNAMIC)//强劲模式
+				if(MC_ConfigParam1.UserAdjParam_ECO.StarModel_GAIN <= 80)
+				{
+				  TorqueAccStep = MC_AssisParam.Gear_ECO.AccCnt - 1;
+				}
+				else if(MC_ConfigParam1.UserAdjParam_ECO.StarModel_GAIN >= 120)
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(300, MC_AssisParam.Gear_ECO.Gain_K, MC_AssisParam.Gear_ECO.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
-					TorqueAccStep <<= 1;
-					TorqueDecStep <<= 1;
+				  TorqueAccStep = MC_AssisParam.Gear_ECO.AccCnt + 1;
 				}
 				else
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_ECO.Gain_K, MC_AssisParam.Gear_ECO.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				  TorqueAccStep = MC_AssisParam.Gear_ECO.AccCnt;
 				}
+				TorqueAccStep = (TorqueAccStep <= 0) ? 1 : TorqueAccStep;
+				//控制输入给定减速斜率
+				TorqueDecStep = MC_AssisParam.Gear_ECO.DecCnt;
+				//随力矩输入调节助力比
+				Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_ECO.Gain_K, MC_AssisParam.Gear_ECO.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				//根据助力增益调节助力比
+				Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_ECO.Assist_K_GAIN / 100;
 				//给定下限
 				Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_ECO.Lower_Iq) ? MC_AssisParam.Gear_ECO.Lower_Iq : Torque_Temp;
 				//给定上限
 				Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_ECO.Upper_Iq) ? MC_AssisParam.Gear_ECO.Upper_Iq : Torque_Temp;
-				
 				//限流参数设置
 				CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_ECO.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
 				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
@@ -753,20 +759,25 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			case MC_GearSt_Torque_NORM:
 			{
 				//控制输入给定加速斜率
-				TorqueAccStep = MC_AssisParam.Gear_NORM.AccCnt;
-				//控制输入给定减速斜率
-				TorqueDecStep = MC_AssisParam.Gear_NORM.DecCnt;
-				//随力矩输入调节助力比
-				if(MC_ConfigParam1.StarModel == MC_StarMode_DYNAMIC)//强劲模式
+				if(MC_ConfigParam1.UserAdjParam_NORM.StarModel_GAIN <= 80)
+				{
+				  TorqueAccStep = MC_AssisParam.Gear_NORM.AccCnt - 1;
+				}
+				else if(MC_ConfigParam1.UserAdjParam_NORM.StarModel_GAIN >= 120)
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(300, MC_AssisParam.Gear_NORM.Gain_K, MC_AssisParam.Gear_NORM.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
-					TorqueAccStep <<= 1;
-					TorqueDecStep <<= 1;
+				  TorqueAccStep = MC_AssisParam.Gear_NORM.AccCnt + 1;
 				}
 				else
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_NORM.Gain_K, MC_AssisParam.Gear_NORM.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				  TorqueAccStep = MC_AssisParam.Gear_NORM.AccCnt;
 				}
+				TorqueAccStep = (TorqueAccStep <= 0) ? 1 : TorqueAccStep;
+				//控制输入给定减速斜率
+				TorqueDecStep = MC_AssisParam.Gear_NORM.DecCnt;
+				//随力矩输入调节助力比
+				Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_NORM.Gain_K, MC_AssisParam.Gear_NORM.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				//根据助力增益调节助力比
+				Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_NORM.Assist_K_GAIN / 100;
 				//给定下限
 				Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_NORM.Lower_Iq) ? MC_AssisParam.Gear_NORM.Lower_Iq : Torque_Temp;
 				//给定上限
@@ -784,25 +795,29 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			case MC_GearSt_Torque_SPORT:
 			{
 				//控制输入给定加速斜率
-				TorqueAccStep = MC_AssisParam.Gear_SPORT.AccCnt;
-				//控制输入给定减速斜率
-				TorqueDecStep = MC_AssisParam.Gear_SPORT.DecCnt;
-				//随力矩输入调节助力比
-				if(MC_ConfigParam1.StarModel == MC_StarMode_DYNAMIC)//强劲模式
+				if(MC_ConfigParam1.UserAdjParam_SPORT.StarModel_GAIN <= 80)
+				{
+				  TorqueAccStep = MC_AssisParam.Gear_SPORT.AccCnt - 1;
+				}
+				else if(MC_ConfigParam1.UserAdjParam_SPORT.StarModel_GAIN >= 120)
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(300, MC_AssisParam.Gear_SPORT.Gain_K, MC_AssisParam.Gear_SPORT.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
-					TorqueAccStep <<= 1;
-					TorqueDecStep <<= 1;
+				  TorqueAccStep = MC_AssisParam.Gear_SPORT.AccCnt + 1;
 				}
 				else
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_SPORT.Gain_K, MC_AssisParam.Gear_SPORT.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				  TorqueAccStep = MC_AssisParam.Gear_SPORT.AccCnt;
 				}
+				TorqueAccStep = (TorqueAccStep <= 0) ? 1 : TorqueAccStep;
+				//控制输入给定减速斜率
+				TorqueDecStep = MC_AssisParam.Gear_SPORT.DecCnt;
+				//随力矩输入调节助力比
+				Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_SPORT.Gain_K, MC_AssisParam.Gear_SPORT.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				//根据助力增益调节助力比
+				Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_SPORT.Assist_K_GAIN / 100;
 				//给定下限
 				Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_SPORT.Lower_Iq) ? MC_AssisParam.Gear_SPORT.Lower_Iq : Torque_Temp;
 				//给定上限
 				Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_SPORT.Upper_Iq) ? MC_AssisParam.Gear_SPORT.Upper_Iq : Torque_Temp;
-				
 				//限流参数设置
 				CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_SPORT.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_CadenceLimit_K;
 				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
@@ -815,25 +830,29 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			case MC_GearSt_Torque_TURBO:
 			{
 				//控制输入给定加速斜率
-				TorqueAccStep = MC_AssisParam.Gear_TURBO.AccCnt;
-				//控制输入给定减速斜率
-				TorqueDecStep = MC_AssisParam.Gear_TURBO.DecCnt;
-				//随力矩输入调节助力比
-				if(MC_ConfigParam1.StarModel == MC_StarMode_DYNAMIC)//强劲模式
+				if(MC_ConfigParam1.UserAdjParam_TURBO.StarModel_GAIN <= 80)
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(300, MC_AssisParam.Gear_TURBO.Gain_K, MC_AssisParam.Gear_TURBO.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
-					TorqueAccStep <<= 1;
-					TorqueDecStep <<= 1;
+				  TorqueAccStep = MC_AssisParam.Gear_TURBO.AccCnt - 1;
+				}
+				else if(MC_ConfigParam1.UserAdjParam_TURBO.StarModel_GAIN >= 120)
+				{
+				  TorqueAccStep = MC_AssisParam.Gear_TURBO.AccCnt + 1;
 				}
 				else
 				{
-					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_TURBO.Gain_K, MC_AssisParam.Gear_TURBO.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				  TorqueAccStep = MC_AssisParam.Gear_TURBO.AccCnt;
 				}
+				TorqueAccStep = (TorqueAccStep <= 0) ? 1 : TorqueAccStep;
+				//控制输入给定减速斜率
+				TorqueDecStep = MC_AssisParam.Gear_TURBO.DecCnt;
+				//随力矩输入调节助力比
+				Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(100, MC_AssisParam.Gear_TURBO.Gain_K, MC_AssisParam.Gear_TURBO.Upper_Iq, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				//根据助力增益调节助力比
+				Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_TURBO.Assist_K_GAIN / 100;
 				//给定下限
 				Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_TURBO.Lower_Iq) ? MC_AssisParam.Gear_TURBO.Lower_Iq : Torque_Temp;
 				//给定上限
 				Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_TURBO.Upper_Iq) ? MC_AssisParam.Gear_TURBO.Upper_Iq : Torque_Temp;
-				
 				//限流参数设置
 				CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_TURBO.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_CadenceLimit_K;
 				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
@@ -846,22 +865,29 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			case MC_GearSt_SMART:
 			{
 				//控制输入给定加速斜率
-				TorqueAccStep = MC_AssisParam.Gear_SMART.AccCnt;
+				if(MC_ConfigParam1.UserAdjParam_SMART.StarModel_GAIN <= 80)
+				{
+				  TorqueAccStep = MC_AssisParam.Gear_SMART.AccCnt - 1;
+				}
+				else if(MC_ConfigParam1.UserAdjParam_SMART.StarModel_GAIN >= 120)
+				{
+				  TorqueAccStep = MC_AssisParam.Gear_SMART.AccCnt + 1;
+				}
+				else
+				{
+				  TorqueAccStep = MC_AssisParam.Gear_SMART.AccCnt;
+				}
+				TorqueAccStep = (TorqueAccStep <= 0) ? 1 : TorqueAccStep;
 				//控制输入给定减速斜率
 				TorqueDecStep = MC_AssisParam.Gear_SMART.DecCnt;
 				//助力比控制系数
 				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_TorqueProcess_Param.TorqueApp) / (MC_AssisParam.Gear_SMART.i_Sport_TH);
-				if(MC_ConfigParam1.StarModel == MC_StarMode_DYNAMIC)//强劲模式
-				{
-					Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Coefficient_GainCal(100, 1382, MC_AssisParam.Gear_SMART.i_Sport_TH, Torque_Temp)) >> 10);
-					TorqueAccStep <<= 1;
-					TorqueDecStep <<= 1;
-				}
+				//根据助力增益调节助力比
+				Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_SMART.Assist_K_GAIN / 100;
 				//给定下限
 				Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_SMART.Lower_Iq) ? MC_AssisParam.Gear_SMART.Lower_Iq : Torque_Temp;
 				//给定上限
 				Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_SMART.Upper_Iq) ? MC_AssisParam.Gear_SMART.Upper_Iq : Torque_Temp;
-				
 				//限流参数设置
 				CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_SMART.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_CadenceLimit_K;
 				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
@@ -881,19 +907,9 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 		}
 		
 		//随车速调节助力比
-		if(MC_ConfigParam1.StarModel == MC_StarMode_DYNAMIC)
-		{
-			Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(90, -2, MC_ConfigParam1.SpeedLimit * 10, 52, MC_SpeedSensorData.Speed_Data)) >> 10);
-		}
-		else if(MC_ConfigParam1.StarModel == MC_StarMode_SOFT)
-		{
-			Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp *  Function_Linear_3Stage(120, -3, MC_ConfigParam1.SpeedLimit * 10, 52, MC_SpeedSensorData.Speed_Data)) >> 10);
-		}
-		else
-		{
-			Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(MC_ConfigParam1.SpeedLimit * 10, 0, MC_ConfigParam1.SpeedLimit * 10, 52, MC_SpeedSensorData.Speed_Data)) >> 10);
-		}
-				
+		Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(MC_ConfigParam1.SpeedLimit * 10, 0, MC_ConfigParam1.SpeedLimit * 10, 52, MC_SpeedSensorData.Speed_Data)) >> 10);
+			
+    //助力输出		
 		MC_TorqueProcess_Param.TorqueRef = Torque_Temp;
 		if(MC_TorqueProcess_Param.TorqueRef <= 0)
 		{
@@ -909,7 +925,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			}
 			else if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) < (- 1))
 			{
-				MC_TorqueProcess_Param.TorqueRefEnd -= 1;
+				MC_TorqueProcess_Param.TorqueRefEnd -= 1; 
 			}
 		}
 		else if( (Bike_Attitude.UpWardSlope_flag == TRUE)&&(MC_SpeedSensorData.Speed_Data < 100))  //上坡处理			  
@@ -928,31 +944,44 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 				}
 			}		
 		}		
-		#if 1
-    else if(SoftStarFlag == SET)  //缓启动处理
+    else if(SoftStartFlag == SET)  //启动处理
 		{
-		  SoftStarDelayTimeCount++;
-			if(SoftStarDelayTimeCount <= 750) // 启动前750ms,按照0.1倍率逐步增加加减速斜率
+			if(MC_ConfigParam1.StarModel == MC_StarMode_DYNAMIC)
+			{
+				SoftStartDelayTime = 100;      //启动处理延时100ms
+				SoftStartAcc = 10;             //10ms递增0.1倍
+			}
+			else if(MC_ConfigParam1.StarModel == MC_StarMode_SOFT)
+			{
+				SoftStartDelayTime = 900;      //启动处理延时900ms
+				SoftStartAcc = 90;             //90ms递增0.1倍
+			}
+			else
+			{
+				SoftStartDelayTime = 300;      //启动处理延时300ms
+				SoftStartAcc = 30;             //30ms递增0.1倍
+			}
+			SoftStartDelayTimeCount++;
+			if(SoftStartDelayTimeCount <= SoftStartDelayTime) // 缓启动过程,按照0.1倍率逐步增加加减速斜率
 			{  
-				if((SoftStarDelayTimeCount % (10 - SoftStarDelayTimeCount / 75))  == 0)
+				if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) > 2)
 				{
-					if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) > 2)
+					if((SoftStartDelayTimeCount % (10 - SoftStartDelayTimeCount / SoftStartAcc))  == 0)
 					{
 						MC_TorqueProcess_Param.TorqueRefEnd += TorqueAccStep;
 					}
-					else if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) < (- 1))
-					{
-						MC_TorqueProcess_Param.TorqueRefEnd -= TorqueDecStep;
-					}
+				}
+				else if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) < (- 1))
+				{
+					MC_TorqueProcess_Param.TorqueRefEnd -= TorqueDecStep;
 				}
 			}
 			else
 			{
-			  SoftStarDelayTimeCount = 0;
-				SoftStarFlag = RESET;
+				SoftStartDelayTimeCount = 0;
+				SoftStartFlag = RESET;
 			}
 		}		
-    #endif		
 		else //正常骑行
 		{
 			if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) > 2)

+ 3 - 19
User/Src/var.c

@@ -482,7 +482,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"TT_KZ_010A.     ", 16);//TT_KZ_010A
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r0r0_20191226.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r0r1_20200102.", 16);
 	
 	//电机型号
 	strncpy(MC_VerInfo.Mode, (char*)"MOTINOVA PEGASI.", 16);
@@ -495,24 +495,8 @@ void Var_Init(void)
 	strncpy(MC_MacInfo.MacAddr, (char*)"WUHAN.  ", 8);
 	strncpy(MC_MacInfo.MacDate, (char*)"20191201", 8);
 
-	//MC校验信息初始化,校验码从EEPROM读取
-	uint32_t ID_Temp;
-	uint8_t i;
-	ID_Temp = *(__IO uint32_t*)(0x1FFFF7E8);
-	for(i=0; i<4; i++)
-	{
-	  MC_CheckInfo.MAC_ID[i] = ID_Temp >> (8 * i);
-	}
-	ID_Temp = *(__IO uint32_t*)(0x1FFFF7EC);
-	for(i=0; i<4; i++)
-	{
-	  MC_CheckInfo.MAC_ID[ 4 + i] = ID_Temp >> (8 * i);
-	}
-	ID_Temp = *(__IO uint32_t*)(0x1FFFF7F0);
-	for(i=0; i<4; i++)
-	{
-	  MC_CheckInfo.MAC_ID[ 8 + i] = ID_Temp >> (8 * i);
-	}
+	//MCU ID读取
+	memcpy((uint8_t*)MC_CheckInfo.MAC_ID, (uint8_t*)(0x1FFFF7E8), 12);
 
   //MC存储数据初始化为默认值
 	Var_SetToDefaultParam();

+ 6 - 0
修改说明.txt

@@ -234,5 +234,11 @@ V2.0.0_20191226
 4、针对三个力矩传感器标定修改通信协议;
 5、版本号V2.0.0_20191226
 
+V2.0.1_20200102
+1、针对TE的故障检测,TE串口通信和TE的时钟频率判断结果都会直接改变ERROR_Bit.Fault_TE_MCU的结果,存在故障置位后被马上复位的情况,修改为置位到复位时要同时满足两个条件;
+2、修改停机时的减速值为7,可以消掉停机的滴答声;
+3、启动模式(柔和、强劲、标准)用于控制启动时,加速斜率递增的时间;
+4、针对每个档位的助力增益和加速度增益,调整相应的助力系数和加速曲线;
+5、版本号:V2.0.1_20200102