Sfoglia il codice sorgente

MC_VS7500-TC033001-MS2001-V2.1.6.1.1_20211103
1、调整转把Walk模式下,踩踏时进入转把模式的方式,需踩踏2周进入;
2、按照客户需求调整清除ODO的方式,取消第一次清除TRIP时,清除ODO的功能;
3、增加通信协议,50km内可清除ODO里程5次。

dail 3 anni fa
parent
commit
3da2762dc0

File diff suppressed because it is too large
+ 2574 - 2574
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/MC_VS75XX-TC033001-MS2001-V2.1.6.1.1_20211103.bin


+ 34 - 23
User/Src/can_process.c

@@ -209,17 +209,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 			  	if(strncmp("CLEAR", (char*)Data, DataLength) == 0)
 					{
 					  MC_RideLog.TRIP_Km = 0;
-						MC_RideLog.TRIP_Time = 0;
-						if(strncmp("CLEAR_ODO", (char*)UserString1, 9) != 0)//利用UserString1作为是否允许清除ODO的标志
-						{
-						  if(MC_RideLog.ODO_Km < 1000) //前100km允许清除
-							{
-						  	MC_RideLog.ODO_Km = 0;
-					  		MC_RideLog.ODO_Time = 0;
-							}
-							strncpy((char*)UserString1, (char*)"CLEAR_ODO", 9);
-							IsFlashSaveDataUpdate = TRUE;
-						}
+						MC_RideLog.TRIP_Time = 0;						
 						SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RIDE_LOG, sizeof(MC_RideLog_Struct_t), (uint8_t*)&MC_RideLog.ODO_Km);
 						SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5303, (uint8_t*)"ACK");
 						MC_RunInfo.Ride_Km = 0;
@@ -272,11 +262,42 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
 					break;
 				}
-				case 0x3A05://OBC清除ODO信息(定制功能)
+				case 0x3A05://OBC清除ODO信息(定制功能),50km内允许清除5次
 				{
 				  if(strncmp("CLEAR", (char*)Data, DataLength) == 0)
 				  {
-            
+            if(MC_RideLog.ODO_Km < 500) //前50km内允许清除
+						{
+						  //利用UserString1作为是否允许清除ODO的标志,前9个字符为标志,第11个字符为清除的次数
+							if(strncmp("CLEAR_ODO", (char*)UserString1, 9) != 0)//未清除过ODO
+							{
+								MC_RideLog.TRIP_Km = 0;
+						    MC_RideLog.TRIP_Time = 0;
+								MC_RideLog.ODO_Km = 0;
+					  		MC_RideLog.ODO_Time = 0;
+								strncpy((char*)UserString1, (char*)"CLEAR_ODO_1", 11);
+							  IsFlashSaveDataUpdate = TRUE;
+								SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RIDE_LOG, sizeof(MC_RideLog_Struct_t), (uint8_t*)&MC_RideLog.ODO_Km);
+						    MC_RunInfo.Ride_Km = 0;
+						    MC_RunInfo.Ride_Time = 0;
+							}
+							else//清除过,判断次数
+							{
+							  if(UserString1[10] < '5')//小于5执行
+								{
+								  MC_RideLog.TRIP_Km = 0;
+									MC_RideLog.TRIP_Time = 0;
+									MC_RideLog.ODO_Km = 0;
+									MC_RideLog.ODO_Time = 0;
+									UserString1[10] += 1;
+									IsFlashSaveDataUpdate = TRUE;
+									SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RIDE_LOG, sizeof(MC_RideLog_Struct_t), (uint8_t*)&MC_RideLog.ODO_Km);
+									MC_RunInfo.Ride_Km = 0;
+									MC_RunInfo.Ride_Time = 0;
+								}
+							}
+						}
+						SendData(ID_MC_TO_PBU, MODE_REPORT, 0x5303, (uint8_t*)"ACK");
 				  }
 					break;
 				}
@@ -353,16 +374,6 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 					{
 					  MC_RideLog.TRIP_Km = 0;
 						MC_RideLog.TRIP_Time = 0;
-						if(strncmp("CLEAR_ODO", (char*)UserString1, 9) != 0)//利用UserString1作为是否允许清除ODO的标志
-						{
-						  if(MC_RideLog.ODO_Km < 1000) //前100km允许清除
-							{
-						  	MC_RideLog.ODO_Km = 0;
-					  		MC_RideLog.ODO_Time = 0;
-							}
-							strncpy((char*)UserString1, (char*)"CLEAR_ODO", 9);
-							IsFlashSaveDataUpdate = TRUE;
-						}
 						SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_RIDE_LOG, sizeof(MC_RideLog_Struct_t), (uint8_t*)&MC_RideLog.ODO_Km);
 						SendData(ID_MC_TO_HMI, MODE_REPORT, 0x7403, (uint8_t*)"ACK");
 						MC_RunInfo.Ride_Km = 0;

+ 7 - 5
User/Src/motor_control.c

@@ -153,7 +153,7 @@ uint16_t MC_Cal_K_ByTemperature(uint16_t CoilTemp, uint16_t AlarmTempTH)
 }
 
 //助力模式判断处理
