Kaynağa Gözat

MC_VS7500-TC033001-MS2002-V2.1.6.0.3_20210818
1、根据客户需求,增加5档,并调整1、2、3、4、5每个档位的限流;
2、与大石沟通,修改通信协议,原T档采用0x05,更换为0x44,新增的5档采用0x05;
3、增加对5档续航的计算和平均功耗的存储,对于旧的样车,需要维持在其它档位骑行超过5km后,才会更新并保存5档的平均功耗。

dail 4 yıl önce
ebeveyn
işleme
56f535c989

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1762 - 1762
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/MC_VS7500-TC033001-MS2002HK-V2.1.6.0.3_20210818.bin


+ 2 - 1
User/Inc/motor_control.h

@@ -44,12 +44,13 @@ typedef enum
 	MC_GearSt_Torque_NORM = 0x02,
 	MC_GearSt_Torque_SPORT = 0x03,
 	MC_GearSt_Torque_TURBO = 0x04,
-	MC_GearSt_SMART_T = 0x05,
+	MC_GearSt_Torque_5 = 0x05,
 	MC_GearSt_Cadence_ECO = 0x11,
 	MC_GearSt_Cadence_NORM = 0x12,
 	MC_GearSt_Cadence_SPORT = 0x13,
 	MC_GearSt_Cadence_TURBO = 0x14,
 	MC_GearSt_SMART = 0x33,
+	MC_GearSt_SMART_T = 0x44,
 	MC_GearSt_WALK = 0x22
 }MC_GearSt_Struct_t;
 

+ 5 - 2
User/Inc/var.h

@@ -392,7 +392,9 @@ typedef struct
 	nGearParam_Struct_t    Gear_NORM;      //NORM档控制参数,偏移地址 12
 	nGearParam_Struct_t    Gear_SPORT;     //SPORT档控制参数,偏移地址 24
 	nGearParam_Struct_t    Gear_TURBO;     //TURBO档控制参数,偏移地址 36
-	nGearParam_Struct_t    Gear_SMART;     //SMART档控制参数,偏移地址 48
+	nGearParam_Struct_t    Gear_5;        //新增的5档控制参数,偏移地址 48
+	nGearParam_Struct_t    Gear_SMART;     //SMART档控制参数,偏移地址 60
+	nGearParam_Struct_t    Gear_SMART_T;   //新增的T控制参数,偏移地址 72
 }MC_AssistParam_Struct_t;
 
 typedef struct
@@ -410,7 +412,8 @@ typedef struct
 	uint16_t GearSt_TURBO;  //TURBO平均功耗,单位mAh/km
 	uint16_t GearSt_SMART;  //SMART平均功耗,单位mAh/km
 	uint16_t GearSt_SMART_T;//SMART_T平均功耗,单位mAh/km
-	uint16_t Rs[2];
+	uint16_t GearSt_5;      //新增的5档平均功耗,单位mAh/km
+	uint16_t Rs[1];
 }MC_AvgPower_Struct_t;
 
 /******************************类型定义End***************************/

+ 50 - 15
User/Src/motor_control.c

@@ -1256,7 +1256,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
 		  MC_TorqueProcess_Param.MotorStopLock_Flag = SET;
 		}
 		//设定马达输出力矩
-		MC_TorqueProcess_Param.TorqueApp = (AdcSenorData.GasSensor * MC_AssisParam.Gear_TURBO.Upper_Iq) >> 11;
+		MC_TorqueProcess_Param.TorqueApp = (AdcSenorData.GasSensor * MC_AssisParam.Gear_5.Upper_Iq) >> 11;
 		if(MC_TorqueProcess_Param.TorqueApp < CadenceData.torqueByCadence)
 		{
 		  MC_TorqueProcess_Param.TorqueApp = CadenceData.torqueByCadence;
@@ -1417,12 +1417,12 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
 			TorqueAccStep = 3;
 			TorqueDecStep = 7;
 			//给定上限
-		  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;
+		  Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_5.Upper_Iq) ? MC_AssisParam.Gear_5.Upper_Iq : Torque_Temp;
+			CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_5.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_TURBO.Upper_Iq);   //Lower Limit for Output limitation
+			PID_IMax.hLower_Limit_Output = -(MC_AssisParam.Gear_5.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_TURBO.Upper_Iq << 10); // 放大1024
+			PID_IMax.wLower_Limit_Integral = -(MC_AssisParam.Gear_5.Upper_Iq << 10); // 放大1024
 			PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
 		}
 		else
