Преглед на файлове

1、修改传动比计算方法;
2、转把速度模式采用新计算的传动比(目前测试小飞车速上不去,待查)

Dail преди 1 година
родител
ревизия
479b2d2ff0
променени са 7 файла, в които са добавени 2710 реда и са изтрити 2703 реда
  1. 2664 2664
      MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex
  2. BIN
      MDK-ARM/bin/QD007A_CTL_APP.bin
  3. 7 7
      User/Inc/var.h
  4. 2 1
      User/Src/enviolo_can.c
  5. 4 0
      User/Src/motor_control.c
  6. 29 26
      User/Src/tasks.c
  7. 4 5
      User/Src/var.c

Файловите разлики са ограничени, защото са твърде много
+ 2664 - 2664
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 7 - 7
User/Inc/var.h

@@ -478,13 +478,13 @@ typedef struct
 //传动比计算参数
 typedef struct
 {
-  uint16_t Ratio_Per;                           //实时传动比,车速(km/h) / 电机转速(rpm)* 102400,车速 = 电机转速 / 4.55 * 前牙盘 / 后牙盘 * 轮胎周长 * 60 / 1000
-	uint16_t Ratio_Avg;                           //传动比平均
-	uint16_t Ratio_Max;                           //传动比最大值
-	uint16_t Ratio_Min;                           //传动比最小值
-	uint16_t Ratio_Result;                        //传动比使用值
-	TrueOrFalse_Flag_Struct_t Ratio_ShiftFlag;    //挡位切换完成标志
-	uint16_t Ratio_Array[50];                     //传动比缓存
+  uint16_t RatioPer;                           //实时传动比,车速(km/h) / 电机转速(rpm)* 102400,车速 = 电机转速 / 4.55 * 前牙盘 / 后牙盘 * 轮胎周长 * 60 / 1000
+	uint16_t RatioFlt;                           //传动比滤波
+	int32_t RatioFltSum;
+	uint16_t TargetAcc;                          //目标值递增阶梯
+	uint16_t TargetDec;                          //目标值递减阶梯
+	uint16_t RatioDefault;                       //传动比默認值
+	uint16_t RatioResult;                        //传动比输出
 }Bike_RatioCal_Struct_t;
 
 //硬件版本定义表

+ 2 - 1
User/Src/enviolo_can.c

@@ -259,7 +259,8 @@ void GearBox_Loop(void)
 					EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetParams.CadenceMin;
 				else if(GearBox_OBC_SetMode.Value > GearBox_OBC_SetParams.CadenceMax)
 					EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetParams.CadenceMax;
-				EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetMode.Value;
+				else
+				  EnvioloControlParams.CadenceMode_Data = GearBox_OBC_SetMode.Value;
 				EnvioloControlParams.RatioMode_Data = 0;
 			}
 			//更新变速器运行信息,高5位表示变速器状态,低5位表示变速器当前档位

+ 4 - 0
User/Src/motor_control.c

@@ -339,7 +339,11 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	else
 		SpeedLimit = ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
 	//根据SOC限制最大车速
+	#if 0 //旧版传动比计算
 	SpeedSet = Tmp * (SpeedLimit * SpdProportion) / 10  >> 11; //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)  	
+	#else //新版传动比计算
+    SpeedSet = Tmp * SpeedLimit * 50 / Bike_RatioCalParam.RatioResult;
+	#endif
 	
 	//超过限速值,设定电机转速为0
 	if(wheelSpeed > (SpeedLimit * 10 + 20))

+ 29 - 26
User/Src/tasks.c

@@ -89,7 +89,8 @@ void HAL_SYSTICK_Callback(void)
 	if(TimeCnt_10ms >= 10)
 	{
 	  TimeCnt_10ms = 0;
-
+    //计算整车传动比
+		BikeRatioCal_Process(MC_RunInfo.MotorSpeed, MC_RunInfo.Cadence, MC_RunInfo.BikeSpeed, &Bike_RatioCalParam);
 	}
 	
 	//50ms任务
