Selaa lähdekoodia

1、解决仪表查询参数时电机返回参数数据错位问题;
2、启动下降速度参数,5个档可设置降电流阶梯MC_CurrentDecTable[5] = {5, 7, 10, 14, 21};
3、SOC限速度和限功率增加开关标志,限速值和限流值Bit7表示开关,0-限制,1-不限制;
4、转把速度环PID计算输入值放大2倍,解决输出电流不能到1050的问题;
5、修改默认前牙盘16T,后牙盘16T,可减小默认传动比。

Dail 1 vuosi sitten
vanhempi
sitoutus
f228e0bb22

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 282 - 282
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 11 - 11
User/Src/MC_FOC_Driver.c

@@ -45,12 +45,12 @@ void FOC_Model(int16_t Ref, int16_t MotorSpeed, uint16_t SVM_Angle)	  //
 	IdFdbFlt += (((int32_t)(Stat_Curr_q_d.qI_Component2 << 10)) - IdFdbFlt)>>10;   // KFlt = 2ms
 	IdFdb = IdFdbFlt >> 10;
 
-	if((MC_HallSensorData.BackwardFlag==TRUE)&&(MC_CalParam.AssistRunMode == MC_AssistRunMode_GAS))
+	if((MC_HallSensorData.BackwardFlag == TRUE) && (MC_CalParam.AssistRunMode == MC_AssistRunMode_GAS))
 	{
 		if( ADC1_Result[ADC1_RANK_VIN] < 3000) //53853mV  17.951  3000
 		{
 			IqFluxLessRef = Ref;
-			if(IdFluxLessRef<(-4))
+			if(IdFluxLessRef < (-4))
 			{
 				IdFluxLessRef += 4;
 			}
@@ -58,14 +58,14 @@ void FOC_Model(int16_t Ref, int16_t MotorSpeed, uint16_t SVM_Angle)	  //
 		}
 		else if( ADC1_Result[ADC1_RANK_VIN] < 3210 ) //57622mV 3210
 		{
-			FOC_IqLim = 1050 - (ADC1_Result[ADC1_RANK_VIN] - 3000)*5;
-			IqFluxLessRef = Ref<FOC_IqLim ? Ref : FOC_IqLim;
+			FOC_IqLim = 1050 - (ADC1_Result[ADC1_RANK_VIN] - 3000) * 5;
+			IqFluxLessRef = Ref < FOC_IqLim ? Ref : FOC_IqLim;
 			IdFluxLessRef -= 2;
-			if(IdFluxLessRef<-420) IdFluxLessRef = -420;
+			if(IdFluxLessRef < -420) IdFluxLessRef = -420;
 		}
 		else
 		{
-			IqFluxLessRef=0;
+			IqFluxLessRef = 0;
 			IdFluxLessRef = -420;		
 		}	
 	}
@@ -74,7 +74,7 @@ void FOC_Model(int16_t Ref, int16_t MotorSpeed, uint16_t SVM_Angle)	  //
 		if( ADC1_Result[ADC1_RANK_VIN] < 3100) //55648mV  17.951  3100
 		{
 			IqFluxLessRef = Ref;
-			if(IdFluxLessRef<(-4))
+			if(IdFluxLessRef < (-4))
 			{
 				IdFluxLessRef += 4;
 			}
@@ -82,14 +82,14 @@ void FOC_Model(int16_t Ref, int16_t MotorSpeed, uint16_t SVM_Angle)	  //
 		}
 		else if( ADC1_Result[ADC1_RANK_VIN] < 3310 ) //59417mV 3310
 		{
-			FOC_IqLim = 1050 - (ADC1_Result[ADC1_RANK_VIN] - 3100)*5;
-			IqFluxLessRef = Ref<FOC_IqLim ? Ref : FOC_IqLim;
+			FOC_IqLim = 1050 - (ADC1_Result[ADC1_RANK_VIN] - 3100) * 5;
+			IqFluxLessRef = Ref < FOC_IqLim ? Ref : FOC_IqLim;
 			IdFluxLessRef -= 2;
-			if(IdFluxLessRef<-420) IdFluxLessRef = -420;
+			if(IdFluxLessRef < -420) IdFluxLessRef = -420;
 		}
 		else
 		{
-			IqFluxLessRef=0;
+			IqFluxLessRef = 0;
 			IdFluxLessRef = -420;		
 		}	
 	}

+ 2 - 2
User/Src/MC_PID_regulators.c

