主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

表征电动汽车的电池电芯

此示例说明了如何使用 [1] 中的测试方法对电动汽车应用的电池电芯进行特性分析。此例估计了在五种不同环境温度下,BAK N18650CL-29 18650 型锂离子电芯 [2] 的参数。电池混合脉冲功率特性 (HPPC) 测试在受控的环境箱中进行。

电池测试

典型的 HPPC 数据是一组放电-充电脉冲,在不同的荷电状态 (SOC) 和给定温度 [1] 下施加到电池上。脉冲的大小取决于电芯容量和测试温度。在每次放电-充电脉冲操作序列结束时,通过施加恒定放电电流 C/3,SOC 约下降 10%。建议在每次放电-充电脉冲序列后,让电芯休息一个小时,以使其放松。该过程持续进行,直至覆盖 SOC 范围内的所有关键点。如需更多信息,请参阅 [1]。

测试条件与设置

生物学 BCS-815 8 通道电池测试仪,配备标准电缆、配件和热电偶,进行了电池 HPPC 测试 [3]。测试舱保持了温度和湿度控制。为了测量温度,测试人员使用了配备多路复用器功能的安捷伦 34972A 数据采集系统(搭配 34901A 20 通道多路复用器)。该系统测试了三种不同的采样。测试每次均可重现。电芯在五种不同的温度下进行了测试:0oC,10oC,25oC,35oC,45°C 箱温。在测试期间,温度保持均匀。有关测试流程的更多信息,请参阅[1]。

这些图显示了电池测试数据。每个测试数据包含九组放电-充电脉冲。每次放电-充电操作后,C/3 恒定电流(SOC 扫描步骤)将电芯 SOC 降低 10%。要可视化电池测试数据,在 MATLAB® 命令行窗口中,输入:

T_vec = [0 10 25 35 45];
for i = 1:5
    plotBatteryTestData(T_vec(i));
end

Figure BAKcell0degC contains an axes object. The axes object with title BAKcell0degC, xlabel Time (s), ylabel Voltage (V) contains an object of type line.

Figure BAKcell10degC contains an axes object. The axes object with title BAKcell10degC, xlabel Time (s), ylabel Voltage (V) contains an object of type line.

Figure BAKcell25degC contains an axes object. The axes object with title BAKcell25degC, xlabel Time (s), ylabel Voltage (V) contains an object of type line.

Figure BAKcell35degC contains an axes object. The axes object with title BAKcell35degC, xlabel Time (s), ylabel Voltage (V) contains an object of type line.

Figure BAKcell45degC contains an axes object. The axes object with title BAKcell45degC, xlabel Time (s), ylabel Voltage (V) contains an object of type line.

估计电池参数

Simscape™ Battery™ 中的 Battery (Table-Based) 模块使用等效电路建模方法。通过将多个电阻器-电容器 (RC) 对串联连接,可以捕捉电芯的不同物理现象。在 Battery (Table-Based) 模块中,最多可选择五个 RC 对。您可以从 HPPC 测试数据中得出电阻和时间常数参数的值。

该方程式定义了电池电芯的电压响应:

V=V0-I×Ro-I×(Ri(1-exp(-tτi))),

其中:

  • V0 是电芯开路电势。

  • Ro 是电芯的欧姆电阻。

  • Riτi 是电芯第 i 个 RC 对电阻和时间常数值。

  • I 是通过电芯的电流。

  • t 表示历时。

所有参数都是 SOC 和电芯温度的函数。由于 HPPC 测试通常在恒定温度下进行,因此在参数估计过程中可以忽略温度依赖性。该图显示了典型的放电-充电配置文件。

batteryCellCharacterizationForBEV01.png

