요약
- 배터리 모델링은 다양한 산업 분야에서 설계, 제어 및 가상 검증에 점점 더 필수적인 요소로 자리 잡고 있습니다.
- MATLAB, Simulink 및 Simscape는 동적 배터리 및 시스템 시뮬레이션을 위한 통합 환경을 제공합니다.
- PyBaMM은 MATLAB, Simulink 또는 Simscape에서 실행할 수 있는 고급 전기화학 모델 및 파라미터 세트를 제공합니다.
기술 칼럼
이 페이지는 기계 번역되었습니다.
번역 품질에 대한 1분 설문 조사에 참여해 주세요.
MathWorks 인사이트
저자:
읽는 시간: 10분
배터리 모델링은 여러 산업 분야에서 배터리 관리 시스템을 설계하는 데 매우 중요한 활동입니다. 배터리 모델은 실시간 충전 상태 추정 알고리즘의 일부로 배터리 제어 소프트웨어에 내장되어 있습니다. 이러한 모델은 배터리 제어 전략의 신속 프로토타이핑 및 개발, 연구개발 활동에서의 설계 민감도 분석, 그리고 배터리 제품 설계 주기 동안의 가상 설계 및 검증에 사용됩니다. 이 모든 작업은 MATLAB®, Simulink® 및 Simscape™를 사용하여 수행할 수 있으며, 이 제품들은 제어 소프트웨어가 시스템의 나머지 부분과 통합된 상태에서 가상 배터리 테스트를 위한 강력한 환경을 제공합니다.
그림 1. 배터리 모델링 응용 사례.
PyBaMM은 사용자의 요구사항에 따라 다양한 수준의 복잡성을 가진 배터리 모델 라이브러리를 제공하는 선도적인 오픈소스 툴입니다. 내장된 성능 저하 효과를 포함하는 이러한 상세하고 고해상도의 전기화학 배터리 모델은 MATLAB 스크립트에서 직접 실행하거나 Simulink에 내장할 수 있습니다. 또한 PyBaMM 파라미터 세트를 Simscape Battery™ 블록으로 직접 가져올 수 있으며, 이 블록은 코드 생성, 자동 배터리팩 모델 생성, 전기열 시스템 모델링은 물론 완전한 비인과적 모델링 워크플로를 지원합니다.
이 칼럼에서는 MATLAB에서 PyBaMM을 직접 실행하는 방법, PyBaMM 배터리 모델을 Simulink로 가져오는 방법, 그리고 PyBaMM 배터리 모델의 파라미터를 Simscape Battery 블록으로 가져오는 방법을 설명합니다. 콘텐츠와 함께 제공되는 파일은 다운로드할 수 있습니다.
그림 2. PyBaMM과 MATLAB 통합 워크플로.
MATLAB 내에서 PyBaMM을 실행하려면 먼저 MATLAB 내에서 접근 가능한 Python 환경을 설정해야 합니다. (각 MATLAB 릴리스에 맞는 Python 버전을 참조하십시오.) 이 예제에서는 MATLAB R2025a와 Python 3.11을 사용합니다.
Python 환경에 PyBaMM을 설치하려면 PyBaMM 웹사이트의 지침을 따르세요.
PyBaMM이 설치된 호환 가능한 Python 환경이 구축되면 MATLAB 내에서 PyBaMM 시뮬레이션을 실행할 수 있습니다. 컴퓨터에 여러 개의 Python 설치가 되어 있거나 가상 환경을 사용하는 경우, MATLAB에서 사용할 Python 실행 파일을 지정해야 합니다.
% pe = pyenv("Version", "<path_to_Python.exe>");
Python 환경 내에서 Python 실행 파일의 경로를 얻으려면 Python 명령 프롬프트에서 다음 명령을 실행하십시오.
>>>import sys >>>print(sys.executable)
MATLAB에서 사용 중인 Python 환경에 PyBaMM이 설치되어 있는지 확인하려면 MATLAB 명령줄에서 다음 명령을 실행하십시오.
tf = check_pybamm_install()
tf = logical
1
MATLAB에서 PyBaMM이 설치된 Python 환경을 사용하고 있는지 확인했으면 MATLAB 내에서 PyBaMM 시뮬레이션을 실행할 준비가 된 것입니다.
MATLAB에서 PyBaMM 실험을 실행하는 방법은 Python에서 실행하는 방법과 유사합니다. 여기서는 PyBaMM 문서의 예제를 사용합니다.
먼저 PyBaMM 모듈을 임포트하고 모델 및 시뮬레이션 객체를 설정합니다. 그런 다음 시뮬레이션을 실행하여(이 경우 90초 간격으로 1시간 동안) 해답을 얻습니다.
pybamm = py.importlib.import_module('pybamm');
model = pybamm.lithium_ion.SPMe();
simulation = pybamm.Simulation(model);
solution = simulation.solve(0:90:3600);
다음으로, 솔루션 객체에서 관심 있는 변수를 추출합니다. 솔루션 데이터 사전에 변수(이 경우 시간과 전압)를 입력한 후, MATLAB에서 사용할 수 있는 double 데이터형으로 변환합니다.
variables = py.list({'Time [s]', 'Voltage [V]'});
solution.update(variables);
t = double(solution.data.get('Time [s]'));
v = double(solution.data.get('Voltage [V]'));
이제 x 및 y 변수는 일반적인 MATLAB 구문을 사용하여 플로팅할 수 있는 MATLAB 배열입니다.
figure; hold on; plot(t, v, "-"); plot(t, v, ".", "MarkerSize", 5); grid on; xlabel("Time (s)"); ylabel("Voltage (V)");
그림 3. MATLAB에서 시뮬레이션된 PyBaMM SPMe 모델의 배터리 단자 전압.
MATLAB R2025a부터는 Python Code 블록을 사용해 Simulink에서 Python 코드를 실행할 수 있습니다. 이 블록을 사용하면 사용자가 네이티브 Python 코드를 작성하고 Simulink 모델 내에서 실행할 수 있습니다.
Python 코드 블록을 사용하면 모델 초기화, 모델 단계 및 시뮬레이션 종료 시 실행될 Python 코드를 작성할 수 있습니다. 사용자는 Python 코드에 대한 포트와 파라미터를 정의할 수도 있습니다. 이를 통해 블록은 Simulink 내의 다른 블록과 상호 작용하고 Simulink 캔버스의 다른 블록처럼 파라미터를 지정할 수 있습니다.
이 예제에서는 전류 부하를 입력받아 PyBaMM 시뮬레이션의 전압 응답을 출력하는 동시에 사용자가 셀 모델의 초기 충전 상태를 정의할 수 있도록 합니다.
포트와 파라미터는 그림 4에 나와 있으며, 파라미터는 다음과 같이 정의됩니다.
그림 4. Python Code 블록 마스크 대화 상자의 포트 및 파라미터 섹션입니다.
이러한 포트와 파라미터 중 네 개는 “double” 데이터형으로 정의됩니다. 해당 값들은 자동으로 Python의 float 데이터형으로 변환됩니다. simulation 파라미터는 PyBaMM 클래스이므로 PythonObject로 정의됩니다.
“Initialize” 탭에는 Simulink 시뮬레이션 시작 시 한 번 실행되는 코드가 포함되어 있습니다. 우리는 이를 사용하여 PyBaMM 모델을 정의하고 초기 조건을 설정합니다.
그림 5. Python Code 블록 마스크 대화 상자의 초기화 코드 탭.
여기서는 PyBaMM 모델을 가져오고 사용할 셀 모델(이 경우 SPMe 모델)을 정의합니다. PyBaMM Simulation 객체를 생성하고 이를 simulation 변수(영속 파라미터로 정의됨)에 저장합니다. 그런 다음 전류 함수를 입력으로 설정하고, simulation 객체가 사용자가 정의한 초기 충전 상태를 갖도록 설정합니다.
“Output” 탭에서는 Simulink 솔버의 각 단계에서 실행되는 코드를 정의합니다.
그림 6. Python Code 블록 마스크 대화 상자의 출력 코드 탭입니다.
이 예제에서는 current_in 포트에서 가져온 최신 값으로 전류 입력을 업데이트하고, StepSize 파라미터에 정의된 값만큼 시뮬레이션을 진행합니다. 그런 다음 PyBaMM 솔루션 객체가 생성한 결과 사전에서 단자 전압 값을 가져와 voltage_out 포트를 통해 최신 시계열 값을 반환합니다.
위의 “Ports and Parameters” 섹션에서 Python Code 블록에 대한 두 개의 파라미터를 정의했습니다. 그러면 이러한 값들이 블록 대화 상자 파라미터에 나타납니다. (아래 참조)
그림 7. 블록 대화 상자 편집 후 Python Code 블록 마스크.
PyBaMM은 시뮬레이션을 위해 자체 솔버를 사용합니다. 따라서 Simulink 솔버의 단계 시간과 동기화를 유지하는 것이 중요합니다. 이 경우, 0.1초의 시간 스텝을 사용하는 고정 스텝 솔버를 사용하고 있습니다(따라서 StepSize 파라미터를 0.1로 정의했습니다).
Python Code 블록에도 자체 샘플 시간 파라미터가 있습니다. 이 경우에도 0.1로 설정해야 합니다.
PyBaMM 시뮬레이션의 파라미터 설정을 완료했으면 평소처럼 시뮬레이션을 실행할 수 있습니다.
그림 8. Simulink 캔버스 내의 Python 코드 블록입니다.
예시에서 우리는 시뮬레이션 시작 5초 시점에 배터리 셀에 10A의 부하를 걸고 있으며, 초기 충전 상태는 50%입니다. 양의 전류 입력값은 배터리 방전을 유발합니다. 이로 인해 그림 9에 나타난 것과 같은 전압 응답이 발생합니다.
그림 9. 시뮬레이션에서 얻은 전류 입력 및 단자 전압 출력 시계열 데이터입니다.
이는 Simulink에서 PyBaMM 시뮬레이션을 실행하는 데 필요한 가장 간단한 구성입니다.
PyBaMM은 학술 문헌에서 얻은, 일반적인 배터리 화학 조성에 대한 사전 정의된 여러 파라미터 세트를 제공합니다. PyBaMM 내에서 이러한 세트는 ParameterSets 유형의 클래스 객체로 정의됩니다. MATLAB Simscape 블록에서 이러한 파라미터 세트 중 하나를 사용하려면 먼저 "동등한" Simscape 전기화학 모델 블록을 생성해야 합니다. 이 예제에서는 파라미터 세트를 가져와 Simscape Battery의 Battery Single Particle(전해질을 포함한 단일 입자 배터리 모델, TSPMe) 블록에서 사용합니다. 이 블록은 Simscape Battery에서 사용할 수 있습니다.
또한 다음과 같은 기능을 수행할 수 있는 MATLAB 스크립트 또는 객체 클래스가 필요합니다.
이 칼럼에서는 TSPMe 블록의 파라미터 컨테이너 역할을 하는 TSPMeParameterSet 사용자 정의 객체를 제공합니다. 이 객체는 다음 PyBaMM 파라미터 세트를 배터리 단일 입자 Simscape 블록으로 가져올 수 있습니다: ["Chen2020","Marquis2019","OKane2022 ","Ai2020 "]. 이 클래스는 다른 파라미터 세트를 사용하거나 다른 유형의 모델(예: 등가 회로 모델 또는 P2D 모델)을 파라미터화하도록 확장할 수 있습니다. 파라미터 세트를 가져오려면 먼저 MATLAB에서 필요한 파라미터 세트 이름을 정의해야 합니다.
ParameterSetName = "OKane2022";
파라미터 컨테이너 객체를 생성하고 PyBaMM 파라미터 세트를 가져오려면 명령 창에서 다음 명령을 실행하십시오.
SimscapeParameterSet = TSPMeParameterSet(ParameterSet = ParameterSetName);
Importing geometry parameters...Done.
Importing min/max stoichiometries...Done.
Importing OCP vectors...Done.
Importing electrode parameters...Done.
Importing electrolyte parameters...Done.
Importing electrolyte diffusion and electrolyte coefficients...Done.
Importing charge transfer rates...Done.
Importing thermal mass...Done.
Importing initial electrolyte concentration...Done.
이제 파라미터 컨테이너 객체에는 PyBaMM에서 가져온 지정된 파라미터 세트가 포함되어 있습니다. Simscape의 배터리 단일 입자 블록을 자동으로 파라미터화하려면 MATLAB 명령 창에서 다음 명령을 실행하십시오.
modelname = "PyBaMM_Simscape_Example"; batteryBlockPath = strcat(modelname,"/","Battery"); open_system(modelname); parameterizeTSPMe(SimscapeParameterSet, batteryBlockPath);
위 코드 조각을 실행하면 Simscape 예제 모델의 배터리 블록이 파라미터화됩니다.
그림 10. Parameterized Battery Single Particle 블록.
다음으로, PyBaMM과 Simscape 모두 사용하여 시뮬레이션을 실행하고 출력되는 배터리 단자 전압을 비교하여 Battery Single Particle 블록의 파라미터 설정을 검증할 수 있습니다. 먼저 부하 전류와 경계 조건을 정의합니다.
BatteryCurrent = 2.5; % A AmbientTemperature = 298.15; % K
이러한 조건으로 PyBaMM 시뮬레이션을 실행하려면 먼저 PyBaMM 파라미터 세트를 생성하고 업데이트해야 합니다. 이를 위해 MATLAB 명령줄에서 다음 코드를 실행하십시오.
PyBaMMParameterSet = pybamm.ParameterValues(ParameterSetName); PyBaMMParameterSet.update(py.dict(dictionary("Ambient temperature [K]", AmbientTemperature))); PyBaMMParameterSet.update(py.dict(dictionary("Current function [A]", BatteryCurrent)));
이 PyBaMM 파라미터 세트에는 주변 열전달과 관련된 파라미터도 포함되어 있으므로 두 시뮬레이션 모두에 사용할 수 있습니다. Simscape 시뮬레이션에서 사용할 이러한 파라미터를 추출하려면 MATLAB 명령줄에서 다음 코드를 실행하십시오.
CoolingSurfaceArea = PyBaMMParameterSet.get('Cell cooling surface area [m2]'); HeatTransferCoefficient = PyBaMMParameterSet.get('Total heat transfer coefficient [W.m-2.K-1]');
PyBaMM 시뮬레이션을 실행하려면 다음 코드를 실행하십시오.
model = pybamm.lithium_ion.SPMe(); simulation = pybamm.Simulation(model,parameter_values=PyBaMMParameterSet); solution = simulation.solve(0:10:3600*2);
Simscape에서 동일한 시뮬레이션을 실행하려면 다음 코드를 실행하십시오.
set_param(modelname,"StopTime","3600*2") set_param(modelname,"SimscapeLogType","all") out = sim(modelname);
이전과 마찬가지로 PyBaMM 솔루션 객체에서 관심 있는 변수를 추출합니다. MATLAB에서 사용할 수 있는 double 데이터형으로 변환하기 전에, 먼저 변수(이 경우 시간과 전압)를 솔루션 데이터 사전에 입력합니다.
variables = py.list({'Time [s]', 'Voltage [V]'});
solution.update(variables);
time = double(solution.data.get('Time [s]'));
voltage = double(solution.data.get('Voltage [V]'));
Simscape의 out 시뮬레이션 출력 객체에는 배터리 전압과 TSPMe 블록에서 추적하는 모든 변수가 포함됩니다. PyBaMM과 Simscape의 비교 그래프를 생성하려면 다음 명령을 실행하십시오.
figure; plot(time, voltage, "o"); hold on plot(out.simlog.Battery.batteryVoltage.series.time,out.simlog.Battery.batteryVoltage.series.values,"r"); grid on xlabel("Time (s)") ylabel("Voltage (V)") legend(["PyBaMM","Simscape"])
그림 11. Battery Single Particle과 PyBaMM SPMe의 단자 전압 비교.
적용된 C-rate 및 온도 조건에 따라 검증 오류가 달라질 수 있음을 유의하십시오. Simscape 기본 TSPMe 블록에는 확산 계수 및 전해질 전도도에 대한 농도 파라미터 의존성이 포함되어 있지 않지만, 이는 PyBaMM 모델에서 고려할 수 있습니다. 따라서 C-rate가 높을수록 단자 전압 값 간의 차이가 더 커질 것으로 예상해야 합니다.
Simscape 모델을 셀 단위에서 시스템 단위로 확장하려면 Simscape Battery Pack Builder 기능을 사용하십시오. 먼저 배터리 셀 객체를 생성하고 이를 배터리 단일 파티클 모델 블록에 연결합니다.
battCell = batteryCell(); battCell.CellModelOptions.CellModelBlockPath = "batt_lib/Cells/Electrochemical/Battery Single Particle"; battCell.CellModelOptions.BlockParameters.StoichiometryBreakpointsSpecification = "absolute";
배터리 셀 객체를 정의한 후 다음 MATLAB 명령을 실행하여 셀 모델을 모듈 수준으로 확장하십시오.
battPSet = batteryParallelAssembly(battCell,4, "Rows",4); battModule = batteryModule(battPSet,4, ... "ModelResolution", "Detailed",... "AmbientThermalPath","CellBasedThermalResistance");
모델 해상도를 높이려면 ModelResolution 속성을 “Detailed”로 설정하십시오. 배터리 모델을 자동으로 생성하려면 다음 명령을 실행하십시오.
buildBattery(battModule, "MaskParameters", "VariableNamesByType");
위의 코드 조각을 실행하면 그림 12에 표시된 것처럼 배터리 모듈 모델 블록이 포함된 배터리 라이브러리가 생성되어야 합니다.
그림 12. 배터리 단일 입자 블록을 사용하여 구축된 배터리 모듈 모델입니다.
이 새로운 모델 블록을 실행하는 데 필요한 파라미터는 새로 생성된 다음 스크립트에 저장됩니다: Batteries_param.m. 모듈 파라미터를 PyBaMM 파라미터 세트에 연결하려면 다음 명령을 실행하십시오.
Module1 = SimscapeParameterSet.getModuleElectrochemicalParameters(SimscapeParameterSet);
새롭게 생성된 배터리 모델 블록을 사용하면 이제 Simulink 환경에서 배터리 일정 방전 시뮬레이션을 생성하고 실행할 수 있습니다. 또한 BatterySimulationChart를 사용하여 시뮬레이션 전반에 걸쳐 주요 배터리 변수를 동적으로 시각화할 수 있습니다. 시뮬레이션을 생성하고 실행하려면 다음 명령을 실행하십시오.
run("CreateAndRunBatterySimscapeModel.mlx")
이 칼럼에서는 PyBaMM 배터리 모델링 기능을 MATLAB, Simulink 및 Simscape에 통합하기 위한 세 가지 서로 다른 워크플로를 제시했습니다. 각 워크플로는 고유한 장점을 가지고 있으며 특정 활동에 더 적합합니다. 예를 들어, PyBaMM을 Simulink와 통합하는 것은 신속 프로토타이핑을 수행하고 배터리 관리 시스템을 개발하는 데 좋은 방법입니다. PyBaMM 파라미터 세트를 Simscape로 가져오는 것은 효율적으로 확장하고 더 광범위한 전기 및 열 시뮬레이션에 포함할 수 있는 비인과적 물리 모델을 생성하는 좋은 방법입니다. Simscape Battery Pack Builder 기능을 사용하면 셀 모델에서 시스템 모델로의 확장을 효율적으로 수행할 수 있습니다. 이러한 통합은 MATLAB의 기본 기능을 향상시키는 데 도움이 되며 산업계에서 사용되는 다양한 배터리 설계 및 개발 워크플로에 가치를 더할 수 있습니다.
이 칼럼에서 제시하는 방법은 간단하며 기존 기능을 활용합니다. 이러한 방법은 더 많은 PyBaMM 전기화학 모델을 포함하고, 다른 파라미터 세트를 지원하며, 복잡한 시스템 수준 모델링을 추가하는 등 다양한 개선 사항을 통해 더욱 정교해지고 확장될 수 있습니다.
앞으로 우리는 이 글에서 제시된 워크플로를 기반으로, 이러한 통합이 실제 배터리 설계 및 검증 활동을 어떻게 지원할 수 있는지 보여줄 것입니다. 또한, PyBaMM과 MATLAB 간의 연결을 구축하는 다른 방법들을 탐구하고, 이러한 방법들이 목표 배터리 응용 분야에 가져다주는 이점과 관련하여 제시하고자 합니다.
우리는 다음과 같은 기회를 보고 있습니다:
Cranfield University의 Daniel Auger 교수님께 협업과 향후 연구 분야에 대한 의견, 그리고 MATLAB과 PyBaMM 간의 연결 방법과 배터리 시스템 응용 분야에 대한 여러 차례의 논의에 대해 특별히 감사드립니다.
Sulzer, V., Marquis, S. G., Timms, R., Robinson, M., & Chapman, S. J. (2021). Python Battery Mathematical Modelling (PyBaMM). Journal of Open Research Software, 9(1).
2026년 기고
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
유럽