@@ -108,8 +109,7 @@ void HAL_SYSTICK_Callback(void)
 	  TimeCnt_100ms = 0;
 	  //踏频计算滑动均值滤波
 	  MC_RunInfo.Cadence = MovingAverageFilter(MC_CadenceResult.Cadence_Data, MC_Cadence_Array, sizeof(MC_Cadence_Array) / 2);
-		//计算整车传动比
-		BikeRatioCal_Process(MC_RunInfo.MotorSpeed, MC_RunInfo.Cadence, MC_RunInfo.BikeSpeed, &Bike_RatioCalParam);
+		
 	}
 
 	//200ms任务
@@ -977,36 +977,39 @@ void NoPBUMode_Ini( void )
 	}
 }
 
-//车辆传动比计算,运行周期100ms
+//车辆传动比计算,运行周期10ms
 void BikeRatioCal_Process(uint16_t MotorSpeed, uint16_t Cadence, uint16_t BikeSpeed, Bike_RatioCal_Struct_t* p_Bike_RatioCal)
 {
-  static uint8_t Cnt = 0;
 	uint8_t Cal_K = 0;
+	uint16_t AccCnt, DecCnt;
 	//车辆静止或滑行时不计算
 	if((BikeSpeed < 30) || ((BikeSpeed >= 30) && (MotorSpeed < 100) && (Cadence < 10)))
 	{
-	    return;
+	  p_Bike_RatioCal->RatioPer = p_Bike_RatioCal->RatioDefault;
+		p_Bike_RatioCal->RatioResult = p_Bike_RatioCal->RatioDefault;
+		p_Bike_RatioCal->RatioFlt = p_Bike_RatioCal->RatioDefault;
+		p_Bike_RatioCal->RatioFltSum = 0;
+		return;
 	}	
-	//根据车速、电机转速、踏频计算传动系数
-	p_Bike_RatioCal->Ratio_Per = (((uint32_t)BikeSpeed << 18) * 10) / ((((uint32_t)MotorSpeed << 8) > ((uint32_t)Cadence * 2795)) ? ((uint32_t)MotorSpeed << 8) : ((uint32_t)Cadence * 2795));
+	//根据车速、电机转速、踏频计算传动系数,系数 = 车速 / 电机转速 * 1024,其中车速单位为km/h,并放大了10倍
+	p_Bike_RatioCal->RatioPer = (((uint32_t)BikeSpeed << 18) * 10) / ((((uint32_t)MotorSpeed << 8) > ((uint32_t)Cadence * 2795)) ? ((uint32_t)MotorSpeed << 8) : ((uint32_t)Cadence * 2795));
 	//限制计算结果
-	p_Bike_RatioCal->Ratio_Per = (p_Bike_RatioCal->Ratio_Per < 100) ? 100 : ((p_Bike_RatioCal->Ratio_Per > 10000) ? 10000 : p_Bike_RatioCal->Ratio_Per);
-	//判断换挡是否完成
-	p_Bike_RatioCal->Ratio_Array[Cnt++] = p_Bike_RatioCal->Ratio_Per;
-	if(Cnt >= 50)
-	{
-		GetMaxMinAvgData(p_Bike_RatioCal->Ratio_Array, 50, &p_Bike_RatioCal->Ratio_Max, &p_Bike_RatioCal->Ratio_Min, &p_Bike_RatioCal->Ratio_Avg);
-		Cal_K = ((p_Bike_RatioCal->Ratio_Max + p_Bike_RatioCal->Ratio_Min) >> 1) * 100 / p_Bike_RatioCal->Ratio_Avg;
-		if((Cal_K < 120) && (Cal_K > 80))
-		{
-		  p_Bike_RatioCal->Ratio_Result = p_Bike_RatioCal->Ratio_Avg;
-			p_Bike_RatioCal->Ratio_ShiftFlag = TRUE;
-		}
-		else
-		{
-		  p_Bike_RatioCal->Ratio_ShiftFlag = FALSE;
-		}
-		Cnt = 0;
-	}
+	p_Bike_RatioCal->RatioPer = (p_Bike_RatioCal->RatioPer < 500) ? 500 : ((p_Bike_RatioCal->RatioPer > 8000) ? 8000 : p_Bike_RatioCal->RatioPer);
+	//计算结果滤波
+	p_Bike_RatioCal->RatioFltSum += ((p_Bike_RatioCal->RatioPer << 10) - p_Bike_RatioCal->RatioFltSum) >> 5;
+	p_Bike_RatioCal->RatioFlt = p_Bike_RatioCal->RatioFltSum >> 10;
+  //目标值计算
+	#if 0
+  AccCnt = p_Bike_RatioCal->TargetAcc;
+	DecCnt = p_Bike_RatioCal->TargetDec;
+	if(p_Bike_RatioCal->RatioFlt - p_Bike_RatioCal->RatioResult >= AccCnt)
+		p_Bike_RatioCal->RatioResult += AccCnt;
+	else if(p_Bike_RatioCal->RatioResult - p_Bike_RatioCal->RatioFlt >= DecCnt)
+		p_Bike_RatioCal->RatioResult -= DecCnt;
+	else
+		p_Bike_RatioCal->RatioResult = p_Bike_RatioCal->RatioFlt;
+	#else
+	  p_Bike_RatioCal->RatioResult = p_Bike_RatioCal->RatioFlt;
+	#endif
 }
 /**************************全局函数定义结束*****************/