您可以通过放电或充电脉冲开始时电压的突然变化(例如 V1 到 V2 或 V5 到 V6)来估计电阻Ro。要估计Riτi参数,您可以使用放电 (V4 - V5) 或充电 (V8 - V9) 脉冲后的短电压放松。您可以从 SOC 扫描步骤 (V9 - V12) 之后的更长电压放松阶段 (V12 - V14) 中提取更多的时常数。来自 Curve Fitting Toolbox (TM) 的 fminsearch MATLAB 函数或 curvefit 函数使用测试数据点来拟合不同 SOC 点处的 Riτi 参数。要确定给定 SOC 下的开路电压,请使用长放松期结束时的电压 (V1) 以及放电-充电脉冲操作开始前的电压。

在此示例中,您使用 batteryParametersLUT 函数来估计电池的 V0RoRi- τi 参数。

参数估计方法

函数 batteryParametersLUT 接受以下参量作为输入:

  1. HPPC 数据,指定为时间(以秒为单位)、电流(以安培为单位)、电压(以伏特为单位)和 SOC (0-1) 的列向量。HPPC 数据中的第四列 SOC 为可选项。您必须确保数据涵盖电池的整个 SOC 范围,从完全充电的电芯 (SOC=1) 到几乎耗尽的电池电芯,以避免参数外推。

  2. HPPC 数据中的电芯容量和初始 SOC,指定为两个标量值的数组。此示例使用 cellProp 参数来存储这些值。

  3. 放电脉冲电流(以 A 为单位)、充电脉冲电流(以 A 为单位)、SOC 扫描电流(以 A 为单位)以及检测这些电流的容差值,指定为四个标量值的数组。您必须将容差定义为一个合适的值(通常为 0.01-0.05),以便函数检测 HPPC 数据中的当前拐点。此示例使用 hppcProtocol 参数来存储这些值。

  4. 指定为整数的 RC 对数,以及指定为标量值数组的初始估计值,用于短(V4-V5 和 V8-V9)和长 (V12-V14) 松弛曲线。

  5. 数据拟合方法,指定为 fminsearchcurvefit

  6. 启用调试的选项,指定为 truefalse。如果为 true,则函数绘制用于曲线拟合的 HPPC 曲线以及用于评估欧姆电阻、动态参数和开路电势所选的点。

此代码说明了如何使用 batteryparametersLUT 函数。参数提取是一个两步过程:

result = batt_BatteryCellCharacterization.batteryParametersLUT(...
         [time, current, voltage],...
         cellProp,hppcProtocol,...
         numPairShort, iniEstimateShort,...
         numPairLong, iniEstimateLong,...
         "fminsearch", false);

% Method to define number of RC pairs and the initial estimates 
%        numRCpairs        = 1;
%        iniEstimateRC     = [1e-3 10]; % [R1, Tau1]
%        numRCpairsRest    = 3;
%        iniEstimateRCrest = [1e-3 1 5e-3 10 1e-2 100]; % [R1, Tau1, R2, Tau2, R3, Tau3]
% Specify all resistance values in Ohms
% Specify all time constant values in seconds

battRC = exportResultsForLib(...
         result, ...
         0:1e-3:1, ...
         true);

您必须为 exportResultsForLib 函数提供以下输入参量:

  1. batteryParametersLUT 函数的输出。

  2. SOC 范围,指定为 SOC 断点数组。此示例使用 SOC 断点 0:1e-3:1。

  3. 绘制选项,指定为 truefalse。如果为 true,则该函数将所有估计的电池参数作为 SOC 范围的函数绘制出来。

battRC 工作区变量用于存储最终的参数化数据。

参数化 Battery (Table-Based) 模块

要对 Battery (Table-Based) 模块进行参数化,并可视化在 T_vec 工作区变量中指定的所有温度的验证结果,在 MATLAB 命令行窗口中输入:

optionRun = 0;

% Define cell array to store parameters for different temperature cases
cellParameters = cell(1,length(T_vec));
caseName       = cell(1,length(T_vec));

估计向量 T_vec 中定义的所有温度下的电池参数:

