|
@@ -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;
|