|
@@ -239,6 +239,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
|
|
|
static int16_t TorQueBySpd = 0;
|
|
|
int32_t Ref_Speed_Temp;
|
|
|
static int16_t SpdMotorByIdc = 0;
|
|
|
+ uint8_t SpeedLimit = 0;
|
|
|
|
|
|
MC_CalParam_Struct_t p_MC_CalParam = {MC_AssistRunMode_INVALID, 0, 0, RESET};
|
|
|
|
|
@@ -297,14 +298,23 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
|
|
|
Tmp = SensorData-50; //指拨100启动,减去50能控低速
|
|
|
Tmp = Tmp > 2048 ? 2048 : Tmp;
|
|
|
Tmp = (Tmp*Tmp)/2048; //指拨值改为抛物线,低速控制行程变大
|
|
|
- /*电机转速设定,根据指拨大小、车轮限速值和速比,换算*/
|
|
|
- SpeedSet = (Tmp * ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * SpdProportion) / 10 >> 11); //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)
|
|
|
|
|
|
+ /*电机转速设定,根据指拨大小、车轮限速值和速比,换算,以0xAA >> 3*为中心根据整车限速对称偏移,调整上限±15km/h*/
|
|
|
+ if(MC_GasMode_Param.Mode_bit.SpeedLimit <= 5)
|
|
|
+ SpeedLimit = MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3);
|
|
|
+ else
|
|
|
+ SpeedLimit = MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3);
|
|
|
+ SpeedSet = Tmp * (SpeedLimit * SpdProportion) / 10 >> 11; //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)
|
|
|
//超过限速值,设定电机转速为0
|
|
|
- if(wheelSpeed > ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * 10 + 20))
|
|
|
+ if(wheelSpeed > ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + 20))
|
|
|
{
|
|
|
SpeedSet = 0;
|
|
|
}
|
|
|
+ if(MC_GasMode_Param.Mode_bit.StartMode == 1) //带速启动
|
|
|
+ {
|
|
|
+ if(wheelSpeed <= 60)
|
|
|
+ SpeedSet = 0;
|
|
|
+ }
|
|
|
|
|
|
SpeedSet = (SpeedSet > 0) ? SpeedSet : 0;
|
|
|
SpeedSet = (SpeedSet < SpeedMax) ? SpeedSet : SpeedMax;
|
|
@@ -583,13 +593,25 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
|
|
|
static uint16_t speedLimitStart = 250, speedLimitEnd = 272, slewRate = 52;
|
|
|
if((MC_ConfigParam2.SpeedLimitStartAdj > 50) || (MC_ConfigParam2.SpeedLimitStartAdj < -50)) MC_ConfigParam2.SpeedLimitStartAdj=0;
|
|
|
if((MC_ConfigParam2.SpeedLimitEndAdj > 50) || (MC_ConfigParam2.SpeedLimitEndAdj < -50)) MC_ConfigParam2.SpeedLimitEndAdj=0;
|
|
|
-
|
|
|
- speedLimitStart = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * 10 + MC_ConfigParam2.SpeedLimitStartAdj;
|
|
|
- speedLimitEnd = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 2)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22;
|
|
|
- slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);
|
|
|
+
|
|
|
+ if(MC_GasMode_Param.Mode_bit.SpeedLimit <= 5)
|
|
|
+ {
|
|
|
+ speedLimitStart = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitStartAdj;
|
|
|
+ speedLimitEnd = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22;
|
|
|
+ slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ speedLimitStart = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitStartAdj;
|
|
|
+ speedLimitEnd = (MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22;
|
|
|
+ slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);
|
|
|
+ }
|
|
|
|
|
|
//随车速调节助力比
|
|
|
- Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(0, 0, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
|
|
|
+ if(MC_GasMode_Param.Mode_bit.StartMode == 0) //零速启动
|
|
|
+ Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(0, 0, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
|
|
|
+ else //带速启动
|
|
|
+ Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(60, 0xFF, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
|
|
|
|
|
|
//助力输出
|
|
|
MC_TorqueProcess_Param.TorqueRef = Torque_Temp;
|