for T = 1:length(T_vec)
    Tval = T_vec(1,T);
    caseName{1,T} = strcat(num2str(Tval),'degC');
    disp(strcat('Estimating parameters for T = ',num2str(Tval),' degC'));
    
    % Get HPPC data for a particular temperature
    [time, current, voltage, cellProp, protocolHPPC] = ...
             getBatteryTestData(Tval);
    
    % Define the number of RC pairs to consider and the initial estimates 
    % for resistance and the time constant values.
    [numRCshort, iniEstimateShort, numRClong, iniEstimateLong] = ...
             getBatteryIniEstimatesResTau(Tval);
    
    % Estimate battery parameters
    result = batt_BatteryCellCharacterization.batteryParametersLUT(...
             [time, current, voltage],...
             cellProp,protocolHPPC,...
             numRCshort,iniEstimateShort,...
             numRClong,iniEstimateLong,...
             "fminsearch", false);
    
    % Save generated parameters for library
    cellParameters{1,T} = ...
             exportResultsForLib(result, 0:1e-3:1, false);
end
Estimating parameters for T =0 degC
*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8
Estimating parameters for T =10 degC
*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8
Estimating parameters for T =25 degC
*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8
Estimating parameters for T =35 degC
*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8
Estimating parameters for T =45 degC
*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8

将长休息(放松)时间拟合与短休息时间拟合结果与原始 HPPC 测试数据进行比较。该示例仅在您在上述下拉菜单中选择 Parameterize and Verify 时执行这些命令。

% Verification Plots
if optionRun
    for T = 1:length(T_vec) 
        Tval = T_vec(1,T);
        % Get HPPC data for a particular temperature
        [time, current, voltage, ~, ~] = getBatteryTestData(Tval);
        verifyCellParam = cellParameters{1,T};
        hppcCurrentData = timeseries(current,time); warning('off','all');
        % Run the verification model
        sim('CellCharacterizationHPPC.slx');
        % Post-process data and plot
        sim_V1 = simlog_CellCharacterizationHPPC.longRest_3RC.v.series.values;
        sim_V2 = simlog_CellCharacterizationHPPC.shortRest_1RC.v.series.values;
        sim_t  = simlog_CellCharacterizationHPPC.shortRest_1RC.v.series.time;
        % Plot
        figure('Name', strcat('HPPC verification ',caseName{1,T}));
        plot(sim_t,sim_V1,'r--');hold on;
        plot(sim_t,sim_V2,'b--');hold on;
        plot(time,voltage,'k-');hold off;
        legend('Fit from long relaxation time curve', ...
               'Fit from short relaxation time curve',...
               'Test Data','Location','southwest');
        xlabel('Time (s)');
        ylabel('Voltage (V)');
        title(strcat('Verification plots for T = ',num2str(Tval)));
    end
end

将不同温度下的电池参数组合到 Battery (Table-Based) 模块所需的格式中。

% Raw data generated from the parameterization 
paramData = cell2table(cellParameters, ...
            "VariableNames", caseName);

% The Battery (Table-Based) block parameters
% 
% Third argument "long" implies Battery Dynamic parameters selected based
% upon the long relaxation or rest time. You can get short relaxation time
% based parameters by using "short" instead of "long" in the third argument
% below.
battModel = getBatteryTableBasedParams( ...
            T_vec, cellParameters, "long", ...
            [numRCshort numRClong]);

Figure R0discharge contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

Figure R0charge contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

Figure R1 contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

Figure Tau1 contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

Figure R2 contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

Figure Tau2 contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

Figure R3 contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

Figure Tau3 contains an axes object. The axes object with xlabel SOC, ylabel Temperature contains an object of type surface.

paramDatabattModel 工作区变量分别包含从参数化和 Battery (Table-Based) 模块参数生成的原始数据。

使用估计参数仿真电池

下图显示了 CellDischargeCC 模型。

batteryCellCharacterizationForBEV02.png

battModel 工作区变量包含参数化所需的所有相关数据,并指定模型中 Battery (Table-Based) 模块的所有参数。该图显示了 Battery (Table-Based) 模块中的每个参数的值。

batteryCellCharacterizationForBEV03.png

设置仿真的最小和最大 C 率。

oneHr = 3600;
C_rate_min = 0.25;
C_rate_max = 1;
C_rate_del = 0.25;
numCases = (C_rate_max - C_rate_min)/C_rate_del + 1;

设置电池热质量、初始温度和初始状态 (SOC)。电芯的温度取决于 CellThermalMass,该值等于 200 J/K。

CellThermalMass = 200;
InitialTemperature = 305;
InitialSOC = 1;

在给定的 InitialTemperature 条件下,以不同的 C 率进行恒定电流放电。

legendStr = strings(1,numCases);
battSensorData = cell(1,numCases);

运行所有仿真。

caseNum = 0;
for C_rate = C_rate_min:C_rate_del:C_rate_max
    caseNum = caseNum + 1;
    legendStr(1,caseNum) = strcat(num2str(C_rate),'C rate discharge case');
    BatteryConstantCurrent = C_rate*battModel.CellCapacityAhr;
    batterySimTime_s = oneHr/C_rate;
    sim('CellDischargeCC');
    ts      = simlog_CellDischargeCC.battery.v.series.time;
    voltage = simlog_CellDischargeCC.battery.v.series.values;
    tempK   = simlog_CellDischargeCC.battery.cell_temperature.series.values;
    battSensorData{1,caseNum} = [ts voltage tempK];
end

绘制不同恒定电流放电情况下的电池电压曲线。

titleDisplay = strcat('Cell Voltage, Ambient Temperature =',num2str(InitialTemperature-273),' degC');
figure('Name', titleDisplay);
for itr = 1:numCases
    plot(battSensorData{1,itr}(:,1),battSensorData{1,itr}(:,2)); hold on
end
hold off
legend(legendStr);
xlabel('Time');
ylabel('Voltage');
title(titleDisplay);

Figure Cell Voltage, Ambient Temperature =32 degC contains an axes object. The axes object with title Cell Voltage, Ambient Temperature =32 degC, xlabel Time, ylabel Voltage contains 4 objects of type line. These objects represent 0.25C rate discharge case, 0.5C rate discharge case, 0.75C rate discharge case, 1C rate discharge case.

绘制恒定电流放电过程中电池温度的升高曲线。

titleDisplay = strcat('Cell Temperature, Ambient Temperature =',num2str(InitialTemperature-273),' degC');
figure('Name', titleDisplay);
for itr = 1:numCases
    plot(battSensorData{1,itr}(:,1),battSensorData{1,itr}(:,3)); hold on
end
hold off
legend(legendStr);
xlabel('Time');
ylabel('Temperature (K)');
title(titleDisplay);

Figure Cell Temperature, Ambient Temperature =32 degC contains an axes object. The axes object with title Cell Temperature, Ambient Temperature =32 degC, xlabel Time, ylabel Temperature (K) contains 4 objects of type line. These objects represent 0.25C rate discharge case, 0.5C rate discharge case, 0.75C rate discharge case, 1C rate discharge case.

参考资料

  1. Christophersen, Jon P."Battery Test Manual For Electric Vehicles, Revision 3".United States:N. p., 2015.Web. doi:10.2172/1186745

  2. Zhengzhou Bak Battery Co.,LTD, "Specification For Lithium-ion Rechargeable Cell.Cell Type :N18650CL-29".

  3. Anandaroop Bhattacharya, Subhasish Basu Majumder."Experimental data collected with Biologic BCS-815 8-channel battery tester for battery HPPC test".Indian Institute of Technology (IIT) Kharagpur, India.

另请参阅

主题