浏览代码

1、增加转把零速启动和带速启动的标志。
2、修改转把限速的偏移计算方式,以0xAA>>3为中心对称偏移,小于5时加31.

Dail 1 年之前
父节点
当前提交
f0614e3cd5
共有 5 个文件被更改,包括 2492 次插入2466 次删除
  1. 2455 2455
      MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex
  2. 二进制
      MDK-ARM/bin/QD007A_CTL_APP.bin
  3. 3 2
      User/Inc/var.h
  4. 4 1
      User/Src/math_tools.c
  5. 30 8
      User/Src/motor_control.c

文件差异内容过多而无法显示
+ 2455 - 2455
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


二进制
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 3 - 2
User/Inc/var.h

@@ -180,8 +180,9 @@ typedef union GAS_MODE
   struct
 	{
 	  uint8_t CrontrolMode        :1;   //0-速度模式,1-力矩模式
-		uint8_t PowerLimitFlag      :1;   //0-根据挡位限制,1-不根据挡位限制
-		uint8_t SpeedLimit          :6;   //车速限制
+		uint8_t PowerLimitFlag      :1;   //0-不根据挡位限制,1-根据挡位限制
+		uint8_t StartMode           :1;   //0-零速启动,1-带速启动
+		uint8_t SpeedLimit          :5;   //车速限制
 	}Mode_bit;
 	uint8_t Mode;                       //0x55-不支持转把模式
 }MC_GasMode_Struct_t;

+ 4 - 1
User/Src/math_tools.c

@@ -56,7 +56,10 @@ uint16_t Function_Linear_3Stage(uint16_t Th1, int16_t K1, uint16_t Th2, int16_t
 	
 	if(InputData < Th1)
 	{
-	  Result = 1024 - (Th1 - InputData) * K1; 
+	  if(K1 == 0xFF)
+			Result = 0;
+		else
+		  Result = 1024 - (Th1 - InputData) * K1; 
 	}
 	else if(InputData < Th2)
 	{

+ 30 - 8
User/Src/motor_control.c

@@ -239,6 +239,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	static int16_t TorQueBySpd = 0;
 	int32_t Ref_Speed_Temp;
 	static int16_t SpdMotorByIdc = 0;
+	uint8_t SpeedLimit = 0;
 	
 	MC_CalParam_Struct_t p_MC_CalParam = {MC_AssistRunMode_INVALID, 0,	0, RESET};
 
@@ -297,14 +298,23 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	Tmp = SensorData-50;  //指拨100启动,减去50能控低速
 	Tmp = Tmp > 2048 ? 2048 : Tmp; 
 	Tmp = (Tmp*Tmp)/2048;   //指拨值改为抛物线,低速控制行程变大
-	/*电机转速设定,根据指拨大小、车轮限速值和速比,换算*/
-	SpeedSet = (Tmp * ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * SpdProportion) / 10  >> 11);			//(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)
 	
+	/*电机转速设定,根据指拨大小、车轮限速值和速比,换算,以0xAA >> 3*为中心根据整车限速对称偏移,调整上限±15km/h*/
+	if(MC_GasMode_Param.Mode_bit.SpeedLimit <= 5)
+	  SpeedLimit = MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3);
+	else
+		SpeedLimit = MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3);
+	SpeedSet = Tmp * (SpeedLimit * SpdProportion) / 10  >> 11; //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)
 	//超过限速值,设定电机转速为0
-	if(wheelSpeed > ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * 10 + 20))
+	if(wheelSpeed > ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + 20))
 	{
 		SpeedSet = 0;
 	}
+	if(MC_GasMode_Param.Mode_bit.StartMode == 1) //带速启动
+	{
+	  if(wheelSpeed <= 60)
+			SpeedSet = 0;
+	}
 	
 	SpeedSet = (SpeedSet > 0) ? SpeedSet : 0;
 	SpeedSet = (SpeedSet < SpeedMax) ? SpeedSet : SpeedMax;
@@ -583,13 +593,25 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
 	static uint16_t speedLimitStart = 250, speedLimitEnd = 272, slewRate = 52;
 	if((MC_ConfigParam2.SpeedLimitStartAdj > 50) || (MC_ConfigParam2.SpeedLimitStartAdj < -50)) MC_ConfigParam2.SpeedLimitStartAdj=0;
 	if((MC_ConfigParam2.SpeedLimitEndAdj > 50) || (MC_ConfigParam2.SpeedLimitEndAdj < -50)) MC_ConfigParam2.SpeedLimitEndAdj=0;
-		
-	speedLimitStart = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * 10 + MC_ConfigParam2.SpeedLimitStartAdj;
-	speedLimitEnd = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22;
-	slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);		
+	
+  if(MC_GasMode_Param.Mode_bit.SpeedLimit <= 5)
+	{
+	  speedLimitStart = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitStartAdj;
+	  speedLimitEnd = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22;
+	  slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);		
+	}
+	else
+	{
+	  speedLimitStart = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitStartAdj;
+	  speedLimitEnd = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22;
+	  slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);		
+	}	
 	
 	//随车速调节助力比
-	Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(0, 0, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
+	if(MC_GasMode_Param.Mode_bit.StartMode == 0) //零速启动
+	  Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(0, 0, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
+	else //带速启动
+		Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(60, 0xFF, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
 	
 	//助力输出		
 	MC_TorqueProcess_Param.TorqueRef = Torque_Temp;

部分文件因为文件数量过多而无法显示