Pārlūkot izejas kodu

On master: 金科一德过热修改指拨最大力矩

Dail 1 gadu atpakaļ
vecāks
revīzija
c383375bc8

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1562 - 1562
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 131 - 3
User/Src/motor_control.c

@@ -188,6 +188,18 @@ uint16_t MC_Cal_K_ByTemperature(uint16_t CoilTemp, uint16_t AlarmTempTH)
 	return(Result);
 }
 
+//随车速调节启动最大力矩
+uint16_t MC_Cal_MaxIq_BySpeed(uint16_t SpeedTh1,uint16_t SpeedTh2, uint16_t MaxIq1, uint16_t MaxIq2, uint16_t Speed)
+{
+  if(Speed < SpeedTh1)
+		return MaxIq1;
+	else if(Speed > SpeedTh2)
+		return MaxIq2;
+	else
+	  return (MaxIq2 + (SpeedTh2 - Speed) * ((MaxIq1 - MaxIq2) / (SpeedTh2 - SpeedTh1)));
+}
+
+
 //助力模式判断处理
 MC_AssistRunMode_Struct_t MC_JudgeAsistRunMode_Process(MC_GasMode_Struct_t GasMode_Param, uint16_t GasSensorData, MC_GearSt_Struct_t GearSt, TrueOrFalse_Flag_Struct_t StopFlag)
 {
@@ -526,16 +538,16 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
 	uint16_t CurrentLimitSet;                //限流设置值,不同助力档位更新	
 	static uint8_t TorqueRefEndUpdateCount = 0;
 	
-	
 	//力矩输入
   MC_TorqueProcess_Param.TorqueApp = (GasSensorData < TorqueSensorData) ? ((TorqueSensorData * TorqueSensorData) >> 11) : ((GasSensorData * GasSensorData) >> 11);
 	MC_TorqueProcess_Param.TorqueApp = (MC_TorqueProcess_Param.TorqueApp > 2048) ? 2048 : MC_TorqueProcess_Param.TorqueApp;
 
-  //输出目标力矩
+  //输出目标力矩	
   if(GasMode_Param.Mode_bit.PowerLimitFlag == 1) //根据挡位限制功率
 	{
 		switch(GearSt)
 		{
+			#if 0
 			case MC_GearSt_Torque_ECO:
 			{
 				//控制输入给定加速斜率
@@ -593,7 +605,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
 				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
 				break;
 			}
-			case MC_GearSt_Torque_TURBO: case MC_GearSt_SMART:
+			case MC_GearSt_Torque_TURBO:
 			{
 				//控制输入给定加速斜率
 				TorqueAccStep = (MC_AssisParam.Gear_TURBO.AccCnt <= 0) ? 1 : MC_AssisParam.Gear_TURBO.AccCnt;
@@ -612,6 +624,122 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
 				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
 				break;
 			}
+			case MC_GearSt_SMART:
+			{
+				//控制输入给定加速斜率
+				TorqueAccStep = (MC_AssisParam.Gear_SMART.AccCnt <= 0) ? 1 : MC_AssisParam.Gear_SMART.AccCnt;
+				//控制输入给定减速斜率
+				TorqueDecStep = MC_AssisParam.Gear_SMART.DecCnt;	
+				//根据输入调节力矩环给定
+				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_AssisParam.Gear_SMART.Upper_Iq) >> 11;
+				//给定上限
+				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) * 100;
+				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
+				PID_IMax.hLower_Limit_Output = -(MC_AssisParam.Gear_SMART.Upper_Iq);   //Lower Limit for Output limitation
+				PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
+				PID_IMax.wLower_Limit_Integral = -(MC_AssisParam.Gear_SMART.Upper_Iq << 10); // 放大1024
+				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
+				break;
+			}
+			#else
+			case MC_GearSt_Torque_ECO:
+			{
+				//控制输入给定加速斜率
+				TorqueAccStep = 4;
+				//控制输入给定减速斜率
+				TorqueDecStep = 2;	
+				//根据输入调节力矩环给定
+				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1260, MC_SpeedSensorData.Speed_Data)) >> 11;
+				//给定上限
+				Torque_Temp = (Torque_Temp > MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1260, MC_SpeedSensorData.Speed_Data)) ? MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1260, MC_SpeedSensorData.Speed_Data) : Torque_Temp;
+				//限流参数设置
+				CurrentLimitSet = (uint32_t)(1024 * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
+				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
+				PID_IMax.hLower_Limit_Output = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1260, MC_SpeedSensorData.Speed_Data));   //Lower Limit for Output limitation
+				PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
+				PID_IMax.wLower_Limit_Integral = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1260, MC_SpeedSensorData.Speed_Data) << 10); // 放大1024
+				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
+				break;
+			}
+			case MC_GearSt_Torque_NORM:
+			{
+				//控制输入给定加速斜率
+				TorqueAccStep = 4;
+				//控制输入给定减速斜率
+				TorqueDecStep = 2;	
+				//根据输入调节力矩环给定
+				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1365, MC_SpeedSensorData.Speed_Data)) >> 11;
+				//给定上限
+				Torque_Temp = (Torque_Temp > MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1365, MC_SpeedSensorData.Speed_Data)) ? MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1365, MC_SpeedSensorData.Speed_Data) : Torque_Temp;
+				//限流参数设置
+				CurrentLimitSet = (uint32_t)(1024 * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
+				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
+				PID_IMax.hLower_Limit_Output = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1365, MC_SpeedSensorData.Speed_Data));   //Lower Limit for Output limitation
+				PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
+				PID_IMax.wLower_Limit_Integral = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1365, MC_SpeedSensorData.Speed_Data) << 10); // 放大1024
+				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
+				break;
+			}
+			case MC_GearSt_Torque_SPORT:
+			{
+				//控制输入给定加速斜率
+				TorqueAccStep = 4;
+				//控制输入给定减速斜率
+				TorqueDecStep = 2;	
+				//根据输入调节力矩环给定
+				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1470, MC_SpeedSensorData.Speed_Data)) >> 11;
+				//给定上限
+				Torque_Temp = (Torque_Temp > MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1470, MC_SpeedSensorData.Speed_Data)) ? MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1470, MC_SpeedSensorData.Speed_Data) : Torque_Temp;
+				//限流参数设置
+				CurrentLimitSet = (uint32_t)(1024 * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
+				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
+				PID_IMax.hLower_Limit_Output = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1470, MC_SpeedSensorData.Speed_Data));   //Lower Limit for Output limitation
+				PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
+				PID_IMax.wLower_Limit_Integral = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1470, MC_SpeedSensorData.Speed_Data) << 10); // 放大1024
+				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
+				break;
+			}
+			case MC_GearSt_Torque_TURBO:
+			{
+				//控制输入给定加速斜率
+				TorqueAccStep = 4;
+				//控制输入给定减速斜率
+				TorqueDecStep = 2;	
+				//根据输入调节力矩环给定
+				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1575, MC_SpeedSensorData.Speed_Data)) >> 11;
+				//给定上限
+				Torque_Temp = (Torque_Temp > MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1575, MC_SpeedSensorData.Speed_Data)) ? MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1575, MC_SpeedSensorData.Speed_Data) : Torque_Temp;
+				//限流参数设置
+				CurrentLimitSet = (uint32_t)(1024 * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
+				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
+				PID_IMax.hLower_Limit_Output = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1575, MC_SpeedSensorData.Speed_Data));   //Lower Limit for Output limitation
+				PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
+				PID_IMax.wLower_Limit_Integral = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1575, MC_SpeedSensorData.Speed_Data) << 10); // 放大1024
+				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
+				break;
+			}
+			case MC_GearSt_SMART:
+			{
+				//控制输入给定加速斜率
+				TorqueAccStep = 4;
+				//控制输入给定减速斜率
+				TorqueDecStep = 2;	
+				//根据输入调节力矩环给定
+				Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1680, MC_SpeedSensorData.Speed_Data)) >> 11;
+				//给定上限
+				Torque_Temp = (Torque_Temp > MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1680, MC_SpeedSensorData.Speed_Data)) ? MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1680, MC_SpeedSensorData.Speed_Data) : Torque_Temp;
+				//限流参数设置
+				CurrentLimitSet = (uint32_t)(1024 * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
+				CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
+				PID_IMax.hLower_Limit_Output = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1680, MC_SpeedSensorData.Speed_Data));   //Lower Limit for Output limitation
+				PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
+				PID_IMax.wLower_Limit_Integral = -(MC_Cal_MaxIq_BySpeed(50, 100, 2100, 1680, MC_SpeedSensorData.Speed_Data) << 10); // 放大1024
+				PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
+				break;
+			}
+			#endif
 			default: 
 			{
 				TorqueAccStep = 0;

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels