浏览代码

2022欧展期间修改版本:
V7.0.3.1.1_20220729
因客户反馈部分电机骑行过程助力会中断,修改Smart档低力矩时助力曲线(按照Norm计算);修改低力矩停机条件(启动值的1/4);踏频停止检测判断时间根据踏频线性变化;修改力矩给定的减速曲线。

hero 1 年之前
父节点
当前提交
b6da9382c1
共有 3 个文件被更改,包括 41 次插入12 次删除
  1. 16 4
      User/Src/cadence_sensor.c
  2. 22 5
      User/Src/motor_control.c
  3. 3 3
      User/Src/var.c

+ 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)
 	if((HAL_GetTick() - CadenceStopJudgeTimeCnt) > StopDelayTime)
 	{
 	{
 		p_MC_CadenceResult->IsStopFlag = TRUE;
 		p_MC_CadenceResult->IsStopFlag = TRUE;

+ 22 - 5
User/Src/motor_control.c

@@ -652,7 +652,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
   static uint16_t CurrentLimitPresent;     //限流实际值,做升降速处理
   static uint16_t CurrentLimitPresent;     //限流实际值,做升降速处理
 	uint16_t CurrentLimitSet;                //限流设置值,不同助力档位更新
 	uint16_t CurrentLimitSet;                //限流设置值,不同助力档位更新
 	
 	
-	static uint8_t TorqueRefEndUpdateCount = 0;
+	static uint8_t TorqueRefEndUpdateCount = 0, TorqueRefEndUpdateCount_Normal = 0;
 	
 	
 	#define SOFT_SATRT 1
 	#define SOFT_SATRT 1
 	
 	
@@ -728,7 +728,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 	#endif
 	#endif
 		
 		
 	//低力矩停机
 	//低力矩停机
-	TorqueStopData = (TorqueSensorStartData < 200) ? 100 : (TorqueSensorStartData >> 1);
+	TorqueStopData = (TorqueSensorStartData < 400) ? 100 : (TorqueSensorStartData >> 2);
 	if(MC_TorqueProcess_Param.TorqueApp >= (TorqueStopData))
 	if(MC_TorqueProcess_Param.TorqueApp >= (TorqueStopData))
 	{
 	{
 	  TorqueStopDelayTimeCnt = HAL_GetTick();
 	  TorqueStopDelayTimeCnt = HAL_GetTick();
@@ -962,7 +962,14 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 				//控制输入给定减速斜率
 				//控制输入给定减速斜率
 				TorqueDecStep = MC_AssisParam.Gear_SMART.DecCnt;
 				TorqueDecStep = MC_AssisParam.Gear_SMART.DecCnt;
 				//助力比控制系数
 				//助力比控制系数
-				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_TorqueProcess_Param.TorqueApp) / (MC_AssisParam.Gear_SMART.TorqueApp_TH);
+				if(MC_TorqueProcess_Param.TorqueApp < 510)
+				{
+					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_NORM.Gain_K >> 1, MC_AssisParam.Gear_NORM.Gain_K, MC_AssisParam.Gear_NORM.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+				}
+				else
+				{
+					Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_TorqueProcess_Param.TorqueApp) / (MC_AssisParam.Gear_SMART.TorqueApp_TH);
+				}
 				//根据助力增益调节助力比
 				//根据助力增益调节助力比
 				Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_SMART.Assist_K_GAIN / 100;
 				Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_SMART.Assist_K_GAIN / 100;
 				//给定下限
 				//给定下限
@@ -1006,7 +1013,12 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			}
 			}
 			else if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) < (- 1))
 			else if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) < (- 1))
 			{
 			{
-				MC_TorqueProcess_Param.TorqueRefEnd -= 1; 
+				TorqueRefEndUpdateCount_Normal++;			
+				if(TorqueRefEndUpdateCount_Normal >=2)
+				{
+					TorqueRefEndUpdateCount_Normal = 0;
+					MC_TorqueProcess_Param.TorqueRefEnd -= 1;
+				} 
 			}
 			}
 		}
 		}
 		else if((0)&&(MC_SpeedSensorData.Speed_Data < 100))  //上坡处理			  
 		else if((0)&&(MC_SpeedSensorData.Speed_Data < 100))  //上坡处理			  
@@ -1078,7 +1090,12 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			}
 			}
 			else if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) < (- 1))
 			else if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) < (- 1))
 			{
 			{
-				MC_TorqueProcess_Param.TorqueRefEnd -= TorqueDecStep;
+				TorqueRefEndUpdateCount_Normal++;			
+				if(TorqueRefEndUpdateCount_Normal >=2)
+				{
+					TorqueRefEndUpdateCount_Normal = 0;
+					MC_TorqueProcess_Param.TorqueRefEnd -= 1;
+				} 
 			}
 			}
 		}
 		}
 		MC_TorqueProcess_Param.TorqueRefEnd = (MC_TorqueProcess_Param.TorqueRefEnd < 6) ? 6 : MC_TorqueProcess_Param.TorqueRefEnd;
 		MC_TorqueProcess_Param.TorqueRefEnd = (MC_TorqueProcess_Param.TorqueRefEnd < 6) ? 6 : MC_TorqueProcess_Param.TorqueRefEnd;

+ 3 - 3
User/Src/var.c

@@ -352,7 +352,7 @@ const nGearParam_Struct_t GearParam_Default_TURBO_Pegasi =
 const nGearParam_Struct_t GearParam_Default_SMART_Pegasi =
 const nGearParam_Struct_t GearParam_Default_SMART_Pegasi =
 {
 {
   (uint16_t)0,
   (uint16_t)0,
-	(uint16_t)560,
+	(uint16_t)460,
 	(uint16_t)0,
 	(uint16_t)0,
 	(uint16_t)2100,
 	(uint16_t)2100,
 	(uint8_t)4,
 	(uint8_t)4,
@@ -497,8 +497,8 @@ void Var_Init(void)
 		
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"TTKZ010D.       ", 16);
   strncpy(MC_VerInfo.HW_Version, (char*)"TTKZ010D.       ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V7r0r3_20220418.", 16);
-	strncpy(Firmware_Special, (char*)"TC013039-MB2106-V1r0.           ", 32);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V7r0r3_20220729.", 16);
+	strncpy(Firmware_Special, (char*)"TC013039-MB2106-V1r1.           ", 32);
 	if(MCUManufacturer == NoName) MC_VerInfo.HW_Version[10] = '0';
 	if(MCUManufacturer == NoName) MC_VerInfo.HW_Version[10] = '0';
 	else if(MCUManufacturer == STM32F103RBT6) MC_VerInfo.HW_Version[10] = '1';
 	else if(MCUManufacturer == STM32F103RBT6) MC_VerInfo.HW_Version[10] = '1';
 	else if(MCUManufacturer == APM32F103RBT6) MC_VerInfo.HW_Version[10] = '2';
 	else if(MCUManufacturer == APM32F103RBT6) MC_VerInfo.HW_Version[10] = '2';