1、开路电压OCVj简介
在电池建模中,开路电压(Open Circuit Voltage,OCV)是构建模型的关键参数之一。开路电压是指电池在没有电流流动时所测得的电压,即在没有外部负载连接的情况下,电池两端的电压读数。
OCV是评估电池状态的重要指标,因为它与电池的荷电状态(State of Charge,SOC)和健康状态(State of Health,SOH)直接相关。二者之间的关系对于电池的健康状态监测、寿命预测和能量管理系统至关重要。
虽然已有研究表明SOC与OCV之间存在一定的关联,但这种关系并非简单的线性关系,而是受到多种因素的影响,包括温度、电流负载和电池的老化程度等。这些因素可能导致SOC和OCV之间的关系变得复杂,因此在电池监测和管理过程中,需要综合考虑这些变量以提高模型的准确性。
以下是OCV电压的一些关键点:
-
SOC的指示器:OCV与SOC之间存在一定的对应关系。通过测量OCV,可以估计电池的SOC,这对于电池管理系统(BMS)来说非常重要。
-
电池健康状态:随着电池的老化,其OCV-SOC曲线会发生变化。监测这些变化可以帮助评估电池的SOH。
-
电池类型:不同类型的电池(如锂离子电池、镍氢电池等)有不同的OCV-SOC曲线。
-
温度影响:温度对电池的OCV有显著影响。温度变化会影响电池的化学反应,从而影响OCV读数。
-
安全保护:OCV的监测对于电池的过充和过放保护至关重要。BMS可以使用OCV阈值来防止电池充电过高或放电过低。
由于OCV与电池的SOC和SOH密切相关,因此在电池管理系统(BMS)中,OCV的准确测量和有效利用对于电池性能的优化和电池寿命的延长具有重要意义。
2、如何测量OCV电压
要准确测量OCV电压,可以遵循以下关键步骤:
-
确保无电流流动:在测量OCV前,确保电池不连接任何负载,并且充放电过程已停止。
-
等待电压稳定:电池从充放电状态转换到开路状态后,需等待一段时间以确保电压稳定。
-
使用高精度测量设备:使用高精度的电压测量设备,如数字万用表或专用电池测试仪。
-
温度补偿:由于温度对OCV有影响,需要对测量结果进行温度补偿。
-
定期校准:定期校准测量设备和BMS,以确保长期测量的准确性。
3、不同种类电池的ocv-oc曲线
.磷酸铁锂锂离子电池磷酸铁锂锂离子电池的SOC与OCV之间的关系图:
图片来源于:面向大功率电池组的应用技术 [谭晓军 著] 2014年版
图中有三条不同的曲线,分别代表充电电压、均值电压和放电电压随SOC变化的情况。以下是对图中内容的详细解释:
-
横轴(X轴):表示电池的荷电状态(SOC),范围从0到1,其中0表示电池完全放电,1表示电池完全充电。
-
纵轴(Y轴):表示电压(单位为伏特,V),范围从2.4V到3.8V。
-
充电电压(虚线):这条曲线显示了在电池充电过程中,电压随SOC增加的变化趋势。通常,随着SOC的增加,充电电压会逐渐上升。
-
均值电压(点划线):这条曲线代表了电池在充放电过程中的平均电压。它的变化趋势相对平缓,但在SOC的两端,电压变化较为明显。
-
放电电压(实线):这条曲线显示了在电池放电过程中,电压随SOC减少的变化趋势。放电电压在SOC较低时下降较快,而在SOC较高时变化较慢。
-
平台区:在SOC的中间区间(大约20%到80%),OCV的变化相对较小,这在图中表现为曲线较为平坦的区域。这通常与电池的化学反应特性有关,在这个区间内,电池的电压变化不大,但可以提供较为稳定的输出。
-
两端陡峭:在SOC的两端(小于10%和大于90%),OCV的变化率较大,这在图中表现为曲线的陡峭上升或下降。这表明在电池接近完全放电或完全充电时,电压变化更为敏感。
钴酸锂或者三元锂离子电池的SOC与OCV之间的关系图如下:
曲线差异分析:
-
电压平台差异:磷酸铁锂电池电压平台较低(约3.2V),而三元和钴酸锂电池较高(约3.7V),影响OCV变化的明显性。
-
电压-SOC曲线形状:磷酸铁锂电池的OCV-SOC曲线平缓,难以准确估计SOC;三元和钴酸锂电池曲线在两端陡峭,估计SOC更准确。
-
温度敏感性:磷酸铁锂电池对温度变化不敏感,高温下稳定,但低温下OCV变化不明显。
-
电池老化影响:电池老化导致OCV-SOC曲线变化,磷酸铁锂电池老化稳定性好,循环寿命长。
-
SOH、SOP和SOC预测:磷酸铁锂电池OCV-SOC曲线平缓,加上温度敏感性低,使得SOH、SOP和SOC预测更具挑战性。
4、曲线拟合过程
很遗憾,目前手上没有实测数据,有一个从网上看到的数据,拿来示范一下曲线的拟合和插值过程。
源数据:SOC = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];
Voc = [3.2591, 3.6095, 3.7175, 3.7559, 3.8052, 3.8052, 3.8671, 3.9477, 4.0380, 4.13066, 4.193909];
-
图中的蓝色点代表实际测量的SOC与Voc数据点。
-
多项式拟合曲线:
- 3次多项式(蓝色线):提供了对数据的初步拟合,但可能在某些区域不够精确。
- 4次多项式(橙色线):相比3次多项式,可能在更多的区域提供更好的拟合。
- 5次多项式(黄色线):进一步增加拟合的复杂度,可能在更多的数据点上提供更好的拟合。
- 6次多项式(紫色线):在拟合复杂度上更高,可能在大多数数据点上提供非常接近的拟合。
- 7次多项式(绿色线):这是图中最高阶的多项式拟合,可能在所有数据点上都提供非常接近的拟合,但也要注意过拟合的风险。
5、matlab源程序
% 数据定义
SOC = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1];
Voc = [3.2591, 3.6095, 3.7175, 3.7559, 3.8052, 3.8052, 3.8671, 3.9477, 4.0380, 4.13066, 4.193909];
% 定义插值的SOC范围,间隔为0.01
SOC_interp = 0:0.01:1; % 插值的SOC范围
% 初始化误差数组
max_relative_errors = zeros(1, 5); % 存储3到7次的最大相对误差
% 创建图形
figure;
hold on; % 启用叠加图形
% 初始化插值后的 VOC 数组
Voc_interp_all = cell(5, 1); % 用于存储插值结果的单元格数组
% 循环从3到7进行多项式拟合
for n = 3:7
% 使用多项式拟合进行插值
p = polyfit(SOC, Voc, n); % 拟合多项式
Voc_interp = polyval(p, SOC_interp); % 计算在插值点的插值值
% 存储插值结果
Voc_interp_all{n - 2} = Voc_interp; % 将插值结果存储到单元格数组中
% 计算在原始SOC点的插值值
Voc_at_SOC = polyval(p, SOC);
% 计算相对误差
relative_error = abs(Voc_at_SOC - Voc) ./ abs(Voc);
% 计算最大相对误差
max_relative_errors(n - 2) = max(relative_error); % 记录最大相对误差
% 绘制拟合结果
plot(SOC_interp, Voc_interp, 'LineWidth', 1.5, 'DisplayName', sprintf('%d次多项式', n)); % 添加显示名称
end
% 绘制原始数据点
scatter(SOC, Voc, 'filled', 'b', 'DisplayName', '原始数据点'); % 原始数据点
hold off; % 结束叠加绘制
% 图形设置
xlabel('SOC');
ylabel('Voc (V)');
title('多项式拟合插值结果对比:SOC vs. Voc');
legend('Location', 'Best'); % 添加图例
grid on;
% 单独绘制原始数据的图
figure;
plot(SOC, Voc, 'bo-', 'LineWidth', 1.5, 'DisplayName', '原始数据'); % 原始数据的曲线
xlabel('SOC');
ylabel('Voc');
title('原始数据曲线:SOC vs. Voc');
legend('原始数据'); % 添加图例
grid on;
% 绘制最大相对误差图
figure;
bar(3:7, max_relative_errors); % 绘制柱状图
xlabel('多项式阶数');
ylabel('最大相对误差');
title('不同多项式阶数的最大相对误差');
grid on;
xticks(3:7); % 设置x轴刻度
% 指定输出文件的路径
outputPath = 'E:\MATLAB2024\interp_data.txt'; % 输出路径
% 输出插值后的 SOC 和 VOC 数组到指定的 txt 文件
fileID = fopen(outputPath, 'w'); % 在指定路径下打开文件以写入
% 写入 SOC 插值数组
fprintf(fileID, 'SOC_interp = [');
fprintf(fileID, '%.4f, ', SOC_interp(1:end-1)); % 写入前面的数据
fprintf(fileID, '%.4f];\n', SOC_interp(end)); % 写入最后一个数据
% 写入每个多项式阶数的 VOC 插值数组
for n = 3:7
fprintf(fileID, 'Voc_interp_%d = [', n); % 写入变量名称
fprintf(fileID, '%.4f, ', Voc_interp_all{n - 2}(1:end-1)); % 写入前面的数据
fprintf(fileID, '%.4f];\n', Voc_interp_all{n - 2}(end)); % 写入最后一个数据
end
fclose(fileID); % 关闭文件
disp('插值数据已保存到 E:\MATLAB2024\interp_data.txt 文件中。');
6、插值后的数据
下一步要做等效电路模型的参数辨识了。目前迫切需要实测的数据,用来建模和验证,哪位大佬有数据可否分享一下啊?