فهرست منبع

V7.2.0.0.0_20220714
1 11s之前MCU温度默认为25度,11s之后旧电路MCU温度为内部温度传感器,新电路板MCU温度为MOS管附件的NTC温度;
2 电流环的Q轴PID参数的输出下线由-32768改为-100;
3 踏频霍尔、电机霍尔连续采集三次,三次都一致才更新霍尔状态,防us级干扰;
4 硬件识别故障改为4s到10s的时间段检测,其它时间段不检测;
5 指拨模式速度环下降时间由1000ms降为5500ms,删掉下线限制;
6 TTKZ019A之前的电路板温度保护条件为:单片机100度保护或者绕组130度保护;
7 TTKZ019A之后的电路板温度保护条件为:单片机 90度保护, 绕组130度保护或者MOS管110度保护;
8 母线电流故障检测增加限制条件,无故障时才检测,有硬件故障后就不检测;
9 版本号改为:V7.2.0.0_20220713;

white.xu 3 سال پیش
والد
کامیت
73d7bcf0b1

+ 1 - 0
Core/Inc/adc.h

@@ -121,6 +121,7 @@ extern uint16_t uw_current_offset;//ĸ
 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 );
 /* USER CODE END Prototypes */
 
 #ifdef __cplusplus

+ 43 - 3
Core/Src/adc.c

@@ -449,7 +449,7 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	static uint8_t T_MCU_Init = 0;
 	static uint16_t T_MCU_Init_AD = 0;
 	static int32_t GasSensorFltSum = 0, HardwareVersionADFltSum=0;
-	
+	static TrueOrFalse_Flag_Struct_t MOS_NTC_InitFinishedFlag = FALSE;
 	//更新PCB温度,绕组温度,MCU温度
 	T_PCB_Sum += ADC1_Result[ADC1_RANK_NTC_PCB];
 	T_Coil_Sum += ADC1_Result[ADC1_RANK_NTC_COIL];
@@ -470,8 +470,27 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 			T_MCU_Init_AD = T_MCU_Sum / 3000;//校准时AD值
 			T_MCU_Init_Flag = TRUE;
 		}
-		//计算MCU温度 
-    MC_RunInfo.T_MCU = T_MCU_Init + ((int16_t)(T_MCU_Init_AD - T_MCU_Sum / 3000) * 192 >> 10);//4.3mV/度, 3300 / 4095 / 4.3 * 1024 = 192
+		//计算MCU温度 		
+		if( HAL_GetTick() < 11000)  MC_RunInfo.T_MCU = 65;  //前11s默认为25度
+		else
+		{		
+			if(MC_HallSensorData.InverterExistFlag == TRUE) //旧电路板使用MCU内部温度传感器
+			{
+				MC_RunInfo.T_MCU = T_MCU_Init + ((int16_t)(T_MCU_Init_AD - T_MCU_Sum / 3000) * 192 >> 10);//4.3mV/度, 3300 / 4095 / 4.3 * 1024 = 192
+			}
+			else
+			{
+				if(MOS_NTC_InitFinishedFlag == FALSE)
+				{
+					MOS_NTC_InitFinishedFlag = TRUE;
+					MOS_NTC_Init();  //PA0切换为AD,采集MOS管温度
+				}
+				else
+				{
+					MC_RunInfo.T_MCU = GetNTCTempera(T_MCU_Sum / 3000);
+				}
+			}
+		}
 		T_MCU_Sum = 0;
 		
 		T_Filt_Cnt = 0;
@@ -713,6 +732,27 @@ void PhaseCurrent_CalRMSValue(ADC_3ShuntCurrent_Struct_t* ADC_3ShuntCurrent, ADC
 	
 }
 
