Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

전기차용 배터리 셀의 특성 정의하기

이 예제에서는 [1]의 테스트 방법을 사용하여 전기차 응용 분야용 배터리 셀의 특성을 정의하는 방법을 보여줍니다. 이 예제에서는 5가지 주변 온도에서 BAK N18650CL-29 18650 유형 리튬이온 셀[2]의 파라미터를 추정합니다. 배터리 HPPC(하이브리드 펄스 전력 특성) 테스트는 제어된 환경 챔버에서 수행됩니다.

배터리 테스트

일반적인 HPPC 데이터는 다양한 SOC(충전 상태)와 주어진 온도[1]에서 배터리에 적용되는 방전-충전 펄스 세트입니다. 펄스의 크기는 셀 용량과 테스트 온도에 따라 달라집니다. 각 방전-충전 펄스 동작 시퀀스가 끝날 때마다 C/3의 일정한 방전 전류가 적용되어 SOC가 약 10% 감소합니다. 각 방전-충전 펄스 시퀀스 이후에는 셀이 이완될 수 있도록 1시간의 긴 휴지 시간이 권장됩니다. 이 과정은 SOC 범위의 모든 관심 지점을 다룰 때까지 계속됩니다. 자세한 내용은 [1]을 참조하십시오.

테스트 조건 및 설정

표준 케이블, 부속품, 열전대가 장착된 Biologic BCS-815 8채널 배터리 테스터로 배터리 HPPC 테스트[3]를 수행했습니다. 테스트 챔버는 온도와 습도를 제어했습니다. 온도를 측정하기 위해 테스터는 다중화기 기능(34901A 20채널 다중화기)을 갖춘 Agilent 34972A 데이터 수집 시스템을 사용했습니다. 시스템은 3가지 샘플을 테스트했습니다. 테스트는 매번 재현 가능했습니다. 셀은 0oC,10oC,25oC,35oC,and 45oC의 5가지 챔버 온도에서 테스트되었습니다. 테스트 기간 동안 온도는 균일했습니다. 테스트 절차에 대한 자세한 내용은 [1]을 참조하십시오.

다음 플롯은 배터리 테스트 데이터를 보여줍니다. 각 테스트 데이터에는 9쌍의 방전-충전 펄스가 있습니다. 각 방전-충전 동작 후 C/3 정전류(SOC 스윕 스텝)는 셀 SOC를 10% 감소시킵니다. 배터리 테스트 데이터를 시각화하려면 MATLAB 명령 창에 다음을 입력합니다.

T_vec = [0 10 25 35 45]; % temperature in degree Centigrade
for i = 1:5
    plotBatteryTestData(T_vec(i));
end

배터리 파라미터 추정

Simscape Battery의 Battery (Table-Based) 블록은 등가 회로 모델링 접근법을 사용합니다. 여러 개의 RC(저항기-커패시터) 쌍을 직렬로 연결하여 셀의 다양한 물리적 현상을 캡처할 수 있습니다. Battery (Table-Based) 블록에서는 최대 5개의 RC 쌍을 선택할 수 있습니다. HPPC 테스트 데이터에서 저항 파라미터와 시정수 파라미터의 값을 도출할 수 있습니다.

다음 방정식은 배터리 셀의 전압 응답을 정의합니다.

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

여기서 각각은 다음과 같습니다.

  • V0은 셀 개방 회로 전위입니다.

  • Ro는 셀 옴 저항입니다.

  • Ri and τi는 셀 i번째 RC 쌍 저항 값과 시정수 값입니다.

  • I는 셀을 통과하는 전류입니다.

  • t는 경과 시간입니다.

모든 파라미터는 SOC와 셀 온도의 함수입니다. HPPC 테스트는 일반적으로 일정한 온도에서 수행되므로 파라미터 추정에서 온도 종속성을 무시할 수 있습니다. 다음 그림은 일반적인 방전-충전 프로파일을 보여줍니다.

batteryCellCharacterizationForBEV01.png

방전 펄스 또는 충전 펄스가 시작될 때의 급격한 전압 변화(예: V1에서 V2 또는 V5에서 V6)에서 옴 저항 Ro를 추정할 수 있습니다. Ri and τi 파라미터를 추정하려면 방전(V4 - V5) 펄스 또는 충전(V8 - V9) 펄스 직후의 짧은 전압 이완을 사용할 수 있습니다. SOC 스윕 스텝(V9 - V12) 이후의 더 긴 전압 이완(V12 - V14)에서 더 많은 시정수를 추출할 수 있습니다. fminsearch MATLAB 함수 또는 Curve Fitting Toolbox (TM)의 curvefit 함수는 테스트 데이터 점을 사용하여 다양한 SOC 점에서 Ri and τi 파라미터를 피팅합니다. 주어진 SOC에서 개방 회로 전위를 찾으려면 긴 이완(V1)이 끝난 후 방전-충전 펄스 동작 직전의 주기를 사용합니다.

이 예제에서는 batteryParametersLUT 함수를 사용하여 배터리의 V0, Ro, Ri- τi 파라미터를 추정합니다.

파라미터 추정 방법

batteryParametersLUT 함수는 다음 인수를 입력으로 받습니다.

  1. HPPC 데이터로, 시간(단위: 초), 전류(단위: 암페어), 전압(단위: 볼트), SOC(0-1)로 구성된 열 벡터로 지정됩니다. HPPC 데이터의 네 번째 열인 SOC는 선택 사항입니다. 파라미터의 외삽을 방지하려면 완전히 충전된 셀(SOC=1)부터 거의 방전된 배터리 셀까지 데이터가 배터리의 전체 SOC 범위를 포함하는지 확인해야 합니다.

  2. HPPC 데이터의 셀 용량과 초기 SOC로, 두 개의 스칼라 값으로 구성된 배열로 지정됩니다. 이 예제에서는 cellProp 파라미터를 사용하여 이러한 값을 저장합니다.

  3. 방전 펄스 전류(단위: A), 충전 펄스 전류(단위: A), SOC 스윕 전류(단위: A), 이러한 전류를 검출하기 위한 허용오차 값으로, 네 개의 스칼라 값으로 구성된 배열로 지정됩니다. 허용오차는 HPPC 데이터에서 전류 변곡점을 검출하는 함수에 적합한 값(일반적으로 0.01-0.05)으로 정의해야 합니다. 이 예제에서는 hppcProtocol 파라미터를 사용하여 이러한 값을 저장합니다.

  4. 짧은 이완(V4-V5와 V8-V9) 곡선과 긴 이완(V12-V14) 곡선에 대한 RC 쌍의 수(정수로 지정됨)와 각각의 초기 추정치(스칼라 값으로 구성된 배열로 지정됨).

  5. 데이터 피팅 메서드로, fminsearch 또는 curvefit으로 지정됩니다.

  6. 디버깅 활성화 옵션으로, true 또는 false로 지정됩니다. 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 중단점으로 구성된 배열로 지정됩니다. 이 예제에서는 0:1e-3:1의 SOC 중단점을 사용합니다.

  3. 플롯 옵션으로, true 또는 false로 지정됩니다. 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 3rd argument
% below.
battModel = getBatteryTableBasedParams( ...
            T_vec, cellParameters, "long", ...
            [numRCshort numRClong]);

paramData 작업 공간 변수는 파라미터화에서 생성된 원시 데이터를 포함하며 battModel 작업 공간 변수는 Battery (Table-Based) 블록 파라미터를 포함합니다.

추정된 파라미터로 배터리 시뮬레이션하기

batteryCellCharacterizationForBEV02.png

battModel 작업 공간 변수는 파라미터화에 대한 모든 관련 데이터를 포함하며 CellDischargeCC SLX 파일 내 Battery (Table-Based) 블록의 모든 파라미터를 지정합니다. 다음 그림은 Battery (Table-Based) 블록 내 각 파라미터의 값을 보여줍니다.

batteryCellCharacterizationForBEV03.png

시뮬레이션의 최소 및 최대 충방전율(C-rate)을 설정합니다.

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(여기서는 200J/K)에 따라 달라집니다.

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

주어진 InitialTemperature에 대해 다양한 충방전율(C-rate)로 정전류 방전을 실행합니다.

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);

정전류 방전 사례의 배터리 온도 상승을 플로팅합니다.

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);

참고 문헌

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

  2. https://www.litechpower.com/htmledit/uploadfiles/20200904024614724.pdf (Battery datasheet)

  3. 이 연구에 사용된 실험 데이터는 Indian Institute of Technology (IIT) Kharagpur, India에서 제공했습니다. Anandaroop Bhattacharya 교수(Mechanical Engineering)와 Subhasish Basu Majumder 교수(Materials Science Centre)의 공헌에 감사드립니다.

참고 항목

관련 항목