|
@@ -234,7 +234,7 @@ int16_t SpeedSetReal = 0; //
|
|
|
/*指拨模式相关变量*/
|
|
|
|
|
|
//指拨模式处理
|
|
|
-MC_CalParam_Struct_t MC_AssistRunMode_Gas_Process(uint16_t SensorData, MC_GearSt_Struct_t GearSt)
|
|
|
+MC_CalParam_Struct_t MC_AssistRunMode_Gas_Process(uint16_t GasSensorData, uint16_t TorqueSensorData, MC_GearSt_Struct_t GearSt)
|
|
|
{
|
|
|
int32_t Tmp;
|
|
|
int16_t TorQueBySpd = 0;
|
|
@@ -298,7 +298,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Gas_Process(uint16_t SensorData, MC_GearSt
|
|
|
|
|
|
/*电机最高速度,上位机配置参数*/
|
|
|
SpeedMax = MC_MotorParam.Rate_Speed;
|
|
|
- Tmp = SensorData + 50 ; //加50偏移量,确保能达到最大值2048
|
|
|
+ Tmp = ((GasSensorData < TorqueSensorData) ? TorqueSensorData : GasSensorData) + 50 ; //加50偏移量,确保能达到最大值2048
|
|
|
Tmp = Tmp > 2048 ? 2048 : Tmp;
|
|
|
|
|
|
/*调试用,根据车速限速值,换算指拨对应的设定车速*/
|
|
@@ -320,25 +320,25 @@ MC_CalParam_Struct_t MC_AssistRunMode_Gas_Process(uint16_t SensorData, MC_GearSt
|
|
|
switch (GearSt & 0x0F)
|
|
|
{
|
|
|
case 0x01:
|
|
|
- accStep = StepCalc(SpeedMax, 1, 6500);
|
|
|
+ accStep = StepCalc(SpeedMax, 1, 2100);
|
|
|
break;
|
|
|
case 0x02:
|
|
|
- accStep = StepCalc(SpeedMax, 1, 6000);
|
|
|
+ accStep = StepCalc(SpeedMax, 1, 1500);
|
|
|
break;
|
|
|
case 0x03:
|
|
|
- accStep = StepCalc(SpeedMax, 1, 5500);
|
|
|
+ accStep = StepCalc(SpeedMax, 1, 1071);
|
|
|
break;
|
|
|
case 0x04:
|
|
|
- accStep = StepCalc(SpeedMax, 1, 5000);
|
|
|
+ accStep = StepCalc(SpeedMax, 1, 765);
|
|
|
break;
|
|
|
default:
|
|
|
- /*计算周期1ms, 加减速时间为 5.00s 加减速步进计算*/
|
|
|
- accStep = StepCalc(SpeedMax, 1, 5000);
|
|
|
+ /*计算周期1ms, 加减速时间为 2.00s 加减速步进计算*/
|
|
|
+ accStep = StepCalc(SpeedMax, 1, 1500);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
/*减速步进*/
|
|
|
- decStep = StepCalc(SpeedMax, 1, 1000);
|
|
|
+ decStep = StepCalc(SpeedMax, 1, 2000);
|
|
|
|
|
|
/* 跟踪启动 */
|
|
|
if(MC_CalParam.Foc_Flag == RESET)
|
|
@@ -655,7 +655,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
|
|
|
|
|
|
#else
|
|
|
//输入阶跃
|
|
|
- MC_TorqueProcess_Param.TorqueApp = 1000;
|
|
|
+ MC_TorqueProcess_Param.TorqueApp = 1000;
|
|
|
|
|
|
//踏频设为启动
|
|
|
CadenceData.Cadence_Dir = MC_Cadence_Forward;
|
|
@@ -664,22 +664,23 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
|
|
|
#endif
|
|
|
|
|
|
//低力矩停机
|
|
|
- TorqueStopData = (TorqueSensorStartData < 200) ? 100 : (TorqueSensorStartData >> 1);
|
|
|
+ TorqueStopData = (TorqueSensorStartData < 300) ? 100 : (TorqueSensorStartData / 3);
|
|
|
if(MC_TorqueProcess_Param.TorqueApp >= (TorqueStopData))
|
|
|
{
|
|
|
TorqueStopDelayTimeCnt = HAL_GetTick();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if(MC_RunInfo.MotorSpeed > 200)
|
|
|
- {
|
|
|
- TorqueStopDelayTime = 218400 / MC_RunInfo.MotorSpeed; //60s / (电机转速 / 4.55 / 2.4) / 3,曲柄1/3圈
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- TorqueStopDelayTime = 1200;
|
|
|
- }
|
|
|
- TorqueStopDelayTime= (TorqueStopDelayTime < 500) ? 500 : TorqueStopDelayTime;
|
|
|
+// if(MC_RunInfo.MotorSpeed > 200)
|
|
|
+// {
|
|
|
+// TorqueStopDelayTime = 218400 / MC_RunInfo.MotorSpeed; //60s / (电机转速 / 4.55 / 2.4) / 3,曲柄1/3圈
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// TorqueStopDelayTime = 1200;
|
|
|
+// }
|
|
|
+// TorqueStopDelayTime= (TorqueStopDelayTime < 500) ? 500 : TorqueStopDelayTime;
|
|
|
+ TorqueStopDelayTime = 1500;
|
|
|
if((HAL_GetTick() - TorqueStopDelayTimeCnt) > TorqueStopDelayTime)//超时1200ms
|
|
|
{
|
|
|
MC_TorqueProcess_Param.MotorStopLock_Flag = SET;
|
|
@@ -760,12 +761,15 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
|
|
|
if(CadenceData.Cadence_Data < 50)//输出功率与输入力矩成正比,等效于踏频采用固定值50rpm
|
|
|
{
|
|
|
Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_ECO.Gain_K >> 1, MC_AssisParam.Gear_ECO.Gain_K, MC_AssisParam.Gear_ECO.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_ECO.Upper_Iq : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_ECO.Upper_Iq
|
|
|
+ : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
}
|
|
|
else if((CadenceData.Cadence_Data >= 50) && (CadenceData.Cadence_Data < 90))//输出功率与输入力矩成正比
|
|
|
{
|
|
|
Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_ECO.Gain_K >> 1, MC_AssisParam.Gear_ECO.Gain_K, MC_AssisParam.Gear_ECO.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_ECO.Upper_Iq : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_ECO.Upper_Iq
|
|
|
+ : ((MC_RunInfo.MotorSpeed < 983) ? Torque_Temp * 216 / (MC_RunInfo.MotorSpeed * 20 / 91)
|
|
|
+ : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91));
|
|
|
}
|
|
|
else//全功率输出
|
|
|
{
|
|
@@ -808,12 +812,15 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
|
|
|
if(CadenceData.Cadence_Data < 50)//输出功率与输入力矩成正比,等效于踏频采用固定值50rpm
|
|
|
{
|
|
|
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);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_NORM.Upper_Iq : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_NORM.Upper_Iq
|
|
|
+ : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
}
|
|
|
else if((CadenceData.Cadence_Data >= 50) && (CadenceData.Cadence_Data < 90))//输出功率与输入力矩成正比
|
|
|
{
|
|
|
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);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_NORM.Upper_Iq : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_NORM.Upper_Iq
|
|
|
+ : ((MC_RunInfo.MotorSpeed < 983) ? Torque_Temp * 216 / (MC_RunInfo.MotorSpeed * 20 / 91)
|
|
|
+ : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91));
|
|
|
}
|
|
|
else//全功率输出
|
|
|
{
|
|
@@ -857,12 +864,15 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
|
|
|
if(CadenceData.Cadence_Data < 50)//输出功率与输入力矩成正比,等效于踏频采用固定值50rpm
|
|
|
{
|
|
|
Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_SPORT.Gain_K >> 1, MC_AssisParam.Gear_SPORT.Gain_K, MC_AssisParam.Gear_SPORT.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_SPORT.Upper_Iq : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_SPORT.Upper_Iq
|
|
|
+ : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
}
|
|
|
else if((CadenceData.Cadence_Data >= 50) && (CadenceData.Cadence_Data < 90))//输出功率与输入力矩成正比
|
|
|
{
|
|
|
Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_SPORT.Gain_K >> 1, MC_AssisParam.Gear_SPORT.Gain_K, MC_AssisParam.Gear_SPORT.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_SPORT.Upper_Iq : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_SPORT.Upper_Iq
|
|
|
+ : ((MC_RunInfo.MotorSpeed < 983) ? Torque_Temp * 216 / (MC_RunInfo.MotorSpeed * 20 / 91)
|
|
|
+ : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91));
|
|
|
}
|
|
|
else//全功率输出
|
|
|
{
|
|
@@ -905,12 +915,15 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
|
|
|
if(CadenceData.Cadence_Data < 50)//输出功率与输入力矩成正比,等效于踏频采用固定值50rpm
|
|
|
{
|
|
|
Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_TURBO.Gain_K >> 1, MC_AssisParam.Gear_TURBO.Gain_K, MC_AssisParam.Gear_TURBO.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_TURBO.Upper_Iq : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_TURBO.Upper_Iq
|
|
|
+ : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
}
|
|
|
else if((CadenceData.Cadence_Data >= 50) && (CadenceData.Cadence_Data < 90))//输出功率与输入力矩成正比
|
|
|
{
|
|
|
Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_TURBO.Gain_K >> 1, MC_AssisParam.Gear_TURBO.Gain_K, MC_AssisParam.Gear_TURBO.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_TURBO.Upper_Iq : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_TURBO.Upper_Iq
|
|
|
+ : ((MC_RunInfo.MotorSpeed < 983) ? Torque_Temp * 216 / (MC_RunInfo.MotorSpeed * 20 / 91)
|
|
|
+ : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91));
|
|
|
}
|
|
|
else//全功率输出
|
|
|
{
|
|
@@ -953,12 +966,15 @@ MC_CalParam_Struct_t MC_AssistRunMode_Cadence_Process(MC_CadenceResult_Struct_t
|
|
|
if(CadenceData.Cadence_Data < 50)//输出功率与输入力矩成正比,等效于踏频采用固定值50rpm
|
|
|
{
|
|
|
Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_TorqueProcess_Param.TorqueApp) / (MC_AssisParam.Gear_SMART.TorqueApp_TH);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_SMART.Upper_Iq : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_SMART.Upper_Iq
|
|
|
+ : Torque_Temp * 120 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
}
|
|
|
else if((CadenceData.Cadence_Data >= 50) && (CadenceData.Cadence_Data < 90))//输出功率与输入力矩成正比
|
|
|
{
|
|
|
Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_TorqueProcess_Param.TorqueApp) / (MC_AssisParam.Gear_SMART.TorqueApp_TH);
|
|
|
- Torque_Temp = (MC_RunInfo.MotorSpeed < 10) ? MC_AssisParam.Gear_SMART.Upper_Iq : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91);
|
|
|
+ Torque_Temp = (MC_RunInfo.MotorSpeed < 546) ? MC_AssisParam.Gear_SMART.Upper_Iq
|
|
|
+ : ((MC_RunInfo.MotorSpeed < 983) ? Torque_Temp * 216 / (MC_RunInfo.MotorSpeed * 20 / 91)
|
|
|
+ : Torque_Temp * CadenceData.Cadence_Data * 24 / 10 / (MC_RunInfo.MotorSpeed * 20 / 91));
|
|
|
}
|
|
|
else//全功率输出
|
|
|
{
|
|
@@ -1776,7 +1792,7 @@ void MC_CalParam_Cal(MC_WorkMode_Struct_t p_MC_WorkMode, \
|
|
|
case MC_AssistRunMode_GAS:
|
|
|
{
|
|
|
//计算FOC控制输入
|
|
|
- *p_MC_CalParam = MC_AssistRunMode_Gas_Process(p_ADC_SensorData.GasSensor, (MC_GearSt_Struct_t)(GearSt & 0x0F));
|
|
|
+ *p_MC_CalParam = MC_AssistRunMode_Gas_Process(p_ADC_SensorData.GasSensor, MC_CadenceResult.torqueByCadence, (MC_GearSt_Struct_t)(GearSt & 0x0F));
|
|
|
//助力模式切换标志复位
|
|
|
MC_AssistRunMode_ShiftFlag = RESET;
|
|
|
break;
|