Ver Fonte

V3r4r0_20221114
1 增加坡上溜坡并拨指拨工况检测功能,溜坡时从53853mV开始启动恒压制动;平路行驶时从55648mV开始启动恒压制动;
2 软件版本更新为V3.4.0_20221114;

white.xu há 2 anos atrás
pai
commit
b683d45edb

+ 10 - 7
J-scope.jscope

@@ -19,25 +19,28 @@
         </Windows>
         <SelectedSymbols>
             <Symbol>
-                <Options Name="SpeedSetReal" Address="0x20000124" Type="short" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="0" GraphColorBlue="176" YMinSampled="0" YMaxSampled="837" YAvgSampled="2" Offset="4" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="500" MaxValue="2000" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
+                <Options Name="SpeedSetReal" Address="0x20000124" Type="short" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="0" GraphColorBlue="176" YMinSampled="0" YMaxSampled="830" YAvgSampled="0" Offset="4" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="500" MaxValue="2000" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="motorspeed_RCFlt" Address="0x20001232" Type="ushort" TypeID="7" Size="2" GraphColorRed="160" GraphColorGreen="32" GraphColorBlue="240" YMinSampled="0" YMaxSampled="1297" YAvgSampled="3" Offset="6" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="500" MaxValue="934" File="..\User\Src\hall_sensor.c" Scope="0" DrawStyle="0" />
+                <Options Name="motorspeed_RCFlt" Address="0x20001232" Type="ushort" TypeID="7" Size="2" GraphColorRed="160" GraphColorGreen="32" GraphColorBlue="240" YMinSampled="0" YMaxSampled="726" YAvgSampled="0" Offset="6" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="500" MaxValue="934" File="..\User\Src\hall_sensor.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="SpdProportion" Address="0x200000F4" Type="short" TypeID="11" Size="2" GraphColorRed="255" GraphColorGreen="0" GraphColorBlue="0" YMinSampled="279" YMaxSampled="279" YAvgSampled="279" Offset="8" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
+                <Options Name="Ref_Speed_Temp_End" Address="0x20000128" Type="int" TypeID="12" Size="4" GraphColorRed="0" GraphColorGreen="191" GraphColorBlue="255" YMinSampled="-199" YMaxSampled="583" YAvgSampled="0" Offset="8" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="1000" MaxValue="2000" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="Ref_Speed_Temp_End" Address="0x20000128" Type="int" TypeID="12" Size="4" GraphColorRed="0" GraphColorGreen="191" GraphColorBlue="255" YMinSampled="-198" YMaxSampled="1806" YAvgSampled="0" Offset="10" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="1000" MaxValue="2000" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
+                <Options Name="IqFluxLessRef" Address="0x20000020" Type="int" TypeID="12" Size="4" GraphColorRed="0" GraphColorGreen="100" GraphColorBlue="0" YMinSampled="-100" YMaxSampled="291" YAvgSampled="-98" Offset="12" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\User\Src\MC_FOC_Driver.c" Scope="1" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="IqFluxLessRef" Address="0x20000020" Type="int" TypeID="12" Size="4" GraphColorRed="0" GraphColorGreen="100" GraphColorBlue="0" YMinSampled="-99" YMaxSampled="903" YAvgSampled="-98" Offset="14" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\User\Src\MC_FOC_Driver.c" Scope="1" DrawStyle="0" />
+                <Options Name="IdFluxLessRef" Address="0x2000001C" Type="int" TypeID="12" Size="4" GraphColorRed="0" GraphColorGreen="255" GraphColorBlue="0" YMinSampled="-422" YMaxSampled="0" YAvgSampled="0" Offset="16" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\User\Src\MC_FOC_Driver.c" Scope="1" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="IdFluxLessRef" Address="0x2000001C" Type="int" TypeID="12" Size="4" GraphColorRed="0" GraphColorGreen="191" GraphColorBlue="255" YMinSampled="-420" YMaxSampled="0" YAvgSampled="0" Offset="18" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\User\Src\MC_FOC_Driver.c" Scope="1" DrawStyle="0" />
+                <Options Name="ADC1_Result[1]" Address="0x200015B2" Type="ushort" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="191" GraphColorBlue="255" YMinSampled="2991" YMaxSampled="3133" YAvgSampled="3074" Offset="20" ShowInGraph="1" YOffset="0" IsAutoConfig="0" YResolution="500" MaxValue="4000" File="..\Core\Src\adc.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="ADC1_Result[1]" Address="0x200015AE" Type="ushort" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="100" GraphColorBlue="0" YMinSampled="2700" YMaxSampled="3260" YAvgSampled="3074" Offset="22" ShowInGraph="1" YOffset="0" IsAutoConfig="0" YResolution="500" MaxValue="4000" File="..\Core\Src\adc.c" Scope="0" DrawStyle="0" />
+                <Options Name="backwardcount" Address="0x20000308" Type="uchar" TypeID="6" Size="1" GraphColorRed="0" GraphColorGreen="100" GraphColorBlue="0" YMinSampled="0" YMaxSampled="6" YAvgSampled="0" Offset="22" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="5" MaxValue="23" File="..\User\Src\hall_sensor.c" Scope="1" DrawStyle="0" />
+            </Symbol>
+            <Symbol>
+                <Options Name="SpdProportion" Address="0x200000F4" Type="short" TypeID="11" Size="2" GraphColorRed="205" GraphColorGreen="133" GraphColorBlue="63" YMinSampled="493" YMaxSampled="1200" YAvgSampled="956" Offset="23" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="50" MaxValue="100" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
             </Symbol>
         </SelectedSymbols>
     </Project>

Diff do ficheiro suprimidas por serem muito extensas
+ 2023 - 2023
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 1 - 0
User/Inc/hall_sensor.h

@@ -25,6 +25,7 @@ typedef struct
 	TrueOrFalse_Flag_Struct_t InverterExistFlag;
 	uint16_t motorspeed;
 	uint16_t motorspeed_RCFlt;
+	TrueOrFalse_Flag_Struct_t BackwardFlag;
 }MC_HallSensorData_Struct_t;
 
 //»ô¶û´«¸ÐÆ÷Êä³ö״̬

+ 45 - 17
User/Src/MC_FOC_Driver.c

@@ -4,7 +4,8 @@
 #include "MC_PID_regulators.h"
 #include "MC_Clarke_park.h"
 #include "stm32f10x_svpwm_3shunt.h"
-
+#include "hall_sensor.h"
+#include "motor_control.h"
 #define FluxWeak_Control 0
 
 //È«¾Ö±äÁ¿¶¨Òå
@@ -43,28 +44,55 @@ void FOC_Model(int16_t Ref, int16_t MotorSpeed, uint16_t SVM_Angle)	  //
 	
 	IdFdbFlt += (((int32_t)(Stat_Curr_q_d.qI_Component2 << 10)) - IdFdbFlt)>>10;   // KFlt = 2ms
 	IdFdb = IdFdbFlt >> 10;
-	
-	if( ADC1_Result[ADC1_RANK_VIN] < 3100) //55648mV  17.951  3100
+
+	if((MC_HallSensorData.BackwardFlag==TRUE)&&(MC_CalParam.AssistRunMode == MC_AssistRunMode_GAS))
 	{
-		IqFluxLessRef = Ref;
-		if(IdFluxLessRef<(-4))
+		if( ADC1_Result[ADC1_RANK_VIN] < 3000) //53853mV  17.951  3000
 		{
-			IdFluxLessRef += 4;
+			IqFluxLessRef = Ref;
+			if(IdFluxLessRef<(-4))
+			{
+				IdFluxLessRef += 4;
+			}
+			else IdFluxLessRef = 0;			
 		}
-		else IdFluxLessRef = 0;			
-	}
-	else if( ADC1_Result[ADC1_RANK_VIN] < 3310 ) //59417mV 3310
-	{
-		FOC_IqLim = 1050 - (ADC1_Result[ADC1_RANK_VIN] - 3100)*5;
-		IqFluxLessRef = Ref<FOC_IqLim ? Ref : FOC_IqLim;
-		IdFluxLessRef -= 2;
-		if(IdFluxLessRef<-420) IdFluxLessRef = -420;
+		else if( ADC1_Result[ADC1_RANK_VIN] < 3210 ) //57622mV 3210
+		{
+			FOC_IqLim = 1050 - (ADC1_Result[ADC1_RANK_VIN] - 3000)*5;
+			IqFluxLessRef = Ref<FOC_IqLim ? Ref : FOC_IqLim;
+			IdFluxLessRef -= 2;
+			if(IdFluxLessRef<-420) IdFluxLessRef = -420;
+		}
+		else
+		{
+			IqFluxLessRef=0;
+			IdFluxLessRef = -420;		
+		}	
 	}
 	else
 	{
-		IqFluxLessRef=0;
-		IdFluxLessRef = -420;		
-	}	
+		if( ADC1_Result[ADC1_RANK_VIN] < 3100) //55648mV  17.951  3100
+		{
+			IqFluxLessRef = Ref;
+			if(IdFluxLessRef<(-4))
+			{
+				IdFluxLessRef += 4;
+			}
+			else IdFluxLessRef = 0;			
+		}
+		else if( ADC1_Result[ADC1_RANK_VIN] < 3310 ) //59417mV 3310
+		{
+			FOC_IqLim = 1050 - (ADC1_Result[ADC1_RANK_VIN] - 3100)*5;
+			IqFluxLessRef = Ref<FOC_IqLim ? Ref : FOC_IqLim;
+			IdFluxLessRef -= 2;
+			if(IdFluxLessRef<-420) IdFluxLessRef = -420;
+		}
+		else
+		{
+			IqFluxLessRef=0;
+			IdFluxLessRef = -420;		
+		}	
+	}
 	
 	UqVoltTmp =  PID_Regulator(IqFluxLessRef,\
 														 IqFdb,\

+ 10 - 1
User/Src/hall_sensor.c

@@ -89,7 +89,7 @@ void HallSensor_Process(void)
 	//启动和停止状态更新
 	static uint8_t HallSensorTrigCnt = 0;
 	static uint32_t StopDelayTimeCnt = 0;
-	
+	static uint8_t backwardcount = 0;
 	if(MC_HallSensorStatus.HallGropuStatus != MC_HallSensorStatus.HallGropuStatus_Old)
 	{
 	  StopDelayTimeCnt = HAL_GetTick();
@@ -110,6 +110,8 @@ void HallSensor_Process(void)
 			HallSensorTrigCnt = 0;
 			MC_HallSensorData.motorspeed = 0;
 			MC_HallSensorData.motorspeed_RCFlt = 0;
+			backwardcount = 0;
+			MC_HallSensorData.BackwardFlag = FALSE;
 		}
 	}
 	
@@ -137,6 +139,8 @@ void HallSensor_Process(void)
 		if(HallSensorAngleCnt>2)
 		{
 			MC_HallSensorData.motorspeed = 18750/MC_HallSensorData.PWM_NumCnt;
+			backwardcount = 0;
+			MC_HallSensorData.BackwardFlag = FALSE;
 		}
 		if(HallSensorAngleCnt < 15)
 		{
@@ -157,6 +161,11 @@ void HallSensor_Process(void)
 		MC_HallSensorData.Delta_Angle = 0;
 		MC_HallSensorData.SVM_Angle = HallAngle_Data[MC_HallSensorStatus.HallGropuStatus] + (ANGLE_60D >> 1);
 		MC_HallSensorData.PWM_NumCnt = 0xFFFF;
+		if(++backwardcount>5) 
+		{
+			backwardcount = 6;
+			MC_HallSensorData.BackwardFlag = TRUE;
+		}
 	}
 	
 	//霍尔传感器故障检测

+ 2 - 2
User/Src/var.c

@@ -503,9 +503,9 @@ void Var_Init(void)
 	strncpy(MC_VerInfo.HW_Version, (char*)"TTKZ010D.       ", 16);
 	
 	#if BaudRate250K
-  strncpy(MC_VerInfo.FW_Version, (char*)"V7r2r0_20221110C", 16);
+  strncpy(MC_VerInfo.FW_Version, (char*)"V7r2r0_20221114C", 16);
 	#else
-	strncpy(MC_VerInfo.FW_Version, (char*)"V3r4r0_20221110C", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V3r4r0_20221114C", 16);
 	#endif
 	
   #if NormalWork

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff