Sfoglia il codice sorgente

2.1.5_20210629 TC013054-MB2001-V1r1
1、开机时增加转把是否接入检测,避免开机后接入转把导致电机自启动;
2、因已出货的QD007E主控板未焊接R60电阻,导致硬件过流信号受干扰而误报Error10,此版本关闭硬件过流保护;
3、增加软件过流保护功能;
4、接收到关机指令后,先关闭车灯,解决开灯状态关机后,下次开机时灯会闪烁。

dail 4 anni fa
parent
commit
f5e37a7812

+ 11 - 4
Core/Src/adc.c

@@ -494,10 +494,17 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	#endif
 			
 	//更新指拨
-	Temp_32 = ADC1_Result[ADC1_RANK_GAS] - GasSensor_OffSet;
-	Temp_32 = (Temp_32 <= 0) ? 0 : Temp_32;
-	GasSensorFltSum += ((Temp_32 << 10) - GasSensorFltSum) >> 8;  //滤波延时0.33*256=85.3ms
-	ADC_SensorData.GasSensor = GasSensorFltSum >> 10;
+	if(IsGasSensorConnectedFlag == TRUE)
+	{
+		Temp_32 = ADC1_Result[ADC1_RANK_GAS] - GasSensor_OffSet;
+		Temp_32 = (Temp_32 <= 0) ? 0 : Temp_32;
+		GasSensorFltSum += ((Temp_32 << 10) - GasSensorFltSum) >> 8;  //滤波延时0.33*256=85.3ms
+		ADC_SensorData.GasSensor = GasSensorFltSum >> 10;
+	}
+  else
+	{
+	  ADC_SensorData.GasSensor = 0;
+	}	
 	
 }
 

BIN
MDK-ARM/bin/MC_VS7500-TC013054-MB2001-V2.1.5.1.1_20210629.bin


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 1 - 0
User/Inc/gas_sensor.h

@@ -5,6 +5,7 @@
 #include "var.h"
 
 extern uint16_t GasSensor_OffSet;
+extern TrueOrFalse_Flag_Struct_t IsGasSensorConnectedFlag;
 
 extern void GasSensorOffSet_Init(uint16_t* OffSet, uint16_t AdcData);
 extern void GasSensorOffSetData_Update(uint16_t* PresentData, uint16_t AdcData, MC_ErrorCode_Struct_t* p_MC_ErrorCode);

+ 1 - 0
User/Src/can_process.c

@@ -81,6 +81,7 @@ void DataProcess(uint16_t ID, uint8_t Mode, uint16_t Cmd, uint8_t* Data)
 				{
 					//更新电池运行信息
 					memcpy(&BMS_RunInfo.Voltage, Data, DataLength); 
+					MC_RunInfo.SOC = BMS_RunInfo.SOC;
 					//电池通信正常标志置位,用于续航计算
 					RemainDis.IsBMS_ComOK_Flag = TRUE;              
 					RemainDis.BMS_Com_DelayTimeCnt = HAL_GetTick();

+ 35 - 10
User/Src/gas_sensor.c

@@ -1,14 +1,26 @@
 #include "gas_sensor.h"
 #include "math_tools.h"
+#include "log_save.h"
 
 uint16_t GasSensor_OffSet = 0;
+TrueOrFalse_Flag_Struct_t IsGasSensorConnectedFlag = FALSE;
 
 #define ZeroOffSetData 100
 
 //指拨零点值初始化
 void GasSensorOffSet_Init(uint16_t* OffSet, uint16_t AdcData)
 {
-  *OffSet = AdcData + ZeroOffSetData;
+  //根据开始时刻采集值判断是否连接转把
+	if(AdcData < 300)
+	{
+	  IsGasSensorConnectedFlag = FALSE;
+	}
+	else
+	{
+	  IsGasSensorConnectedFlag = TRUE;
+	}
+	
+	*OffSet = AdcData + ZeroOffSetData;
 }
 
 //指拨零点值更新
@@ -16,7 +28,7 @@ void GasSensorOffSetData_Update(uint16_t* PresentData, uint16_t AdcData, MC_Erro
 {
   static uint16_t Array[50];
 	static TrueOrFalse_Flag_Struct_t IsArrayFullFalg = FALSE;
-	uint8_t i = 0;
+	static uint8_t i = 0;
 	uint16_t TempData;
 	static uint32_t ErrorDelayTimeCnt = 0;
 	
@@ -37,18 +49,31 @@ void GasSensorOffSetData_Update(uint16_t* PresentData, uint16_t AdcData, MC_Erro
 		if(TempData < *PresentData)
 		{
 		  //更新零点值
-			*PresentData = TempData;
+			if(TempData > 300)//避免线缆松脱导致零点变为异常值
+			{
+		  	//*PresentData = TempData;
+			}	
 		}
 	}
 	//判断零点是否超出范围
-	if(*PresentData <= 1500)
+	if(p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor == 0)
 	{
-	  ErrorDelayTimeCnt = HAL_GetTick();
-		p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor = 0;
-	}
-	if((HAL_GetTick() - ErrorDelayTimeCnt) > 10000)
-	{
-	  p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor = 1;
+	  if(*PresentData <= 1500)
+		{
+		  ErrorDelayTimeCnt = HAL_GetTick();
+		}
+		if((HAL_GetTick() - ErrorDelayTimeCnt) > 10000)
+		{
+			p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor = 1;
+			//记录故障日志
+			MC_ErrorLogSaveInfo.NotesInfo1 = 1;
+			MC_ErrorLogSaveInfo.NotesInfo2 = *PresentData;
+			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
+			IsErrorLogSaveInfoUpdateFlag = TRUE;
+			//存储故障次数
+			MC_RunLog2.GasSensor_FaultCnt++;
+			RunLogSaveIndex = 2;
+		}	 
 	}
 }
 

+ 43 - 1
User/Src/protect_check.c

@@ -303,9 +303,48 @@ void MC_Protect_VoltageChange_Process(uint16_t Voltage, uint16_t Current, MC_Err
 	}
 }
 
+//软件过流保护检测
+void MC_OverCurrent_SoftProtect_Process(uint16_t BusCurrent, uint16_t MaxCurrent, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
+{
+  static uint32_t Protect_TimeCnt = 0;
+	static uint32_t Fault_TimeCnt = 0;
+	uint16_t Current_Th;
+	
+	Current_Th = (MaxCurrent * 3) >> 1;//1.5倍
+	
+	if(p_MC_ErrorCode->ERROR_Bit.Protect_OverCurrent == 0)
+	{
+		if(BusCurrent < Current_Th)
+		{
+			Protect_TimeCnt = HAL_GetTick();
+		}
+		if((HAL_GetTick() - Protect_TimeCnt) > 5000)
+		{
+			p_MC_ErrorCode->ERROR_Bit.Protect_OverCurrent = 1;
+			//记录故障日志
+			MC_ErrorLogSaveInfo.NotesInfo1 = 2;
+			MC_ErrorLogSaveInfo.NotesInfo2 = Current_Th;
+			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
+		  IsErrorLogSaveInfoUpdateFlag = TRUE;
+			//存储故障次数
+			MC_RunLog1.OC_ProtectCnt++;
+			RunLogSaveIndex = 1;	
+			Fault_TimeCnt = HAL_GetTick();
+		}
+	}
+	else
+	{
+		//过流保护恢复
+		if((HAL_GetTick() - Fault_TimeCnt) > 5000)
+		{
+			MC_ErrorCode.ERROR_Bit.Protect_OverCurrent = 0;
+		}
+	}
+}
+
 /******************************全局函数定义******************************/
 #define OC_CLEARFLAG_DELAYTIME 15 //过流标志间隔清零延时,单位ms
-#define OC_COUNTER_TH 100          //过流保护计数判断阈值
+#define OC_COUNTER_TH 200         //过流保护计数判断阈值
 //过流保护检测
 /*
 检测原理:
@@ -367,6 +406,7 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
 				p_MC_ErrorCode->ERROR_Bit.Protect_OverCurrent = 1;
 				ocFaultTimeCnt = HAL_GetTick();
 				//记录故障日志
+				MC_ErrorLogSaveInfo.NotesInfo1 = 1;
 			  ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 		  	IsErrorLogSaveInfoUpdateFlag = TRUE;
 				//存储故障次数
@@ -407,4 +447,6 @@ void MC_Protect_Check_Process(void)
 	//电压波动异常保护检测
 	MC_Protect_VoltageChange_Process(MC_RunInfo.BusVoltage, MC_RunInfo.BusCurrent, &MC_ErrorCode);
 	
+	//软件过流保护检测
+	MC_OverCurrent_SoftProtect_Process(MC_RunInfo.BusCurrent, MC_ConfigParam1.CurrentLimit * 1000, &MC_ErrorCode);
 }

+ 10 - 5
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;
@@ -61,8 +62,10 @@ void HAL_SYSTICK_Callback(void)
 	}
 		
 	//更新指拨零点值
-	GasSensorOffSetData_Update(&GasSensor_OffSet, ADC1_Result[ADC1_RANK_GAS], &MC_ErrorCode);
-	
+	if(IsGasSensorConnectedFlag == TRUE)
+	{
+		GasSensorOffSetData_Update(&GasSensor_OffSet, ADC1_Result[ADC1_RANK_GAS], &MC_ErrorCode);
+	}	
 	//ADC数据滑动滤波计算
 	ADC_SensorData_Filt(ADC1_Result_Filt, ADC2_Result_Filt);
 	
@@ -524,8 +527,10 @@ void PowerOff_Process(void)
 {
   static FlagStatus SaveFlag = RESET;
 	
-	//关闭助力档位
+	//关闭助力档位,关闭车灯
 	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
@@ -691,7 +696,7 @@ void MC_DeviceCheck(Device_CheckInfo_Struct_t* p_Device, MC_ErrorCode_Struct_t*
 		}
 		case 2://校验按键
 		{
-		   p_ErrorCode->ERROR_Bit.Fault_BMS_Check = 1;
+		   p_ErrorCode->ERROR_Bit.Fault_PBU_Check = 1;
 			Send_CanID = ID_MC_TO_BMS;
 			Send_MAC_ID_Cmd = 0x5100;
 			Send_Code_Cmd = 0x5200;
@@ -699,7 +704,7 @@ void MC_DeviceCheck(Device_CheckInfo_Struct_t* p_Device, MC_ErrorCode_Struct_t*
 		}
 		case 3://校验仪表
 		{
-		  p_ErrorCode->ERROR_Bit.Fault_BMS_Check = 1;
+		  p_ErrorCode->ERROR_Bit.Fault_HMI_Check = 1;
 			Send_CanID = ID_MC_TO_BMS;
 			Send_MAC_ID_Cmd = 0x7100;
 			Send_Code_Cmd = 0x7200;

+ 2 - 0
User/Src/tim.c

@@ -406,7 +406,9 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 	MC_RunInfo.MotorSpeed = MotorSpeedCal(MC_HallSensorData.SVM_Angle, MC_HallSensorData.IsStopFlag);
 	
 	//过流检测
+	#if 0 //已出货的QD007E板子,R60是未焊接状态,此功能无效
 	MC_Protect_OverCurrent_Process(&MC_Protect_OverCurrentTrig_Flag, &MC_ErrorCode);
+	#endif
 	
 	//FOC运算	
 	if(((uint8_t)(MC_CalParam.AssistRunMode ^ MC_CalParam_Back.AssistRunMode) != (uint8_t)~0) ||

+ 3 - 3
User/Src/var.c

@@ -488,9 +488,9 @@ void Var_Init(void)
 	memcpy((uint8_t*)&PBU_ConfigParam.GearsNum, (uint8_t*)&PBU_ConfigParam_Default.GearsNum, sizeof(PBU_ConfigParam_Struct_t));
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
-  strncpy(MC_VerInfo.HW_Version, (char*)"QD007G.         ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r5_20201207.", 16);
-	strncpy(Firmware_Special, (char*)"TC013054-MB2001-V1r0.           ", 32);
+  strncpy(MC_VerInfo.HW_Version, (char*)"QD007E.         ", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r5_20210629.", 16);
+	strncpy(Firmware_Special, (char*)"TC013054-MB2001-V1r1.           ", 32);
 		
 	//电机型号
 	strncpy(MC_VerInfo.Mode, (char*)"VS 7500.        ", 16);

+ 6 - 0
修改说明.txt

@@ -356,6 +356,12 @@ V2.1.5_20200903
 3、系统清除指令,只清楚EEPROM前4个Flag字节,缩短擦除时间;
 4、软件版本:2.1.5_20201207 特性说明:TC013054-MB2001-V1r0
 
+2.1.5_20210629 TC013054-MB2001-V1r1
+1、开机时增加转把是否接入检测,避免开机后接入转把导致电机自启动;
+2、因已出货的QD007E主控板未焊接R60电阻,导致硬件过流信号受干扰而误报Error10,此版本关闭硬件过流保护;
+3、增加软件过流保护功能;
+4、接收到关机指令后,先关闭车灯,解决开灯状态关机后,下次开机时灯会闪烁。
+