Переглянути джерело

修复电量低时SOC=0xFF的问题,

Dail 1 рік тому
батько
коміт
bb86fe72ed

+ 1 - 1
MDK-ARM/QD007A_CTL_APP.uvprojx

@@ -362,7 +362,7 @@
             <useXO>0</useXO>
             <VariousControls>
               <MiscControls></MiscControls>
-              <Define>USE_HAL_DRIVER,STM32F103xB,PEGASI_36V,BARD_125K</Define>
+              <Define>USE_HAL_DRIVER,STM32F103xB,PEGASI_36V,BARD_250K</Define>
               <Undefine></Undefine>
               <IncludePath>../Core/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;..\User\Inc;..\SEGGER_RTT\Inc;..\SelfTestUser\Inc</IncludePath>
             </VariousControls>

Різницю між файлами не показано, бо вона завелика
+ 2520 - 2520
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


BIN
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 37 - 19
User/Src/remain_distance.c

@@ -475,18 +475,26 @@ uint8_t Battery_SocCal(Battery_Info_t* p_Battery_Info, BatterCellInfo_Struct_t*
 				//查表计算SOC
 				for(i=0; i<TableNum; i++)
 				{
-					if(p_CellInfo->CellParam[i] <= u16MaxVoltage)
+				  if(i >= (TableNum - 1))
 					{
-						BatteryRemainQ = p_CellInfo->DesignCap - i * p_CellInfo->DesignCap / 100;
-						break;
-					}
-					else//电池电压低于最小值
+					  BatteryRemainQ = 0;
+						p_Battery_Info->Q_remain_record = BatteryRemainQ;				
+				    return 0;
+					}					
+					else 
 					{
-						BatteryRemainQ = 0;
-					}
-				}
-        p_Battery_Info->Q_remain_record = BatteryRemainQ;				
-				return TableNum - i - 1;
+						if(p_CellInfo->CellParam[i] <= u16MaxVoltage)
+						{
+							BatteryRemainQ = p_CellInfo->DesignCap - i * p_CellInfo->DesignCap / 100;
+							p_Battery_Info->Q_remain_record = BatteryRemainQ;				
+							return TableNum - i - 1;
+						}
+						else//电池电压低于最小值
+						{
+							BatteryRemainQ = 0;
+						}
+					}					
+				}        
 			}
 		}		
 	}
@@ -510,19 +518,29 @@ uint8_t Battery_SocCal(Battery_Info_t* p_Battery_Info, BatterCellInfo_Struct_t*
 			//查表计算SOC
 			for(i=0; i<TableNum; i++)
 			{
-				if(p_CellInfo->CellParam[i] <= u16MaxVoltage)
+				if(i >= (TableNum - 1))
 				{
-					BatteryRemainQ = p_CellInfo->DesignCap - i * p_CellInfo->DesignCap / 100;
+					BatteryRemainQ = 0;
+					p_Battery_Info->Q_remain_record = BatteryRemainQ;
+			    Result = 0;
 					break;
-				}
-				else//电池电压低于最小值
+				}					
+				else 
 				{
-					BatteryRemainQ = 0;
-				}
+					if(p_CellInfo->CellParam[i] <= u16MaxVoltage)
+					{
+						BatteryRemainQ = p_CellInfo->DesignCap - i * p_CellInfo->DesignCap / 100;
+						p_Battery_Info->Q_remain_record = BatteryRemainQ;
+						Result = TableNum - i - 1;
+						break;
+					}
+					else//电池电压低于最小值
+					{
+						BatteryRemainQ = 0;
+					}
+				}						
 			}
-			p_Battery_Info->Q_remain_record = BatteryRemainQ;
-			Result = TableNum - i - 1;
-			
+						
 			//电量上升时,突变较小,取上次计算值
 			if(Result > Result_Pre)
 			{

+ 4 - 4
User/Src/var.c

@@ -63,8 +63,8 @@ const BatterCellInfo_Struct_t BatteryCellInfoDefault =
 {
 	15000,
 	{
-		4152,
-		4104,
+		4152,  //100%
+		4104,  //99%
 		4089,
 		4078,
 		4070,
@@ -162,8 +162,8 @@ const BatterCellInfo_Struct_t BatteryCellInfoDefault =
 		3313,
 		3296,
 		3271,
-		3219,
-		3100,
+		3219, //1%
+		3100, //0%
 	}
 }; 
 

Деякі файли не було показано, через те що забагато файлів було змінено