Browse Source

V2.1.6_20210616 TC011052-MCK201001-V1r1
1、转把模式关闭力矩传感器故障检测;
2、调整定速巡航模式进入方式;
3、调整推行模式代码结构,功能不变;
4、优化速度传感器的信号计算;
5、收到关机指令是关闭车灯,解决开灯状态关机后下次开机时会闪烁一下的问题;
6、版本号:V2.1.6_20210616 客户特性说明:TC011052-MCK201001-V1r1

dail 4 years ago
parent
commit
5912a918be

BIN
MDK-ARM/bin/MC_VS7500-TC011052-MCK201001-V2.1.6.1.1_20210616.bin


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 4 - 4
User/Src/fault_check.c

@@ -81,7 +81,7 @@ void MC_Fault_SpeedSensor_Process(TrueOrFalse_Flag_Struct_t IsStopFlag, MC_Caden
 }
 
 //力矩传感器故障检测
-void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt, MC_CadenceResult_Struct_t CadenceData, MC_AssistRunMode_Struct_t AstMode, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
+void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, uint16_t GasSensor, MC_GearSt_Struct_t GearSt, MC_CadenceResult_Struct_t CadenceData, MC_AssistRunMode_Struct_t AstMode, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 {
   static uint32_t TrigTimeCnt_1 = 0;
 	static uint32_t TrigTimeCnt_2 = 0;
@@ -111,7 +111,7 @@ void MC_Fault_TorqueSensor_Process(uint16_t ADC_Data, MC_GearSt_Struct_t GearSt,
 		{
 			DiffSqrtResult = GetStandardDeviation(TorqueArray, sizeof(TorqueArray) / 2);
 			//传感器感应失效检测,进入力矩助力模式、踏频正转大于10rpm、标准差较小
-			if(((GearSt != 0x22) && ((GearSt & 0x0F) != 0)) && (CadenceData.Cadence_Data > 30) && (CadenceData.Cadence_Dir == MC_Cadence_Forward) && (AstMode == MC_AssistRunMode_TORQUE) && (DiffSqrtResult < 10))
+			if(((GearSt != 0x22) && ((GearSt & 0x0F) != 0)) && (GasSensor < 500) && (CadenceData.Cadence_Data > 30) && (CadenceData.Cadence_Dir == MC_Cadence_Forward) && (AstMode == MC_AssistRunMode_TORQUE) && (DiffSqrtResult < 10))
 			{
 				DelayTime = 60000 / CadenceData.Cadence_Data;  //根据踏频计算踩踏1圈的时间,要考虑空踩情况
 				DelayTime = (DelayTime < 250) ? 250 : DelayTime;
@@ -993,8 +993,8 @@ void MC_Fault_Check_Process(void)
 	}
 
 	//力矩传感器故障检测
-	MC_Fault_TorqueSensor_Process(ADC1_Result[ADC1_RANK_TORQUE_SENSOR], MC_ControlCode.GearSt, MC_CadenceResult, MC_CalParam.AssistRunMode, &MC_ErrorCode);
-	
+  MC_Fault_TorqueSensor_Process(ADC1_Result[ADC1_RANK_TORQUE_SENSOR], ADC_SensorData.GasSensor, MC_ControlCode.GearSt, MC_CadenceResult, MC_CalParam.AssistRunMode, &MC_ErrorCode);
+    
 	//相线故障检测
 	MC_Fault_PhaseLine_Process(MC_CalParam.Foc_Flag, MC_RunInfo.BusCurrent, MC_RunInfo.MotorSpeed, ADC_3ShuntCurrent_RMSValue, &MC_ErrorCode);
 

+ 4 - 4
User/Src/gas_sensor.c

@@ -85,7 +85,7 @@ void GasSensorCruiceCheck(uint16_t GasSensorData, uint16_t BikeSpeed, TrueOrFals
 	if(p_GasSensorCruiceCheckParam->CruiceFlag == RESET)
 	{
 	  //转把大于启动值、车速低于3km/h、刹车,清除巡航标志
-		if((GasSensorData < 100) || (BikeSpeed < 30) || (IsBreakFlag == TRUE) || (GearSt == MC_GearSt_OFF) || (abs(GasSensorData - p_GasSensorCruiceCheckParam->Old_Data) > 100))
+		if((GasSensorData < 100) || (BikeSpeed < 30) || (IsBreakFlag == TRUE) || (GearSt == MC_GearSt_OFF) || (abs(GasSensorData - p_GasSensorCruiceCheckParam->Old_Data) > 500))
 		{
 			p_GasSensorCruiceCheckParam->CruiceFlag = RESET;
 			p_GasSensorCruiceCheckParam->CruiceSetData = 0;
@@ -94,7 +94,7 @@ void GasSensorCruiceCheck(uint16_t GasSensorData, uint16_t BikeSpeed, TrueOrFals
 		//巡航判断,持续时间8s
 		else
 		{
-			if((HAL_GetTick() - p_GasSensorCruiceCheckParam->DelayTimeCnt) > 8000)
+			if((HAL_GetTick() - p_GasSensorCruiceCheckParam->DelayTimeCnt) > 6000)
 			{
 				p_GasSensorCruiceCheckParam->CruiceFlag = SET;
 				p_GasSensorCruiceCheckParam->CruiceSetData = GasSensorData;
@@ -116,11 +116,11 @@ void GasSensorCruiceCheck(uint16_t GasSensorData, uint16_t BikeSpeed, TrueOrFals
 		}
 		GearSt_Old = GearSt;
 		//松开转把后,再转动转把
-		if(GasSensorData < 100)
+		if(GasSensorData < 200)
 		{
 		  p_GasSensorCruiceCheckParam->IsGasReleaseFlag = TRUE;
 		}
-		else if(GasSensorData > 300)
+		else if(GasSensorData > 500)
 		{
 		  if(p_GasSensorCruiceCheckParam->IsGasReleaseFlag == TRUE)
 			{

+ 17 - 25
User/Src/motor_control.c

@@ -244,47 +244,40 @@ MC_CalParam_Struct_t MC_AssistRunMode_Walk_Process(MC_WorkMode_Struct_t p_MC_Wor
 		  MC_WalkProcess_Param.MotorSpeedSetBegin = (MC_MotorParam.Rate_Speed << 5 ) * MC_WalkMode_Persent / 100;
 		}
 		SpdMotorByIdc = PID_Regulator((MC_ConfigParam1.CurrentLimit * 1000) >> 7, MC_RunInfo.BusCurrent >> 7, &PID_ConstantPower); // 母线电流闭环
+		
+		//电机启动
+	  MC_MotorStar(&MC_StarFlag);
 	}
 	
 	//运行模式,设定转速 = 设置值
 	else
 	{
 		uint8_t WalkMode_MotorSpeedSet = 0;
+		uint8_t WalkMode_SpeedLimit = 0;
 		
 		//新增配置项,兼容旧电机
 		WalkMode_MotorSpeedSet = (MC_ConfigParam1.WalkMode_MotorSpeedSet == 0) ? 135 : MC_ConfigParam1.WalkMode_MotorSpeedSet;
+		WalkMode_SpeedLimit = (MC_ConfigParam1.WalkMode_SpeedLimit == 0) ? 60 : MC_ConfigParam1.WalkMode_SpeedLimit;
 		
+		//加减速计算
 		if(MC_WalkProcess_Param.MotorSpeedSetBegin < (WalkMode_MotorSpeedSet << 5) - 10)
 		{
-		  MC_WalkProcess_Param.MotorSpeedSetBegin += 1;
+			MC_WalkProcess_Param.MotorSpeedSetBegin += 1;
 		}
 		else if(MC_WalkProcess_Param.MotorSpeedSetBegin > (WalkMode_MotorSpeedSet << 5) + 10)
 		{
-		  MC_WalkProcess_Param.MotorSpeedSetBegin -= 1;
+			MC_WalkProcess_Param.MotorSpeedSetBegin -= 1;
 		}
 		else
 		{
-		  MC_WalkProcess_Param.MotorSpeedSetBegin = WalkMode_MotorSpeedSet << 5;
+			MC_WalkProcess_Param.MotorSpeedSetBegin = WalkMode_MotorSpeedSet << 5;
 		}
 		SpdMotorByIdc = PID_Regulator((MC_ConfigParam1.CurrentLimit * 500) >> 7, MC_RunInfo.BusCurrent >> 7, &PID_ConstantPower); // 母线电流闭环
-	}
-	
-	//速度环
-	TorQueBySpd = PID_Regulator((MC_WalkProcess_Param.MotorSpeedSetBegin >> 5), MC_RunInfo.MotorSpeed, &PID_MotorSpd); // 电机速度闭环输出
-	TorQueBySpd += SpdMotorByIdc;
-	
-	//限制车速低于设置值
-	if(p_MC_WorkMode != MC_WorkMode_Config) //运行模式,推行限速
-	{
-		uint8_t WalkMode_SpeedLimit = 0;
-		
-		//新增配置项,兼容旧电机	
-		WalkMode_SpeedLimit = (MC_ConfigParam1.WalkMode_SpeedLimit == 0) ? 60 : MC_ConfigParam1.WalkMode_SpeedLimit;
-		
-	  TorQueBySpd = (uint16_t)((uint32_t)(TorQueBySpd * Function_Linear_3Stage((WalkMode_SpeedLimit - 5), 0, (WalkMode_SpeedLimit - 5), 128, MC_RunInfo.BikeSpeed)) >> 10);
-		if(MC_RunInfo.BikeSpeed > WalkMode_SpeedLimit)
+				
+		//限速处理
+		if(MC_RunInfo.BikeSpeed > (WalkMode_SpeedLimit))
 		{
-			MC_WalkProcess_Param.MotorSpeedSetBegin = 0;
+		  MC_WalkProcess_Param.MotorSpeedSetBegin = 0;
 			MC_MotorStop(&MC_StarFlag);
 		}
 		else
@@ -293,11 +286,10 @@ MC_CalParam_Struct_t MC_AssistRunMode_Walk_Process(MC_WorkMode_Struct_t p_MC_Wor
 			MC_MotorStar(&MC_StarFlag);
 		}
 	}
-	else //配置模式不限速
-	{
-	  //电机启动
-	  MC_MotorStar(&MC_StarFlag);
-	}
+	
+	//速度环
+	TorQueBySpd = PID_Regulator((MC_WalkProcess_Param.MotorSpeedSetBegin >> 5), MC_RunInfo.MotorSpeed, &PID_MotorSpd); // 电机速度闭环输出
+	TorQueBySpd += SpdMotorByIdc;
 	
 	#if 1
 	static uint16_t K_ByVoltage_Set_Old = 1024;

+ 23 - 9
User/Src/speed_sensor.c

@@ -41,7 +41,7 @@ void SpeedSensor_Process(MC_SpeedSensorData_Struct_t* p_MC_SpeedSensorData, uint
 		//停止判断
 		static uint32_t StopDelayTimeCnt = 0;
 		
-		if(p_MC_SpeedSensorData->IsTrigFlag == TRUE)
+		if(p_MC_SpeedSensorData->IsTrigFlag == TRUE) //有速度信号触发,停止判断计时更新初值
 		{
 			StopDelayTimeCnt = HAL_GetTick();
 			p_MC_SpeedSensorData->IsTrigFlag = FALSE;
@@ -58,17 +58,31 @@ void SpeedSensor_Process(MC_SpeedSensorData_Struct_t* p_MC_SpeedSensorData, uint
 			{
 				p_MC_SpeedSensorData->DiffTime_ms = 0xFFFFFFFF;
 			}
-			p_MC_SpeedSensorData->Speed_Data = (uint32_t)WheelSize * 360 / Poles  / p_MC_SpeedSensorData->DiffTime_ms;//单位0.1km/h
-			
-			//滑动均值滤波
-			*AvgResult = MovingAverageFilter(p_MC_SpeedSensorData->Speed_Data, FiltTemp, sizeof(FiltTemp) >> 1);
-			
 			//在确定停止前进行衰减
-			if((HAL_GetTick() - p_MC_SpeedSensorData->TrigSysTime) > (p_MC_SpeedSensorData->DiffTime_ms * 2))
+			uint8_t CheckTh = 0;
+			CheckTh = p_MC_SpeedSensorData->DiffTime_ms > 1000 ? p_MC_SpeedSensorData->DiffTime_ms * 125  / 100 : 
+																													 p_MC_SpeedSensorData->DiffTime_ms > 500 ? p_MC_SpeedSensorData->DiffTime_ms * 150 / 100 :
+																																																		 p_MC_SpeedSensorData->DiffTime_ms * 2;
+			if((HAL_GetTick() - p_MC_SpeedSensorData->TrigSysTime) > CheckTh)
 			{
-		  	p_MC_SpeedSensorData->DiffTime_ms = (p_MC_SpeedSensorData->DiffTime_ms * 1038) >> 10;
+			  if(p_MC_SpeedSensorData->DiffTime_ms < 2500)
+				{
+				  p_MC_SpeedSensorData->DiffTime_ms = (p_MC_SpeedSensorData->DiffTime_ms * 1050) >> 10;
+				}
+			}
+			//低速使用原始值
+      if(p_MC_SpeedSensorData->DiffTime_ms > 1000)
+			{
+				p_MC_SpeedSensorData->Speed_Data = (uint32_t)WheelSize * 360 / Poles  / p_MC_SpeedSensorData->DiffTime_ms;//单位0.1km/h
+			  *AvgResult = p_MC_SpeedSensorData->Speed_Data; 
+			}
+			//高速使用滤波值
+			else
+			{
+				p_MC_SpeedSensorData->Speed_Data = (uint32_t)WheelSize * 360 / Poles  / p_MC_SpeedSensorData->DiffTime_ms;//单位0.1km/h
+				//滑动均值滤波
+				*AvgResult = MovingAverageFilter(p_MC_SpeedSensorData->Speed_Data, FiltTemp, sizeof(FiltTemp) >> 1);
 			}
-			
 		}
 		else
 		{

+ 4 - 1
User/Src/tasks.c

@@ -17,6 +17,7 @@
 #include "key_driver.h"
 #include "encrypt.h"
 #include "ICM20600.h"
+#include "light_driver.h"
 
 /************************全局变量************************/
 TrueOrFalse_Flag_Struct_t IsInitFinish_Flag = FALSE;
@@ -540,8 +541,10 @@ void PowerOff_Process(TrueOrFalse_Flag_Struct_t ReturnEnable)
 	static uint32_t PeriodTimeCnt = 0;
 	static uint8_t Count = 0;
 	
-	//关闭助力档位
+	//关闭助力档位,关闭车灯
 	MC_ControlCode.GearSt = MC_GearSt_OFF;
+  MC_ControlCode.LightSwitch = MC_LightSwitch_OFF;
+  LightDriver_Process(MC_ControlCode.LightSwitch);
 	Update_MC_ControlCode_Back();
 	
 	#if 1 //存储到Flash,下次开机时从Flash取出转移到EEPROM

+ 2 - 2
User/Src/var.c

@@ -489,8 +489,8 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.         ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20210301.", 16);
-	strncpy(Firmware_Special, (char*)"TC011052-MCK201001-V1r0.        ", 32);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20210616.", 16);
+	strncpy(Firmware_Special, (char*)"TC011052-MCK201001-V1r1.        ", 32);
 		
 	//电机型号
 	strncpy(MC_VerInfo.Mode, (char*)"VS7500.         ", 16);

+ 7 - 1
修改说明.txt

@@ -383,7 +383,13 @@ V2.1.6_20210301 TC011052-MCK201001-V1r0
 1、关闭指拨零点更新
 2、版本号:V2.1.6_20210301_1 客户特性说明:TC011052-MCK201001-V1r0
 
-
+V2.1.6_20210616 TC011052-MCK201001-V1r1
+1、转把模式关闭力矩传感器故障检测;
+2、调整定速巡航模式进入方式;
+3、调整推行模式代码结构,功能不变;
+4、优化速度传感器的信号计算;
+5、收到关机指令是关闭车灯,解决开灯状态关机后下次开机时会闪烁一下的问题;
+6、版本号:V2.1.6_20210616 客户特性说明:TC011052-MCK201001-V1r1