@@ -1571,6 +1571,41 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
 					PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
 					break;
 				}
+				case MC_GearSt_Torque_5:
+				{					
+					//控制输入给定加速斜率
+					if(MC_ConfigParam1.UserAdjParam_TURBO.StarModel_GAIN <= 90)
+					{
+						TorqueAccStep = MC_AssisParam.Gear_5.AccCnt - 1;
+					}
+					else if(MC_ConfigParam1.UserAdjParam_TURBO.StarModel_GAIN >= 110)
+					{
+						TorqueAccStep = MC_AssisParam.Gear_5.AccCnt + 1;
+					}
+					else
+					{
+						TorqueAccStep = MC_AssisParam.Gear_5.AccCnt;
+					}
+					TorqueAccStep = (TorqueAccStep <= 0) ? 1 : TorqueAccStep;
+					//控制输入给定减速斜率
+					TorqueDecStep = MC_AssisParam.Gear_5.DecCnt;
+					//随力矩输入调节助力比
+					Torque_Temp = (uint16_t)((uint32_t)(MC_TorqueProcess_Param.TorqueApp * Coefficient_GainCal(MC_AssisParam.Gear_5.Gain_K >> 1, MC_AssisParam.Gear_5.Gain_K, MC_AssisParam.Gear_5.TorqueApp_TH, MC_TorqueProcess_Param.TorqueApp)) >> 10);
+					//根据助力增益调节助力比
+					Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_TURBO.Assist_K_GAIN / 100;
+					//给定下限
+					Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_5.Lower_Iq) ? MC_AssisParam.Gear_5.Lower_Iq : Torque_Temp;
+					//给定上限
+					Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_5.Upper_Iq) ? MC_AssisParam.Gear_5.Upper_Iq : Torque_Temp;
+					//限流参数设置
+					CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_5.CurrentMax_K * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_CadenceLimit_K;
+					CurrentLimitPresent = MC_DataSet_Linear_Process(CurrentLimitSet, CurrentLimitPresent, 5 ,1);
+					PID_IMax.hLower_Limit_Output = -(MC_AssisParam.Gear_5.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_5.Upper_Iq << 10); // 放大1024
+					PID_IMax.wUpper_Limit_Integral = 0; // 放大1024
+					break;
+				}
 				case MC_GearSt_SMART:
 				{
 					//控制输入给定加速斜率
@@ -1611,33 +1646,33 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(MC_CadenceResult_Struct_t C
 				  //控制输入给定加速斜率
 					if(MC_ConfigParam1.UserAdjParam_SMART.StarModel_GAIN <= 90)
 					{
-						TorqueAccStep = MC_AssisParam.Gear_SMART.AccCnt - 1;
+						TorqueAccStep = MC_AssisParam.Gear_SMART_T.AccCnt - 1;
 					}
 					else if(MC_ConfigParam1.UserAdjParam_SMART.StarModel_GAIN >= 110)
 					{
-						TorqueAccStep = MC_AssisParam.Gear_SMART.AccCnt + 1;
+						TorqueAccStep = MC_AssisParam.Gear_SMART_T.AccCnt + 1;
 					}
 					else
 					{	
-						TorqueAccStep = MC_AssisParam.Gear_SMART.AccCnt;
+						TorqueAccStep = MC_AssisParam.Gear_SMART_T.AccCnt;
 					}
 					TorqueAccStep = (TorqueAccStep <= 0) ? 1 : TorqueAccStep;
 					//控制输入给定减速斜率
-					TorqueDecStep = MC_AssisParam.Gear_SMART.DecCnt;
+					TorqueDecStep = MC_AssisParam.Gear_SMART_T.DecCnt;
 					//助力比控制系数
-					Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_TorqueProcess_Param.TorqueApp) / ((MC_AssisParam.Gear_SMART.TorqueApp_TH * 6) >> 2);//助力比曲线调整
+					Torque_Temp = (uint32_t)(MC_TorqueProcess_Param.TorqueApp * MC_TorqueProcess_Param.TorqueApp) / (MC_AssisParam.Gear_SMART_T.TorqueApp_TH);//助力比曲线调整
 					//根据助力增益调节助力比
 					Torque_Temp = Torque_Temp * MC_ConfigParam1.UserAdjParam_SMART.Assist_K_GAIN / 100;
 					//给定下限
-					Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_SMART.Lower_Iq) ? MC_AssisParam.Gear_SMART.Lower_Iq : Torque_Temp;
+					Torque_Temp = (Torque_Temp < MC_AssisParam.Gear_SMART_T.Lower_Iq) ? MC_AssisParam.Gear_SMART_T.Lower_Iq : Torque_Temp;
 					//给定上限
-					Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_SMART.Upper_Iq) ? MC_AssisParam.Gear_SMART.Upper_Iq : Torque_Temp;
+					Torque_Temp = (Torque_Temp > MC_AssisParam.Gear_SMART_T.Upper_Iq) ? MC_AssisParam.Gear_SMART_T.Upper_Iq : Torque_Temp;
 					//限流参数设置
-					CurrentLimitSet = (uint32_t)(((MC_AssisParam.Gear_SMART.CurrentMax_K * 5) >> 3) * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_CadenceLimit_K;//限流降低为62.5%
+					CurrentLimitSet = (uint32_t)(MC_AssisParam.Gear_SMART_T.CurrentMax_K  * MC_ConfigParam1.CurrentLimit * 1000 >> 17) * MC_CadenceLimit_K;//限流降低为62.5%
 					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.hLower_Limit_Output = -(MC_AssisParam.Gear_SMART_T.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.wLower_Limit_Integral = -(MC_AssisParam.Gear_SMART_T.Upper_Iq << 10); // 放大1024
 					PID_IMax.wUpper_Limit_Integral = 0; // 放大1024		
 					break;
 				}

+ 6 - 0
User/Src/remain_distance.c

@@ -386,6 +386,8 @@ void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t M
 						MC_AvgPower.GearSt_SPORT = ltmp * ( 100 +  sPercent ) / 100;
 						ltmp = MC_AvgPower_Default.GearSt_TURBO;
 						MC_AvgPower.GearSt_TURBO = ltmp * ( 100 +  sPercent ) / 100;
+						ltmp = MC_AvgPower_Default.GearSt_5;
+						MC_AvgPower.GearSt_5 = ltmp * ( 100 +  sPercent ) / 100;
 						ltmp = MC_AvgPower_Default.GearSt_SMART;
 						MC_AvgPower.GearSt_SMART = ltmp * ( 100 +  sPercent ) / 100;
 						ltmp = MC_AvgPower_Default.GearSt_SMART_T;
@@ -421,6 +423,10 @@ void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t M
 				case MC_GearSt_Torque_TURBO:
 					RemainDis.Power_per_km_average = MC_AvgPower.GearSt_TURBO;
 					powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_TURBO;
+					break;	
+        case MC_GearSt_Torque_5:
+					RemainDis.Power_per_km_average = MC_AvgPower.GearSt_5;
+					powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_5;
 					break;				
 				case MC_GearSt_SMART:
 					RemainDis.Power_per_km_average = MC_AvgPower.GearSt_SMART;

+ 41 - 14
User/Src/var.c

@@ -157,12 +157,13 @@ const MC_RunLog2_Struct_t MC_RunLog2_Default =
 //平均功耗默认值
 const MC_AvgPower_Struct_t MC_AvgPower_Default =
 {
-	(uint16_t)100,
-	(uint16_t)160,
-	(uint16_t)190,
-	(uint16_t)270,
-	(uint16_t)180,
-	(uint16_t)170
+	(uint16_t)90, //ECO
+	(uint16_t)135,//TURBO
+	(uint16_t)180,//SPORT
+	(uint16_t)225,//TURBO
+	(uint16_t)200,//SMART
+	(uint16_t)180,//SMART_T
+	(uint16_t)270 //5
 };
 
 //MC骑行历史信息,占用32bytes
@@ -242,41 +243,53 @@ const nGearParam_Struct_t GearParam_Default_SMART_Volans =
 //ECO档位助力参数
 const nGearParam_Struct_t GearParam_Default_ECO_Volans_Plus =
 {
-  (uint16_t)452,
+  (uint16_t)384,
 	(uint16_t)0,
 	(uint16_t)100,
 	(uint16_t)840,
 	(uint8_t)2,
 	(uint8_t)1,
-	(uint16_t)512
+	(uint16_t)342
 };
 
 //NORM档位助力参数
 const nGearParam_Struct_t GearParam_Default_NORM_Volans_Plus =
 {
-  (uint16_t)954,
+  (uint16_t)858,
 	(uint16_t)0,
 	(uint16_t)100,
 	(uint16_t)1200,
 	(uint8_t)2,
 	(uint8_t)1,
-	(uint16_t)686
+	(uint16_t)512
 };
 
 //SPORT档位助力参数
 const nGearParam_Struct_t GearParam_Default_SPORT_Volans_Plus =
 {
-  (uint16_t)1504,
+  (uint16_t)1353,
 	(uint16_t)700,
 	(uint16_t)100,
 	(uint16_t)1590,
 	(uint8_t)3,
 	(uint8_t)1,
-	(uint16_t)870
+	(uint16_t)686
 };
 
 //TURBO档位助力参数
 const nGearParam_Struct_t GearParam_Default_TURBO_Volans_Plus = 
+{
+  (uint16_t)1885,
+	(uint16_t)840,
+	(uint16_t)100,
+	(uint16_t)1850,
+	(uint8_t)4,
+	(uint8_t)1,
+	(uint16_t)867
+};
+
+//5档助力参数
+const nGearParam_Struct_t GearParam_Default_5_Volans_Plus = 
 {
   (uint16_t)2354,
 	(uint16_t)840,
@@ -299,6 +312,18 @@ const nGearParam_Struct_t GearParam_Default_SMART_Volans_Plus =
 	(uint16_t)1024
 };
 
+//SMART_T档位助力参数
+const nGearParam_Struct_t GearParam_Default_SMART_T_Volans_Plus =
+{
+  (uint16_t)0,
+	(uint16_t)750,
+	(uint16_t)100,
+	(uint16_t)2100,
+	(uint8_t)4,
+	(uint8_t)1,
+	(uint16_t)867
+};
+
 /************Pegasi助力参数************/
 //ECO档位助力参数
 const nGearParam_Struct_t GearParam_Default_ECO_Pegasi =
@@ -490,8 +515,8 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007H_HK.      ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20210721.", 16);
-	strncpy(Firmware_Special, (char*)"TC033001-MS2002HK-V1r0.         ", 32);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20210818.", 16);
+	strncpy(Firmware_Special, (char*)"TC033001-MS2002HK-V0r3.         ", 32);
 		
 	//电机型号
 	strncpy(MC_VerInfo.Mode, (char*)"VS7500.         ", 16);
@@ -534,7 +559,9 @@ void UpdateGearParam(uint8_t SerialNum)
 			memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
 			memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
 			memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
+			memcpy((uint8_t*)&MC_AssisParam.Gear_5.Gain_K, (uint8_t*)&GearParam_Default_5_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
 			memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
+			memcpy((uint8_t*)&MC_AssisParam.Gear_SMART_T.Gain_K, (uint8_t*)&GearParam_Default_SMART_T_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
 			break;
 		}
 		case 3://Pegasi

+ 4 - 3
修改说明.txt

@@ -417,9 +417,10 @@ MC_VS7500-TC033001-MS2002-V2.1.6.1.0_20210721
 6、删除TIM1 Break的中断配置;
 7、修改客户标识。
 
-
-
-
+MC_VS7500-TC033001-MS2002-V2.1.6.0.3_20210818
+1、根据客户需求,增加5档,并调整1、2、3、4、5每个档位的限流;
+2、与大石沟通,修改通信协议,原T档采用0x05,更换为0x44,新增的5档采用0x05;
+3、增加对5档续航的计算和平均功耗的存储,对于旧的样车,需要维持在其它档位骑行超过5km后,才会更新并保存5档的平均功耗。
 
 
 

BIN
客户需求-调整通信协议-314d3e5.001.jpg


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor