Ver Fonte

V2.1.6_20201201
1、速度传感器信号增加限值处理,避免较大值出现引起99.9km/h;
2、车速停止时,清零均值滤波数组,避免第一个信号会有速值;
3、增加软件特殊性字符串和相关协议,发送版本信息同时发出;
4、收到系统清除指令时,EEPROM只清除前面4个字节,缩短时间,解决越南测工机报错的问题;
5、版本号:V2.1.6_20201201

dail.zhou há 4 anos atrás
pai
commit
759afb983c

+ 7 - 1
Core/Src/gpio.c

@@ -151,6 +151,7 @@ void Disable_PwmGpio_Out(void)
 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 {
 	static uint32_t SignalTrigCount = 0;
+	static uint32_t DiffTime_ms_Old = 0;
 	
 	if(GPIO_Pin == SPEED_SENSOR_Pin)
 	{
@@ -159,14 +160,19 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 		if(MC_SpeedSensorData.IsStopFlag == TRUE)
 		{
 		  MC_SpeedSensorData.TrigSysTime = HAL_GetTick();
-			MC_SpeedSensorData.DiffTime_ms = 0;
+			MC_SpeedSensorData.DiffTime_ms = 0xFFFFFFFF;
 			MC_SpeedSensorData.IsStopFlag = FALSE;
 		}
 		else
 		{
 		  MC_SpeedSensorData.DiffTime_ms = HAL_GetTick() - MC_SpeedSensorData.TrigSysTime;
+			if(MC_SpeedSensorData.DiffTime_ms < 75)//限制车速测量最高值,抗干扰,3600/0.075*2.19/1000 = 105km/h
+			{
+			  MC_SpeedSensorData.DiffTime_ms = DiffTime_ms_Old;
+			}
 			MC_SpeedSensorData.TrigSysTime = HAL_GetTick();
 		}
+		DiffTime_ms_Old = MC_SpeedSensorData.DiffTime_ms;
 		//车轮圈数更新
 		SignalTrigCount++;
 		MC_SpeedSensorData.WheelTurnCount = SignalTrigCount / ((MC_ConfigParam1.SpeedSensorPoles == 0) ? 1: MC_ConfigParam1.SpeedSensorPoles);

BIN
MDK-ARM/bin/MC_VOLANS_V2r1r6_20201201.bin


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 1 - 0
User/Inc/math_tools.h

@@ -24,4 +24,5 @@ extern int16_t accDecProcess(int16_t V_Set,	\
 											int32_t* V_SetMiddle);
 extern uint16_t Standard_deviation_aver(uint16_t *data,uint8_t len, uint16_t *pAver);
 extern uint8_t CheckArrayIs0(uint8_t* Data, uint16_t Len);
+extern void ArrayFillZero(uint16_t* Array, uint16_t Length);
 #endif

+ 1 - 0
User/Inc/var.h

@@ -425,6 +425,7 @@ typedef struct
 extern MC_RunInfo_Struct_t MC_RunInfo;
 extern MC_ErrorCode_Struct_t MC_ErrorCode;
 extern MC_VerInfo_Struct_t MC_VerInfo;
+extern char Firmware_Special[32];
 extern OnLine_Status_Struct_t DeviceOnLine_Status;
 extern BMS_RunInfo_Struct_t BMS_RunInfo;
 extern Device_CheckInfo_Struct_t BMS_CheckInfo;

+ 4 - 1
User/Src/can_process.c

@@ -262,6 +262,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
 					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
 					SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
+					SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
 					break;
 				}
 				
@@ -298,6 +299,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
 					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
 					SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
+					SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
 					break;
 				}
 				case 0x3100://查询电机配置参数
@@ -372,6 +374,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				  ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, (uint8_t*)MC_VerInfo.Mode, 16);
 					ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, (uint8_t*)MC_VerInfo.SN_Num, 16);
 					SendData(ID_MC_BC, MODE_REPORT, 0x1240, (uint8_t*)MC_VerInfo.Mode);
+					SendData(ID_MC_BC, MODE_REPORT, 0x1720, (uint8_t*)Firmware_Special);
 					break;
 				}
 				case 0x1300://查询自定义字符串1
@@ -519,7 +522,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				{
 				  if(strncmp("CLEAR", (char*)Data, DataLength) == 0)
 					{
-					  EEPROM_24C02_ClearData(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_FLAG, EEPROM_24C02_ADDR_END, 0xFF);
+					  EEPROM_24C02_ClearData(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_FLAG, EEPROM_24C02_ADDR_FLAG + 4, 0xFF);
 						EEPROM_Flash_Erase(EEPROM_FLASH_BEGIN_ADDRESS, EEPROM_FLASH_END_ADDRESS);
 						EEPROM_Flash_Erase(LOG_ADDRESS_BEGIN, LOG_ADDRESS_END);
 						SendData(ID_MC_TO_CDL, MODE_REPORT, 0xA903, (uint8_t*)"ACK");

+ 9 - 0
User/Src/math_tools.c

@@ -387,3 +387,12 @@ uint8_t CheckArrayIs0(uint8_t* Data, uint16_t Len)
 	return 0;
 }
 
+/*Ęý×éĚîłä0*/
+void ArrayFillZero(uint16_t* Array, uint16_t Length)
+{
+  uint16_t i;
+	for(i=0; i<Length; i++)
+	{
+	  Array[i] = 0;
+	}
+}

+ 2 - 2
User/Src/motor_control.c

@@ -993,7 +993,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 		}
 		
 		//随车速调节助力比
-		Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(0, 0, MC_ConfigParam1.SpeedLimit * 10 + 10, 68, MC_SpeedSensorData.Speed_Data)) >> 10);
+		Torque_Temp = (uint16_t)((uint32_t)(Torque_Temp * Function_Linear_3Stage(0, 0, MC_ConfigParam1.SpeedLimit * 10, 52, MC_SpeedSensorData.Speed_Data)) >> 10);
 			
     //助力输出		
 		MC_TorqueProcess_Param.TorqueRef = Torque_Temp;
@@ -1003,7 +1003,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Torque_Process(uint16_t SenorData, MC_Gear
 		}
 				
 		//升降速曲线计算
-		if( MC_SpeedSensorData.Speed_Data > (MC_ConfigParam1.SpeedLimit * 10 + 10) ) //限速处理
+		if( MC_SpeedSensorData.Speed_Data > (MC_ConfigParam1.SpeedLimit * 10) ) //限速处理
 		{
 			if((MC_TorqueProcess_Param.TorqueRef - MC_TorqueProcess_Param.TorqueRefEnd) > 2)
 			{

+ 2 - 0
User/Src/speed_sensor.c

@@ -74,6 +74,7 @@ void SpeedSensor_Process(MC_SpeedSensorData_Struct_t* p_MC_SpeedSensorData, uint
 		{
 			p_MC_SpeedSensorData->Speed_Data = 0;
 			*AvgResult = 0;
+			ArrayFillZero(FiltTemp, sizeof(FiltTemp) >> 1);
 			p_MC_SpeedSensorData->DiffTime_ms = 0xFFFFFFFF;
 			return;
 		}
@@ -150,6 +151,7 @@ void SpeedCal_ByCommunication(MC_SpeedSensorData_Struct_t* p_MC_SpeedSensorData,
 		{
 		  p_MC_SpeedSensorData->Speed_Data = 0;
 			*AvgResult = 0;
+			ArrayFillZero(FiltTemp, sizeof(FiltTemp) >> 1);
 			return;
 		}
 		

+ 3 - 1
User/Src/var.c

@@ -3,6 +3,7 @@
 MC_RunInfo_Struct_t MC_RunInfo;                           //MC运行信息
 MC_ErrorCode_Struct_t MC_ErrorCode;                       //MC故障代码
 MC_VerInfo_Struct_t MC_VerInfo;                           //MC版本信息
+char Firmware_Special[32];                                //MC软件版本特性说明
 OnLine_Status_Struct_t DeviceOnLine_Status;               //设备在线检测结果
 BMS_RunInfo_Struct_t BMS_RunInfo;                         //BMS运行信息
 Device_CheckInfo_Struct_t BMS_CheckInfo;                  //BMS授权校验
@@ -488,7 +489,8 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007G.         ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20201023.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r6_20201201.", 16);
+	strncpy(Firmware_Special, (char*)"GENERAL-V0r0.                   ", 32);
 		
 	//电机型号
 	strncpy(MC_VerInfo.Mode, (char*)"VL6500 & VS7500.", 16);

+ 6 - 1
修改说明.txt

@@ -335,7 +335,12 @@ V2.1.6_20201023
 3、限速临界点,改为从+1km/h开始衰减,到+2.2km/断电;
 4、版本号:V2.1.6_20201023
 
-
+V2.1.6_20201201
+1、速度传感器信号增加限值处理,避免较大值出现引起99.9km/h;
+2、车速停止时,清零均值滤波数组,避免第一个信号会有速值;
+3、增加软件特殊性字符串和相关协议,发送版本信息同时发出;
+4、收到系统清除指令时,EEPROM只清除前面4个字节,缩短时间,解决越南测工机报错的问题;
+5、版本号:V2.1.6_20201201