+
+//PA0切换AD,采集MOS管NTC
+void MOS_NTC_Init( void )
+{
+	GPIO_InitTypeDef GPIO_InitStruct;
+	ADC_ChannelConfTypeDef sConfig;
+	
+	GPIO_InitStruct.Pin = GPIO_PIN_0;
+	GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+	
+	__HAL_ADC_DISABLE(&hadc1);
+	/**Configure Regular Channel   MOS温度 */
+	sConfig.Channel = ADC_CHANNEL_0;
+	sConfig.Rank = ADC_REGULAR_RANK_10;
+	sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
+	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
+	{
+		_Error_Handler(__FILE__, __LINE__);
+	}	
+}
 /* USER CODE END 1 */
 
 /**

+ 7 - 16
J-scope.jscope

@@ -10,7 +10,7 @@
             <DataFile Name="" />
             <RawFile Name="" />
             <Scope>
-                <Options TimeResolutionUs="500000" />
+                <Options TimeResolutionUs="1000000" />
             </Scope>
         </Configuration>
         <Windows>
@@ -19,31 +19,22 @@
         </Windows>
         <SelectedSymbols>
             <Symbol>
-                <Options Name="Q_remain_real" Address="0x2000110C" Type="uint" TypeID="8" Size="4" GraphColorRed="255" GraphColorGreen="215" GraphColorBlue="0" YMinSampled="8900" YMaxSampled="8900" YAvgSampled="8900" Offset="4" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="5000" MaxValue="21450" File="..\User\Src\remain_distance.c" Scope="0" DrawStyle="0" />
+                <Options Name="SpeedSetReal" Address="0x20000118" Type="short" TypeID="11" Size="2" GraphColorRed="255" GraphColorGreen="215" GraphColorBlue="0" YMinSampled="0" YMaxSampled="1200" YAvgSampled="1141" Offset="4" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="200" MaxValue="2000" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="Q_remain_real_last" Address="0x20001110" Type="uint" TypeID="8" Size="4" GraphColorRed="0" GraphColorGreen="255" GraphColorBlue="0" YMinSampled="8900" YMaxSampled="8900" YAvgSampled="8900" Offset="8" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="5000" MaxValue="21450" File="..\User\Src\remain_distance.c" Scope="0" DrawStyle="0" />
+                <Options Name="MotorSpeed" Address="0x200011DE" Type="short" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="255" GraphColorBlue="0" YMinSampled="0" YMaxSampled="0" YAvgSampled="0" Offset="6" ShowInGraph="0" YOffset="200" IsAutoConfig="0" YResolution="200" MaxValue="2000" File="..\User\Src\log_save.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="wheel_Count" Address="0x200002AA" Type="ushort" TypeID="7" Size="2" GraphColorRed="0" GraphColorGreen="0" GraphColorBlue="176" YMinSampled="4" YMaxSampled="4" YAvgSampled="4" Offset="12" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="5" MaxValue="15" File="..\User\Src\remain_distance.c" Scope="0" DrawStyle="0" />
+                <Options Name="Ref_Speed" Address="0x20001208" Type="short" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="0" GraphColorBlue="176" YMinSampled="0" YMaxSampled="0" YAvgSampled="0" Offset="8" ShowInGraph="0" YOffset="200" IsAutoConfig="0" YResolution="100" MaxValue="1000" File="..\User\Src\log_save.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="Q_Index" Address="0x200002BC" Type="ushort" TypeID="7" Size="2" GraphColorRed="160" GraphColorGreen="32" GraphColorBlue="240" YMinSampled="0" YMaxSampled="0" YAvgSampled="0" Offset="14" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="10" MaxValue="31" File="..\User\Src\remain_distance.c" Scope="1" DrawStyle="0" />
+                <Options Name="IqFdb" Address="0x20000018" Type="short" TypeID="11" Size="2" GraphColorRed="160" GraphColorGreen="32" GraphColorBlue="240" YMinSampled="-7" YMaxSampled="18" YAvgSampled="1" Offset="10" ShowInGraph="0" YOffset="200" IsAutoConfig="0" YResolution="10" MaxValue="20" File="..\User\Src\MC_FOC_Driver.c" Scope="1" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="Power_per_km" Address="0x200002AC" Type="ushort" TypeID="7" Size="2" GraphColorRed="0" GraphColorGreen="100" GraphColorBlue="0" YMinSampled="2009" YMaxSampled="2009" YAvgSampled="2009" Offset="16" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="1" MaxValue="1" File="..\User\Src\remain_distance.c" Scope="0" DrawStyle="0" />
+                <Options Name="UqVoltFlt" Address="0x20000010" Type="int" TypeID="12" Size="4" GraphColorRed="255" GraphColorGreen="0" GraphColorBlue="0" YMinSampled="-51200" YMaxSampled="5677138" YAvgSampled="290828" Offset="12" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="10000000" MaxValue="20000000" File="..\User\Src\MC_FOC_Driver.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="Power_per_km_average" Address="0x200002AE" Type="ushort" TypeID="7" Size="2" GraphColorRed="205" GraphColorGreen="133" GraphColorBlue="63" YMinSampled="380" YMaxSampled="380" YAvgSampled="380" Offset="18" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="100" MaxValue="381" File="..\User\Src\remain_distance.c" Scope="0" DrawStyle="0" />
-            </Symbol>
-            <Symbol>
-                <Options Name="Q_FIFO[1]" Address="0x2000111A" Type="ushort" TypeID="7" Size="2" GraphColorRed="255" GraphColorGreen="215" GraphColorBlue="0" YMinSampled="50" YMaxSampled="50" YAvgSampled="50" Offset="20" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="20" MaxValue="62" File="..\User\Src\remain_distance.c" Scope="1" DrawStyle="0" />
-            </Symbol>
-            <Symbol>
-                <Options Name="Q_FIFO[2]" Address="0x2000111C" Type="ushort" TypeID="7" Size="2" GraphColorRed="0" GraphColorGreen="255" GraphColorBlue="0" YMinSampled="50" YMaxSampled="50" YAvgSampled="50" Offset="22" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="20" MaxValue="62" File="..\User\Src\remain_distance.c" Scope="1" DrawStyle="0" />
-            </Symbol>
-            <Symbol>
-                <Options Name="Q_FIFO[3]" Address="0x2000111E" Type="ushort" TypeID="7" Size="2" GraphColorRed="0" GraphColorGreen="0" GraphColorBlue="176" YMinSampled="50" YMaxSampled="50" YAvgSampled="50" Offset="24" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="20" MaxValue="62" File="..\User\Src\remain_distance.c" Scope="1" DrawStyle="0" />
+                <Options Name="qV_Component1" Address="0x20000020" Type="short" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="191" GraphColorBlue="255" YMinSampled="0" YMaxSampled="31128" YAvgSampled="2276" Offset="16" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="20000" MaxValue="40000" File="..\User\Src\MC_Globals.c" Scope="0" DrawStyle="0" />
             </Symbol>
         </SelectedSymbols>
     </Project>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2396 - 2396
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 4 - 4
User/Src/MC_PID_regulators.c

@@ -36,7 +36,7 @@ const PID_Struct_t PID_Torque_InitStructure_Volans =
   (int16_t)0,          //hKd_Gain
   (uint16_t)1024,      //hKd_Divisor
   (int32_t)0,          //wPreviousError
-  (int32_t)-32768,     //hLower_Limit_Output
+  (int32_t)-100,     //hLower_Limit_Output   //电流环给微弱的负值,给转子施加反向扭矩让电机可以缓慢降速
   (int32_t)32767,      //hUpper_Limit_Output
   (int32_t)(-32768 * 1024),  //wLower_Limit_Integral
   (int32_t)(32767 * 1024),   //wUpper_Limit_Integral
@@ -133,7 +133,7 @@ const PID_Struct_t PID_Torque_InitStructure_Volans_Plus =
   (int16_t)0,          //hKd_Gain
   (uint16_t)1024,      //hKd_Divisor
   (int32_t)0,          //wPreviousError
-  (int32_t)-32768,     //hLower_Limit_Output
+  (int32_t)-100,     //hLower_Limit_Output   //电流环给微弱的负值,给转子施加反向扭矩让电机可以缓慢降速
   (int32_t)32767,      //hUpper_Limit_Output
   (int32_t)(-32768 * 1024),  //wLower_Limit_Integral
   (int32_t)(32767 * 1024),   //wUpper_Limit_Integral
@@ -230,7 +230,7 @@ const PID_Struct_t PID_Torque_InitStructure_Pegasi =
   (int16_t)0,          //hKd_Gain
   (uint16_t)1024,      //hKd_Divisor
   (int32_t)0,          //wPreviousError
-  (int32_t)-32768,     //hLower_Limit_Output
+  (int32_t)-100,     //hLower_Limit_Output   //电流环给微弱的负值,给转子施加反向扭矩让电机可以缓慢降速
   (int32_t)32767,      //hUpper_Limit_Output
   (int32_t)(-32768 * 1024),  //wLower_Limit_Integral
   (int32_t)(32767 * 1024),   //wUpper_Limit_Integral
@@ -327,7 +327,7 @@ const PID_Struct_t PID_Torque_InitStructure_Pegasi_Plus =
   (int16_t)0,          //hKd_Gain
   (uint16_t)1024,      //hKd_Divisor
   (int32_t)0,          //wPreviousError
-  (int32_t)-32768,     //hLower_Limit_Output
+  (int32_t)-100,     //hLower_Limit_Output   //电流环给微弱的负值,给转子施加反向扭矩让电机可以缓慢降速
   (int32_t)32767,      //hUpper_Limit_Output
   (int32_t)(-32768 * 1024),  //wLower_Limit_Integral
   (int32_t)(32767 * 1024),   //wUpper_Limit_Integral

+ 9 - 3
User/Src/cadence_sensor.c

@@ -50,10 +50,16 @@ void CadenceSensor_Process(MC_CadenceResult_Struct_t* p_MC_CadenceResult, uint16
 {
 	static MC_CadenceSensorStatus_Struct_t MC_CadenceSensorStatus;
 	static TrueOrFalse_Flag_Struct_t IsFirstEnterFalg = TRUE;
-		
+	uint8_t CadenceHallStatus1, CadenceHallStatus2, CadenceHallStatus3;
 	//读取霍尔信号
-	
-	MC_CadenceSensorStatus.HallGropuStatus = Cadence_ReadHallState();
+	CadenceHallStatus1 = Cadence_ReadHallState();
+	CadenceHallStatus2 = Cadence_ReadHallState();
+	CadenceHallStatus3 = Cadence_ReadHallState();	
+	//连续采集三次霍尔,三次状态都一致才更新霍尔状态,防us级干扰
+	if( (CadenceHallStatus1==CadenceHallStatus2)&&(CadenceHallStatus2==CadenceHallStatus3) ) 
+	{
+		MC_CadenceSensorStatus.HallGropuStatus = CadenceHallStatus3;
+	}
 	if(IsFirstEnterFalg == TRUE)
 	{
 	  MC_CadenceSensorStatus.HallGropuStatus_Old = MC_CadenceSensorStatus.HallGropuStatus;

+ 51 - 44
User/Src/fault_check.c

@@ -668,6 +668,7 @@ void MC_Fault_TE_Process(MC_TE_SensorStatus_Struct_t* p_MC_TE_SensorStatus, True
 	}
 }
 
+//电路故障
 void MC_Fault_Circuit_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 {
 	static uint32_t PeriodTimeCnt = 0;
@@ -908,56 +909,30 @@ void MC_Fault_Hardware_Identify(TrueOrFalse_Flag_Struct_t TEComOKFlag, uint16_t
 {
 	static uint32_t TimeCount_HardwareFault=0;
 	static uint8_t HardwareFaultCount=0, HardwareFaultCount2=0;
-	
-	if( HAL_GetTick() < 5000) return;
-	
-	if( p_MC_ErrorCode->ERROR_Bit.Fault_Circuit == 0)  //没有故障时开始检测,有故障后故障一直存在,故障检测不再执行
+
+	if( HAL_GetTick() < 4000) return; //开机4s后开始检测
+	else if( HAL_GetTick() < 10000)   //开机4s到10s时间内检测
 	{
-		if( (HAL_GetTick()-TimeCount_HardwareFault)>=20 )  //20ms执行一次故障判断
+		if( p_MC_ErrorCode->ERROR_Bit.Fault_Circuit == 0)  //没有故障时开始检测,有故障后故障一直存在,故障检测不再执行
 		{
-			TimeCount_HardwareFault = HAL_GetTick();
-			if(*inverterExistFlag == TRUE) //电路板有反相器和TE
+			if( (HAL_GetTick()-TimeCount_HardwareFault)>=20 )  //20ms执行一次故障判断
 			{
-				if( ((TEComOKFlag == TRUE)||(SyncClockFreqScan>200))&&((Hardware_AD>1986)&&(Hardware_AD<2110)) ) 
-				{
-					HardwareFaultCount=0;	
-				}
-				else 
+				TimeCount_HardwareFault = HAL_GetTick();
+				if(*inverterExistFlag == TRUE) //电路板有反相器和TE,认为是旧电路板
 				{
-					HardwareFaultCount++;
-					if( HardwareFaultCount>= 250)                  
+					if( ((TEComOKFlag == TRUE)||(SyncClockFreqScan>200))&&((Hardware_AD>1986)&&(Hardware_AD<2110)) ) 
 					{
-						HardwareFaultCount = 0;
-						p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
-						//记录故障日志
-						MC_ErrorLogSaveInfo.NotesInfo1 = 6;       
-						MC_ErrorLogSaveInfo.NotesInfo2 = (SyncClockFreqScan<<2)+TEComOKFlag;
-						MC_ErrorLogSaveInfo.NotesInfo3 = Hardware_AD;
-						ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
-						IsErrorLogSaveInfoUpdateFlag = TRUE;
-						//存储故障次数
-						MC_RunLog2.Circuit_FaultCnt++;
-						RunLogSaveIndex = 2;
-					}							
-				}		
-			}		
-			else
-			{
-				if( (TEComOKFlag == TRUE)||(SyncClockFreqScan>200) )
-				{
-					*inverterExistFlag = TRUE;
-				}
-				else
-				{
-					if( (Hardware_AD>3723)||(Hardware_AD<372) )
+						HardwareFaultCount=0;	
+					}
+					else //旧电路板电阻焊错导致电压不在1.65V左右,或者新电路板电阻焊错导致电压在1.65V左右
 					{
-						HardwareFaultCount2++;
-						if( HardwareFaultCount2>= 250)                  
+						HardwareFaultCount++;
+						if( HardwareFaultCount>= 250)                  
 						{
-							HardwareFaultCount2 = 0;
+							HardwareFaultCount = 0;
 							p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
 							//记录故障日志
-							MC_ErrorLogSaveInfo.NotesInfo1 = 7;       
+							MC_ErrorLogSaveInfo.NotesInfo1 = 8;       
 							MC_ErrorLogSaveInfo.NotesInfo2 = (SyncClockFreqScan<<2)+TEComOKFlag;
 							MC_ErrorLogSaveInfo.NotesInfo3 = Hardware_AD;
 							ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
@@ -966,15 +941,47 @@ void MC_Fault_Hardware_Identify(TrueOrFalse_Flag_Struct_t TEComOKFlag, uint16_t
 							MC_RunLog2.Circuit_FaultCnt++;
 							RunLogSaveIndex = 2;
 						}							
+					}		
+				}		
+				else
+				{
+					if( (TEComOKFlag == TRUE)||(SyncClockFreqScan>200) )
+					{
+						*inverterExistFlag = TRUE;
 					}
 					else
 					{
-						HardwareFaultCount2 = 0;
+						if( (Hardware_AD>3723)||(Hardware_AD<372) ) //新电路板电阻短路或断路
+						{
+							HardwareFaultCount2++;
+							if( HardwareFaultCount2>= 250)                  
+							{
+								HardwareFaultCount2 = 0;
+								p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
+								//记录故障日志
+								MC_ErrorLogSaveInfo.NotesInfo1 = 9;       
+								MC_ErrorLogSaveInfo.NotesInfo2 = (SyncClockFreqScan<<2)+TEComOKFlag;
+								MC_ErrorLogSaveInfo.NotesInfo3 = Hardware_AD;
+								ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
+								IsErrorLogSaveInfoUpdateFlag = TRUE;
+								//存储故障次数
+								MC_RunLog2.Circuit_FaultCnt++;
+								RunLogSaveIndex = 2;
+							}							
+						}
+						else
+						{
+							HardwareFaultCount2 = 0;
+						}
 					}
-				}
-			}				
+				}				
+			}
 		}
 	}
+	else
+	{
+
+	}
 }
 
 /***********************全局函数定义***********************/

+ 9 - 2
User/Src/hall_sensor.c

@@ -71,8 +71,15 @@ void HallSensor_Process(void)
 {		
 	static MC_HallSensorStatus_Struct_t MC_HallSensorStatus;
 	static TrueOrFalse_Flag_Struct_t IsFirstEnterFalg = TRUE;
-	
-	MC_HallSensorStatus.HallGropuStatus = Hall_ReadState();
+	uint8_t HallStatus1, HallStatus2, HallStatus3;
+	HallStatus1 = Hall_ReadState();
+	HallStatus2 = Hall_ReadState();
+	HallStatus3 = Hall_ReadState();
+	//连续采集三次霍尔,三次状态都一致才更新霍尔状态,防us级干扰
+	if( (HallStatus1==HallStatus2)&&(HallStatus2==HallStatus3) )
+	{
+		MC_HallSensorStatus.HallGropuStatus = HallStatus3;
+	}
 	if(IsFirstEnterFalg == TRUE)
 	{
 	  MC_HallSensorStatus.HallGropuStatus_Old = MC_HallSensorStatus.HallGropuStatus;

+ 2 - 2
User/Src/motor_control.c

@@ -336,7 +336,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Gas_Process(uint16_t SensorData, MC_GearSt
 	}
 	
 	/*¼õËÙ²½½ø*/
-	decStep = StepCalc(SpeedMax, 1, 1000);
+	decStep = StepCalc(SpeedMax, 1, 5500);
 
 	/* ¸ú×ÙÆô¶¯ */
 	if(MC_CalParam.Foc_Flag  == RESET)			
@@ -429,7 +429,7 @@ MC_CalParam_Struct_t MC_AssistRunMode_Gas_Process(uint16_t SensorData, MC_GearSt
 	PID_MotorSpd.hLower_Limit_Output= -(MC_AssisParam.Gear_TURBO.Upper_Iq / 2);
 	PID_MotorSpd.hUpper_Limit_Output= (MC_AssisParam.Gear_TURBO.Upper_Iq / 2);
 	TorQueBySpd = PID_Regulator(SpeedSetReal, MC_RunInfo.MotorSpeed, &PID_MotorSpd);
-	TorQueBySpd = (TorQueBySpd<6) ? 6 : TorQueBySpd;
+
 	TorQueBySpd += SpdMotorByIdc;
 	
 	#if 1

+ 27 - 8
User/Src/protect_check.c

@@ -253,13 +253,21 @@ void MC_Protect_OverHeat_Process(uint8_t T_MCU, uint8_t T_PCB, uint8_t T_Coil, u
 	
 	if(p_MC_ErrorCode->ERROR_Bit.Protect_OverTemp == 0)
 	{
-		//温度传感器相互比较,差值在允许范围内进行处理
-
-		if((T_PCB < (TH - 20)) && (T_Coil < (TH + 5)))
+		//TTKZ019A之前的电路板,单片机100度保护,绕组130度保护
+		if( MC_HallSensorData.InverterExistFlag==TRUE ) 
 		{
-			OT_Set_TimeCnt = HAL_GetTick();
+			if( (T_PCB < (TH - 25))&&(T_Coil < (TH + 5)) ) 
+			{
+				OT_Set_TimeCnt = HAL_GetTick();
+			}
+		}
+		else //TTKZ019A之后的电路板,单片机90度保护,绕组130度保护,MOS管110度保护,
+		{
+			if( (T_PCB < (TH - 35))&&(T_Coil < (TH + 5))&&(T_MCU < (TH - 15)) ) 
+			{
+				OT_Set_TimeCnt = HAL_GetTick();
+			}
 		}
-		
 		//过热保护判断
 		if((HAL_GetTick() - OT_Set_TimeCnt) > 5000)
 		{
@@ -276,10 +284,21 @@ void MC_Protect_OverHeat_Process(uint8_t T_MCU, uint8_t T_PCB, uint8_t T_Coil, u
 	else
 	{
 		//过热保护恢复
-		if(( (T_PCB < (TH - 20)) && (T_Coil < (TH  - 20)) ) && ((HAL_GetTick() - OT_Reset_TimeCnt) > 300000))
+		if( MC_HallSensorData.InverterExistFlag==TRUE ) 
 		{
-			p_MC_ErrorCode->ERROR_Bit.Protect_OverTemp = 0;
-			OT_Set_TimeCnt = HAL_GetTick();
+			if(( (T_PCB < (TH - 25)) && (T_Coil < (TH  - 20)) ) && ((HAL_GetTick() - OT_Reset_TimeCnt) > 300000))
+			{
+				p_MC_ErrorCode->ERROR_Bit.Protect_OverTemp = 0;
+				OT_Set_TimeCnt = HAL_GetTick();
+			}
+		}
+		else
+		{
+			if(( (T_PCB < (TH - 35)) && (T_Coil < (TH  - 20))&&(T_MCU < (TH  - 15)) ) && ((HAL_GetTick() - OT_Reset_TimeCnt) > 300000))
+			{
+				p_MC_ErrorCode->ERROR_Bit.Protect_OverTemp = 0;
+				OT_Set_TimeCnt = HAL_GetTick();
+			}
 		}
 	}
 }

+ 20 - 17
User/Src/stm32f10x_svpwm_3shunt.c

@@ -96,26 +96,29 @@ void CurrentReadingCalibration(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
 	  	PeriodTimeCnt = HAL_GetTick();
 		}
 		
-		if((HAL_GetTick() - PeriodTimeCnt) > 2000)
+		if(p_MC_ErrorCode->ERROR_Bit.Fault_Circuit == 0)
 		{
-			for(bIndex=0; bIndex < 10; bIndex++)
+			if((HAL_GetTick() - PeriodTimeCnt) > 2000)
 			{
-				ul_current_offset_sum = ADC1_Result[ADC1_RANK_CURRENT] + ul_current_offset_sum;
+				for(bIndex=0; bIndex < 10; bIndex++)
+				{
+					ul_current_offset_sum = ADC1_Result[ADC1_RANK_CURRENT] + ul_current_offset_sum;
+				}
+				uw_current_offset = ul_current_offset_sum / 10;
+				if((uw_current_offset < 1000) || (uw_current_offset > 3000))
+				{
+					p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
+					//记录故障日志
+					MC_ErrorLogSaveInfo.NotesInfo1 = 7;
+					MC_ErrorLogSaveInfo.NotesInfo2 = uw_current_offset;
+					ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
+					IsErrorLogSaveInfoUpdateFlag = TRUE;
+					//存储故障次数
+					MC_RunLog2.Circuit_FaultCnt++;
+					RunLogSaveIndex = 2;
+				}
+				PeriodTimeCnt = HAL_GetTick();
 			}
-			uw_current_offset = ul_current_offset_sum / 10;
-			if((uw_current_offset < 1000) || (uw_current_offset > 3000))
-			{
-			  p_MC_ErrorCode->ERROR_Bit.Fault_Circuit = 1;
-				//记录故障日志
-				MC_ErrorLogSaveInfo.NotesInfo1 = 7;
-				MC_ErrorLogSaveInfo.NotesInfo2 = uw_current_offset;
-				ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
-				IsErrorLogSaveInfoUpdateFlag = TRUE;
-				//存储故障次数
-				MC_RunLog2.Circuit_FaultCnt++;
-				RunLogSaveIndex = 2;
-			}
-			PeriodTimeCnt = HAL_GetTick();
 		}
 	}
 	

+ 1 - 1
User/Src/var.c

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

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است