主要内容

为电池模块生成参数数据

这个例子展示了如何导入锂离子电池表数据,并为数据表电池块生成参数。

在步骤1中,导入数据表数据。步骤2-5展示了如何使用曲线拟合技术从数据表中获得开路电压和电池电阻。在步骤6-8中,通过将其与Arrhenius行为和数据表数据进行比较,验证曲线拟合电压和电池值。最后,在步骤9中,指定这些数据表电池块参数:

  • 额定温度下的额定容量

  • 开路电压表数据

  • 开路电压断点

  • 内阻表数据

  • 电池温度断点1

  • 电池容量断点

  • 最初的电池充电

步骤1:导入Battery Datasheet数据

将电池放电和温度数据导入MATLAB。确保数据表中的每个数据集都包含启动电池电池输出电压。通常,在不同温度下采集的数据具有相同的参考电流。不同电流采集的数据具有相同的参考温度。

对于此示例,从包含12个数据集的文件中加载锂离子电池的电池数据表排放和温度数据。每个数据集对应于特定电流和温度的电池数据。数据集每个都有两列。第一列包含百分比的放电容量。第二列包含相应的电池电池电压。

exp_data = load(“ex_datasheetbattery_liion_100Ah.mat”);

本例不使用500a的25ºC电流对应的数据集。

绘制放电和温度曲线。图1给出了锂离子电池在恒温(5个电流等级,如图C-rate)和恒流(6个温度)下的放电特性。参考温度为25℃时,参考电流为50a时的曲线如图1所示。

ex_datasheetbattery_plot_data

步骤2:规格化充电状态(SOC)数据

为了表示恒定温度下的1- soc容量,对相对放电容量进行归一化,其值在0 ~ 1之间。设1代表一个完全放电的电池。

ref_exp对应于参考温度为25°C、参考电流为50 A的数据集。通常,参考温度是室温。

ref_exp = 2;

如果您有多个数据集,请使用其中一些进行验证。不要将它们作为评估数据集的一部分。

对于本例,使用val_exp建立验证和估计数据集。设1表示验证数据集,0表示估计数据集。

Val_exp = logical([1 0 0 0 1 0 0 1 0]); / /输出

定义参考电流和温度。对于该示例,参考温度为25°C,参考电流为50 A.

Ref_curr = current == current(ref_exp);Ref_temp = temperature == temperature(ref_exp); / /温度[sort_current, sort_index_current] = sort(current(ref_temp));[sort_temp, sort_index_temp] = sort(温度(ref_curr));N =长度(当前);%实验次数

为每个数据集准备归一化X轴并找到实力。X是一个具有多个字段的结构,作为数据集和0到1之间的值。

i = 1: N x。([“咕咕叫”current_label{我}'_temp'温度_Label {i}])=...exp_data。([标签“_”current_label{我}“_”temperature_label{我}])(:1)/...exp_data。([标签“_”current_label{我}“_”temperature_label{我}])(,1);计算每个数据表的实际容量correct_cap。([“咕咕叫”current_label{我}'_temp'温度_Label {i}])=...exp_data。([标签“_”current_label{我}“_”temperature_label{我}])(,1);结束

绘制归一化SOC数据。

ex_datasheetbattery_plot_soc

第三步:调整曲线

创建fitobj.不同放电速率下的恒定温度曲线和不同温度下的恒定放电速率曲线。使用fitobj.曲线,以创建一个矩阵电池/模块电压与放电电流在不同的SOC水平。

fitobj.是一个适合对象的结构,它包含与数据集一样多的字段。该结构适合归一化的放电电压([0,1])提取的啊。这允许放电曲线进行代数组合,以计算每个SOC水平的电阻。

定义电荷矢量和断点的状态。

soc_lut =(0:.01:1)';socbkpts = 0:.2:1;

根据参考温度拟合不同电流的放电曲线。

我=找到(ref_temp)fitobj。([“健康”current_label{我}))=...适合(x。([“咕咕叫”current_label{我}'_temp'temperature_label{我}]),...exp_data。([标签“_”current_label{我}“_”temperature_label {ref_exp}]) (:, 2),“smoothingspline”);结束

拟合不同温度下的放电曲线以参考电流。

我找= (ref_curr) fitObj。([“健康”温度_Label {i}])=...适合(x。([“咕咕叫”current_label{我}'_temp'temperature_label{我}]),...exp_data。([标签“_”current_label {ref_exp}“_”temperature_label{我}])(:,2),“smoothingspline”);结束

构造不同SOC水平的电压与放电电流。Em_MAT是一个行为SOC列为电流的矩阵。

Em_MAT = [];i =查找(ref_temp)em_mat = [em_mat fitobj。([“健康”current_label{我}])(SOC_LUT)];结束

图3显示了不同soc的电压与电流。

ex_datasheetbattery_plot_curves

步骤4:外推开路电压

为了获得开路电压,新兴市场,拟合一条线到电压与电流的曲线,并外推到我= 0

R0_refTemp = [];i = 1:长度(SOC_LUT)%适合v = f(i)的线Fitsoc。([“SOC”num2str (i))) =适合(sort_current’,Em_MAT(我sort_index_current) ',“poly1”);结束

为了估计开路电压,新兴市场在所有SOC层面,将电压值推断到我= 0

Em = [];i = 1:长度(SOC_LUT)% Em = f(0)Em = [Em fitSOC。([“SOC”num2str (i)]) (0)];结束Em = Em”;

步骤5:测定不同温度下的电池电压和电阻

使用放电和温度数据来确定电池电阻作为电流和SOC在不同温度下的函数。不包括验证数据。图4显示了电池在不同温度下的电压。

ex_datasheetbattery_plot_voltage

使用参考电流数据集计算不同温度下的电阻。

R0_LUT = [];我找= (ref_curr & ~ val_exp)%创建适合V和SOC的对象voltVsSOC。([“临时”temperature_label{我}))= fitObj。([“健康”temperature_label{我}])(SOC_LUT);假设R0 = DeltaV / I为线性行为,计算R0(SOC,T)R0。([“临时”{i}]) = (Em - voltVsSOC。([“临时”temperature_label{我}]))。/电流(ref_exp);%构造附近地区R0_lut = [R0_lut]([“临时”temperature_label{我}])];结束

