|
@@ -26,6 +26,8 @@ MC_CalParam_Struct_t MC_CalParam = {MC_AssistRunMode_INVALID, 0, 0, RESET};
|
|
|
MC_CalParam_Struct_t MC_CalParam_Back = {(MC_AssistRunMode_Struct_t)~MC_AssistRunMode_INVALID, ~0, ~0, (FlagStatus)~RESET};
|
|
|
//踏频限流系数
|
|
|
uint8_t MC_CadenceLimit_K = 100;
|
|
|
+//电机转速和车速传动比限流系数
|
|
|
+uint8_t MC_MotorSpeedLimit_K = 100;
|
|
|
//力矩助力控制参数
|
|
|
MC_TorqueProcess_Param_Struct_t MC_TorqueProcess_Param = {SET, 0, 0, 0};
|
|
|
//推行助力控制参数
|
|
@@ -600,7 +602,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
|
|
|
//给定上限
|
|
|
Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_SPORT.Upper_Iq) ? MC_AssisParam.Gear_SPORT.Upper_Iq : Torque_Temp;
|
|
|
//限流参数设置
|
|
|
- CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_SPORT.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
|
|
|
+ CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_SPORT.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_MotorSpeedLimit_K;
|
|
|
CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
|
|
|
PID_IMax.hLower_Limit_Output = -(MC_AssisParam.Gear_SPORT.Upper_Iq); //Lower Limit for Output limitation
|
|
|
PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
|
|
@@ -613,7 +615,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
|
|
|
//给定上限
|
|
|
Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_TURBO.Upper_Iq) ? MC_AssisParam.Gear_TURBO.Upper_Iq : Torque_Temp;
|
|
|
//限流参数设置
|
|
|
- CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_TURBO.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * 100;
|
|
|
+ CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_TURBO.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_MotorSpeedLimit_K;
|
|
|
CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
|
|
|
PID_IMax.hLower_Limit_Output = -(MC_AssisParam.Gear_TURBO.Upper_Iq); //Lower Limit for Output limitation
|
|
|
PID_IMax.hUpper_Limit_Output = 0; //Upper Limit for Output limitation
|
|
@@ -626,7 +628,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
|
|
|
//给定上限
|
|
|
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;
|
|
|
+ CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_SMART.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_MotorSpeedLimit_K;
|
|
|
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
|
|
@@ -964,7 +966,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
|
|
|
K_ByVoltage_Result = MC_DataSet_Linear_Process(K_ByVoltage_Set, K_ByVoltage_Result, 1, 1); //设定值与给定值线性处理
|
|
|
|
|
|
//根据温度调节输出
|
|
|
- K_ByTemperature_Set = MC_Cal_K_ByTemperature(MC_RunInfo.T_Coil, MC_ConfigParam1.TempTH_Alarm); //根据温度计算衰减比例
|
|
|
+ K_ByTemperature_Set = MC_Cal_K_ByTemperature(MC_RunInfo.T_PCB, MC_ConfigParam1.TempTH_Alarm); //根据温度计算衰减比例
|
|
|
K_ByTemperature_Result = MC_DataSet_Linear_Process(K_ByTemperature_Set, K_ByTemperature_Result, 1, 1); //设定值与给定值线性处理
|
|
|
|
|
|
#else
|
|
@@ -974,10 +976,9 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
|
|
|
#endif
|
|
|
|
|
|
//限流计算
|
|
|
- IqRefByInPower = PID_Regulator(CurrentLimitPresent / 100, (MC_RunInfo.BusCurrent >> 7), &PID_IMax);
|
|
|
+ IqRefByInPower = PID_Regulator((uint32_t)(CurrentLimitPresent / 100 * K_ByVoltage_Result * K_ByTemperature_Result) >> 20, (MC_RunInfo.BusCurrent >> 7), &PID_IMax);
|
|
|
|
|
|
- Torque_Ref_Temp = ((int32_t)MC_TorqueProcess_Param.TorqueRefEnd * K_ByVoltage_Result) >> 10;
|
|
|
- Torque_Ref_Temp = (Torque_Ref_Temp * K_ByTemperature_Result) >> 10;
|
|
|
+ Torque_Ref_Temp = MC_TorqueProcess_Param.TorqueRefEnd;
|
|
|
Torque_Ref_Temp = (Torque_Ref_Temp + IqRefByInPower) >> 1;
|
|
|
|
|
|
p_MC_CalParam.Ref_Torque = (int16_t)Torque_Ref_Temp;
|