+ 4 - 5
User/Src/var.c

@@ -45,7 +45,7 @@ uint16_t HardwareVersion_AD=0;
 TrueOrFalse_Flag_Struct_t VersionIdentifyFinishedFlag = FALSE;
 TrueOrFalse_Flag_Struct_t PowerDown_SaveFlag = FALSE;
 TrueOrFalse_Flag_Struct_t IsFirstPowerOnFlag = FALSE;
-Bike_RatioCal_Struct_t Bike_RatioCalParam = {0,};
+Bike_RatioCal_Struct_t Bike_RatioCalParam = {0,0,0,100,10,0,0};//传动比计算
 
 //BMS默认设计信息
 const BMS_DesignInfo_Struct_t BMS_DesignInfo_Default =
@@ -597,10 +597,9 @@ void Var_Init(void)
 	Var_SetToDefaultParam();
 	Var_SetToDefaultLog();
 	
-	//传动比计算初始值
-	Bike_RatioCalParam.Ratio_Per = (uint32_t)((MC_ConfigParam1.TeethNum_F * (MC_ConfigParam1.WheelSize + MC_ConfigParam1.WheelSizeAdj) * 60) << 10) / (4550 * MC_ConfigParam1.TeethNum_B);
-	Bike_RatioCalParam.Ratio_Result = Bike_RatioCalParam.Ratio_Per;
-	Bike_RatioCalParam.Ratio_ShiftFlag = FALSE;
+	//传动比计算初始值,车速 = 电机转速 / 4.55 * 前牙盘 / 后牙盘* 周长(cm) * 60 / 1000,周长按cm算相当于放大100倍
+	Bike_RatioCalParam.RatioDefault = (uint32_t)((MC_ConfigParam1.TeethNum_F * (MC_ConfigParam1.WheelSize + MC_ConfigParam1.WheelSizeAdj) * 60) << 10) / (4550 * MC_ConfigParam1.TeethNum_B);
+	Bike_RatioCalParam.RatioResult = Bike_RatioCalParam.RatioDefault;
 }
 
 //根据电机型号系列号调用不同的助力参数

Някои файлове не бяха показани, защото твърде много файлове са промени