@@ -391,7 +391,7 @@ const PID_Struct_t PID_MotorSpd_Pegasi_Plus =
   (int16_t)0,           //hKd_Gain
   (uint16_t)1024,       //hKd_Divisor
   (int32_t)0,           //wPreviousError
-  (int32_t)-100,       //hLower_Limit_Output
+  (int32_t)-100,        //hLower_Limit_Output
   (int32_t)1050,        //hUpper_Limit_Output
   (int32_t)-358400,     //wLower_Limit_Integral
   (int32_t)358400,      //wUpper_Limit_Integral
@@ -401,7 +401,7 @@ const PID_Struct_t PID_MotorSpd_Pegasi_Plus =
 const PID_Struct_t PID_IMax_Pegasi_Plus = 
 {
 	(int16_t)30000,      //hKp_Gain
-  (uint16_t)1024,       //hKp_Divisor
+  (uint16_t)1024,      //hKp_Divisor
 	(int16_t)300,        //hKi_Gain
   (uint16_t)1024,      //hKi_Divisor
   (int16_t)0,          //hKd_Gain

+ 2 - 2
User/Src/can_process.c

@@ -188,8 +188,8 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					Data[3] = MC_ConfigParam1.WheelSizeAdj;//轮胎微调值
 					Data[4] = 1;  //预留大牙盘				
 					Data[5] = 15; //预留大牙盘
-					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CONFIG_PARAM2, Data, sizeof(MC_ConfigParam2_Struct_t));
-					memcpy((uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch, Data, sizeof(MC_ConfigParam2_Struct_t));
+					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CONFIG_PARAM2, Data + 6, sizeof(MC_ConfigParam2_Struct_t));
+					memcpy((uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch, Data + 6, sizeof(MC_ConfigParam2_Struct_t));
 					Data[6] = MC_ConfigParam2.SpeedLimitAdj;//限速微调值
 					Data[7] = 0;
 					SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5408, Data);

+ 4 - 4
User/Src/hall_sensor.c

@@ -136,9 +136,9 @@ void HallSensor_Process(void)
 		  MC_HallSensorData.Delta_Angle = 1;
 		}
 		HallSensorAngleCnt++;
-		if(HallSensorAngleCnt>2)
+		if(HallSensorAngleCnt > 2)
 		{
-			MC_HallSensorData.motorspeed = 18750/MC_HallSensorData.PWM_NumCnt;
+			MC_HallSensorData.motorspeed = 18750 / MC_HallSensorData.PWM_NumCnt; //转速 = 60 * 电频率 / 极对数,电频率 = 15000 / (6 * PWMCNT),一个周期6次跳变
 			backwardcount = 0;
 			MC_HallSensorData.BackwardFlag = FALSE;
 		}
@@ -203,8 +203,8 @@ int16_t MotorSpeedCal(uint16_t SVM_Angle, TrueOrFalse_Flag_Struct_t IsStopFlag)
 		FreqMotor = FreqMotorFlt >> 16;
 		Result = 60 * FreqMotor >> 3;// 8n=60*f/p
 		
-		motrospeedFltSum += ((MC_HallSensorData.motorspeed<<10) - motrospeedFltSum)>>5;
-		MC_HallSensorData.motorspeed_RCFlt = motrospeedFltSum>>10; 
+		motrospeedFltSum += ((MC_HallSensorData.motorspeed << 10) - motrospeedFltSum) >> 5;
+		MC_HallSensorData.motorspeed_RCFlt = motrospeedFltSum >> 10; 
 	}
 	
 	if(IsStopFlag == TRUE)

+ 36 - 26
User/Src/motor_control.c

@@ -30,6 +30,8 @@ MC_TorqueProcess_Param_Struct_t MC_TorqueProcess_Param = {SET, 0, 0, 0};
 MC_WalkProcess_Param_Struct_t MC_WalkProcess_Param = {FALSE, 0};  
 //电机启动标志
 FlagStatus MC_StarFlag = RESET;  
+//下降速度参数表
+uint8_t MC_CurrentDecTable[5] = {5, 7, 10, 14, 21};
 
 /*************************局部函数定义***********************/
 //设定值线性变化处理
@@ -130,9 +132,11 @@ uint16_t MC_Cal_K_ByVoltage(uint16_t Voltage, uint16_t DesignVol, uint16_t K_Vol
 }
 
 //随SOC计算限流衰减系数
-uint16_t MC_LimitCurrent_Cal_K_BySOC(uint16_t SOC)
+uint16_t MC_LimitCurrent_Cal_K_BySOC(FunctionalState Flag, uint16_t SOC)
 {
   uint16_t Limit_K_BySOC = 1024;
+	if(Flag == DISABLE)
+		return 1024;
 	if(SOC <= 2)
 		Limit_K_BySOC = 256;
 	else if(SOC <= 6)
@@ -147,9 +151,11 @@ uint16_t MC_LimitCurrent_Cal_K_BySOC(uint16_t SOC)
 }
 
 //随SOC计算限速衰减系数
-uint16_t MC_LimitSpeed_Cal_K_BySOC(uint16_t SOC)
+uint16_t MC_LimitSpeed_Cal_K_BySOC(FunctionalState Flag, uint16_t SOC)
 {
   uint16_t Limit_K_BySOC = 1024;
+	if(Flag == DISABLE)
+		return 1024;
 	if(SOC <= 2)
 		Limit_K_BySOC = 512;
 	else if(SOC <= 6)
@@ -333,20 +339,22 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	Tmp = Tmp > 2048 ? 2048 : Tmp; 
 	Tmp = (Tmp * Tmp) / 2048;   //指拨值改为抛物线,低速控制行程变大
 	
-	/*电机转速设定,根据指拨大小、车轮限速值和速比,换算,以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)) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
+	/*电机转速设定,根据指拨大小、车轮限速值和速比,换算,以0xAA >> 3*为中心根据整车限速对称偏移,调整上限±15km/h*,转把限速偏移为0x31时进入转把推行,限速6km/h*/
+	if(MC_GasMode_Param.Mode_bit.SpeedLimit == 0x1F)
+		SpeedLimit = MC_ConfigParam1.WalkMode_SpeedLimit / 10;
+	else 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)) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	else
-		SpeedLimit = ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
+		SpeedLimit = ((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + MC_GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	//根据SOC限制最大车速
 	#if 0 //旧版传动比计算
-	SpeedSet = Tmp * (SpeedLimit * SpdProportion) / 10  >> 11; //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)  	
+	SpeedSet = Tmp * ((SpeedLimit + 1) * SpdProportion) / 10  >> 11;  //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)  	
 	#else //新版传动比计算
-    SpeedSet = Tmp * SpeedLimit * 50 / Bike_RatioCalParam.RatioResult;
+  SpeedSet = Tmp * (SpeedLimit + 1) * 50 / Bike_RatioCalParam.RatioResult;  //(Tmp >> 11) * 100 / (RatioResult >> 10),传动比 = 车速 * 100 / 电机转速 << 10
 	#endif
 	
 	//超过限速值,设定电机转速为0
-	if(wheelSpeed > (SpeedLimit * 10 + 20))
+	if(wheelSpeed > (SpeedLimit * 10 + 22))
 	{
 		SpeedSet = 0;
 	}
@@ -432,11 +440,13 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	//最大力矩为4档的力矩参数
 	PID_MotorSpd.hLower_Limit_Output = -200;
 	PID_MotorSpd.hUpper_Limit_Output = 2100;
-	TorQueBySpd = PID_Regulator(SpeedSetReal>>1, MC_HallSensorData.motorspeed_RCFlt>>1, &PID_MotorSpd);
+	TorQueBySpd = PID_Regulator(SpeedSetReal, MC_HallSensorData.motorspeed_RCFlt, &PID_MotorSpd);
 	PID_MotorSpd.hLower_Limit_Output = -100;
 	PID_MotorSpd.hUpper_Limit_Output = 1050;	
 	/*限制母线电流*/
-	SpdMotorByIdc = PID_Regulator((MC_ConfigParam1.CurrentLimit * 1000 * MC_LimitCurrent_Cal_K_BySOC(MC_RunInfo.SOC)) >> 17, MC_RunInfo.BusCurrent >> 7, &PID_ConstantPower);
+	SpdMotorByIdc = PID_Regulator((MC_ConfigParam1.CurrentLimit * 1000 * MC_LimitCurrent_Cal_K_BySOC((((MC_ConfigParam1.CurrentLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 17, 
+	                              MC_RunInfo.BusCurrent >> 7, 
+	                              &PID_ConstantPower);
 	
 	#if 1
 	static uint16_t K_ByVoltage_Set_Old = 1024;
@@ -452,8 +462,8 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	
 	//根据温度调节输出
 	K_ByTemperature_Set1 = MC_Cal_K_ByTemperature(MC_RunInfo.T_Coil, MC_ConfigParam1.TempTH_Alarm); //根据温度计算衰减比例
-	K_ByTemperature_Set2 = MC_Cal_K_ByTemperature(MC_RunInfo.T_PCB, (MC_ConfigParam1.TempTH_Alarm-15)); //根据温度计算衰减比例
-	K_ByTemperature_Set  = (K_ByTemperature_Set1 * K_ByTemperature_Set2)>>10;		
+	K_ByTemperature_Set2 = MC_Cal_K_ByTemperature(MC_RunInfo.T_PCB, (MC_ConfigParam1.TempTH_Alarm - 15)); //根据温度计算衰减比例
+	K_ByTemperature_Set  = (K_ByTemperature_Set1 * K_ByTemperature_Set2) >> 10;		
 	K_ByTemperature_Result = MC_DataSet_Linear_Process(K_ByTemperature_Set, K_ByTemperature_Result, 1, 1); //设定值与给定值线性处理
 	
 	#else
@@ -483,7 +493,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 		else ExitGasModeFlag = RESET;
 	}
 	
-	if(Ref_Speed_Temp_End < -200) Ref_Speed_Temp_End=-200;
+	if(Ref_Speed_Temp_End < -200) Ref_Speed_Temp_End = -200;
 	//速度环控制量为0时停机,防止电机出现异响
 	if(SpeedSetReal == 0)
 	{
@@ -495,7 +505,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 		MC_MotorStar(&MC_StarFlag);
 	}
 	
-	p_MC_CalParam.Ref_Speed = (int16_t)((Ref_Speed_Temp_End+SpdMotorByIdc)>>1);
+	p_MC_CalParam.Ref_Speed = (int16_t)((Ref_Speed_Temp_End + SpdMotorByIdc) >> 1);
 	p_MC_CalParam.Foc_Flag = SET;
 	p_MC_CalParam.AssistRunMode = MC_AssistRunMode_GAS;
 	
@@ -636,14 +646,14 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
 	
   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) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
-	  speedLimitEnd = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
+	  speedLimitStart = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+	  speedLimitEnd = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit + 0x1F - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	  slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);		
 	}
 	else
 	{
-	  speedLimitStart = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
-	  speedLimitEnd = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
+	  speedLimitStart = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3) - 2) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+	  speedLimitEnd = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj + GasMode_Param.Mode_bit.SpeedLimit - (0xAA >> 3)) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 	  slewRate = 1024 / (speedLimitEnd - speedLimitStart - 3);		
 	}	
 	
@@ -740,7 +750,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasTorque_Process(MC_GasMode_Struct_t GasM
 	#endif
 	
 	//根据SOC计算限流
-	IqRefByInPower = PID_Regulator((CurrentLimitPresent * MC_LimitCurrent_Cal_K_BySOC(MC_RunInfo.SOC) / 100) >> 10, (MC_RunInfo.BusCurrent >> 7), &PID_IMax);
+	IqRefByInPower = PID_Regulator((CurrentLimitPresent * MC_LimitCurrent_Cal_K_BySOC((((MC_ConfigParam1.CurrentLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC) / 100) >> 10, (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;
@@ -812,7 +822,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Walk_Process(MC_WorkMode_Struct_t p_MC_Wor
 		  MC_WalkProcess_Param.MotorSpeedSetBigin = WalkMode_MotorSpeedSet << 5;
 		}
 		//根据SOC计算限流
-	  SpdMotorByIdc = PID_Regulator((MC_ConfigParam1.CurrentLimit * 500 * MC_LimitCurrent_Cal_K_BySOC(MC_RunInfo.SOC)) >> 17, MC_RunInfo.BusCurrent >> 7, &PID_ConstantPower); // 母线电流闭环
+	  SpdMotorByIdc = PID_Regulator((MC_ConfigParam1.CurrentLimit * 500 * MC_LimitCurrent_Cal_K_BySOC((((MC_ConfigParam1.CurrentLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 17, MC_RunInfo.BusCurrent >> 7, &PID_ConstantPower); // 母线电流闭环
 	}
 	
 	//速度环
@@ -1054,7 +1064,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 	//停机状态,延时处理
 	if(MC_TorqueProcess_Param.MotorStopLock_Flag == SET)
 	{
-	  if(MC_TorqueProcess_Param.TorqueRefEnd <= 7)
+	  if(MC_TorqueProcess_Param.TorqueRefEnd <= MC_CurrentDecTable[(MC_ConfigParam1.Deceleration < 0 ? 3 : (MC_ConfigParam1.Deceleration > 5 ? 3 : MC_ConfigParam1.Deceleration)) - 1])
 		{
 		  MC_TorqueProcess_Param.TorqueRefEnd = 0;
 			//停机处理
@@ -1068,7 +1078,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 		}
 		else
 		{
-		  MC_TorqueProcess_Param.TorqueRefEnd -= 7;  //这里影响到停止踩踏后的断电时间
+		  MC_TorqueProcess_Param.TorqueRefEnd -= MC_CurrentDecTable[(MC_ConfigParam1.Deceleration < 0 ? 3 : (MC_ConfigParam1.Deceleration > 5 ? 3 : MC_ConfigParam1.Deceleration)) - 1];  //这里影响到停止踩踏后的断电时间
 			MC_MotorStar(&MC_StarFlag);
 		}
 	}
@@ -1218,8 +1228,8 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 		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) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
-		speedLimitEnd   = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC(MC_RunInfo.SOC)) >> 10;
+		speedLimitStart = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj) * 10 + MC_ConfigParam2.SpeedLimitStartAdj) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+		speedLimitEnd   = (((MC_ConfigParam1.SpeedLimit + (int8_t)MC_ConfigParam2.SpeedLimitAdj) * 10 + MC_ConfigParam2.SpeedLimitEndAdj + 22) * MC_LimitSpeed_Cal_K_BySOC((((MC_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
 		slewRate        = 1024 / (speedLimitEnd - speedLimitStart - 3);		
 		//随车速调节助力比
 		Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(speedLimitStart, 0, speedLimitStart, slewRate, MC_SpeedSensorData.Speed_Data)) >> 10);
@@ -1356,7 +1366,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 	#endif
 	
   //根据SOC计算限流
-	IqRefByInPower = PID_Regulator((CurrentLimitPresent * MC_LimitCurrent_Cal_K_BySOC(MC_RunInfo.SOC) / 100) >> 10, (MC_RunInfo.BusCurrent >> 7), &PID_IMax);
+	IqRefByInPower = PID_Regulator((CurrentLimitPresent * MC_LimitCurrent_Cal_K_BySOC((((MC_ConfigParam1.CurrentLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC) / 100) >> 10, (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;

+ 0 - 1
User/Src/tasks.c

@@ -980,7 +980,6 @@ void NoPBUMode_Ini( void )
 //车辆传动比计算,运行周期10ms
 void BikeRatioCal_Process(uint16_t MotorSpeed, uint16_t Cadence, uint16_t BikeSpeed, Bike_RatioCal_Struct_t* p_Bike_RatioCal)
 {
-	uint8_t Cal_K = 0;
 	uint16_t AccCnt, DecCnt;
 	//车辆静止或滑行时不计算
 	if((BikeSpeed < 30) || ((BikeSpeed >= 30) && (MotorSpeed < 100) && (Cadence < 10)))

+ 4 - 4
User/Src/var.c

@@ -71,8 +71,8 @@ const MC_ConfigParam1_Struct_t MC_ConfigParam1_Default =
 	(uint16_t)100,                                   //停机时间 ms	
 	(uint8_t)25,                                     //限速 km/h
 	(uint8_t)3,                                      //下降速度
-	(uint8_t)14,                                     //前齿数 T
-	(uint8_t)9,                                      //后齿数 T
+	(uint8_t)16,                                     //前齿数 T
+	(uint8_t)16,                                     //后齿数 T
 	(uint8_t)17,                                     //限流 A
 	(uint8_t)135,                                    //高温预警值 +40℃
 	(uint8_t)165,                                    //高温保护值 +40℃
@@ -100,8 +100,8 @@ const MC_ConfigParam1_Struct_t MC_ConfigParam1_Default =
 	(uint16_t)100,                                   //停机时间 ms	
 	(uint8_t)25,                                     //限速 km/h
 	(uint8_t)3,                                      //下降速度
-	(uint8_t)14,                                     //前齿数 T
-	(uint8_t)9,                                      //后齿数 T
+	(uint8_t)16,                                     //前齿数 T
+	(uint8_t)16,                                     //后齿数 T
 	(uint8_t)17,                                     //限流 A
 	(uint8_t)135,                                    //高温预警值 +40℃
 	(uint8_t)165,                                    //高温保护值 +40℃

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä