이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
전기차용 배터리 셀의 특성 정의하기
이 예제에서는 [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가지 샘플을 테스트했습니다. 테스트는 매번 재현 가능했습니다. 셀은 의 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 테스트 데이터에서 저항 파라미터와 시정수 파라미터의 값을 도출할 수 있습니다.
다음 방정식은 배터리 셀의 전압 응답을 정의합니다.
여기서 각각은 다음과 같습니다.
은 셀 개방 회로 전위입니다.
는 셀 옴 저항입니다.
는 셀 i번째 RC 쌍 저항 값과 시정수 값입니다.
는 셀을 통과하는 전류입니다.
t는 경과 시간입니다.
모든 파라미터는 SOC와 셀 온도의 함수입니다. HPPC 테스트는 일반적으로 일정한 온도에서 수행되므로 파라미터 추정에서 온도 종속성을 무시할 수 있습니다. 다음 그림은 일반적인 방전-충전 프로파일을 보여줍니다.
방전 펄스 또는 충전 펄스가 시작될 때의 급격한 전압 변화(예: V1에서 V2 또는 V5에서 V6)에서 옴 저항 를 추정할 수 있습니다. 파라미터를 추정하려면 방전(V4 - V5) 펄스 또는 충전(V8 - V9) 펄스 직후의 짧은 전압 이완을 사용할 수 있습니다. SOC 스윕 스텝(V9 - V12) 이후의 더 긴 전압 이완(V12 - V14)에서 더 많은 시정수를 추출할 수 있습니다. fminsearch
MATLAB 함수 또는 Curve Fitting Toolbox (TM)의 curvefit 함수는 테스트 데이터 점을 사용하여 다양한 SOC 점에서 파라미터를 피팅합니다. 주어진 SOC에서 개방 회로 전위를 찾으려면 긴 이완(V1)이 끝난 후 방전-충전 펄스 동작 직전의 주기를 사용합니다.
이 예제에서는 batteryParametersLUT
함수를 사용하여 배터리의 , , 파라미터를 추정합니다.
파라미터 추정 방법
batteryParametersLUT
함수는 다음 인수를 입력으로 받습니다.
HPPC 데이터로, 시간(단위: 초), 전류(단위: 암페어), 전압(단위: 볼트), SOC(0-1)로 구성된 열 벡터로 지정됩니다. HPPC 데이터의 네 번째 열인 SOC는 선택 사항입니다. 파라미터의 외삽을 방지하려면 완전히 충전된 셀(SOC=1)부터 거의 방전된 배터리 셀까지 데이터가 배터리의 전체 SOC 범위를 포함하는지 확인해야 합니다.
HPPC 데이터의 셀 용량과 초기 SOC로, 두 개의 스칼라 값으로 구성된 배열로 지정됩니다. 이 예제에서는 cellProp 파라미터를 사용하여 이러한 값을 저장합니다.
방전 펄스 전류(단위: A), 충전 펄스 전류(단위: A), SOC 스윕 전류(단위: A), 이러한 전류를 검출하기 위한 허용오차 값으로, 네 개의 스칼라 값으로 구성된 배열로 지정됩니다. 허용오차는 HPPC 데이터에서 전류 변곡점을 검출하는 함수에 적합한 값(일반적으로 0.01-0.05)으로 정의해야 합니다. 이 예제에서는 hppcProtocol 파라미터를 사용하여 이러한 값을 저장합니다.
짧은 이완(V4-V5와 V8-V9) 곡선과 긴 이완(V12-V14) 곡선에 대한 RC 쌍의 수(정수로 지정됨)와 각각의 초기 추정치(스칼라 값으로 구성된 배열로 지정됨).
데이터 피팅 메서드로,
fminsearch
또는curvefit
으로 지정됩니다.디버깅 활성화 옵션으로,
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
함수에는 다음 입력 인수를 지정해야 합니다.
batteryParametersLUT
함수의 출력.SOC 범위로, SOC 중단점으로 구성된 배열로 지정됩니다. 이 예제에서는 0:1e-3:1의 SOC 중단점을 사용합니다.
플롯 옵션으로,
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) 블록 파라미터를 포함합니다.
추정된 파라미터로 배터리 시뮬레이션하기
battModel
작업 공간 변수는 파라미터화에 대한 모든 관련 데이터를 포함하며 CellDischargeCC
SLX 파일 내 Battery (Table-Based) 블록의 모든 파라미터를 지정합니다. 다음 그림은 Battery (Table-Based) 블록 내 각 파라미터의 값을 보여줍니다.
시뮬레이션의 최소 및 최대 충방전율(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);
참고 문헌
Christophersen, Jon P. Battery Test Manual For Electric Vehicles, Revision 3. United States: N. p., 2015. Web. doi:10.2172/1186745
https://www.litechpower.com/htmledit/uploadfiles/20200904024614724.pdf (Battery datasheet)
이 연구에 사용된 실험 데이터는 Indian Institute of Technology (IIT) Kharagpur, India에서 제공했습니다. Anandaroop Bhattacharya 교수(Mechanical Engineering)와 Subhasish Basu Majumder 교수(Materials Science Centre)의 공헌에 감사드립니다.