Эх сурвалжийг харах

V2.1.7_20210202
1、上电时增加转把是否接入的检测,解决上电时未接入转把,上电后接入转把会启动电机的问题;
2、低压保护检测增加根据BMS通信状态采用BMS的电压或电机的电压;
3、版本号:V2.1.7_20210202

dail.zhou 4 жил өмнө
parent
commit
4a04bcae24

+ 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;
+	}	
 }
 
 //ADC1和ADC2数据滑动滤波

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 2540 - 2540
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/MC_VOLANS_V2r1r7_20210202.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 - 1
User/Inc/remain_distance.h

@@ -52,7 +52,7 @@ extern Remain_Dis_t RemainDis;
 extern void RD_RemainDis_Init(uint16_t uwWheelLength, TrueOrFalse_Flag_Struct_t BMS_COM_OK, uint16_t BusVoltage, uint8_t DesignVol, uint16_t BMS_RC);
 extern void RD_CalculateRemainDis(uint32_t WheelTurnCnt, uint16_t RemainCap, uint8_t SOC, uint16_t BusCurrent) ;
 extern void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t MC_AssistRunMode);
-extern uint8_t Battery_SocCal(uint16_t Voltage, uint16_t Current);
+extern uint8_t Battery_SocCal(uint16_t Voltage);
 
 #endif
 

+ 1 - 0
User/Src/can_process.c

@@ -82,6 +82,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;
+		}	 
 	}
 }
 

+ 7 - 3
User/Src/protect_check.c

