Forráskód Böngészése

* V6r3r0_20221009
1 增加掉电保护功能;
2 屏蔽温度故障检测;
3 版本号更新为V6r3r0_20221009;

white.xu 2 éve
szülő
commit
5a91a7b353

+ 1 - 0
Core/Inc/adc.h

@@ -120,6 +120,7 @@ extern void ADC_Start(void);
 extern void ADC_SensorData_Filt(uint16_t* p_ADC1_Result_Filt, uint16_t* p_ADC2_Result_Filt);
 extern void PhaseCurrent_CalRMSValue(ADC_3ShuntCurrent_Struct_t* ADC_3ShuntCurrent, ADC_3ShuntCurrent_Struct_t* PhaseCurrent_RMS);
 extern void MOS_NTC_Init( void );
+extern void PowerDownProtection( uint16_t BusVoltage_AD );
 /* USER CODE END Prototypes */
 
 #ifdef __cplusplus

+ 20 - 0
Core/Src/adc.c

@@ -50,6 +50,7 @@
 #include "gas_sensor.h"
 #include "torque_sensor.h"
 #include "math_tools.h"
+#include "motor_control.h"
 
 uint16_t ADC1_Result[ADC1_DATA_NUM] = {0};
 uint16_t ADC1_Result_Filt[ADC1_DATA_NUM] = {0};
@@ -553,6 +554,8 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	//更新硬件版本AD
 	HardwareVersionADFltSum += ((ADC1_Result[ADC1_RANK_HARDWARE_VER] << 10) - HardwareVersionADFltSum) >> 9;
 	HardwareVersion_AD = (uint16_t)(HardwareVersionADFltSum >> 10);
+	
+	PowerDownProtection(ADC1_Result[ADC1_RANK_VIN]);
 }
 
 //ADC1和ADC2数据滑动滤波
@@ -652,6 +655,23 @@ void MOS_NTC_Init( void )
 		_Error_Handler(__FILE__, __LINE__);
 	}	
 }
+
+void PowerDownProtection( uint16_t BusVoltage_AD )
+{
+	static uint16_t powerdowncount=0;
+	
+	if( BusVoltage_AD < 1393 )  //1393对应的母线电压为25V
+	{
+		if( ++powerdowncount > 60 ) //电压小于20V并连续60次,大约持续20ms左右
+		{
+			Disable_PwmGpio_Out();
+		}
+	}
+	else
+	{
+		powerdowncount=0;
+	}
+}
 /* USER CODE END 1 */
 
 /**

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 2169 - 2169
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 56 - 56
User/Src/fault_check.c

@@ -253,23 +253,23 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
 {
   static uint32_t TrigTimeCnt_PCB = 0;         //PCB NTC采集异常计时
 	static uint32_t TrigTimeCnt_Coil = 0;        //绕组 NTC采集异常计时
-	static uint32_t NTC_Check_PeriodTimeCnt = 0; //NTC检测,母线电流采集周期
-	static uint16_t NTC_Check_Count = 0;
-	static uint32_t BusCurrentSum = 0;
-	static uint16_t BusCurrentAvg1 = 0, BusCurrentAvg2 = 0;
-	static uint8_t T_PCB_Old = 0;
-	static uint8_t T_Coil_Old = 0;
+//	static uint32_t NTC_Check_PeriodTimeCnt = 0; //NTC检测,母线电流采集周期
+//	static uint16_t NTC_Check_Count = 0;
+//	static uint32_t BusCurrentSum = 0;
+//	static uint16_t BusCurrentAvg1 = 0, BusCurrentAvg2 = 0;
+//	static uint8_t T_PCB_Old = 0;
+//	static uint8_t T_Coil_Old = 0;
 		
 	//初始化5s,且50度以上,不检测NTC故障
 	if((HAL_GetTick() < 5000) || (T_PCB_Result > 90))
 	{
 	  TrigTimeCnt_PCB = HAL_GetTick();
 		TrigTimeCnt_PCB = HAL_GetTick();
-		NTC_Check_PeriodTimeCnt = HAL_GetTick();
-		NTC_Check_Count = 0;
-		
-		T_PCB_Old = T_PCB_Result;
-		T_Coil_Old = T_Coil_Result;
+//		NTC_Check_PeriodTimeCnt = HAL_GetTick();
+//		NTC_Check_Count = 0;
+//		
+//		T_PCB_Old = T_PCB_Result;
+//		T_Coil_Old = T_Coil_Result;
 		
 		return;
 	}
@@ -324,51 +324,51 @@ void MC_Fault_NTCSensor_Process(uint8_t T_PCB_Result, uint8_t T_Coil_Result, MC_
 		  TrigTimeCnt_Coil = HAL_GetTick();
 		}
 		
-		//NTC为固定值的检测,分别计算2个6.8min内母线电流平均值,当两段母线电流平均值不相等时判断NTC是否发生变化
-		if((HAL_GetTick() - NTC_Check_PeriodTimeCnt) >= 100)
-		{
-			NTC_Check_PeriodTimeCnt = HAL_GetTick();
-			BusCurrentSum += (uint16_t)((MC_RunInfo.BusCurrent > 20000) ? 156 
-																 : MC_RunInfo.BusCurrent >> 7);//按照mA / 128 判断,约0.1A,限幅20A
-			NTC_Check_Count++;
-			if(NTC_Check_Count == 4096) //计算第一个6.8min平均值
-			{
-					//avg1 = (x1 + x2 + ... + x4096) / 4096
-					BusCurrentAvg1 = BusCurrentSum >> 12; 
-			}
-			else if(NTC_Check_Count >= 8192) //第二个6.8min
-			{
-					NTC_Check_Count = 0;
-					//avg2 = (x4097 + x4098 + ... +x8192) / 4096 = 2 * (x1 + x2 + ... + x8192) / 8192 - avg1
-					BusCurrentAvg2 = (BusCurrentSum >> 12) - BusCurrentAvg1; 
-					BusCurrentSum = 0;
-					//总平均电流超过10A时,当两段平均电流变化超过3A,判断温度是否发生变化
-					if(((BusCurrentAvg1 + BusCurrentAvg2) >> 1) > 79) //79 * 128 = 10.1A
-					{
-							if(abs(BusCurrentAvg1 - BusCurrentAvg2) >= 25)  //25 * 128 = 3.2A
-							{
-									if((abs(T_PCB_Result - T_PCB_Old) < 1) ||  //PCB 温升小于1度
-										 (abs(T_Coil_Result - T_Coil_Old) < 1))  //绕组温升小于1度
-									{
-											p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
-											//记录故障日志
-											MC_ErrorLogSaveInfo.NotesInfo1 = 3;
-											MC_ErrorLogSaveInfo.NotesInfo2 = (BusCurrentAvg1 << 8) + (BusCurrentAvg2);
-											MC_ErrorLogSaveInfo.NotesInfo3 = (uint16_t)((abs(T_PCB_Result - T_PCB_Old) << 8) 
-																																+ (abs(T_Coil_Result - T_Coil_Old) < 2));
-											ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
-											IsErrorLogSaveInfoUpdateFlag = TRUE;
-											//存储故障次数
-											MC_RunLog1.NTC_FaultCnt++;
-											RunLogSaveIndex = 1;    
-											return;
-								 }
-							}
-					}
-					T_PCB_Old = T_PCB_Result;
-					T_Coil_Old = T_Coil_Result;
-			}
-		}		
+//		//NTC为固定值的检测,分别计算2个6.8min内母线电流平均值,当两段母线电流平均值不相等时判断NTC是否发生变化
+//		if((HAL_GetTick() - NTC_Check_PeriodTimeCnt) >= 100)
+//		{
+//			NTC_Check_PeriodTimeCnt = HAL_GetTick();
+//			BusCurrentSum += (uint16_t)((MC_RunInfo.BusCurrent > 20000) ? 156 
+//																 : MC_RunInfo.BusCurrent >> 7);//按照mA / 128 判断,约0.1A,限幅20A
+//			NTC_Check_Count++;
+//			if(NTC_Check_Count == 4096) //计算第一个6.8min平均值
+//			{
+//					//avg1 = (x1 + x2 + ... + x4096) / 4096
+//					BusCurrentAvg1 = BusCurrentSum >> 12; 
+//			}
+//			else if(NTC_Check_Count >= 8192) //第二个6.8min
+//			{
+//					NTC_Check_Count = 0;
+//					//avg2 = (x4097 + x4098 + ... +x8192) / 4096 = 2 * (x1 + x2 + ... + x8192) / 8192 - avg1
+//					BusCurrentAvg2 = (BusCurrentSum >> 12) - BusCurrentAvg1; 
+//					BusCurrentSum = 0;
+//					//总平均电流超过10A时,当两段平均电流变化超过3A,判断温度是否发生变化
+//					if(((BusCurrentAvg1 + BusCurrentAvg2) >> 1) > 79) //79 * 128 = 10.1A
+//					{
+//							if(abs(BusCurrentAvg1 - BusCurrentAvg2) >= 25)  //25 * 128 = 3.2A
+//							{
+//									if((abs(T_PCB_Result - T_PCB_Old) < 1) ||  //PCB 温升小于1度
+//										 (abs(T_Coil_Result - T_Coil_Old) < 1))  //绕组温升小于1度
+//									{
+//											p_MC_ErrorCode->ERROR_Bit.Fault_NtcSensor = 1;
+//											//记录故障日志
+//											MC_ErrorLogSaveInfo.NotesInfo1 = 3;
+//											MC_ErrorLogSaveInfo.NotesInfo2 = (BusCurrentAvg1 << 8) + (BusCurrentAvg2);
+//											MC_ErrorLogSaveInfo.NotesInfo3 = (uint16_t)((abs(T_PCB_Result - T_PCB_Old) << 8) 
+//																																+ (abs(T_Coil_Result - T_Coil_Old) < 2));
+//											ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
+//											IsErrorLogSaveInfoUpdateFlag = TRUE;
+//											//存储故障次数
+//											MC_RunLog1.NTC_FaultCnt++;
+//											RunLogSaveIndex = 1;    
+//											return;
+//								 }
+//							}
+//					}
+//					T_PCB_Old = T_PCB_Result;
+//					T_Coil_Old = T_Coil_Result;
+//			}
+//		}		
 	}
 }
 

+ 1 - 1
User/Src/var.c

@@ -502,7 +502,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
 	strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.       ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V6r3r0_20220909C", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V6r3r0_20221009C", 16);
 	#if NormalWork
 	MC_VerInfo.FW_Version[15] = '.';
 	#endif

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott