常见的锂电池的算法--基础概念

常见的锂电池的算法–基础概念

1、锂电池的一些特性

(1)锂电池的各种静态和动态参数,都有个体差异,批次差异,型号差异。
(2)锂电池的剩余电量和电压有关。参考充放电曲线。
(3)锂电池的满电/空电状态对应的电量和电压参数,会随着充放电循环增多而老化衰减。
(4)锂电池的各种参数都随温度变化,一般额定参数是在某个特定温度下测量得到的。
(5)电池不同电压/剩余容量时的充放电电流极限值可能会不同,也可能老化,温度漂移。

2、常用SOX

(1)SOC:State of Charge,剩余电量百分比,剩余电量/实际容量
(2)SOH:State of Health,电池健康度,电池使用一段时间后老化衰减度,实际容量/额定容量
(3)SOE:Stete of Energy,剩余能量,与续航里程相关,需考虑续航相关的额外因素
(4)SOP:State Of Power,锂电池的允许充放电电流值在不同SOC,不同温度下是不同的。(例如:电动车在刚充满电时和快没电量时,所表现的性能是不一样的)
(5)DOD:Depth of discharge,放电深度,电池放电量与电池额定容量的百分比(例如:电池并不是完全放空电量,还是留有一定的电量保存在电池中)

3、总结说明

(1)SOX是从不同角度对锂电池特性的建模和参数表达
(2)物理上电池有个体差异,各种静态和动态参数在不同温度下也会变化甚至不成线性变化
(3)产品和项目中实现哪些SOX由产品和项目自身决定,没有统一标准
(4)SOX的实现可以有多种算法,可用1种或同时几种叠加使用以增强准确度
(5)SOX实现的关键点:算法选择、参数标定、验证试验体系和环境搭建

4、本课程中的实现

(1)本课程中只实现了SOC,未实现其余SOX,主要使用SOC计算剩余电量百分比
(2)本课程中SOC的实现采用了2种算法叠加:开路电压法、安时积分法

5、SOC代码解析

(1)电池状态的分析主要包括简单分析数据、实时校准容量、计算SOC值等主要部分。简单分析主要用于计算最大电压差、平均电压等简单参数;实时校准,主要是对采集的温度信息进行校准,SOC值计算主要包括开路电压法和安时积分法。

> // 电池状态分析任务线程入口 static void BMS_AnalysisTaskEntry(void *paramter) {
> 	BMS_AnalysisCapAndSocInit(); 	while(1) 	{			
> 		BMS_AnalysisEasy();//简单分析,计算最大电压差、平均电压等简单参数
> 		BMS_AnalysisCalCap();//实时校准容量涉及因素:温度
> 		BMS_AnalysisSocCheck();//计算SOC值
> 		rt_thread_mdelay(ANALYSISI_TASK_PERIOD); 	} }

(2)简单分析,通过数据直接进行计算就能得到的

static void BMS_AnalysisEasy(void)
{
	uint8_t index;

	// 最大电压差
	BMS_AnalysisData.MaxVoltageDifference = BMS_MonitorData.CellData[BMS_GlobalParam.Cell_Real_Number - 1].CellVoltage - BMS_MonitorData.CellData[0].CellVoltage;
	
	
	// 平均电压
	for (index = 0, BMS_AnalysisData.AverageVoltage = 0; index < BMS_GlobalParam.Cell_Real_Number; index++)
	{
		BMS_AnalysisData.AverageVoltage += BMS_MonitorData.CellVoltage[index];
	}
	BMS_AnalysisData.AverageVoltage /= BMS_GlobalParam.Cell_Real_Number;
	
	
	// 实时功率
	BMS_AnalysisData.PowerReal = BMS_MonitorData.BatteryVoltage * BMS_MonitorData.BatteryCurrent;	


	// 最大和最小电压
	BMS_AnalysisData.CellVoltMax = BMS_MonitorData.CellData[BMS_GlobalParam.Cell_Real_Number - 1].CellVoltage;
	BMS_AnalysisData.CellVoltMin = BMS_MonitorData.CellData[0].CellVoltage;
}

(3)

static void BMS_AnalysisTempCal(void)
{
	static int16_t LastTemp = 0;

	uint8_t  Ratio; 	// 校准比率
	uint16_t RateTemp;	
	int16_t MinTemp = BMS_MonitorData.CellTemp[0] * 10;


	if (BMS_MonitorData.CellTempEffectiveNumber == 0)
	{
		return;
	}


	// 判断温度变化是否超过1度
	if( MinTemp > LastTemp)  
	{
		if (MinTemp - LastTemp >= 10)
		{
			LastTemp = MinTemp;
		}
		else
		{
			return;
		}
	}
	else
	{
		if (LastTemp - MinTemp >= 10) 
		{
			LastTemp = MinTemp;
		}
		else
		{
			return;
		}
	}

	
	// 确定校准比率
	if (MinTemp >= 250)                             
	{
		Ratio = 1;
	}
	else if (MinTemp >= 100 && MinTemp < 250)   
	{   
		Ratio = 2;
	}
	else if (MinTemp >= 0 && MinTemp < 100)      
	{   
		Ratio = 3;
	}
	else if (MinTemp >= -200 && MinTemp < -10)    
	{   
		Ratio = 4;
	}
	else if (MinTemp >= -300 && MinTemp < -200)    
	{   
		Ratio = 5;
	}
	else
	{
		Ratio = 6;                                       
	}


	RateTemp = 1000 + Ratio * (MinTemp - 250) / 10;
	if(RateTemp > TEMP_CAP_RATE_LIMITH_HIGH )
	{
		RateTemp = TEMP_CAP_RATE_LIMITH_HIGH;
	}
	else if(RateTemp < TEMP_CAP_RATE_LIMITL_LOW)
	{
		RateTemp = TEMP_CAP_RATE_LIMITL_LOW;
	}

	// 实时容量
	BMS_AnalysisData.CapacityReal = BMS_AnalysisData.CapacityRated * RateTemp / 1000;

	// 剩余容量
	BMS_AnalysisData.CapacityRemain = BMS_AnalysisData.CapacityReal * BMS_AnalysisData.SOC;
}
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值