-MC_AssistRunMode_Struct_t MC_JudgeAsistRunMode_Process(MC_GearSt_Struct_t GearSt, TrueOrFalse_Flag_Struct_t StopFlag, TrueOrFalse_Flag_Struct_t CadencedStopFlag, ADC_SensorData_Struct_t AdcSenorData)
+MC_AssistRunMode_Struct_t MC_JudgeAsistRunMode_Process(MC_GearSt_Struct_t GearSt, TrueOrFalse_Flag_Struct_t StopFlag, MC_CadenceResult_Struct_t CadencedResult, ADC_SensorData_Struct_t AdcSenorData)
 {
   MC_AssistRunMode_Struct_t MC_AssistRunMode_Result = MC_AssistRunMode_INVALID;
 	
@@ -188,20 +188,22 @@ MC_AssistRunMode_Struct_t MC_JudgeAsistRunMode_Process(MC_GearSt_Struct_t GearSt
 					{
 						#if 1
 						static MC_AssistRunMode_Struct_t MC_AssistRunMode_Result_Old = MC_AssistRunMode_INVALID;
+						static uint32_t WalkModeExitCadenceTrigCnt = 0;
 						//进入力矩模式
 						MC_AssistRunMode_Result = MC_AssistRunMode_TORQUE;
 						//判断是否进入转把推行模式
-						if(((CadencedStopFlag == TRUE) && (AdcSenorData.TorqueSensor < 100)) && (AdcSenorData.GasSensor > 200))//仅踏频停止、踩踏力矩为0、转把信号大时,进入Walk
+						if(((CadencedResult.IsStopFlag == TRUE) && (AdcSenorData.TorqueSensor < 100)) && (AdcSenorData.GasSensor > 200))//仅踏频停止、踩踏力矩为0、转把信号大时,进入Walk
 						{
 							if(((MC_AssistRunMode_Result_Old == MC_AssistRunMode_TORQUE) && (MC_HallSensorData.IsStopFlag == TRUE)) //上一次处于力矩模式,需电机停止才能进入转把推行
 								 ||(MC_AssistRunMode_Result_Old == MC_AssistRunMode_WALK)) //上一次处于转把推行模式,继续维持
 							{
 								MC_AssistRunMode_Result = MC_AssistRunMode_WALK;
+								WalkModeExitCadenceTrigCnt = CadencedResult.TrigCount;
 							}
 						}
-						else if(((CadencedStopFlag == FALSE) || ((CadencedStopFlag == TRUE) && (AdcSenorData.TorqueSensor >= 100))) && (AdcSenorData.GasSensor > 200))//正在踩踏且有转把信号时,如果上一刻是Walk,维持Walk模式
+						else if(((CadencedResult.IsStopFlag == FALSE) || ((CadencedResult.IsStopFlag == TRUE) && (AdcSenorData.TorqueSensor >= 100))) && (AdcSenorData.GasSensor > 200))//正在踩踏且有转把信号时,如果上一刻是Walk,踩踏2圈后退出Walk
 						{
-						  if(MC_AssistRunMode_Result_Old == MC_AssistRunMode_WALK)
+						  if((MC_AssistRunMode_Result_Old == MC_AssistRunMode_WALK) && ((CadencedResult.TrigCount - WalkModeExitCadenceTrigCnt) < 120))
 							{
 							  MC_AssistRunMode_Result = MC_AssistRunMode_WALK;
 							}
@@ -1961,7 +1963,7 @@ void MC_CalParam_Cal(MC_WorkMode_Struct_t p_MC_WorkMode, \
 	static FlagStatus MC_AssistRunMode_ShiftFlag = RESET;  //电机助力模式切换标志
 	
 	//根据指拨信号、助力档位指令、刹车信号判断助力模式
-	MC_AssistRunMode_Temp = MC_JudgeAsistRunMode_Process(GearSt, (TrueOrFalse_Flag_Struct_t)(Break_Flag & GearSensor_Flag & Bike_Attitude.FellDown_flag), MC_CadenceResult.IsStopFlag, p_ADC_SensorData);//TRUE 0, FALSE 1
+	MC_AssistRunMode_Temp = MC_JudgeAsistRunMode_Process(GearSt, (TrueOrFalse_Flag_Struct_t)(Break_Flag & GearSensor_Flag & Bike_Attitude.FellDown_flag), MC_CadenceResult, p_ADC_SensorData);//TRUE 0, FALSE 1
 	
 	//发生助力模式切换时,清空变量
 	if(MC_AssistRunMode_Temp != p_MC_CalParam->AssistRunMode)

+ 1 - 1
User/Src/var.c

@@ -515,7 +515,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.         ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20211102.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20211103.", 16);
 	strncpy(Firmware_Special, (char*)"TC033001-MS2001-V1r1.           ", 32);
 		
 	//电机型号

+ 5 - 2
修改说明.txt

@@ -422,5 +422,8 @@ MC_VS7500-TC033001-MS2001-V2.1.6.1.0_20210913_1
 MC_VS7500-TC033001-MS2001-V2.1.6.1.0_20210913_2
 1、修改I2C的驱动,解决频繁封波导致电机异常;
 2、增加清除历史记录的指令。
-
-
+ 
+MC_VS7500-TC033001-MS2001-V2.1.6.1.1_20211103
+1、调整转把Walk模式下,踩踏时进入转把模式的方式,需踩踏2周进入;
+2、按照客户需求调整清除ODO的方式,取消第一次清除TRIP时,清除ODO的功能;
+3、增加通信协议,50km内可清除ODO里程5次。

Some files were not shown because too many files changed in this diff