Selaa lähdekoodia

标准程序解决SOC限速bug

dd 3 viikkoa sitten
vanhempi
sitoutus
76cc110533

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


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 4 - 12
User/Src/can_process.c

@@ -183,7 +183,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param);
 					Data[0] = MC_ConfigParam1.WheelSize;   //轮胎默认周长
 					Data[1] = MC_ConfigParam1.StarModel;   //启动模式
-					Data[2] = MC_ConfigParam1.SpeedLimit;  //限速值
+					Data[2] = (MC_ConfigParam1.SpeedLimit & 0x7F);  //限速值
 					Data[3] = MC_ConfigParam1.WheelSizeAdj;//轮胎微调值
 					GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM2, sizeof(MC_ConfigParam2), (uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch);
 					Data[4] = 1;				
@@ -254,7 +254,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				{
 				  	GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Flag);
 					Data[0] = MC_ConfigParam1.WheelSize;   //轮胎默认周长
-					Data[1] = MC_ConfigParam1.SpeedLimit;  //限速值
+					Data[1] = (MC_ConfigParam1.SpeedLimit & 0x7F);  //限速值
 					Data[2] = 0x18;                        //低压保护阈值 31000mV
 					Data[3] = 0x79;
 					SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5410, Data);
@@ -293,15 +293,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					{
 					 	 MC_ConfigParam1.WheelSize = 120;
 					}
-					MC_ConfigParam1.SpeedLimit = Data[1];
-					if(MC_ConfigParam1.SpeedLimit > 99)
-					{
-					  	MC_ConfigParam1.SpeedLimit = 99;
-					}
-					if(MC_ConfigParam1.SpeedLimit < 5)
-					{
-					  	MC_ConfigParam1.SpeedLimit = 5;
-					}
+					MC_ConfigParam1.SpeedLimit = (MC_ConfigParam1.SpeedLimit & 0x80) | (Data[1] & 0x7F);					
 					//Data[2]和Data[3]低压保护值暂不处理
 					SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Flag);
 					//变速器参数初始化
@@ -410,7 +402,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param);
 					Data[0] = MC_ConfigParam1.WheelSize;   //轮胎默认周长
 					Data[1] = MC_ConfigParam1.StarModel;   //启动模式
-					Data[2] = MC_ConfigParam1.SpeedLimit;  //限速值
+					Data[2] = (MC_ConfigParam1.SpeedLimit & 0x7F);  //限速值
 					Data[3] = MC_ConfigParam1.WheelSizeAdj;//轮胎微调值
 					SendData(ID_MC_TO_HMI, MODE_REPORT, 0x7308, Data);
 					break;

+ 9 - 9
User/Src/motor_control.c

@@ -345,9 +345,9 @@ MC_CalParam_Struct_t MC_AssistRunMode_GasSpeed_Process(MC_GasMode_Struct_t GasMo
 	Tmp = (Tmp * Tmp) / 2048;   //指拨值改为抛物线,低速控制行程变大
 	/*电机转速设定,根据指拨大小、车轮限速值和速比,换算*/
 	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;
+	  SpeedLimit = (((MC_ConfigParam1.SpeedLimit & 0x7F) + (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_ConfigParam1.SpeedLimit >> 7) & 0x01) == 0 ? ENABLE : DISABLE), MC_RunInfo.SOC)) >> 10;
+		SpeedLimit = (((MC_ConfigParam1.SpeedLimit & 0x7F) + (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 + 1) * SpdProportion) / 10  >> 11;  //(Tmp >> 11) * cd_Speedlimit * ( SpdProportion / 10)  		
@@ -648,14 +648,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_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;
+	  speedLimitStart = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (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 & 0x7F) + (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_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;
+	  speedLimitStart = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (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 & 0x7F) + (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);	
 	}	
 			
@@ -1233,8 +1233,8 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 		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) * 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;
+		speedLimitStart = ((((MC_ConfigParam1.SpeedLimit & 0x7F) + (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 & 0x7F) + (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);
@@ -1341,7 +1341,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 			MC_MotorStop(&MC_StarFlag);
 		}
 		#if 0  //低于限速点启动电机
-		else if(MC_RunInfo.BikeSpeed < ((MC_ConfigParam1.SpeedLimit) * 10))
+		else if(MC_RunInfo.BikeSpeed < ((MC_ConfigParam1.SpeedLimit & 0x7F) * 10))
 		{
 		  MC_MotorStar(&MC_StarFlag);
 		}

+ 2 - 2
User/Src/var.c

@@ -656,9 +656,9 @@ void Var_Init(void)
 	
   //Èí¼þ°æ±¾	
 	#if defined BARD_250K
-  strncpy(MC_VerInfo.FW_Version, (char*)"V6r2r2_20231121C", 16);
+  strncpy(MC_VerInfo.FW_Version, (char*)"V6r2r2_20250731C", 16);
 	#elif defined BARD_125K
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r3r2_20231121C", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r3r2_20250731C", 16);
 	#else
 	Error();
 	#endif

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