为了避免R的突变接近SoC = 0.,将R(0.9)一直延伸到R(1)。这是需要的,因为R的计算方式。在0.9不是一个实际断点的情况下,使算法健壮

如果~ isempty(找到(SOC_LUT = = 0.9, 1)) R0_LUT (SOC_LUT > 0.9:) = repmat (R0_LUT (SOC_LUT = = 0.9:),长度(R0_LUT (SOC_LUT > 0.9:)), 1);其他的[closestTo0p9, locClosestTo0p9] = min(abs(soc_lu -0.9));R0_LUT (SOC_LUT > closestTo0p9:) = repmat (R0_LUT (locClosestTo0p9:)...长度(R0_LUT (SOC_LUT > closestTo0p9,:)), 1);结束

确定不同温度的电池电阻。

R0_LUT = max (R0_LUT, 0);T_LUT = 273.15 +温度(ref_curr & ~val_exp);[T_LUT1, idx] = (T_LUT)进行排序;xtmp = R0_LUT ';R0_LUT1(1:长度(T_LUT):) = xtmp (idx:);

图5显示了不同温度下的电池电阻。

ex_datasheetbattery_plot_resistance.

第6步:与Arrhenius行为相比

由于锂离子电池的温度依赖反应速率遵循阿伦尼乌斯行为,您可以使用比较来验证曲线拟合。

为了确定阿伦尼乌斯行为的曲线拟合预测,检查活化能,Ea.通过内阻的斜率得到活化能,罗依,而不同soc的1000/T曲线。斜率等于活化能,Ea,除以普遍气体常数,Rg

对于锂离子电池,其典型值为Ea是20 kJ / mol [2]。图6表示激活能量,Ea,通过斜率获得的,与20kJ / mol紧密相比。

ex_datasheetbattery_plot_arrhenius
锂离子电池导电活化能Ea = 17.9958 20.669 18.9557 22.8107 21.5289 24.0987 kJ/mol

第七步:适应电池电阻

将电池电阻与验证的温度数据相匹配,作为SOC和温度的函数。

R0_LUT_bkpts = [];counter = 1;[SOC_LUT_index, ~] = find(abs(soc_lu - socbkpts)<0.001);i=find(ref_curr & ~val_exp) R0_LUT_bkpts = [R0_LUT_bkpts R0_LUT(SOC_LUT_index,counter)];counter = counter + 1;结束[xx, yy, zz] = prepareSurfaceData (1000. / T_LUT SOCbkpts,日志(R0_LUT_bkpts));[R0_vs_T_SOC_fit, gof] = fit([xx,yy],zz,“linearinterp”);%[r0_vs_t_soc_fit,gof] = fit([xx,yy],zz,'poly12');[xx1,yy1,zz1] = preparesurfacedata(t_lut,socbkpts,r0_lut_bkpts);[r0_vs_t_soc_fit1,gof] = fit([xx1,yy1],zz1,“linearinterp”);

图7和8示出了作为SOC和温度的函数的电池电阻的表面图。

ex_datasheetbattery_plot_surface

第8步:验证电池型号适合

图9显示了计算的数据和实验数据集数据。

ex_datasheetbattery_plot_validation

步骤9:设置数据表电池块参数

设置额定温度下的额定容量参数设置为数据表提供的容量。

BattChargeMax = 100;% Ah数据表的容量

设置开路电压表数据参数新兴市场

Em = flipud (Em);

设置开路电压断点指控状态的参数。

CapLUTBp = SOC_LUT;

设置内阻表数据参数与所拟合的电池电阻数据作为SOC和温度的函数。

无线电侦察= R0_LUT_bkpts ';

设置电池温度断点1参数到温度矢量。

batttempbp = t_lut1;

设置电池容量断点参数到SOC矢量。

CapSOCBp = SOCbkpts;

设置最初的电池充电参数到数据表提供的值。

Battcapinit = 100;

清理。

清除xxxyyyy1Z Zzz1;清除batt_id上校正确的计数器当前的;清除correct_capcurrent_label数据exp_datafitobj.Fitsoc.gof;清除idxindicotjk标签line_colors;清除靛青N橙色p1p2紫色的ref_currref_expref_tempcolorVf9p10票数;清除sort_currentsort_index_currentsort_index_tempsort_temp;清除温度温度Vval_expvalIdxvoltVsSOCxtmptemperature_label;清除EaEm_MATmarkerType1R0R0_LUTR0_LUT1R0_LUT_bkptsR0_refTempR0_vs_T_fit;清除TRgydF4y2Bar0_vs_t_soc_fit.r0_vs_t_soc_fit1.SOC_LUTSOCbkptsT_LUTT_LUT1soc_lut_index.

参考

[1] Jackey,Robyn,Tarun Huria,Massimo Ceraolo和Javier Gazzarri。“具有热依赖性的高保真电模型,具有高功率锂电池电池的表征和仿真。”IEEE国际电动汽车会议.2012年3月,第1-8页。

纪燕,张盐城,王朝阳。电化学学会学报.第160卷,第4期(2013),A636-A649。

另请参阅

||||