@@ -52,6 +52,7 @@ void MC_Protect_UnderVoltage_Process(uint16_t BusVoltage, uint8_t DesignVoltage,
 		{
 			p_MC_ErrorCode->ERROR_Bit.Protect_UnderVoltage = 1;
 			//记录故障日志
+			MC_ErrorLogSaveInfo.NotesInfo1 = BusVoltage;
 			ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
 			IsErrorLogSaveInfoUpdateFlag = TRUE;
 			//存储故障次数
@@ -305,7 +306,7 @@ void MC_Protect_VoltageChange_Process(uint16_t Voltage, uint16_t Current, MC_Err
 
 /******************************全局函数定义******************************/
 #define OC_CLEARFLAG_DELAYTIME 15 //过流标志间隔清零延时,单位ms
-#define OC_COUNTER_TH 100          //过流保护计数判断阈值
+#define OC_COUNTER_TH 100         //过流保护计数判断阈值
 //过流保护检测
 /*
 检测原理:
@@ -393,8 +394,11 @@ void MC_Protect_OverCurrent_Process(FlagStatus* OverCurrentTrigFlag, MC_ErrorCod
 void MC_Protect_Check_Process(void)
 {
 	//低压保护检测
-	MC_Protect_UnderVoltage_Process(MC_RunInfo.BusVoltage, MC_MotorParam.Rate_Voltage, ((MC_ConfigParam1.UV_Protect_TH == 0) ? 3100 : MC_ConfigParam1.UV_Protect_TH), &MC_ErrorCode);
-
+  MC_Protect_UnderVoltage_Process(((IsComOK_BMS.IsOK_Flag == TRUE) ? BMS_RunInfo.Voltage : MC_RunInfo.BusVoltage), 
+	                                MC_MotorParam.Rate_Voltage, 
+	                                ((MC_ConfigParam1.UV_Protect_TH == 0) ? 3100 : MC_ConfigParam1.UV_Protect_TH), 
+	                                &MC_ErrorCode);
+	
 	//过压保护检测
 	MC_Protect_OverVoltage_Process(MC_RunInfo.BusVoltage, MC_MotorParam.Rate_Voltage, &MC_ErrorCode);
 

+ 15 - 16
User/Src/remain_distance.c

@@ -462,7 +462,7 @@ void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t M
 	MC_AssistRunMode_Old = MC_AssistRunMode;
 }
 
-uint8_t Battery_SocCal(uint16_t Voltage_mV, uint16_t Current_mA)
+uint8_t Battery_SocCal(uint16_t Voltage_mV)
 {
 	
   static uint32_t PeriodTimeCnt = 0;
@@ -485,25 +485,24 @@ uint8_t Battery_SocCal(uint16_t Voltage_mV, uint16_t Current_mA)
 	if((HAL_GetTick() - PeriodTimeCnt) > 2000)//¼ÆËãÖÜÆÚ2s
 	{
 		PeriodTimeCnt = HAL_GetTick();
-	  if(Current_mA < 2000)//µçÁ÷СÓÚ2A
+		for(i=0;i<num;i++)
 		{
-			for(i=0;i<num;i++)
+			if(battery_VoltageQuantity[i][0] <=  Voltage)
 			{
-				if(battery_VoltageQuantity[i][0] <=  Voltage)
-				{
-					batteryRemainQ = batteryTotalQ - battery_VoltageQuantity[i][1] ;    //A*s
-					break;
-				}
-				else//µç³ØµçѹµÍÓÚ×îСֵ
-				{
-					batteryRemainQ = 0;
-				}
+				batteryRemainQ = batteryTotalQ - battery_VoltageQuantity[i][1] ;    //A*s
+				break;
 			}
-			Result = batteryRemainQ * 100 / batteryTotalQ;
-			if(Result>=Result_Pre) Result = Result_Pre;
-	  }	
+			else//µç³ØµçѹµÍÓÚ×îСֵ
+			{
+				batteryRemainQ = 0;
+			}
+		}
+		Result = batteryRemainQ * 100 / batteryTotalQ;
+		if(Result >= Result_Pre)
+		{
+		  Result = Result_Pre;
+		}
 	}
 	return Result;
 }
 
-

+ 8 - 6
User/Src/tasks.c

@@ -61,7 +61,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);
@@ -137,8 +140,7 @@ void MC_RunInfo_Update(void)
 	  PeriodTimeCnt = HAL_GetTick();
 		
 		//计算电功率
-//		MC_RunInfo.Power = (uint16_t)((uint32_t)(MC_RunInfo.BusCurrent / 100 * MC_RunInfo.BusVoltage / 100) / 100) / 2;
-		MC_RunInfo.Power = ((uint32_t)MC_RunInfo.BusCurrent) * 25 / (MC_ConfigParam1.CurrentLimit*100);
+		MC_RunInfo.Power = ((uint32_t)MC_RunInfo.BusCurrent) * 25 / (MC_ConfigParam1.CurrentLimit * 100);
 		MC_RunInfo.Power = (MC_RunInfo.Power < 20) ? 0 : MC_RunInfo.Power;
 		
 		//更新踏频方向
@@ -154,7 +156,7 @@ void MC_RunInfo_Update(void)
 		MC_RunInfo.LightSwitch = MC_ControlCode.LightSwitch;
 		
 		//剩余电量
-		MC_RunInfo.SOC = (DeviceOnLine_Status.Status_Bit.BMS_OffLine == 1) ? Battery_SocCal(MC_RunInfo.BusVoltage * 36 / MC_MotorParam.Rate_Voltage, MC_RunInfo.BusCurrent)
+		MC_RunInfo.SOC = (DeviceOnLine_Status.Status_Bit.BMS_OffLine == 1) ? Battery_SocCal(MC_RunInfo.BusVoltage * 36 / MC_MotorParam.Rate_Voltage)
 	                                                                     : BMS_RunInfo.SOC;
 		//续航里程
 		MC_RunInfo.RemainDistance = (DeviceOnLine_Status.Status_Bit.BMS_OffLine == 1) ? 0xEEEE : RemainDis.remainDistance;
@@ -724,7 +726,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;
@@ -732,7 +734,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;

+ 1 - 1
User/Src/var.c

@@ -490,7 +490,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
   strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.         ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r7_20210128.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V2r1r7_20210202.", 16);
 	strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r0.           ", 32);
 		
 	//电机型号

+ 12 - 2
修改说明.txt

@@ -384,8 +384,18 @@ V6.0.0_20210128
 1、修改PowerOff_Process函数,在接收到关机指令时,延迟5s退出,按键和BMS发送关机指令后延迟1s关闭ACC和电源;
 2、版本号:V6.0.0_20210128
 
-
-
+V2.1.7_20210128
+1、增加尾灯工作模式的配置,共设置4种模式;
+2、调整LightDriver_Process处理函数;
+3、IsBreakTrig_Flag初始化为FALSE,否则开机时会导致刹车灯亮1s左右;
+4、修改临时掉电数据存储的地址,单独开一页(1024B)空间,避免初始化时MC_Init()前执行EEPROM_Flash_DataUpdate时,擦除完1KFlash后系统断电,导致Flash中数据丢失的问题;
+5、修改PowerOff_Process函数,在接收到关机指令时,延迟5s退出,按键和BMS发送关机指令后延迟1s关闭ACC和电源;
+6、版本号:V2.1.7_20210128
+
+V2.1.7_20210202
+1、上电时增加转把是否接入的检测,解决上电时未接入转把,上电后接入转把会启动电机的问题;
+2、低压保护检测增加根据BMS通信状态采用BMS的电压或电机的电压;
+3、版本号:V2.1.7_20210202
 
 
 

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно