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

V7r1r2_20220608
1 优化平均功耗计算函数,有电池通信时才更新平均功耗,无电池通信时不更新平均功耗;
2 车轮转动10圈所消耗的电池容量限制在30mAh以内;
3 平均功耗限制在1500mAh以内;
4 无码表模式开启BMS通信检测;
5 版本号变为V7.1.2_20220608;

white.xu 3 жил өмнө
parent
commit
baa2baf691

+ 17 - 5
J-scope.jscope

@@ -19,19 +19,31 @@
         </Windows>
         <SelectedSymbols>
             <Symbol>
-                <Options Name="Ref_Speed" Address="0x20001208" Type="short" TypeID="11" Size="2" GraphColorRed="255" GraphColorGreen="215" GraphColorBlue="0" YMinSampled="0" YMaxSampled="0" YAvgSampled="0" Offset="4" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\User\Src\log_save.c" Scope="0" DrawStyle="0" />
+                <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" />
             </Symbol>
             <Symbol>
-                <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="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\User\Src\log_save.c" Scope="0" DrawStyle="0" />
+                <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" />
             </Symbol>
             <Symbol>
-                <Options Name="SVM_Angle" Address="0x200005F8" Type="ushort" TypeID="7" Size="2" GraphColorRed="0" GraphColorGreen="0" GraphColorBlue="176" YMinSampled="0" YMaxSampled="0" YAvgSampled="0" Offset="8" ShowInGraph="0" YOffset="200" IsAutoConfig="1" YResolution="200" MaxValue="1030" File="..\User\Src\hall_sensor.c" Scope="0" DrawStyle="0" />
+                <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" />
             </Symbol>
             <Symbol>
-                <Options Name="GasSensor" Address="0x20000404" Type="ushort" TypeID="7" Size="2" GraphColorRed="160" GraphColorGreen="32" GraphColorBlue="240" YMinSampled="65535" YMaxSampled="65535" YAvgSampled="65535" Offset="10" ShowInGraph="0" YOffset="200" IsAutoConfig="0" YResolution="50" MaxValue="5150" File="..\Core\Src\adc.c" Scope="0" DrawStyle="0" />
+                <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" />
             </Symbol>
             <Symbol>
-                <Options Name="SpeedSetReal" Address="0x20000118" Type="short" TypeID="11" Size="2" GraphColorRed="255" GraphColorGreen="0" GraphColorBlue="0" YMinSampled="3841" YMaxSampled="3841" YAvgSampled="3841" Offset="12" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="2000" MaxValue="4000" File="..\User\Src\motor_control.c" Scope="0" DrawStyle="0" />
+                <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" />
+            </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" />
             </Symbol>
         </SelectedSymbols>
     </Project>

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


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 67 - 94
User/Src/remain_distance.c

@@ -100,7 +100,7 @@ void RD_RemainDis_Init(uint16_t uwWheelLength, TrueOrFalse_Flag_Struct_t BMS_COM
 	}
 	else //电池不含通讯时,根据母线电压估算剩余容量
 	{
-	  RD_getQRemainRecord(BusVoltage * 36 / DesignVol); //放电曲线是按照36V,针对48V或24V做等效转换
+//	  RD_getQRemainRecord(BusVoltage * 36 / DesignVol); //放电曲线是按照36V,针对48V或24V做等效转换
 	}
 	
 	RemainDis.start = 0;
@@ -157,7 +157,6 @@ void RD_CalculateRemainDis(uint32_t WheelTurnCnt, uint16_t RemainCap, uint8_t SO
 	static int32_t PowerPerKmFltSum=0;
 	
 	uint8_t i;
-	uint8_t flagBatteryFull=0;
 	int32_t ptmp;
 	
 	static uint32_t RunTimeCnt = 0;
@@ -183,11 +182,10 @@ void RD_CalculateRemainDis(uint32_t WheelTurnCnt, uint16_t RemainCap, uint8_t SO
 		  RemainDis.BMS_Com_DelayTimeCnt = HAL_GetTick();
 			RemainDis.IsBMS_ComOK_Flag = FALSE;
 		}
-		
-		/*电流大于最小阈值,累加一次电量*/
-		if((RemainDis.I_motor > CURRENT_MIN) && (RemainDis.IsBMS_ComOK_Flag == FALSE) )
+		else
 		{
-			RemainDis.Q_add += RemainDis.I_motor * RemainDis.acc_period;//mA * ms
+				//更新电池剩余容量
+				Battery_Info.Q_remain_real = RemainCap;			
 		}
 		
 		/*助力档位切换后*/
@@ -229,104 +227,79 @@ void RD_CalculateRemainDis(uint32_t WheelTurnCnt, uint16_t RemainCap, uint8_t SO
 				
 					/*充电状态,或由母线电流切换到电量信息计算时,此值会出现负数*/
 					Q_add_tmp = (Q_add_tmp > 0) ? Q_add_tmp : 0;
-					
+					Q_add_tmp = (Q_add_tmp < 30) ? Q_add_tmp : 30;
 					/*判断电池是否满充*/
 	        if( ( Q_add_tmp == 0 ) && ( Battery_Info.SOC == 100 ) )
 					{
 						/*当电池满充时,发出的电量信息会是标称值,
 						在Battery.SOC==100时不会随电量消耗尔减小*/
 						/*置标志位,不计算更新*/
-						flagBatteryFull = 1;
 					}
-				
-					/*切换到母线电流积分计算后,使用最新的剩余电量数据*/
-					Battery_Info.Q_remain_record = Battery_Info.Q_remain_real;
-					Battery_Info.Q_discharged = 0;
-					RemainDis.Q_add = 0;
-				}
-			}
-			else/*消耗的电量信息来自母线电流,进行积分累计计算*/
-			{
-				/*单位mA*h*/
-				Q_add_tmp = RemainDis.Q_add / ( 3600 * 1000 );
-				if(Q_add_tmp > 0)
-				{
-					RemainDis.Q_add = RemainDis.Q_add % ( 3600 * 1000 );//保留余数,下次累加
+					else
+					{
+						/*将一定轮圈数消耗的电量,写入FIFO,FIFO中的数据滑动求平均值*/
+						Q_sum -= Q_FIFO[Q_Index];
+						Q_sum += Q_add_tmp;
+						Q_FIFO[Q_Index++] = Q_add_tmp;
+						
+						if(Q_Index>=Q_FIFO_LENGTH)
+						{
+							Q_Index = 0;
+							Q_fifo_full_falg = 1;
+							
+							/*250圈,动态功耗刷新一次,置一次eeprom保存标志*/
+							RemainDis.flag_saveInfo = 1;
+						}
+						/*
+						wheelCount x WHEEL_LENGTH(cm) 
+						------------------------------- (km)  wheelCount=(Q_FIFO_LENGTH * WHEEL_COUNT_REFRESH_VALUE)
+											 1000 x 100
+						
+							Q_sum(mA*h) x 1000 x 100
+						------------------------------- (mA*h/km)
+						 wheelCount x WHEEL_LENGTH  
+						*/						
+						if( Q_sum > 0 )
+						{
+							/*缓存满后,求平均值*/
+							if(Q_fifo_full_falg==1)
+							{
+								RemainDis.Power_per_km = (Q_sum * 1000 * 100 ) / ( Q_FIFO_LENGTH * WHEEL_COUNT_REFRESH_VALUE * RemainDis.wheelLength );
+							}
+							else
+							{
+								/*缓存数据未满,以当前有效数据个数求平均值*/
+								RemainDis.Power_per_km = (Q_sum * 1000 * 100 ) / ( Q_Index * WHEEL_COUNT_REFRESH_VALUE * RemainDis.wheelLength );
+							}
+						}
+						else
+						{
+							RemainDis.Power_per_km = 0;
+						}
+						
+						/*电量缓存Q_FIFO计满一次,滑动滤波求平均值*/
+						if(Q_Index==0)
+						{		
+							ptmp = RemainDis.Power_per_km;
+							PowerPerKmFltSum += ((ptmp << 8) - PowerPerKmFltSum) / P_FIFO_LENGTH;
+							RemainDis.Power_per_km_average = (uint16_t)(PowerPerKmFltSum >> 8);
+						}
+
+						/*计算剩余续航里程*/
+						if(RemainDis.Power_per_km_average > 0)
+						{
+							RemainDis.remainDistance = Battery_Info.Q_remain_real / RemainDis.Power_per_km_result;//单位km
+						}
+						else
+						{
+							RemainDis.remainDistance = 0xFFFF;//码表显示---km
+						}
+					}
 				}
-			
-				/*累计总的消耗电量*/
-				Battery_Info.Q_discharged  += Q_add_tmp ;  //mA*h
-				
-				/*更新电池剩余电量*/
-				Battery_Info.Q_remain_real = Battery_Info.Q_remain_record - Battery_Info.Q_discharged ;
 			}
-			
+
 			/*电量信息来自电池的计算,需要用到此数据*/
 			Battery_Info.Q_remain_real_last = Battery_Info.Q_remain_real;
-			
-			/*电池非满充状态*/
-			if( flagBatteryFull == 0 )
-			{
-				/*将一定轮圈数消耗的电量,写入FIFO,FIFO中的数据滑动求平均值*/
-				Q_sum -= Q_FIFO[Q_Index];
-				Q_sum += Q_add_tmp;
-				Q_FIFO[Q_Index++] = Q_add_tmp;
-			}
-			
-			if(Q_Index>=Q_FIFO_LENGTH)
-			{
-				Q_Index = 0;
-				Q_fifo_full_falg = 1;
-				
-				/*250圈,动态功耗刷新一次,置一次eeprom保存标志*/
-				RemainDis.flag_saveInfo = 1;
-			}
-			
-			/*
-			wheelCount x WHEEL_LENGTH(cm) 
-			------------------------------- (km)  wheelCount=(Q_FIFO_LENGTH * WHEEL_COUNT_REFRESH_VALUE)
-								 1000 x 100
-			
-				Q_sum(mA*h) x 1000 x 100
-			------------------------------- (mA*h/km)
-			 wheelCount x WHEEL_LENGTH  
-			*/
-			
-			if( Q_sum > 0 )
-			{
-				/*缓存满后,求平均值*/
-				if(Q_fifo_full_falg==1)
-				{
-					RemainDis.Power_per_km = (Q_sum * 1000 * 100 ) / ( Q_FIFO_LENGTH * WHEEL_COUNT_REFRESH_VALUE * RemainDis.wheelLength );
-				}
-				else
-				{
-					/*缓存数据未满,以当前有效数据个数求平均值*/
-					RemainDis.Power_per_km = (Q_sum * 1000 * 100 ) / ( Q_Index * WHEEL_COUNT_REFRESH_VALUE * RemainDis.wheelLength );
-				}
-			}
-			else
-			{
-				RemainDis.Power_per_km = 0;
-			}
-			
-			/*电量缓存Q_FIFO计满一次,滑动滤波求平均值*/
-			if(Q_Index==0)
-			{		
-				ptmp = RemainDis.Power_per_km;
-				PowerPerKmFltSum += ((ptmp << 8) - PowerPerKmFltSum) / P_FIFO_LENGTH;
-				RemainDis.Power_per_km_average = (uint16_t)(PowerPerKmFltSum >> 8);
-			}
-
-			/*计算剩余续航里程*/
-			if(RemainDis.Power_per_km_average > 0)
-			{
-				RemainDis.remainDistance = Battery_Info.Q_remain_real / RemainDis.Power_per_km_result;//单位km
-			}
-			else
-			{
-				RemainDis.remainDistance = 0xFFFF;//码表显示---km
-			}
 		}
 	}
 }
@@ -372,7 +345,7 @@ void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t M
 					
            /*各档位关联*/
 					/*不低于默认值30%*/
-					if( sPercent >= -30 )
+					if( (sPercent >= -30)&&(sPercent <= 455) )
 					{
 						/*更新平均功耗*/
 						RemainDis.Power_per_km_result = powerDefaultCurrentMode * ( 100 +  sPercent ) / 100;

+ 38 - 35
User/Src/tasks.c

@@ -598,53 +598,56 @@ void PowerOff_Process(TrueOrFalse_Flag_Struct_t ReturnEnable)
 //CAN设备PBU、HMI、BMS通信状态检测处理
 void MC_CanRxCheck_Process(MC_SupportFlag_Struct_t NoPBU_Flag, MC_SupportFlag_Struct_t NoHMI_Flag, MC_WorkMode_Struct_t WorkMode, MC_GearSt_Struct_t* GearSt)
 {
-  if((WorkMode == MC_WorkMode_Run) && (NoPBU_Flag == MC_SUPPORT_DISABLE)) //不支持无PBU,且正常运行模式
+  if(WorkMode == MC_WorkMode_Run) //不支持无PBU,且正常运行模式
 	{
-		//PBU通信状态检测
-		if(IsComOK_PBU.IsOK_Flag == TRUE)
+		if( NoPBU_Flag == MC_SUPPORT_DISABLE )
 		{
-			if((HAL_GetTick() - IsComOK_PBU.OK_TrigTime) > 1000)  
-			{  
-				IsComOK_PBU.IsOK_Flag = FALSE;
+			//PBU通信状态检测
+			if(IsComOK_PBU.IsOK_Flag == TRUE)
+			{
+				if((HAL_GetTick() - IsComOK_PBU.OK_TrigTime) > 1000)  
+				{  
+					IsComOK_PBU.IsOK_Flag = FALSE;
+					*GearSt = MC_GearSt_OFF;
+					Update_MC_ControlCode_Back();
+					DeviceOnLine_Status.Status_Bit.PBU_OffLine = 1;
+				}
+				else
+				{
+					DeviceOnLine_Status.Status_Bit.PBU_OffLine = 0;
+				}
+			}		
+			else
+			{
 				*GearSt = MC_GearSt_OFF;
-        Update_MC_ControlCode_Back();
+				Update_MC_ControlCode_Back();
 				DeviceOnLine_Status.Status_Bit.PBU_OffLine = 1;
 			}
-			else
+			
+			//HMI通信状态检测
+			if(NoHMI_Flag == MC_SUPPORT_ENABLE)
 			{
-			  DeviceOnLine_Status.Status_Bit.PBU_OffLine = 0;
+				DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
 			}
-		}		
-		else
-		{
-		  *GearSt = MC_GearSt_OFF;
-      Update_MC_ControlCode_Back();
-			DeviceOnLine_Status.Status_Bit.PBU_OffLine = 1;
-		}
-		
-		//HMI通信状态检测
-		if(NoHMI_Flag == MC_SUPPORT_ENABLE)
-		{
-		  DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
-		}
-		else
-		{
-		  if(IsComOK_HMI.IsOK_Flag == TRUE)
+			else
 			{
-			  if((HAL_GetTick() - IsComOK_HMI.OK_TrigTime) > 1000)  
-			  {  
-			  	IsComOK_HMI.IsOK_Flag = FALSE;
-					DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
-			  }
+				if(IsComOK_HMI.IsOK_Flag == TRUE)
+				{
+					if((HAL_GetTick() - IsComOK_HMI.OK_TrigTime) > 1000)  
+					{  
+						IsComOK_HMI.IsOK_Flag = FALSE;
+						DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
+					}
+					else
+					{
+						DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
+					}
+				}
 				else
 				{
-				  DeviceOnLine_Status.Status_Bit.HMI_OffLine = 0;
+					DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
 				}
 			}
-			else
-			{
-			  DeviceOnLine_Status.Status_Bit.HMI_OffLine = 1;
-			}
 		}
 		
 		//BMS通信状态检测

+ 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*)"V7r1r2_20220526C", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V7r1r2_20220608C", 16);
   #if NormalWork
 	MC_VerInfo.FW_Version[15] = '.';
   #endif

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