Просмотр исходного кода

1.同步white剩余里程的代码

leechard.li 3 лет назад
Родитель
Сommit
c93ab2171c
4 измененных файлов с 1116 добавлено и 1143 удалено
  1. 1048 1048
      MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex
  2. BIN
      MDK-ARM/bin/QD007A_CTL_APP.bin
  3. 67 94
      User/Src/remain_distance.c
  4. 1 1
      User/Src/var.c

Разница между файлами не показана из-за своего большого размера
+ 1048 - 1048
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;

+ 1 - 1
User/Src/var.c

@@ -501,7 +501,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
 	strncpy(MC_VerInfo.HW_Version, (char*)"QD007H.       ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V6r2r0_20220531.", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V6r2r0_20220608.", 16);
 	strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r0.           ", 32);
 	if(MCUManufacturer == NoName) MC_VerInfo.HW_Version[10] = '0';
 	else if(MCUManufacturer == STM32F103RBT6) MC_VerInfo.HW_Version[10] = '1';

Некоторые файлы не были показаны из-за большого количества измененных файлов